1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 #ifndef _HXGE_PEU_HW_H 27 #define _HXGE_PEU_HW_H 28 29 #pragma ident "%Z%%M% %I% %E% SMI" 30 31 #ifdef __cplusplus 32 extern "C" { 33 #endif 34 35 #define PIO_LDSV_BASE_ADDR 0X800000 36 #define PIO_BASE_ADDR 0X000000 37 #define PIO_LDMASK_BASE_ADDR 0XA00000 38 39 #define DEVICE_VENDOR_ID (PIO_BASE_ADDR + 0x0) 40 #define STATUS_COMMAND (PIO_BASE_ADDR + 0x4) 41 #define CLASSCODE_REV_ID (PIO_BASE_ADDR + 0x8) 42 #define BIST_HDRTYP_LATTMR_CASHLSZ (PIO_BASE_ADDR + 0xC) 43 #define PIO_BAR0 (PIO_BASE_ADDR + 0x10) 44 #define PIO_BAR1 (PIO_BASE_ADDR + 0x14) 45 #define MSIX_BAR0 (PIO_BASE_ADDR + 0x18) 46 #define MSIX_BAR1 (PIO_BASE_ADDR + 0x1C) 47 #define VIRT_BAR0 (PIO_BASE_ADDR + 0x20) 48 #define VIRT_BAR1 (PIO_BASE_ADDR + 0x24) 49 #define CIS_PTR (PIO_BASE_ADDR + 0x28) 50 #define SUB_VENDOR_ID (PIO_BASE_ADDR + 0x2C) 51 #define EXP_ROM_BAR (PIO_BASE_ADDR + 0x30) 52 #define CAP_PTR (PIO_BASE_ADDR + 0x34) 53 #define INT_LINE (PIO_BASE_ADDR + 0x3C) 54 #define PM_CAP (PIO_BASE_ADDR + 0x40) 55 #define PM_CTRL_STAT (PIO_BASE_ADDR + 0x44) 56 #define MSI_CAP (PIO_BASE_ADDR + 0x50) 57 #define MSI_LO_ADDR (PIO_BASE_ADDR + 0x54) 58 #define MSI_HI_ADDR (PIO_BASE_ADDR + 0x58) 59 #define MSI_DATA (PIO_BASE_ADDR + 0x5C) 60 #define MSI_MASK (PIO_BASE_ADDR + 0x60) 61 #define MSI_PEND (PIO_BASE_ADDR + 0x64) 62 #define MSIX_CAP (PIO_BASE_ADDR + 0x70) 63 #define MSIX_TAB_OFF (PIO_BASE_ADDR + 0x74) 64 #define MSIX_PBA_OFF (PIO_BASE_ADDR + 0x78) 65 #define PCIE_CAP (PIO_BASE_ADDR + 0x80) 66 #define DEV_CAP (PIO_BASE_ADDR + 0x84) 67 #define DEV_STAT_CTRL (PIO_BASE_ADDR + 0x88) 68 #define LNK_CAP (PIO_BASE_ADDR + 0x8C) 69 #define LNK_STAT_CTRL (PIO_BASE_ADDR + 0x90) 70 #define VEN_CAP_HDR (PIO_BASE_ADDR + 0x94) 71 #define VEN_CTRL (PIO_BASE_ADDR + 0x98) 72 #define VEN_PRT_HDR (PIO_BASE_ADDR + 0x9C) 73 #define ACKLAT_REPLAY (PIO_BASE_ADDR + 0xA0) 74 #define OTH_MSG (PIO_BASE_ADDR + 0xA4) 75 #define FORCE_LINK (PIO_BASE_ADDR + 0xA8) 76 #define ACK_FREQ (PIO_BASE_ADDR + 0xAC) 77 #define LINK_CTRL (PIO_BASE_ADDR + 0xB0) 78 #define LANE_SKEW (PIO_BASE_ADDR + 0xB4) 79 #define SYMBOL_NUM (PIO_BASE_ADDR + 0xB8) 80 #define SYMB_TIM_RADM_FLT1 (PIO_BASE_ADDR + 0xBC) 81 #define RADM_FLT2 (PIO_BASE_ADDR + 0xC0) 82 #define CASCADE_DEB_REG0 (PIO_BASE_ADDR + 0xC8) 83 #define CASCADE_DEB_REG1 (PIO_BASE_ADDR + 0xCC) 84 #define TXP_FC_CREDIT_STAT (PIO_BASE_ADDR + 0xD0) 85 #define TXNP_FC_CREDIT_STAT (PIO_BASE_ADDR + 0xD4) 86 #define TXCPL_FC_CREDIT_STAT (PIO_BASE_ADDR + 0xD8) 87 #define QUEUE_STAT (PIO_BASE_ADDR + 0xDC) 88 #define GBT_DEBUG0 (PIO_BASE_ADDR + 0xE0) 89 #define GBT_DEBUG1 (PIO_BASE_ADDR + 0xE4) 90 #define GBT_DEBUG2 (PIO_BASE_ADDR + 0xE8) 91 #define GBT_DEBUG3 (PIO_BASE_ADDR + 0xEC) 92 #define PIPE_DEBUG0 (PIO_BASE_ADDR + 0xF0) 93 #define PIPE_DEBUG1 (PIO_BASE_ADDR + 0xF4) 94 #define PIPE_DEBUG2 (PIO_BASE_ADDR + 0xF8) 95 #define PIPE_DEBUG3 (PIO_BASE_ADDR + 0xFC) 96 #define PCIE_ENH_CAP_HDR (PIO_BASE_ADDR + 0x100) 97 #define UNC_ERR_STAT (PIO_BASE_ADDR + 0x104) 98 #define UNC_ERR_MASK (PIO_BASE_ADDR + 0x108) 99 #define UNC_ERR_SVRTY (PIO_BASE_ADDR + 0x10C) 100 #define CORR_ERR_STAT (PIO_BASE_ADDR + 0x110) 101 #define CORR_ERR_MASK (PIO_BASE_ADDR + 0x114) 102 #define ADV_CAP_CTRL (PIO_BASE_ADDR + 0x118) 103 #define HDR_LOG0 (PIO_BASE_ADDR + 0x11C) 104 #define HDR_LOG1 (PIO_BASE_ADDR + 0x120) 105 #define HDR_LOG2 (PIO_BASE_ADDR + 0x124) 106 #define HDR_LOG3 (PIO_BASE_ADDR + 0x128) 107 #define PIPE_RX_TX_CONTROL (PIO_BASE_ADDR + 0x1000) 108 #define PIPE_RX_TX_STATUS (PIO_BASE_ADDR + 0x1004) 109 #define PIPE_RX_TX_PWR_CNTL (PIO_BASE_ADDR + 0x1008) 110 #define PIPE_RX_TX_PARAM (PIO_BASE_ADDR + 0x1010) 111 #define PIPE_RX_TX_CLOCK (PIO_BASE_ADDR + 0x1014) 112 #define PIPE_GLUE_CNTL0 (PIO_BASE_ADDR + 0x1018) 113 #define PIPE_GLUE_CNTL1 (PIO_BASE_ADDR + 0x101C) 114 #define HCR_REG (PIO_BASE_ADDR + 0x2000) 115 #define BLOCK_RESET (PIO_BASE_ADDR + 0x8000) 116 #define TIMEOUT_CFG (PIO_BASE_ADDR + 0x8004) 117 #define HEART_CFG (PIO_BASE_ADDR + 0x8008) 118 #define HEART_TIMER (PIO_BASE_ADDR + 0x800C) 119 #define CIP_GP_CTRL (PIO_BASE_ADDR + 0x8010) 120 #define CIP_STATUS (PIO_BASE_ADDR + 0x8014) 121 #define CIP_LINK_STAT (PIO_BASE_ADDR + 0x801C) 122 #define EPC_STAT (PIO_BASE_ADDR + 0x8020) 123 #define EPC_DATA (PIO_BASE_ADDR + 0x8024) 124 #define SPC_STAT (PIO_BASE_ADDR + 0x8030) 125 #define HOST2SPI_INDACC_ADDR (PIO_BASE_ADDR + 0x8050) 126 #define HOST2SPI_INDACC_CTRL (PIO_BASE_ADDR + 0x8054) 127 #define HOST2SPI_INDACC_DATA (PIO_BASE_ADDR + 0x8058) 128 #define BT_CTRL0 (PIO_BASE_ADDR + 0x8080) 129 #define BT_DATA0 (PIO_BASE_ADDR + 0x8084) 130 #define BT_INTMASK0 (PIO_BASE_ADDR + 0x8088) 131 #define BT_CTRL1 (PIO_BASE_ADDR + 0x8090) 132 #define BT_DATA1 (PIO_BASE_ADDR + 0x8094) 133 #define BT_INTMASK1 (PIO_BASE_ADDR + 0x8098) 134 #define BT_CTRL2 (PIO_BASE_ADDR + 0x80A0) 135 #define BT_DATA2 (PIO_BASE_ADDR + 0x80A4) 136 #define BT_INTMASK2 (PIO_BASE_ADDR + 0x80A8) 137 #define BT_CTRL3 (PIO_BASE_ADDR + 0x80B0) 138 #define BT_DATA3 (PIO_BASE_ADDR + 0x80B4) 139 #define BT_INTMASK3 (PIO_BASE_ADDR + 0x80B8) 140 #define DEBUG_SEL (PIO_BASE_ADDR + 0x80C0) 141 #define INDACC_MEM0_CTRL (PIO_BASE_ADDR + 0x80C4) 142 #define INDACC_MEM0_DATA0 (PIO_BASE_ADDR + 0x80C8) 143 #define INDACC_MEM0_DATA1 (PIO_BASE_ADDR + 0x80CC) 144 #define INDACC_MEM0_DATA2 (PIO_BASE_ADDR + 0x80D0) 145 #define INDACC_MEM0_DATA3 (PIO_BASE_ADDR + 0x80D4) 146 #define INDACC_MEM0_PRTY (PIO_BASE_ADDR + 0x80D8) 147 #define INDACC_MEM1_CTRL (PIO_BASE_ADDR + 0x80DC) 148 #define INDACC_MEM1_DATA0 (PIO_BASE_ADDR + 0x80E0) 149 #define INDACC_MEM1_DATA1 (PIO_BASE_ADDR + 0x80E4) 150 #define INDACC_MEM1_DATA2 (PIO_BASE_ADDR + 0x80E8) 151 #define INDACC_MEM1_DATA3 (PIO_BASE_ADDR + 0x80EC) 152 #define INDACC_MEM1_PRTY (PIO_BASE_ADDR + 0x80F0) 153 #define PHY_DEBUG_TRAINING_VEC (PIO_BASE_ADDR + 0x80F4) 154 #define PEU_DEBUG_TRAINING_VEC (PIO_BASE_ADDR + 0x80F8) 155 #define PIPE_CFG0 (PIO_BASE_ADDR + 0x8120) 156 #define PIPE_CFG1 (PIO_BASE_ADDR + 0x8124) 157 #define CIP_BAR_MASK_CFG (PIO_BASE_ADDR + 0x8134) 158 #define CIP_BAR_MASK (PIO_BASE_ADDR + 0x8138) 159 #define CIP_LDSV0_STAT (PIO_BASE_ADDR + 0x8140) 160 #define CIP_LDSV1_STAT (PIO_BASE_ADDR + 0x8144) 161 #define PEU_INTR_STAT (PIO_BASE_ADDR + 0x8148) 162 #define PEU_INTR_MASK (PIO_BASE_ADDR + 0x814C) 163 #define PEU_INTR_STAT_MIRROR (PIO_BASE_ADDR + 0x8150) 164 #define CPL_HDRQ_PERR_LOC (PIO_BASE_ADDR + 0x8154) 165 #define CPL_DATAQ_PERR_LOC (PIO_BASE_ADDR + 0x8158) 166 #define RETR_PERR_LOC (PIO_BASE_ADDR + 0x815C) 167 #define RETR_SOT_PERR_LOC (PIO_BASE_ADDR + 0x8160) 168 #define P_HDRQ_PERR_LOC (PIO_BASE_ADDR + 0x8164) 169 #define P_DATAQ_PERR_LOC (PIO_BASE_ADDR + 0x8168) 170 #define NP_HDRQ_PERR_LOC (PIO_BASE_ADDR + 0x816C) 171 #define NP_DATAQ_PERR_LOC (PIO_BASE_ADDR + 0x8170) 172 #define MSIX_PERR_LOC (PIO_BASE_ADDR + 0x8174) 173 #define HCR_PERR_LOC (PIO_BASE_ADDR + 0x8178) 174 #define TDC_PIOACC_ERR_LOG (PIO_BASE_ADDR + 0x8180) 175 #define RDC_PIOACC_ERR_LOG (PIO_BASE_ADDR + 0x8184) 176 #define PFC_PIOACC_ERR_LOG (PIO_BASE_ADDR + 0x8188) 177 #define VMAC_PIOACC_ERR_LOG (PIO_BASE_ADDR + 0x818C) 178 #define LD_GRP_CTRL (PIO_BASE_ADDR + 0x8300) 179 #define DEV_ERR_STAT (PIO_BASE_ADDR + 0x8380) 180 #define DEV_ERR_MASK (PIO_BASE_ADDR + 0x8384) 181 #define LD_INTR_TIM_RES (PIO_BASE_ADDR + 0x8390) 182 #define LDSV0 (PIO_LDSV_BASE_ADDR + 0x0) 183 #define LDSV1 (PIO_LDSV_BASE_ADDR + 0x4) 184 #define LD_INTR_MASK (PIO_LDMASK_BASE_ADDR + 0x0) 185 #define LD_INTR_MGMT (PIO_LDMASK_BASE_ADDR + 0x4) 186 #define SID (PIO_LDMASK_BASE_ADDR + 0x8) 187 188 189 /* 190 * Register: DeviceVendorId 191 * Device ID and Vendor ID 192 * Description: Device ID/Vendor ID 193 * Fields: 194 * Device ID Register: dbi writeable 195 * Vendor ID Register (Sun Microsystem): dbi writeable 196 */ 197 typedef union { 198 uint32_t value; 199 struct { 200 #if defined(_BIG_ENDIAN) 201 uint32_t device_id:16; 202 uint32_t vendor_id:16; 203 #else 204 uint32_t vendor_id:16; 205 uint32_t device_id:16; 206 #endif 207 } bits; 208 } device_vendor_id_t; 209 210 211 /* 212 * Register: StatusCommand 213 * Status and Command 214 * Description: Status/Command 215 * Fields: 216 * The device detected a parity error. The device detects 217 * Poisoned TLP received regardless of Command Register Parity 218 * Error Enable/Response bit. 219 * The device signaled a system error with SERR#. The device 220 * detects a UE, is about to send a F/NF error message; and if 221 * the Command Register SERR# enable is set. 222 * A transaction initiated by this device was terminated due to a 223 * Master Abort (i.e. Unsupported Request Completion Status was 224 * received). 225 * A transaction initiated by this device was terminated due to a 226 * Target Abort (i.e. Completer Abort Completion Status was 227 * received). 228 * Set when Completer Abort Completion Status is sent back to the 229 * RC. The request violated hydra's programming rules. 230 * The slowest DEVSEL# timing for this target device (N/A in 231 * PCIE) 232 * Master Data Parity Error - set if all the following conditions 233 * are true: received a poisoned TLP header or sending a poisoned 234 * write request; and the parity error response bit in the 235 * command register is set. 236 * Fast Back-to-Back Capable (N/A in PCIE) 237 * 66 MHz Capable (N/A in PCIE) 238 * Capabilities List - presence of extended capability item. 239 * INTx Status 240 * INTx Assertion Disable 241 * Fast Back-to-Back Enable (N/A in PCIE) 242 * This device can drive the SERR# line. 243 * IDSEL Stepping/Wait Cycle Control (N/A in PCIE) 244 * This device can drive the PERR# line. 245 * VGA Palette Snoop (N/A in PCIE) 246 * The device can issue Memory Write-and-Invalidate commands (N/A 247 * in PCIE) 248 * This device monitors for PCI Special Cycles (N/A in PCIE) 249 * This device's bus master capability is enabled. 250 * This device responds to PCI memory accesses. 251 * This device responds to PCI IO accesses (No I/O space used in 252 * Hydra) 253 */ 254 typedef union { 255 uint32_t value; 256 struct { 257 #if defined(_BIG_ENDIAN) 258 uint32_t det_par_err:1; 259 uint32_t sig_serr:1; 260 uint32_t rcv_mstr_abrt:1; 261 uint32_t rcv_tgt_abrt:1; 262 uint32_t sig_tgt_abrt:1; 263 uint32_t devsel_timing:2; 264 uint32_t mstr_dpe:1; 265 uint32_t fast_b2b_cap:1; 266 uint32_t rsrvd:1; 267 uint32_t mhz_cap:1; 268 uint32_t cap_list:1; 269 uint32_t intx_stat:1; 270 uint32_t rsrvd1:3; 271 uint32_t rsrvd2:5; 272 uint32_t intx_dis:1; 273 uint32_t fast_b2b_en:1; 274 uint32_t serr_en:1; 275 uint32_t idsel_step:1; 276 uint32_t par_err_en:1; 277 uint32_t vga_snoop:1; 278 uint32_t mwi_en:1; 279 uint32_t special_cycle:1; 280 uint32_t bm_en:1; 281 uint32_t mem_sp_en:1; 282 uint32_t io_sp_en:1; 283 #else 284 uint32_t io_sp_en:1; 285 uint32_t mem_sp_en:1; 286 uint32_t bm_en:1; 287 uint32_t special_cycle:1; 288 uint32_t mwi_en:1; 289 uint32_t vga_snoop:1; 290 uint32_t par_err_en:1; 291 uint32_t idsel_step:1; 292 uint32_t serr_en:1; 293 uint32_t fast_b2b_en:1; 294 uint32_t intx_dis:1; 295 uint32_t rsrvd2:5; 296 uint32_t rsrvd1:3; 297 uint32_t intx_stat:1; 298 uint32_t cap_list:1; 299 uint32_t mhz_cap:1; 300 uint32_t rsrvd:1; 301 uint32_t fast_b2b_cap:1; 302 uint32_t mstr_dpe:1; 303 uint32_t devsel_timing:2; 304 uint32_t sig_tgt_abrt:1; 305 uint32_t rcv_tgt_abrt:1; 306 uint32_t rcv_mstr_abrt:1; 307 uint32_t sig_serr:1; 308 uint32_t det_par_err:1; 309 #endif 310 } bits; 311 } status_command_t; 312 313 314 /* 315 * Register: ClasscodeRevId 316 * Class Code, and Revision ID 317 * Description: Class Code/Revision ID 318 * Fields: 319 * Base Class (Network Controller): dbi writeable 320 * Sub Class (Ethernet Controller): dbi writeable 321 * Programming Interface: dbi writeable 322 * Revision ID: dbi writeable 323 */ 324 typedef union { 325 uint32_t value; 326 struct { 327 #if defined(_BIG_ENDIAN) 328 uint32_t base_class:8; 329 uint32_t sub_class:8; 330 uint32_t prog_if:8; 331 uint32_t rev_id:8; 332 #else 333 uint32_t rev_id:8; 334 uint32_t prog_if:8; 335 uint32_t sub_class:8; 336 uint32_t base_class:8; 337 #endif 338 } bits; 339 } classcode_rev_id_t; 340 341 342 /* 343 * Register: BistHdrtypLattmrCashlsz 344 * BIST, Header Type, Latency Timer, and Cache Line Size 345 * Description: BIST, Latency Timer etc 346 * Fields: 347 * BIST is not supported. Header Type Fields 348 * Multi-Function Device: dbi writeable 349 * Configuration Header Format. 0 = Type 0. 350 * Master Latency Timer. (N/A in PCIE) 351 * Cache line size for legacy compatibility (N/A in PCIE) 352 */ 353 typedef union { 354 uint32_t value; 355 struct { 356 #if defined(_BIG_ENDIAN) 357 uint32_t value:8; 358 uint32_t mult_func_dev:1; 359 uint32_t cfg_hdr_fmt:7; 360 uint32_t timer:8; 361 uint32_t cache_line_sz:8; 362 #else 363 uint32_t cache_line_sz:8; 364 uint32_t timer:8; 365 uint32_t cfg_hdr_fmt:7; 366 uint32_t mult_func_dev:1; 367 uint32_t value:8; 368 #endif 369 } bits; 370 } bist_hdrtyp_lattmr_cashlsz_t; 371 372 373 /* 374 * Register: PioBar0 375 * PIO BAR0 376 * Description: PIO BAR0 - For Hydra PIO space PIO BAR1 & PIO BAR0 377 * are together configured as a 64b BAR register (Synopsys core 378 * implementation dependent) where PIO BAR1 handles the upper address 379 * bits and PIO BAR0 handles the lower address bits. 380 * Fields: 381 * Base Address Relocation : indirect dbi writeable via bar0Mask 382 * register in EP core 383 * Base Address for PIO (16MB space) : indirect dbi writeable via 384 * bar0Mask register in EP core 385 * Prefetchable if memory BAR (PIOs not prefetchable): dbi 386 * writeable 387 * If memory BAR, then 32 or 64 bit BAR (00 = 32 bit, 10 = 64 388 * bit): dbi writeable 389 * I/O or Memory space indicator (0 = memory BAR): dbi writeable 390 */ 391 typedef union { 392 uint32_t value; 393 struct { 394 #if defined(_BIG_ENDIAN) 395 uint32_t base_addr_rel_lo:8; 396 uint32_t base_addr:20; 397 uint32_t pftch:1; 398 uint32_t type:2; 399 uint32_t mem_sp_ind:1; 400 #else 401 uint32_t mem_sp_ind:1; 402 uint32_t type:2; 403 uint32_t pftch:1; 404 uint32_t base_addr:20; 405 uint32_t base_addr_rel_lo:8; 406 #endif 407 } bits; 408 } pio_bar0_t; 409 410 411 /* 412 * Register: PioBar1 413 * PIO BAR1 414 * Description: PIO BAR1 415 * Fields: 416 * Base Address Relocation : indirect dbi writeable via bar0Mask 417 * register in EP core 418 */ 419 typedef union { 420 uint32_t value; 421 struct { 422 #if defined(_BIG_ENDIAN) 423 uint32_t base_addr_rel_hi:32; 424 #else 425 uint32_t base_addr_rel_hi:32; 426 #endif 427 } bits; 428 } pio_bar1_t; 429 430 431 /* 432 * Register: MsixBar0 433 * MSIX BAR0 434 * Description: MSIX BAR0 - For MSI-X Tables and PBA MSIX BAR1 & MSIX 435 * BAR0 are together configured as a 64b BAR register (Synopsys core 436 * implementation dependent) where MSIX BAR1 handles the upper 437 * address bits and MSIX BAR0 handles the lower address bits. 438 * Fields: 439 * Base Address Relocation : indirect dbi writeable via bar2Mask 440 * register in EP core 441 * Base Address for MSIX (16KB space) : indirect dbi writeable 442 * via bar2Mask register in EP core 443 * Prefetchable if memory BAR (Not prefetchable) : dbi writeable 444 * If memory BAR, then 32 or 64 bit BAR (00 = 32 bit, 10 = 64 445 * bit): dbi writeable 446 * I/O or Memory space indicator (0 = memory BAR) : dbi writeable 447 */ 448 typedef union { 449 uint32_t value; 450 struct { 451 #if defined(_BIG_ENDIAN) 452 uint32_t base_addr_rel_lo:18; 453 uint32_t base_addr:10; 454 uint32_t pftch:1; 455 uint32_t type:2; 456 uint32_t mem_sp_ind:1; 457 #else 458 uint32_t mem_sp_ind:1; 459 uint32_t type:2; 460 uint32_t pftch:1; 461 uint32_t base_addr:10; 462 uint32_t base_addr_rel_lo:18; 463 #endif 464 } bits; 465 } msix_bar0_t; 466 467 468 /* 469 * Register: MsixBar1 470 * MSIX BAR1 471 * Description: MSIX BAR1 472 * Fields: 473 * Base Address Relocation : indirect dbi writeable via bar2Mask 474 * register in EP core 475 */ 476 typedef union { 477 uint32_t value; 478 struct { 479 #if defined(_BIG_ENDIAN) 480 uint32_t base_addr_rel_hi:32; 481 #else 482 uint32_t base_addr_rel_hi:32; 483 #endif 484 } bits; 485 } msix_bar1_t; 486 487 488 /* 489 * Register: VirtBar0 490 * Virtualization BAR0 491 * Description: Virtualization BAR0 - Previously for Hydra 492 * Virtualization space This bar is no longer enabled and is not dbi 493 * writeable. VIRT BAR1 & VIRT BAR0 could be configured as a 64b BAR 494 * register (Synopsys core implementation dependent), but this is not 495 * used in hydra. 496 * Fields: 497 * Base Address Relocation 498 * Base Address for Virtualization (64KB space) 499 * Prefetchable if memory BAR (Not prefetchable) 500 * If memory BAR, then 32 or 64 bit BAR (00 = 32 bit, 10 = 64 501 * bit) 502 * I/O or Memory space indicator (0 = memory BAR) 503 */ 504 typedef union { 505 uint32_t value; 506 struct { 507 #if defined(_BIG_ENDIAN) 508 uint32_t base_addr_rel_lo:17; 509 uint32_t base_addr:11; 510 uint32_t pftch:1; 511 uint32_t type:2; 512 uint32_t mem_sp_ind:1; 513 #else 514 uint32_t mem_sp_ind:1; 515 uint32_t type:2; 516 uint32_t pftch:1; 517 uint32_t base_addr:11; 518 uint32_t base_addr_rel_lo:17; 519 #endif 520 } bits; 521 } virt_bar0_t; 522 523 524 /* 525 * Register: VirtBar1 526 * Virtualization BAR1 527 * Description: Previously for Virtualization BAR1 This bar is no 528 * longer enabled and is not dbi writeable. 529 * Fields: 530 * Base Address Relocation 531 */ 532 typedef union { 533 uint32_t value; 534 struct { 535 #if defined(_BIG_ENDIAN) 536 uint32_t base_addr_rel_hi:32; 537 #else 538 uint32_t base_addr_rel_hi:32; 539 #endif 540 } bits; 541 } virt_bar1_t; 542 543 544 /* 545 * Register: CisPtr 546 * CardBus CIS Pointer 547 * Description: CardBus CIS Pointer 548 * Fields: 549 * CardBus CIS Pointer: dbi writeable 550 */ 551 typedef union { 552 uint32_t value; 553 struct { 554 #if defined(_BIG_ENDIAN) 555 uint32_t cis_ptr:32; 556 #else 557 uint32_t cis_ptr:32; 558 #endif 559 } bits; 560 } cis_ptr_t; 561 562 563 /* 564 * Register: SubVendorId 565 * Subsystem ID and Vendor ID 566 * Description: Subsystem ID and Vendor ID 567 * Fields: 568 * Subsystem ID as assigned by PCI-SIG : dbi writeable 569 * Subsystem Vendor ID as assigned by PCI-SIG : dbi writeable 570 */ 571 typedef union { 572 uint32_t value; 573 struct { 574 #if defined(_BIG_ENDIAN) 575 uint32_t dev_id:16; 576 uint32_t vendor_id:16; 577 #else 578 uint32_t vendor_id:16; 579 uint32_t dev_id:16; 580 #endif 581 } bits; 582 } sub_vendor_id_t; 583 584 585 /* 586 * Register: ExpRomBar 587 * Expansion ROM BAR 588 * Description: Expansion ROM BAR - For Hydra EEPROM space 589 * Fields: 590 * Base Address Relocatable : indirect dbi writeable via 591 * romBarMask register in EP core 592 * Base Address for ROM (2MB) : indirect dbi writeable via 593 * romBarMask register in EP core 594 * ROM Enable: dbi writeable 595 */ 596 typedef union { 597 uint32_t value; 598 struct { 599 #if defined(_BIG_ENDIAN) 600 uint32_t base_addr_rel:11; 601 uint32_t base_addr:10; 602 uint32_t rsrvd:10; 603 uint32_t rom_en:1; 604 #else 605 uint32_t rom_en:1; 606 uint32_t rsrvd:10; 607 uint32_t base_addr:10; 608 uint32_t base_addr_rel:11; 609 #endif 610 } bits; 611 } exp_rom_bar_t; 612 613 614 /* 615 * Register: CapPtr 616 * Capabilities Pointer 617 * Description: Capabilities Pointer 618 * Fields: 619 * Pointer to PM Capability structure : dbi writeable 620 */ 621 typedef union { 622 uint32_t value; 623 struct { 624 #if defined(_BIG_ENDIAN) 625 uint32_t rsrvd:24; 626 uint32_t pm_ptr:8; 627 #else 628 uint32_t pm_ptr:8; 629 uint32_t rsrvd:24; 630 #endif 631 } bits; 632 } cap_ptr_t; 633 634 635 /* 636 * Register: IntLine 637 * Interrupt Line 638 * Description: Interrupt Line 639 * Fields: 640 * Max Latency (N/A in PCIE) 641 * Minimum Grant (N/A in PCIE) 642 * Interrupt pin: dbi writeable 643 * Interrupt Line 644 */ 645 typedef union { 646 uint32_t value; 647 struct { 648 #if defined(_BIG_ENDIAN) 649 uint32_t max_lat:8; 650 uint32_t min_gnt:8; 651 uint32_t int_pin:8; 652 uint32_t int_line:8; 653 #else 654 uint32_t int_line:8; 655 uint32_t int_pin:8; 656 uint32_t min_gnt:8; 657 uint32_t max_lat:8; 658 #endif 659 } bits; 660 } int_line_t; 661 662 663 /* 664 * Register: PmCap 665 * Power Management Capability 666 * Description: Power Management Capability 667 * Fields: 668 * PME Support (N/A in Hydra): dbi writeable 669 * D2 Support (N/A in Hydra): dbi writeable 670 * D1 Support (N/A in Hydra): dbi writeable 671 * Aux Current (N/A in Hydra): dbi writeable 672 * Device Specific Initialization: dbi writeable 673 * PME Clock (N/A in PCIE) 674 * PM Spec Version: dbi writeable 675 * Next Capability Pointer: dbi writeable 676 * Power Management Capability ID: dbi writeable 677 */ 678 typedef union { 679 uint32_t value; 680 struct { 681 #if defined(_BIG_ENDIAN) 682 uint32_t pme_supt:5; 683 uint32_t d2_supt:1; 684 uint32_t d1_supt:1; 685 uint32_t aux_curr:3; 686 uint32_t dev_spec_init:1; 687 uint32_t rsrvd:1; 688 uint32_t pme_clk:1; 689 uint32_t pm_ver:3; 690 uint32_t nxt_cap_ptr:8; 691 uint32_t pm_id:8; 692 #else 693 uint32_t pm_id:8; 694 uint32_t nxt_cap_ptr:8; 695 uint32_t pm_ver:3; 696 uint32_t pme_clk:1; 697 uint32_t rsrvd:1; 698 uint32_t dev_spec_init:1; 699 uint32_t aux_curr:3; 700 uint32_t d1_supt:1; 701 uint32_t d2_supt:1; 702 uint32_t pme_supt:5; 703 #endif 704 } bits; 705 } pm_cap_t; 706 707 708 /* 709 * Register: PmCtrlStat 710 * Power Management Control and Status 711 * Description: Power Management Control and Status 712 * Fields: 713 * Data for additional info (N/A) 714 * Bus Power and Clock Control Enable (N/A in PCIE) 715 * B2/B3 Support (N/A in PCIE) 716 * Indicates if PME event occured 717 * Data Scale (N/A) 718 * Data Select (N/A) 719 * PME Enable (Sticky) 720 * Power State 721 */ 722 typedef union { 723 uint32_t value; 724 struct { 725 #if defined(_BIG_ENDIAN) 726 uint32_t pwr_data:8; 727 uint32_t pwr_clk_en:1; 728 uint32_t b2_b3_supt:1; 729 uint32_t rsrvd:6; 730 uint32_t pme_stat:1; 731 uint32_t data_scale:2; 732 uint32_t data_sel:4; 733 uint32_t pme_en:1; 734 uint32_t rsrvd1:6; 735 uint32_t pwr_st:2; 736 #else 737 uint32_t pwr_st:2; 738 uint32_t rsrvd1:6; 739 uint32_t pme_en:1; 740 uint32_t data_sel:4; 741 uint32_t data_scale:2; 742 uint32_t pme_stat:1; 743 uint32_t rsrvd:6; 744 uint32_t b2_b3_supt:1; 745 uint32_t pwr_clk_en:1; 746 uint32_t pwr_data:8; 747 #endif 748 } bits; 749 } pm_ctrl_stat_t; 750 751 752 /* 753 * Register: MsiCap 754 * MSI Capability 755 * Description: MSI Capability 756 * Fields: 757 * Mask and Pending bits available 758 * 64-bit Address Capable 759 * Multiple Messages Enabled 760 * Multiple Message Capable (32 messages = 0x5) 761 * MSI Enabled (if enabled, INTx must be diabled) 762 * Next Capability Pointer: dbi writeable 763 * MSI Capability ID 764 */ 765 typedef union { 766 uint32_t value; 767 struct { 768 #if defined(_BIG_ENDIAN) 769 uint32_t rsrvd:7; 770 uint32_t vect_mask:1; 771 uint32_t msi64_en:1; 772 uint32_t mult_msg_en:3; 773 uint32_t mult_msg_cap:3; 774 uint32_t msi_en:1; 775 uint32_t nxt_cap_ptr:8; 776 uint32_t msi_cap_id:8; 777 #else 778 uint32_t msi_cap_id:8; 779 uint32_t nxt_cap_ptr:8; 780 uint32_t msi_en:1; 781 uint32_t mult_msg_cap:3; 782 uint32_t mult_msg_en:3; 783 uint32_t msi64_en:1; 784 uint32_t vect_mask:1; 785 uint32_t rsrvd:7; 786 #endif 787 } bits; 788 } msi_cap_t; 789 790 791 /* 792 * Register: MsiLoAddr 793 * MSI Low Address 794 * Description: MSI Low Address 795 * Fields: 796 * Lower 32 bit Address 797 */ 798 typedef union { 799 uint32_t value; 800 struct { 801 #if defined(_BIG_ENDIAN) 802 uint32_t lo_addr:30; 803 uint32_t rsrvd:2; 804 #else 805 uint32_t rsrvd:2; 806 uint32_t lo_addr:30; 807 #endif 808 } bits; 809 } msi_lo_addr_t; 810 811 812 /* 813 * Register: MsiHiAddr 814 * MSI High Address 815 * Description: MSI High Address 816 * Fields: 817 * Upper 32 bit Address (only if msi64En = 1) 818 */ 819 typedef union { 820 uint32_t value; 821 struct { 822 #if defined(_BIG_ENDIAN) 823 uint32_t hi_addr:32; 824 #else 825 uint32_t hi_addr:32; 826 #endif 827 } bits; 828 } msi_hi_addr_t; 829 830 831 /* 832 * Register: MsiData 833 * MSI Data 834 * Description: MSI Data 835 * Fields: 836 * MSI Data. Depending on the value for multMsgEn in the MSI 837 * Capability Register which determines the number of allocated 838 * vectors, bits [4:0] may be replaced with msiVector[4:0] bits 839 * to generate up to 32 MSI messages. # allocated vectors Actual 840 * messageData[4:0] ------------------- ------------------------ 841 * 1 DATA[4:0] (no replacement) 2 {DATA[4:1], msiVector[0]} 4 842 * {DATA[4:2], msiVector[1:0]} 8 {DATA[4:3], msiVector[2:0]} 16 843 * {DATA[4], msiVector[3:0]} 32 msiVector[4:0] (full replacement) 844 */ 845 typedef union { 846 uint32_t value; 847 struct { 848 #if defined(_BIG_ENDIAN) 849 uint32_t rsrvd:16; 850 uint32_t data:16; 851 #else 852 uint32_t data:16; 853 uint32_t rsrvd:16; 854 #endif 855 } bits; 856 } msi_data_t; 857 858 859 /* 860 * Register: MsiMask 861 * MSI Mask 862 * Description: MSI Mask 863 * Fields: 864 * per vector MSI Mask bits 865 */ 866 typedef union { 867 uint32_t value; 868 struct { 869 #if defined(_BIG_ENDIAN) 870 uint32_t mask:32; 871 #else 872 uint32_t mask:32; 873 #endif 874 } bits; 875 } msi_mask_t; 876 877 878 /* 879 * Register: MsiPend 880 * MSI Pending 881 * Description: MSI Pending 882 * Fields: 883 * per vector MSI Pending bits 884 */ 885 typedef union { 886 uint32_t value; 887 struct { 888 #if defined(_BIG_ENDIAN) 889 uint32_t pend:32; 890 #else 891 uint32_t pend:32; 892 #endif 893 } bits; 894 } msi_pend_t; 895 896 897 /* 898 * Register: MsixCap 899 * MSIX Capability 900 * Description: MSIX Capability 901 * Fields: 902 * MSIX Enable (if enabled, MSI and INTx must be disabled) 903 * Function Mask (1 = all vectors masked regardless of per vector 904 * mask, 0 = each vector's mask 905 * Table Size (0x1F = 32 entries): dbi writeable 906 * Next Capability Pointer: dbi writeable 907 * MSIX Capability ID 908 */ 909 typedef union { 910 uint32_t value; 911 struct { 912 #if defined(_BIG_ENDIAN) 913 uint32_t msix_en:1; 914 uint32_t func_mask:1; 915 uint32_t rsrvd:3; 916 uint32_t tab_sz:11; 917 uint32_t nxt_cap_ptr:8; 918 uint32_t msix_cap_id:8; 919 #else 920 uint32_t msix_cap_id:8; 921 uint32_t nxt_cap_ptr:8; 922 uint32_t tab_sz:11; 923 uint32_t rsrvd:3; 924 uint32_t func_mask:1; 925 uint32_t msix_en:1; 926 #endif 927 } bits; 928 } msix_cap_t; 929 930 931 /* 932 * Register: MsixTabOff 933 * MSIX Table Offset 934 * Description: MSIX Table Offset 935 * Fields: 936 * Table Offset (Base address of MSIX Table = msixTabBir.BAR + 937 * msixTabOff) : dbi writeable 938 * Table BAR Indicator (0x2 = BAR2 at loc 0x18) : dbi writeable 939 */ 940 typedef union { 941 uint32_t value; 942 struct { 943 #if defined(_BIG_ENDIAN) 944 uint32_t msix_tab_off:29; 945 uint32_t msix_tab_bir:3; 946 #else 947 uint32_t msix_tab_bir:3; 948 uint32_t msix_tab_off:29; 949 #endif 950 } bits; 951 } msix_tab_off_t; 952 953 954 /* 955 * Register: MsixPbaOff 956 * MSIX PBA Offset 957 * Description: MSIX PBA Offset 958 * Fields: 959 * Pending Bit Array (PBA) Offset (Base address of MSIX Table = 960 * msixTabBir.BAR + msixPbaOff); msixPbaOff is quad-aligned, i.e. 961 * starts at 0x2000 (half-way in MSI-X bar space. : dbi writeable 962 * Pending Bit Array (PBA) BAR Indicator (0x2 = BAR2 at loc 0x18) 963 * : dbi writeable 964 */ 965 typedef union { 966 uint32_t value; 967 struct { 968 #if defined(_BIG_ENDIAN) 969 uint32_t msix_pba_off:29; 970 uint32_t msix_pba_bir:3; 971 #else 972 uint32_t msix_pba_bir:3; 973 uint32_t msix_pba_off:29; 974 #endif 975 } bits; 976 } msix_pba_off_t; 977 978 979 /* 980 * Register: PcieCap 981 * PCIE Capability 982 * Description: PCIE Capability 983 * Fields: 984 * Interrupt Message Number (updated by HW) 985 * Slot Implemented (Endpoint must be 0) 986 * PCIE Express Device Port Type (Endpoint) 987 * PCIE Express Capability Version 988 * Next Capability Pointer: dbi writeable 989 * PCI Express Capability ID 990 */ 991 typedef union { 992 uint32_t value; 993 struct { 994 #if defined(_BIG_ENDIAN) 995 uint32_t rsrvd:2; 996 uint32_t int_msg_num:5; 997 uint32_t pcie_slt_imp:1; 998 uint32_t pcie_dev_type:4; 999 uint32_t pcie_cap_ver:4; 1000 uint32_t nxt_cap_ptr:8; 1001 uint32_t pcie_cap_id:8; 1002 #else 1003 uint32_t pcie_cap_id:8; 1004 uint32_t nxt_cap_ptr:8; 1005 uint32_t pcie_cap_ver:4; 1006 uint32_t pcie_dev_type:4; 1007 uint32_t pcie_slt_imp:1; 1008 uint32_t int_msg_num:5; 1009 uint32_t rsrvd:2; 1010 #endif 1011 } bits; 1012 } pcie_cap_t; 1013 1014 1015 /* 1016 * Register: DevCap 1017 * Device Capability 1018 * Description: Device Capability 1019 * Fields: 1020 * Slot Power Limit Scale (Msg from RC) Hydra can capture 1021 * Received setSlotPowerLimit message; values in this field are 1022 * ignored as no power scaling is possible. 1023 * Slot Power Limit Value (Msg from RC) Hydra can capture 1024 * Received setSlotPowerLimit message; values in this field are 1025 * ignored as no power scaling is possible. 1026 * Introduced in PCIe 1.1 specification. : dbi writeable 1027 * L1 Acceptable Latency (4 - 8 us) : dbi writeable 1028 * LOs Acceptable Latency (2 - 4 us) : dbi writeable 1029 * Extended Tag Field Support (N/A) : dbi writeable 1030 * Phantom Function Supported (N/A) : dbi writeable 1031 * Maximum Payload Size supported (Hydra = 1KB) : dbi writeable 1032 */ 1033 typedef union { 1034 uint32_t value; 1035 struct { 1036 #if defined(_BIG_ENDIAN) 1037 uint32_t rsrvd:4; 1038 uint32_t slt_pwr_lmt_scle:2; 1039 uint32_t slt_pwr_lmt_val:8; 1040 uint32_t rsrvd1:2; 1041 uint32_t role_based_err:1; 1042 uint32_t rsrvd2:3; 1043 uint32_t l1_lat:3; 1044 uint32_t los_lat:3; 1045 uint32_t ext_tag:1; 1046 uint32_t phant_func:2; 1047 uint32_t max_mtu:3; 1048 #else 1049 uint32_t max_mtu:3; 1050 uint32_t phant_func:2; 1051 uint32_t ext_tag:1; 1052 uint32_t los_lat:3; 1053 uint32_t l1_lat:3; 1054 uint32_t rsrvd2:3; 1055 uint32_t role_based_err:1; 1056 uint32_t rsrvd1:2; 1057 uint32_t slt_pwr_lmt_val:8; 1058 uint32_t slt_pwr_lmt_scle:2; 1059 uint32_t rsrvd:4; 1060 #endif 1061 } bits; 1062 } dev_cap_t; 1063 1064 1065 /* 1066 * Register: DevStatCtrl 1067 * Device Status and Control 1068 * Description: Device Control 1069 * Fields: 1070 * Transaction Pending (1 if NP request not completed) 1071 * Auxilliary Power Detected (1 if detected) 1072 * Unsupported Request Detect 1073 * Fatal Error Detected 1074 * Non-Fatal Error Detected 1075 * Correctable Error Detected ----- Control Fields 1076 * Introduced in PCIe 1.1 specification. 1077 * Maximum Read Request Size (default = 512B) for the device as a 1078 * requester. 3'b000: 128 Bytes 3'b001: 256 Bytes 3'b010: 512 1079 * Bytes 3'b011: 1K Bytes 3'b100: 2K Bytes 3'b101: 4K Bytes 1080 * 3'b110: Reserved 3'b111: Reserved 1081 * No Snoop Enable This bit indicates the device "could", not 1082 * that it does. Both this bit and the hydra specific peuCip 1083 * register bit must be set for the value of this bit to impact 1084 * the TLP header no snoop attribute. When both are set, hydra 1085 * sets the no snoop attribute on all initiated TLPs. Software 1086 * must guarantee the No Snoop attribute is used in the system 1087 * correctly. 1088 * Auxilliary Power PM Enable 1089 * Phantom Function enable 1090 * Extended Tag Field Enable 1091 * Maximum Payload Size. 3-bit value has the same encodings as 1092 * the maxRdSz field. 1093 * Relaxed Ordering Enable This bit indicates the device "could", 1094 * not that it does. Both this bit and the hydra specific peuCip 1095 * register bit must be set for the value of this bit to impact 1096 * the TLP header relaxed ordering attribute. When both are set, 1097 * packet operations set the relaxed ordering attribute. Mailbox 1098 * updates always set the relaxed ordering attribute to 0, 1099 * regardless of this bit. When this bit is 0, the default 1100 * Sun4u/Sun4v ordering model is used. 1101 * Unsupported Request Report Enable 1102 * Fatal Error Report Enable 1103 * Non-Fatal Error Report Enable 1104 * Correctable Error Report Enable 1105 */ 1106 typedef union { 1107 uint32_t value; 1108 struct { 1109 #if defined(_BIG_ENDIAN) 1110 uint32_t rsrvd:10; 1111 uint32_t trans_pend:1; 1112 uint32_t aux_pwr_det:1; 1113 uint32_t unsup_req_det:1; 1114 uint32_t fat_err_det:1; 1115 uint32_t nf_err_det:1; 1116 uint32_t corr_err_det:1; 1117 uint32_t pcie2pcix_brdg:1; 1118 uint32_t max_rd_sz:3; 1119 uint32_t no_snoop_en:1; 1120 uint32_t aux_pwr_pm_en:1; 1121 uint32_t phant_func_en:1; 1122 uint32_t ext_tag_en:1; 1123 uint32_t max_pld_sz:3; 1124 uint32_t rlx_ord_en:1; 1125 uint32_t unsup_req_en:1; 1126 uint32_t fat_err_en:1; 1127 uint32_t nf_err_en:1; 1128 uint32_t corr_err_en:1; 1129 #else 1130 uint32_t corr_err_en:1; 1131 uint32_t nf_err_en:1; 1132 uint32_t fat_err_en:1; 1133 uint32_t unsup_req_en:1; 1134 uint32_t rlx_ord_en:1; 1135 uint32_t max_pld_sz:3; 1136 uint32_t ext_tag_en:1; 1137 uint32_t phant_func_en:1; 1138 uint32_t aux_pwr_pm_en:1; 1139 uint32_t no_snoop_en:1; 1140 uint32_t max_rd_sz:3; 1141 uint32_t pcie2pcix_brdg:1; 1142 uint32_t corr_err_det:1; 1143 uint32_t nf_err_det:1; 1144 uint32_t fat_err_det:1; 1145 uint32_t unsup_req_det:1; 1146 uint32_t aux_pwr_det:1; 1147 uint32_t trans_pend:1; 1148 uint32_t rsrvd:10; 1149 #endif 1150 } bits; 1151 } dev_stat_ctrl_t; 1152 1153 1154 /* 1155 * Register: LnkCap 1156 * Link Capability 1157 * Description: Link Capability 1158 * Fields: 1159 * Port Number : dbi writeable 1160 * Introduced in PCIe 1.1 specification. 1161 * Introduced in PCIe 1.1 specification. 1162 * Default Clock Power Management (N/A) Introduced in PCIe 1.1 1163 * specification. : dbi writeable 1164 * Default L1 Exit Latency (32us to 64us => 0x6) : dbi writeable 1165 * Default L0s Exit Latency (1us to 2us => 0x5) : dbi writeable 1166 * Active Link PM Support (only L0s = 1) : dbi writeable 1167 * Maximum Link Width (x8) : dbi writeable 1168 * Maximum Link Speed (2.5 Gbps = 1) : dbi writeable 1169 */ 1170 typedef union { 1171 uint32_t value; 1172 struct { 1173 #if defined(_BIG_ENDIAN) 1174 uint32_t prt_num:8; 1175 uint32_t rsrvd:3; 1176 uint32_t def_dll_act_rptg:1; 1177 uint32_t def_surpise_down:1; 1178 uint32_t def_clk_pm_cap:1; 1179 uint32_t def_l1_lat:3; 1180 uint32_t def_l0s_lat:3; 1181 uint32_t as_lnk_pm_supt:2; 1182 uint32_t max_lnk_wid:6; 1183 uint32_t max_lnk_spd:4; 1184 #else 1185 uint32_t max_lnk_spd:4; 1186 uint32_t max_lnk_wid:6; 1187 uint32_t as_lnk_pm_supt:2; 1188 uint32_t def_l0s_lat:3; 1189 uint32_t def_l1_lat:3; 1190 uint32_t def_clk_pm_cap:1; 1191 uint32_t def_surpise_down:1; 1192 uint32_t def_dll_act_rptg:1; 1193 uint32_t rsrvd:3; 1194 uint32_t prt_num:8; 1195 #endif 1196 } bits; 1197 } lnk_cap_t; 1198 1199 1200 /* 1201 * Register: LnkStatCtrl 1202 * Link Status and Control 1203 * Description: Link Control 1204 * Fields: 1205 * Slot Clock Configuration (0 = using independent clock; pg 266 1206 * PCIe 1.1) : dbi writeable 1207 * Link Training (N/A for EP) 1208 * Training Error (N/A for EP) 1209 * Negotiated Link Width (Max negotiated: x8) 1210 * Negotiated Link Speed (Max negotiated: 1 = 2.5 Gbps) ----- 1211 * Control Fields 1212 * Introduced in PCIe 1.1. 1213 * Extended Synch 1214 * Common Clock Configuration 1215 * Retrain Link (N/A for EP) 1216 * Link Disable (N/A for EP) 1217 * Read Completion Boundary (128B) 1218 * Active State Link PM Control 1219 */ 1220 typedef union { 1221 uint32_t value; 1222 struct { 1223 #if defined(_BIG_ENDIAN) 1224 uint32_t rsrvd:2; 1225 uint32_t dll_active:1; 1226 uint32_t slt_clk_cfg:1; 1227 uint32_t lnk_train:1; 1228 uint32_t train_err:1; 1229 uint32_t lnk_wid:6; 1230 uint32_t lnk_spd:4; 1231 uint32_t rsrvd1:7; 1232 uint32_t en_clkpwr_mg:1; 1233 uint32_t ext_sync:1; 1234 uint32_t com_clk_cfg:1; 1235 uint32_t retrain_lnk:1; 1236 uint32_t lnk_dis:1; 1237 uint32_t rd_cmpl_bndy:1; 1238 uint32_t rsrvd2:1; 1239 uint32_t aspm_ctrl:2; 1240 #else 1241 uint32_t aspm_ctrl:2; 1242 uint32_t rsrvd2:1; 1243 uint32_t rd_cmpl_bndy:1; 1244 uint32_t lnk_dis:1; 1245 uint32_t retrain_lnk:1; 1246 uint32_t com_clk_cfg:1; 1247 uint32_t ext_sync:1; 1248 uint32_t en_clkpwr_mg:1; 1249 uint32_t rsrvd1:7; 1250 uint32_t lnk_spd:4; 1251 uint32_t lnk_wid:6; 1252 uint32_t train_err:1; 1253 uint32_t lnk_train:1; 1254 uint32_t slt_clk_cfg:1; 1255 uint32_t dll_active:1; 1256 uint32_t rsrvd:2; 1257 #endif 1258 } bits; 1259 } lnk_stat_ctrl_t; 1260 1261 1262 /* 1263 * Register: VenCapHdr 1264 * Vendor Specific Capability Header 1265 * Description: Vendor Specific Capability Header 1266 * Fields: 1267 * Length 1268 * Next Capbility Pointer 1269 * Vendor Specific Capbility ID 1270 */ 1271 typedef union { 1272 uint32_t value; 1273 struct { 1274 #if defined(_BIG_ENDIAN) 1275 uint32_t rsrvd:8; 1276 uint32_t len:8; 1277 uint32_t nxt_cap_ptr:8; 1278 uint32_t ven_cap_id:8; 1279 #else 1280 uint32_t ven_cap_id:8; 1281 uint32_t nxt_cap_ptr:8; 1282 uint32_t len:8; 1283 uint32_t rsrvd:8; 1284 #endif 1285 } bits; 1286 } ven_cap_hdr_t; 1287 1288 1289 /* 1290 * Register: VenCtrl 1291 * Vendor Specific Control 1292 * Description: Vendor Specific Control 1293 * Fields: 1294 * PCIe spec absolute minimum is 50usec - (likely ~10ms). PCIe 1295 * spec absolute max is 50msec. Default set for 22.2 msec via 1296 * adding time as follows: Bit 23: 3.21 secs <---POR 0 Bit 22: 1297 * 201.3 msec <---POR 0 Bit 21: 100.8 msec <---POR 0 Bit 20: 25.2 1298 * msec <---POR 0 Bit 19: 12.6 msec <---POR 1 Bit 18: 6.3 msec 1299 * <---POR 1 Bit 17: 3.3 msec <---POR 1 Bit 16: if 0: 1300 * Baseline0=50usec; else Baseline1(use for 1301 * simulation-only)=804nsec 1302 * Interrupt Control Mode (00 = Reserved, 01 = INTx emulation, 10 1303 * = Reserved [Neptune INTx pins], 11 = Reserved [Neptune INTx 1304 * emulation + pins] 1305 */ 1306 typedef union { 1307 uint32_t value; 1308 struct { 1309 #if defined(_BIG_ENDIAN) 1310 uint32_t rsrvd:8; 1311 uint32_t eic_xtd_cpl_timout:8; 1312 uint32_t rsrvd1:14; 1313 uint32_t legacy_int_ctrl:2; 1314 #else 1315 uint32_t legacy_int_ctrl:2; 1316 uint32_t rsrvd1:14; 1317 uint32_t eic_xtd_cpl_timout:8; 1318 uint32_t rsrvd:8; 1319 #endif 1320 } bits; 1321 } ven_ctrl_t; 1322 1323 1324 /* 1325 * Register: VenPrtHdr 1326 * Vendor Specific Port Logic Header 1327 * Description: Vendor Specific Port Logic Header 1328 * Fields: 1329 * Length 1330 * Next Capbility Pointer (END, no more) 1331 * Vendor Specific Capbility ID 1332 */ 1333 typedef union { 1334 uint32_t value; 1335 struct { 1336 #if defined(_BIG_ENDIAN) 1337 uint32_t rsrvd:8; 1338 uint32_t len:8; 1339 uint32_t nxt_cap_ptr:8; 1340 uint32_t ven_cap_id:8; 1341 #else 1342 uint32_t ven_cap_id:8; 1343 uint32_t nxt_cap_ptr:8; 1344 uint32_t len:8; 1345 uint32_t rsrvd:8; 1346 #endif 1347 } bits; 1348 } ven_prt_hdr_t; 1349 1350 1351 /* 1352 * Register: AcklatReplay 1353 * Ack Latency and Replay Timer register 1354 * Description: Ack Latency/Replay Timer 1355 * Fields: 1356 * Replay Time limit = 16'd12429/`cxNb where cxNb=1. 1357 * Round Trip Latency Time limit = 9d'4143/`cxNb where cxNb=1. 1358 */ 1359 typedef union { 1360 uint32_t value; 1361 struct { 1362 #if defined(_BIG_ENDIAN) 1363 uint32_t rep_tim:16; 1364 uint32_t ack_tim:16; 1365 #else 1366 uint32_t ack_tim:16; 1367 uint32_t rep_tim:16; 1368 #endif 1369 } bits; 1370 } acklat_replay_t; 1371 1372 1373 /* 1374 * Register: OthMsg 1375 * Other Message Register 1376 * Description: Other Message Register 1377 * Fields: 1378 * Message to send/Data to corrupt LCRC 1379 */ 1380 typedef union { 1381 uint32_t value; 1382 struct { 1383 #if defined(_BIG_ENDIAN) 1384 uint32_t oth_msg:32; 1385 #else 1386 uint32_t oth_msg:32; 1387 #endif 1388 } bits; 1389 } oth_msg_t; 1390 1391 1392 /* 1393 * Register: ForceLink 1394 * Port Force Link 1395 * Description: Other Message Register 1396 * Fields: 1397 * LinkState that the EP core will be forced to when ForceLink 1398 * (bit[15]) is set 1399 * Forces Link to the specified LinkState field below. Write this 1400 * bit to generate a pulse to the ltssm. It clears itself once 1401 * the pulse is generated. Read will always return 0. 1402 * Link Number - N/A for Endpoint 1403 */ 1404 typedef union { 1405 uint32_t value; 1406 struct { 1407 #if defined(_BIG_ENDIAN) 1408 uint32_t rsrvd:10; 1409 uint32_t link_state:6; 1410 uint32_t force_link:1; 1411 uint32_t rsrvd1:7; 1412 uint32_t link_num:8; 1413 #else 1414 uint32_t link_num:8; 1415 uint32_t rsrvd1:7; 1416 uint32_t force_link:1; 1417 uint32_t link_state:6; 1418 uint32_t rsrvd:10; 1419 #endif 1420 } bits; 1421 } force_link_t; 1422 1423 1424 /* 1425 * Register: AckFreq 1426 * ACK Frequency Register 1427 * Description: ACK Frequency Register 1428 * Fields: 1429 * NFTS = 115. 1430 * NFTS = 115. 1431 */ 1432 typedef union { 1433 uint32_t value; 1434 struct { 1435 #if defined(_BIG_ENDIAN) 1436 uint32_t rsrvd:2; 1437 uint32_t l1_entr_latency:3; 1438 uint32_t los_entr_latency:3; 1439 uint32_t cx_comm_nfts:8; 1440 uint32_t nfts:8; 1441 uint32_t def_ack_freq:8; 1442 #else 1443 uint32_t def_ack_freq:8; 1444 uint32_t nfts:8; 1445 uint32_t cx_comm_nfts:8; 1446 uint32_t los_entr_latency:3; 1447 uint32_t l1_entr_latency:3; 1448 uint32_t rsrvd:2; 1449 #endif 1450 } bits; 1451 } ack_freq_t; 1452 1453 1454 /* 1455 * Register: LinkCtrl 1456 * Port Link Control 1457 * Description: Port Link Control 1458 * Fields: 1459 * 8 lanes 1460 * When set, this bit is only set for 1 cycle. A write of 0 has 1461 * no effect. 1462 */ 1463 typedef union { 1464 uint32_t value; 1465 struct { 1466 #if defined(_BIG_ENDIAN) 1467 uint32_t rsrvd:4; 1468 uint32_t rsrvd1:2; 1469 uint32_t corrupt_lcrc:1; 1470 uint32_t rsrvd2:1; 1471 uint32_t rsrvd3:2; 1472 uint32_t link_mode_en:6; 1473 uint32_t rsrvd4:4; 1474 uint32_t rsrvd5:4; 1475 uint32_t fast_link_mode:1; 1476 uint32_t rsrvd6:1; 1477 uint32_t dll_link_en:1; 1478 uint32_t rsrvd7:1; 1479 uint32_t reset_assert:1; 1480 uint32_t lpbk_en:1; 1481 uint32_t scram_dis:1; 1482 uint32_t oth_msg_req:1; 1483 #else 1484 uint32_t oth_msg_req:1; 1485 uint32_t scram_dis:1; 1486 uint32_t lpbk_en:1; 1487 uint32_t reset_assert:1; 1488 uint32_t rsrvd7:1; 1489 uint32_t dll_link_en:1; 1490 uint32_t rsrvd6:1; 1491 uint32_t fast_link_mode:1; 1492 uint32_t rsrvd5:4; 1493 uint32_t rsrvd4:4; 1494 uint32_t link_mode_en:6; 1495 uint32_t rsrvd3:2; 1496 uint32_t rsrvd2:1; 1497 uint32_t corrupt_lcrc:1; 1498 uint32_t rsrvd1:2; 1499 uint32_t rsrvd:4; 1500 #endif 1501 } bits; 1502 } link_ctrl_t; 1503 1504 1505 /* 1506 * Register: LaneSkew 1507 * Lane Skew Register 1508 * Description: Lane Skew Register 1509 * Fields: 1510 * prevents EP core from sending Ack/Nack DLLPs 1511 * prevents EP core from sending FC DLLPs 1512 */ 1513 typedef union { 1514 uint32_t value; 1515 struct { 1516 #if defined(_BIG_ENDIAN) 1517 uint32_t dis_lane_to_lane_deskew:1; 1518 uint32_t rsrvd:5; 1519 uint32_t ack_nack_dis:1; 1520 uint32_t flow_control_dis:1; 1521 uint32_t tx_lane_skew:24; 1522 #else 1523 uint32_t tx_lane_skew:24; 1524 uint32_t flow_control_dis:1; 1525 uint32_t ack_nack_dis:1; 1526 uint32_t rsrvd:5; 1527 uint32_t dis_lane_to_lane_deskew:1; 1528 #endif 1529 } bits; 1530 } lane_skew_t; 1531 1532 1533 /* 1534 * Register: SymbolNum 1535 * Symbol Number Register 1536 * Description: Symbol Number Register 1537 * Fields: 1538 * Timer modifier for Flow control Watch Dog timer 1539 * Timer modifier for Ack/Nack latency timer 1540 * Timer modifier for Replay timer 1541 * Note: rtl uses defaultNSkipSymbols 1542 * Note: rtl initialized using defaultNTs1Symbols 1543 */ 1544 typedef union { 1545 uint32_t value; 1546 struct { 1547 #if defined(_BIG_ENDIAN) 1548 uint32_t rsrvd:3; 1549 uint32_t fc_wdog_tim_mod:5; 1550 uint32_t ack_nack_tim_mod:5; 1551 uint32_t rep_tim_mod:5; 1552 uint32_t rsrvd1:3; 1553 uint32_t num_skip_symb:3; 1554 uint32_t rsrvd2:4; 1555 uint32_t num_ts_symb:4; 1556 #else 1557 uint32_t num_ts_symb:4; 1558 uint32_t rsrvd2:4; 1559 uint32_t num_skip_symb:3; 1560 uint32_t rsrvd1:3; 1561 uint32_t rep_tim_mod:5; 1562 uint32_t ack_nack_tim_mod:5; 1563 uint32_t fc_wdog_tim_mod:5; 1564 uint32_t rsrvd:3; 1565 #endif 1566 } bits; 1567 } symbol_num_t; 1568 1569 1570 /* 1571 * Register: SymbTimRadmFlt1 1572 * Symbol Timer Register / RADM Filter Mask Register 1 1573 * Description: Symbol Timer / RADM Filter Mask 1 1574 * Fields: 1575 * No masking errors while filtering 1576 */ 1577 typedef union { 1578 uint32_t value; 1579 struct { 1580 #if defined(_BIG_ENDIAN) 1581 uint32_t mask_radm_flt:16; 1582 uint32_t dis_fc_wdog:1; 1583 uint32_t rsrvd:4; 1584 uint32_t skip_interval:11; 1585 #else 1586 uint32_t skip_interval:11; 1587 uint32_t rsrvd:4; 1588 uint32_t dis_fc_wdog:1; 1589 uint32_t mask_radm_flt:16; 1590 #endif 1591 } bits; 1592 } symb_tim_radm_flt1_t; 1593 1594 1595 /* 1596 * Register: RadmFlt2 1597 * RADM Filter Mask Register 2 1598 * Description: RADM Filter Mask Register 2 1599 * Fields: 1600 * [31:2] = Reserved [1]=0=Vendor MSG Type0 dropped & treated as 1601 * UR, [0]=0=Vendor MSG Type1 silently dropped. 1602 */ 1603 typedef union { 1604 uint32_t value; 1605 struct { 1606 #if defined(_BIG_ENDIAN) 1607 uint32_t mask_radm_flt:32; 1608 #else 1609 uint32_t mask_radm_flt:32; 1610 #endif 1611 } bits; 1612 } radm_flt2_t; 1613 1614 1615 /* 1616 * Register: CascadeDebReg0 1617 * Cascade core (EP) Debug Register 0 1618 * Description: Debug Register 0 EP Core SII Interface bus : 1619 * cxplDebugInfo[31:0] 1620 * Fields: 1621 */ 1622 typedef union { 1623 uint32_t value; 1624 struct { 1625 #if defined(_BIG_ENDIAN) 1626 uint32_t rmlh_ts_link_ctrl:4; 1627 uint32_t rmlh_ts_lane_num_is_k237:1; 1628 uint32_t rmlh_ts_link_num_is_k237:1; 1629 uint32_t rmlh_rcvd_idle_bit0:1; 1630 uint32_t rmlh_rcvd_idle_bit1:1; 1631 uint32_t mac_phy_txdata:16; 1632 uint32_t mac_phy_txdatak:2; 1633 uint32_t rsrvd:1; 1634 uint32_t xmlh_ltssm_state:5; 1635 #else 1636 uint32_t xmlh_ltssm_state:5; 1637 uint32_t rsrvd:1; 1638 uint32_t mac_phy_txdatak:2; 1639 uint32_t mac_phy_txdata:16; 1640 uint32_t rmlh_rcvd_idle_bit1:1; 1641 uint32_t rmlh_rcvd_idle_bit0:1; 1642 uint32_t rmlh_ts_link_num_is_k237:1; 1643 uint32_t rmlh_ts_lane_num_is_k237:1; 1644 uint32_t rmlh_ts_link_ctrl:4; 1645 #endif 1646 } bits; 1647 } cascade_deb_reg0_t; 1648 1649 1650 /* 1651 * Register: CascadeDebReg1 1652 * Cascade Core (EP) Debug Register 1 1653 * Description: Debug Register 1 EP Core SII Interface bus : 1654 * cxplDebugInfo[63:32] 1655 * Fields: 1656 * PCIe Link status. 0=down, 1=up 1657 */ 1658 typedef union { 1659 uint32_t value; 1660 struct { 1661 #if defined(_BIG_ENDIAN) 1662 uint32_t xmlh_scrambler_disable:1; 1663 uint32_t xmlh_link_disable:1; 1664 uint32_t xmlh_link_in_training:1; 1665 uint32_t xmlh_rcvr_revrs_pol_en:1; 1666 uint32_t xmlh_training_rst_n:1; 1667 uint32_t rsrvd:4; 1668 uint32_t mac_phy_txdetectrx_loopback:1; 1669 uint32_t mac_phy_txelecidle_bit0:1; 1670 uint32_t mac_phy_txcompliance_bit0:1; 1671 uint32_t app_init_rst:1; 1672 uint32_t rsrvd1:3; 1673 uint32_t rmlh_rs_link_num:8; 1674 uint32_t rmlh_link_mode:3; 1675 uint32_t xmlh_link_up:1; 1676 uint32_t rmlh_inskip_rcv:1; 1677 uint32_t rmlh_ts1_rcvd:1; 1678 uint32_t rmlh_ts2_rcvd:1; 1679 uint32_t rmlh_rcvd_lane_rev:1; 1680 #else 1681 uint32_t rmlh_rcvd_lane_rev:1; 1682 uint32_t rmlh_ts2_rcvd:1; 1683 uint32_t rmlh_ts1_rcvd:1; 1684 uint32_t rmlh_inskip_rcv:1; 1685 uint32_t xmlh_link_up:1; 1686 uint32_t rmlh_link_mode:3; 1687 uint32_t rmlh_rs_link_num:8; 1688 uint32_t rsrvd1:3; 1689 uint32_t app_init_rst:1; 1690 uint32_t mac_phy_txcompliance_bit0:1; 1691 uint32_t mac_phy_txelecidle_bit0:1; 1692 uint32_t mac_phy_txdetectrx_loopback:1; 1693 uint32_t rsrvd:4; 1694 uint32_t xmlh_training_rst_n:1; 1695 uint32_t xmlh_rcvr_revrs_pol_en:1; 1696 uint32_t xmlh_link_in_training:1; 1697 uint32_t xmlh_link_disable:1; 1698 uint32_t xmlh_scrambler_disable:1; 1699 #endif 1700 } bits; 1701 } cascade_deb_reg1_t; 1702 1703 1704 /* 1705 * Register: TxpFcCreditStat 1706 * Transmit Posted FC Credit Status 1707 * Description: Transmit Posted FC Credit Status 1708 * Fields: 1709 */ 1710 typedef union { 1711 uint32_t value; 1712 struct { 1713 #if defined(_BIG_ENDIAN) 1714 uint32_t rsrvd:12; 1715 uint32_t txp_fc_hdr_credit_stat:8; 1716 uint32_t txp_fc_data_credit_stat:12; 1717 #else 1718 uint32_t txp_fc_data_credit_stat:12; 1719 uint32_t txp_fc_hdr_credit_stat:8; 1720 uint32_t rsrvd:12; 1721 #endif 1722 } bits; 1723 } txp_fc_credit_stat_t; 1724 1725 1726 /* 1727 * Register: TxnpFcCreditStat 1728 * Transmit Non-Posted FC Credit Status 1729 * Description: Transmit Non-Posted FC Credit Status 1730 * Fields: 1731 */ 1732 typedef union { 1733 uint32_t value; 1734 struct { 1735 #if defined(_BIG_ENDIAN) 1736 uint32_t rsrvd:12; 1737 uint32_t txnp_fc_hdr_credit_stat:8; 1738 uint32_t txnp_fc_data_credit_stat:12; 1739 #else 1740 uint32_t txnp_fc_data_credit_stat:12; 1741 uint32_t txnp_fc_hdr_credit_stat:8; 1742 uint32_t rsrvd:12; 1743 #endif 1744 } bits; 1745 } txnp_fc_credit_stat_t; 1746 1747 1748 /* 1749 * Register: TxcplFcCreditStat 1750 * Transmit Completion FC Credit Status 1751 * Description: Transmit Completion FC Credit Status 1752 * Fields: 1753 */ 1754 typedef union { 1755 uint32_t value; 1756 struct { 1757 #if defined(_BIG_ENDIAN) 1758 uint32_t rsrvd:12; 1759 uint32_t txcpl_fc_hdr_credit_stat:8; 1760 uint32_t txcpl_fc_data_credit_stat:12; 1761 #else 1762 uint32_t txcpl_fc_data_credit_stat:12; 1763 uint32_t txcpl_fc_hdr_credit_stat:8; 1764 uint32_t rsrvd:12; 1765 #endif 1766 } bits; 1767 } txcpl_fc_credit_stat_t; 1768 1769 1770 /* 1771 * Register: QueueStat 1772 * Queue Status 1773 * Description: Queue Status 1774 * Fields: 1775 */ 1776 typedef union { 1777 uint32_t value; 1778 struct { 1779 #if defined(_BIG_ENDIAN) 1780 uint32_t rsrvd:29; 1781 uint32_t rx_queue_not_empty:1; 1782 uint32_t tx_rbuf_not_empty:1; 1783 uint32_t tx_fc_credit_not_ret:1; 1784 #else 1785 uint32_t tx_fc_credit_not_ret:1; 1786 uint32_t tx_rbuf_not_empty:1; 1787 uint32_t rx_queue_not_empty:1; 1788 uint32_t rsrvd:29; 1789 #endif 1790 } bits; 1791 } queue_stat_t; 1792 1793 1794 /* 1795 * Register: GbtDebug0 1796 * GBT Debug, Status register 1797 * Description: This register returns bits [31:0] of the PIPE core's 1798 * gbtDebug bus 1799 * Fields: 1800 * [6] & [22] = rxclkO will always read 1'b0 [7] & [23] = 1801 * tbcout10O will always read 1'b0 1802 * The value specified here is the Power On Reset value as given 1803 * in spec. except for the clock bits which are hardwired to 1804 * 1'b0. 1805 * The gbtDebug[0:15] bus is provided for each lane as an output 1806 * from the pcieGbtopWrapper.v module. These signals are not 1807 * required for manufacturing test and may be left unconnected. 1808 * The cw00041130PipeParam.vh bus width is the number of lanes 1809 * multiplied by 16. lane0 is bits[15:0], lane1 is bits[31:16], 1810 * lane2 is bits[47:32], lane3 is bits[63:48], lane4 is 1811 * bits[79:64], lane5 is bits[95:80], lane6 is bits[111:96], 1812 * lane7 is bits[127:112]. 1813 * Refer to section 4.2.2.4, Gigablaze Debug Signals section. 1814 * (pgs 4.27 - 4.28) in the following document : 1815 * /home/cadtools/cores/lsi/cw000411/cw00041131/prod/docs/manuals/ 1816 * cw000411TechMan.pdf 1817 * lane0 is bits[15:0], which is gbtDebug0[15:0] lane1 is 1818 * bits[31:16], which is gbtDebug0[31:16] 1819 * 1820 * ------------------------------------------------------------------------- 1821 * Signal Bit Reset Description 1822 * ------------------------------------------------------------------------- 1823 * gbtResetRbcI [16n+15] [15] 1 Reset receiver bit clock 1824 * gbtResetTbc20I [16n+14] [14] 1 Reset transmit 20-bit clock 1825 * gbtResetRI [16n+13] [13] 1 Reset receiver logic gbtResetTI 1826 * [16n+12] [12] 1 Reset transmit logic reserved [16n+11:16n+8] 1827 * [11:8] 0 reserved gbtTbcout10 [16n+7] [7] 1 transmit clock 1828 * 10-bit gbtRxclkO [16n+6] [6] 0 receiver PLL clock gbtRxpresO 1829 * [16n+5] [5] 0 receiver detect present gbtRxpresvalidO [16n+4] 1830 * [4] 0 gbtRxpresO is valid gbtRxlosO [16n+3] [3] 1 raw receiver 1831 * loss-of-signal gbtPassnO [16n+2] [2] 1 GigaBlaze BIST pass 1832 * active low reserved [16n+1] [1] 0 reserved reserved [16n] [0] 1833 * 0 reserved 1834 * ------------------------------------------------------------------------- 1835 */ 1836 typedef union { 1837 uint32_t value; 1838 struct { 1839 #if defined(_BIG_ENDIAN) 1840 uint32_t data:32; 1841 #else 1842 uint32_t data:32; 1843 #endif 1844 } bits; 1845 } gbt_debug0_t; 1846 1847 1848 /* 1849 * Register: GbtDebug1 1850 * GBT Debug, Status register 1851 * Description: This register returns bits [63:32] of the PIPE core's 1852 * gbtDebug bus 1853 * Fields: 1854 * [6] & [22] = rxclkO will always read 1'b0 [7] & [23] = 1855 * tbcout10O will always read 1'b0 1856 * The value specified here is the Power On Reset value as given 1857 * in spec. except for the clock bits which are hardwired to 1858 * 1'b0. 1859 * The gbtDebug[0:15] bus is provided for each lane as an output 1860 * from the pcieGbtopWrapper.v module. These signals are not 1861 * required for manufacturing test and may be left unconnected. 1862 * The cw00041130PipeParam.vh bus width is the number of lanes 1863 * multiplied by 16. 1864 * Refer to section 4.2.2.4, Gigablaze Debug Signals section. 1865 * (pgs 4.27 - 4.28) in the following document : 1866 * /home/cadtools/cores/lsi/cw000411/cw00041131/prod/docs/manuals/ 1867 * cw000411TechMan.pdf 1868 * lane2 is bits[47:32], which is gbtDebug1[15:0] lane3 is 1869 * bits[63:48], which is gbtDebug1[31:16] 1870 * 1871 * ------------------------------------------------------------------------- 1872 * Signal Bit Reset Description 1873 * ------------------------------------------------------------------------- 1874 * gbtResetRbcI [16n+15] [15] 1 Reset receiver bit clock 1875 * gbtResetTbc20I [16n+14] [14] 1 Reset transmit 20-bit clock 1876 * gbtResetRI [16n+13] [13] 1 Reset receiver logic gbtResetTI 1877 * [16n+12] [12] 1 Reset transmit logic reserved [16n+11:16n+8] 1878 * [11:8] 0 reserved gbtTbcout10 [16n+7] [7] 1 transmit clock 1879 * 10-bit gbtRxclkO [16n+6] [6] 0 receiver PLL clock gbtRxpresO 1880 * [16n+5] [5] 0 receiver detect present gbtRxpresvalidO [16n+4] 1881 * [4] 0 gbtRxpresO is valid gbtRxlosO [16n+3] [3] 1 raw receiver 1882 * loss-of-signal gbtPassnO [16n+2] [2] 1 GigaBlaze BIST pass 1883 * active low reserved [16n+1] [1] 0 reserved reserved [16n] [0] 1884 * 0 reserved 1885 * ------------------------------------------------------------------------- 1886 */ 1887 typedef union { 1888 uint32_t value; 1889 struct { 1890 #if defined(_BIG_ENDIAN) 1891 uint32_t data:32; 1892 #else 1893 uint32_t data:32; 1894 #endif 1895 } bits; 1896 } gbt_debug1_t; 1897 1898 1899 /* 1900 * Register: GbtDebug2 1901 * GBT Debug, Status register 1902 * Description: This register returns bits [95:64] of the PIPE core's 1903 * gbtDebug bus 1904 * Fields: 1905 * [6] & [22] = rxclkO will always read 1'b0 [7] & [23] = 1906 * tbcout10O will always read 1'b0 1907 * The value specified here is the Power On Reset value as given 1908 * in spec. except for the clock bits which are hardwired to 1909 * 1'b0. 1910 * The gbtDebug[0:15] bus is provided for each lane as an output 1911 * from the pcieGbtopWrapper.v module. These signals are not 1912 * required for manufacturing test and may be left unconnected. 1913 * The cw00041130PipeParam.vh bus width is the number of lanes 1914 * multiplied by 16. 1915 * Refer to section 4.2.2.4, Gigablaze Debug Signals section. 1916 * (pgs 4.27 - 4.28) in the following document : 1917 * /home/cadtools/cores/lsi/cw000411/cw00041131/prod/docs/manuals/ 1918 * cw000411TechMan.pdf 1919 * lane4 is bits[79:64], which is gbtDebug2[15:0] lane5 is 1920 * bits[95:80], which is gbtDebug2[31:16] 1921 * 1922 * ------------------------------------------------------------------------- 1923 * Signal Bit Reset Description 1924 * ------------------------------------------------------------------------- 1925 * gbtResetRbcI [16n+15] [15] 1 Reset receiver bit clock 1926 * gbtResetTbc20I [16n+14] [14] 1 Reset transmit 20-bit clock 1927 * gbtResetRI [16n+13] [13] 1 Reset receiver logic gbtResetTI 1928 * [16n+12] [12] 1 Reset transmit logic reserved [16n+11:16n+8] 1929 * [11:8] 0 reserved gbtTbcout10 [16n+7] [7] 1 transmit clock 1930 * 10-bit gbtRxclkO [16n+6] [6] 0 receiver PLL clock gbtRxpresO 1931 * [16n+5] [5] 0 receiver detect present gbtRxpresvalidO [16n+4] 1932 * [4] 0 gbtRxpresO is valid gbtRxlosO [16n+3] [3] 1 raw receiver 1933 * loss-of-signal gbtPassnO [16n+2] [2] 1 GigaBlaze BIST pass 1934 * active low reserved [16n+1] [1] 0 reserved reserved [16n] [0] 1935 * 0 reserved 1936 * ------------------------------------------------------------------------- 1937 */ 1938 typedef union { 1939 uint32_t value; 1940 struct { 1941 #if defined(_BIG_ENDIAN) 1942 uint32_t data:32; 1943 #else 1944 uint32_t data:32; 1945 #endif 1946 } bits; 1947 } gbt_debug2_t; 1948 1949 1950 /* 1951 * Register: GbtDebug3 1952 * GBT Debug, Status register 1953 * Description: This register returns bits [127:96] of the PIPE 1954 * core's gbtDebug bus 1955 * Fields: 1956 * [6] & [22] = rxclkO will always read 1'b0 [7] & [23] = 1957 * tbcout10O will always read 1'b0 1958 * The value specified here is the Power On Reset value as given 1959 * in spec. except for the clock bits which are hardwired to 1960 * 1'b0. 1961 * The gbtDebug[0:15] bus is provided for each lane as an output 1962 * from the pcieGbtopWrapper.v module. These signals are not 1963 * required for manufacturing test and may be left unconnected. 1964 * The cw00041130PipeParam.vh bus width is the number of lanes 1965 * multiplied by 16. 1966 * Refer to section 4.2.2.4, Gigablaze Debug Signals section. 1967 * (pgs 4.27 - 4.28) in the following document : 1968 * /home/cadtools/cores/lsi/cw000411/cw00041131/prod/docs/manuals/ 1969 * cw000411TechMan.pdf 1970 * lane6 is bits[111:96], which is gbtDebug3[15:0] lane7 is 1971 * bits[127:112], which is gbtDebug3[31:16] 1972 * 1973 * ------------------------------------------------------------------------- 1974 * Signal Bit Reset Description 1975 * ------------------------------------------------------------------------- 1976 * gbtResetRbcI [16n+15] [15] 1 Reset receiver bit clock 1977 * gbtResetTbc20I [16n+14] [14] 1 Reset transmit 20-bit clock 1978 * gbtResetRI [16n+13] [13] 1 Reset receiver logic gbtResetTI 1979 * [16n+12] [12] 1 Reset transmit logic reserved [16n+11:16n+8] 1980 * [11:8] 0 reserved gbtTbcout10 [16n+7] [7] 1 transmit clock 1981 * 10-bit gbtRxclkO [16n+6] [6] 0 receiver PLL clock gbtRxpresO 1982 * [16n+5] [5] 0 receiver detect present gbtRxpresvalidO [16n+4] 1983 * [4] 0 gbtRxpresO is valid gbtRxlosO [16n+3] [3] 1 raw receiver 1984 * loss-of-signal gbtPassnO [16n+2] [2] 1 GigaBlaze BIST pass 1985 * active low reserved [16n+1] [1] 0 reserved reserved [16n] [0] 1986 * 0 reserved 1987 * ------------------------------------------------------------------------- 1988 */ 1989 typedef union { 1990 uint32_t value; 1991 struct { 1992 #if defined(_BIG_ENDIAN) 1993 uint32_t data:32; 1994 #else 1995 uint32_t data:32; 1996 #endif 1997 } bits; 1998 } gbt_debug3_t; 1999 2000 2001 /* 2002 * Register: PipeDebug0 2003 * PIPE Debug, status register 2004 * Description: This register returns bits [31:0] of the PIPE core's 2005 * gbtDebug bus 2006 * Fields: 2007 * The value specified here is the Power On Reset value as given 2008 * in spec. 2009 * This 16-bit debug bus reports operating conditions for the 2010 * PIPE. The pipeDebug[0:15] bus is provided for each lane. lane0 2011 * is bits[15:0], lane1 is bits[31:16], lane2 is bits[47:32], 2012 * lane3 is bits[63:48], lane4 is bits[79:64], lane5 is 2013 * bits[95:80], lane6 is bits[111:96], lane7 is bits[127:112]. 2014 * Refer to section 4.2.1.5 Single-Lane PIPE Debug Signals in 2015 * the following document : 2016 * /home/cadtools/cores/lsi/cw000411/cw00041131/prod/docs/manuals/ 2017 * cw000411TechMan.pdf 2018 * lane0 is bit[15:0], which is pipeDebug0[15:0] lane1 is 2019 * bit[31:16], which is pipeDebug0[31:16] 2020 * 2021 * ------------------------------------------------------------------------- 2022 * pipeDebug Signal or Condition Description Reset 2023 * ------------------------------------------------------------------------- 2024 * [15] efifoOverflow or EFIFO overflow or 0 efifoUnderflow EFIFO 2025 * underflow occurred 2026 * [14] skipInsert or EFIFO skip inserted or 0 skipDelete 2027 * deleted 0 2028 * [13] fifordData[12] == Skip flag read by EFIFO. 0 skipFlag 2029 * Used with skipcharflag to verify EFIFO depth. 2030 * [12] skipcharflag Skip flag written by EFIFO 0 2031 * [11:8] efifoDepth[3:0] Indicates EFIFO depth 0000 2032 * [7] efifoEios Detected EFIFO 0 electrical-idle ordered-set 2033 * output 2034 * [6] efifoBytesync EFIFO output byte 0 synchronization 2035 * [5] rxinvalid 8b/10b error or 0 or code violation 2036 * [4] rxinitdone Receiver bit-init done. 0 Synchronous with 2037 * pipeClk. 2038 * [3] txinitdone Transmitter-bit init done. 0 Synchronous with 2039 * pipeClk. 2040 * [2] filteredrxlos Filtered loss of signal used 1 to generate 2041 * p2lRxelectidle. Synchronous with pipeClk. 2042 * [1] rxdetectInt Receiver detected 0 2043 * [0] pipeMasterDoneOut Receiver detection valid 0 2044 * 2045 */ 2046 typedef union { 2047 uint32_t value; 2048 struct { 2049 #if defined(_BIG_ENDIAN) 2050 uint32_t data:32; 2051 #else 2052 uint32_t data:32; 2053 #endif 2054 } bits; 2055 } pipe_debug0_t; 2056 2057 2058 /* 2059 * Register: PipeDebug1 2060 * PIPE Debug, status register 2061 * Description: This register returns bits [63:32] of the PIPE core's 2062 * gbtDebug bus 2063 * Fields: 2064 * The value specified here is the Power On Reset value as given 2065 * in spec. 2066 * This 16-bit debug bus reports operating conditions for the 2067 * PIPE. The pipeDebug[0:15] bus is provided for each lane. lane0 2068 * is bits[15:0], lane1 is bits[31:16], lane2 is bits[47:32], 2069 * lane3 is bits[63:48], lane4 is bits[79:64], lane5 is 2070 * bits[95:80], lane6 is bits[111:96], lane7 is bits[127:112]. 2071 * Refer to section 4.2.1.5 Single-Lane PIPE Debug Signals in 2072 * the following document : 2073 * /home/cadtools/cores/lsi/cw000411/cw00041131/prod/docs/manuals/ 2074 * cw000411TechMan.pdf 2075 * lane2 is bits[47:32], which is pipeDebug1[15:0] lane3 is 2076 * bits[63:48], which is pipeDebug1[31:16] 2077 * 2078 * ------------------------------------------------------------------------- 2079 * pipeDebug Signal or Condition Description Reset 2080 * ------------------------------------------------------------------------- 2081 * [15] efifoOverflow or EFIFO overflow or 0 efifoUnderflow EFIFO 2082 * underflow occurred 2083 * [14] skipInsert or EFIFO skip inserted or 0 skipDelete 2084 * deleted 0 2085 * [13] fifordData[12] == Skip flag read by EFIFO. 0 skipFlag 2086 * Used with skipcharflag to verify EFIFO depth. 2087 * [12] skipcharflag Skip flag written by EFIFO 0 2088 * [11:8] efifoDepth[3:0] Indicates EFIFO depth 0000 2089 * [7] efifoEios Detected EFIFO 0 electrical-idle ordered-set 2090 * output 2091 * [6] efifoBytesync EFIFO output byte 0 synchronization 2092 * [5] rxinvalid 8b/10b error or 0 or code violation 2093 * [4] rxinitdone Receiver bit-init done. 0 Synchronous with 2094 * pipeClk. 2095 * [3] txinitdone Transmitter-bit init done. 0 Synchronous with 2096 * pipeClk. 2097 * [2] filteredrxlos Filtered loss of signal used 1 to generate 2098 * p2lRxelectidle. Synchronous with pipeClk. 2099 * [1] rxdetectInt Receiver detected 0 2100 * [0] pipeMasterDoneOut Receiver detection valid 0 2101 * 2102 */ 2103 typedef union { 2104 uint32_t value; 2105 struct { 2106 #if defined(_BIG_ENDIAN) 2107 uint32_t data:32; 2108 #else 2109 uint32_t data:32; 2110 #endif 2111 } bits; 2112 } pipe_debug1_t; 2113 2114 2115 /* 2116 * Register: PipeDebug2 2117 * PIPE Debug, status register 2118 * The value specified here is the Power On Reset value as given 2119 * in spec. 2120 * This 16-bit debug bus reports operating conditions for the 2121 * PIPE. The pipeDebug[0:15] bus is provided for each lane. lane0 2122 * is bits[15:0], lane1 is bits[31:16], lane2 is bits[47:32], 2123 * lane3 is bits[63:48], lane4 is bits[79:64], lane5 is 2124 * bits[95:80], lane6 is bits[111:96], lane7 is bits[127:112]. 2125 * Refer to section 4.2.1.5 Single-Lane PIPE Debug Signals in 2126 * the following document : 2127 * /home/cadtools/cores/lsi/cw000411/cw00041131/prod/docs/manuals/ 2128 * cw000411TechMan.pdf 2129 * lane4 is bits[79:64], which is pipeDebug2[15:0] lane5 is 2130 * bits[95:80], which is pipeDebug2[31:16] 2131 * 2132 * ------------------------------------------------------------------------- 2133 * pipeDebug Signal or Condition Description Reset 2134 * ------------------------------------------------------------------------- 2135 * [15] efifoOverflow or EFIFO overflow or 0 efifoUnderflow EFIFO 2136 * underflow occurred 2137 * [14] skipInsert or EFIFO skip inserted or 0 skipDelete 2138 * deleted 0 2139 * [13] fifordData[12] == Skip flag read by EFIFO. 0 skipFlag 2140 * Used with skipcharflag to verify EFIFO depth. 2141 * [12] skipcharflag Skip flag written by EFIFO 0 2142 * [11:8] efifoDepth[3:0] Indicates EFIFO depth 0000 2143 * [7] efifoEios Detected EFIFO 0 electrical-idle ordered-set 2144 * output 2145 * [6] efifoBytesync EFIFO output byte 0 synchronization 2146 * [5] rxinvalid 8b/10b error or 0 or code violation 2147 * [4] rxinitdone Receiver bit-init done. 0 Synchronous with 2148 * pipeClk. 2149 * [3] txinitdone Transmitter-bit init done. 0 Synchronous with 2150 * pipeClk. 2151 * [2] filteredrxlos Filtered loss of signal used 1 to generate 2152 * p2lRxelectidle. Synchronous with pipeClk. 2153 * [1] rxdetectInt Receiver detected 0 2154 * [0] pipeMasterDoneOut Receiver detection valid 0 2155 * 2156 */ 2157 typedef union { 2158 uint32_t value; 2159 struct { 2160 #if defined(_BIG_ENDIAN) 2161 uint32_t data:32; 2162 #else 2163 uint32_t data:32; 2164 #endif 2165 } bits; 2166 } pipe_debug2_t; 2167 2168 2169 /* 2170 * Register: PipeDebug3 2171 * PIPE Debug, status register 2172 * Description: This register returns bits [127:96] of the PIPE 2173 * core's gbtDebug bus 2174 * Fields: 2175 * The value specified here is the Power On Reset value as given 2176 * in spec. 2177 * This 16-bit debug bus reports operating conditions for the 2178 * PIPE. The pipeDebug[0:15] bus is provided for each lane. lane0 2179 * is bits[15:0], lane1 is bits[31:16], lane2 is bits[47:32], 2180 * lane3 is bits[63:48], lane4 is bits[79:64], lane5 is 2181 * bits[95:80], lane6 is bits[111:96], lane7 is bits[127:112]. 2182 * Refer to section 4.2.1.5 Single-Lane PIPE Debug Signals in 2183 * the following document : 2184 * /home/cadtools/cores/lsi/cw000411/cw00041131/prod/docs/manuals/ 2185 * cw000411TechMan.pdf 2186 * lane6 is bits[111:96], which is pipeDebug3[15:0] lane7 is 2187 * bits[127:112], which is pipeDebug3[31:16] 2188 * 2189 * ------------------------------------------------------------------------- 2190 * pipeDebug Signal or Condition Description Reset 2191 * ------------------------------------------------------------------------- 2192 * [15] efifoOverflow or EFIFO overflow or 0 efifoUnderflow EFIFO 2193 * underflow occurred 2194 * [14] skipInsert or EFIFO skip inserted or 0 skipDelete 2195 * deleted 0 2196 * [13] fifordData[12] == Skip flag read by EFIFO. 0 skipFlag 2197 * Used with skipcharflag to verify EFIFO depth. 2198 * [12] skipcharflag Skip flag written by EFIFO 0 2199 * [11:8] efifoDepth[3:0] Indicates EFIFO depth 0000 2200 * [7] efifoEios Detected EFIFO 0 electrical-idle ordered-set 2201 * output 2202 * [6] efifoBytesync EFIFO output byte 0 synchronization 2203 * [5] rxinvalid 8b/10b error or 0 or code violation 2204 * [4] rxinitdone Receiver bit-init done. 0 Synchronous with 2205 * pipeClk. 2206 * [3] txinitdone Transmitter-bit init done. 0 Synchronous with 2207 * pipeClk. 2208 * [2] filteredrxlos Filtered loss of signal used 1 to generate 2209 * p2lRxelectidle. Synchronous with pipeClk. 2210 * [1] rxdetectInt Receiver detected 0 2211 * [0] pipeMasterDoneOut Receiver detection valid 0 2212 * 2213 */ 2214 typedef union { 2215 uint32_t value; 2216 struct { 2217 #if defined(_BIG_ENDIAN) 2218 uint32_t data:32; 2219 #else 2220 uint32_t data:32; 2221 #endif 2222 } bits; 2223 } pipe_debug3_t; 2224 2225 2226 /* 2227 * Register: PcieEnhCapHdr 2228 * PCIE Enhanced Capability Header 2229 * Description: PCIE Enhanced Capability Header 2230 * Fields: 2231 * Next Capability Offset (END, no more) 2232 * Capability Version 2233 * PCI Express Enhanced Capability ID (0x1 = Advanced Error 2234 * Reporting) 2235 */ 2236 typedef union { 2237 uint32_t value; 2238 struct { 2239 #if defined(_BIG_ENDIAN) 2240 uint32_t nxt_cap_offset:12; 2241 uint32_t cap_ver:4; 2242 uint32_t pcie_enh_cap_id:16; 2243 #else 2244 uint32_t pcie_enh_cap_id:16; 2245 uint32_t cap_ver:4; 2246 uint32_t nxt_cap_offset:12; 2247 #endif 2248 } bits; 2249 } pcie_enh_cap_hdr_t; 2250 2251 2252 /* 2253 * Register: UncErrStat 2254 * Uncorrectable Error Status 2255 * Description: Uncorrectable Error Status 2256 * Fields: 2257 * Unsupported Request Error 2258 * ECRC Error 2259 * Malformed TLP 2260 * Reciever Overflow 2261 * Unexpected Completion 2262 * Completion Abort 2263 * Completion Timeout 2264 * Flow Control Protocol Error 2265 * Poisoned TLP 2266 * Introduced in PCIe 1.1 specification. 2267 * Data Link Protocol Error 2268 */ 2269 typedef union { 2270 uint32_t value; 2271 struct { 2272 #if defined(_BIG_ENDIAN) 2273 uint32_t rsrvd:11; 2274 uint32_t unsup_req_err:1; 2275 uint32_t ecrc_err:1; 2276 uint32_t bad_tlp:1; 2277 uint32_t rcv_ovfl:1; 2278 uint32_t unexp_cpl:1; 2279 uint32_t cpl_abrt:1; 2280 uint32_t cpl_tmout:1; 2281 uint32_t fc_err:1; 2282 uint32_t psn_tlp:1; 2283 uint32_t rsrvd1:6; 2284 uint32_t surprise_down_err:1; 2285 uint32_t dlp_err:1; 2286 uint32_t rsrvd2:4; 2287 #else 2288 uint32_t rsrvd2:4; 2289 uint32_t dlp_err:1; 2290 uint32_t surprise_down_err:1; 2291 uint32_t rsrvd1:6; 2292 uint32_t psn_tlp:1; 2293 uint32_t fc_err:1; 2294 uint32_t cpl_tmout:1; 2295 uint32_t cpl_abrt:1; 2296 uint32_t unexp_cpl:1; 2297 uint32_t rcv_ovfl:1; 2298 uint32_t bad_tlp:1; 2299 uint32_t ecrc_err:1; 2300 uint32_t unsup_req_err:1; 2301 uint32_t rsrvd:11; 2302 #endif 2303 } bits; 2304 } unc_err_stat_t; 2305 2306 2307 /* 2308 * Register: UncErrMask 2309 * Uncorrectable Error Mask 2310 * Description: Uncorrectable Error Mask 2311 * Fields: 2312 * Unsupported Request Error 2313 * ECRC Error 2314 * Malformed TLP 2315 * Reciever Overflow 2316 * Unexpected Completion 2317 * Completion Abort 2318 * Completion Timeout 2319 * Flow Control Protocol Error 2320 * Poisoned TLP 2321 * Introduced in PCIe 1.1 2322 * Data Link Protocol Error 2323 */ 2324 typedef union { 2325 uint32_t value; 2326 struct { 2327 #if defined(_BIG_ENDIAN) 2328 uint32_t rsrvd:11; 2329 uint32_t unsup_req_err:1; 2330 uint32_t ecrc_err:1; 2331 uint32_t bad_tlp:1; 2332 uint32_t rcv_ovfl:1; 2333 uint32_t unexp_cpl:1; 2334 uint32_t cpl_abrt:1; 2335 uint32_t cpl_tmout:1; 2336 uint32_t fc_err:1; 2337 uint32_t psn_tlp:1; 2338 uint32_t rsrvd1:6; 2339 uint32_t surprise_down_err:1; 2340 uint32_t dlp_err:1; 2341 uint32_t rsrvd2:4; 2342 #else 2343 uint32_t rsrvd2:4; 2344 uint32_t dlp_err:1; 2345 uint32_t surprise_down_err:1; 2346 uint32_t rsrvd1:6; 2347 uint32_t psn_tlp:1; 2348 uint32_t fc_err:1; 2349 uint32_t cpl_tmout:1; 2350 uint32_t cpl_abrt:1; 2351 uint32_t unexp_cpl:1; 2352 uint32_t rcv_ovfl:1; 2353 uint32_t bad_tlp:1; 2354 uint32_t ecrc_err:1; 2355 uint32_t unsup_req_err:1; 2356 uint32_t rsrvd:11; 2357 #endif 2358 } bits; 2359 } unc_err_mask_t; 2360 2361 2362 /* 2363 * Register: UncErrSvrty 2364 * Uncorrectable Error Severity 2365 * Description: Uncorrectable Error Severity 2366 * Fields: 2367 * Unsupported Request Error 2368 * ECRC Error 2369 * Malformed TLP 2370 * Reciever Overflow 2371 * Unexpected Completion 2372 * Completion Abort 2373 * Completion Timeout 2374 * Flow Control Protocol Error 2375 * Poisoned TLP 2376 * Introduced in PCIe 1.1 specification. Not supported; use PCIe 2377 * default. 2378 * Data Link Protocol Error 2379 */ 2380 typedef union { 2381 uint32_t value; 2382 struct { 2383 #if defined(_BIG_ENDIAN) 2384 uint32_t rsrvd:11; 2385 uint32_t unsup_req_err:1; 2386 uint32_t ecrc_err:1; 2387 uint32_t bad_tlp:1; 2388 uint32_t rcv_ovfl:1; 2389 uint32_t unexp_cpl:1; 2390 uint32_t cpl_abrt:1; 2391 uint32_t cpl_tmout:1; 2392 uint32_t fc_err:1; 2393 uint32_t psn_tlp:1; 2394 uint32_t rsrvd1:6; 2395 uint32_t surprise_down_err:1; 2396 uint32_t dlp_err:1; 2397 uint32_t rsrvd2:4; 2398 #else 2399 uint32_t rsrvd2:4; 2400 uint32_t dlp_err:1; 2401 uint32_t surprise_down_err:1; 2402 uint32_t rsrvd1:6; 2403 uint32_t psn_tlp:1; 2404 uint32_t fc_err:1; 2405 uint32_t cpl_tmout:1; 2406 uint32_t cpl_abrt:1; 2407 uint32_t unexp_cpl:1; 2408 uint32_t rcv_ovfl:1; 2409 uint32_t bad_tlp:1; 2410 uint32_t ecrc_err:1; 2411 uint32_t unsup_req_err:1; 2412 uint32_t rsrvd:11; 2413 #endif 2414 } bits; 2415 } unc_err_svrty_t; 2416 2417 2418 /* 2419 * Register: CorrErrStat 2420 * Correctable Error Status 2421 * Description: Correctable Error Status 2422 * Fields: 2423 * Advisory Non-Fatal Error Introduced in PCIe 1.1 specification. 2424 * Reply Timer Timeout 2425 * Replay Number Rollover 2426 * Bad DLLP 2427 * Bad TLP 2428 * Receive Error 2429 */ 2430 typedef union { 2431 uint32_t value; 2432 struct { 2433 #if defined(_BIG_ENDIAN) 2434 uint32_t rsrvd:18; 2435 uint32_t adv_nf_err:1; 2436 uint32_t rply_tmr_tmout:1; 2437 uint32_t rsrvd1:3; 2438 uint32_t rply_rlovr:1; 2439 uint32_t bad_dllp:1; 2440 uint32_t bad_tlp:1; 2441 uint32_t rsrvd2:5; 2442 uint32_t rcv_err:1; 2443 #else 2444 uint32_t rcv_err:1; 2445 uint32_t rsrvd2:5; 2446 uint32_t bad_tlp:1; 2447 uint32_t bad_dllp:1; 2448 uint32_t rply_rlovr:1; 2449 uint32_t rsrvd1:3; 2450 uint32_t rply_tmr_tmout:1; 2451 uint32_t adv_nf_err:1; 2452 uint32_t rsrvd:18; 2453 #endif 2454 } bits; 2455 } corr_err_stat_t; 2456 2457 2458 /* 2459 * Register: CorrErrMask 2460 * Correctable Error Mask 2461 * Description: Correctable Error Mask 2462 * Fields: 2463 * Advisory Non Fatal Error Mask 2464 * Reply Timer Timeout 2465 * Replay Number Rollover 2466 * Bad DLLP 2467 * Bad TLP 2468 * Receive Error 2469 */ 2470 typedef union { 2471 uint32_t value; 2472 struct { 2473 #if defined(_BIG_ENDIAN) 2474 uint32_t rsrvd:18; 2475 uint32_t adv_nf_err_mask:1; 2476 uint32_t rply_tmr_tmout:1; 2477 uint32_t rsrvd1:3; 2478 uint32_t rply_rlovr:1; 2479 uint32_t bad_dllp:1; 2480 uint32_t bad_tlp:1; 2481 uint32_t rsrvd2:5; 2482 uint32_t rcv_err:1; 2483 #else 2484 uint32_t rcv_err:1; 2485 uint32_t rsrvd2:5; 2486 uint32_t bad_tlp:1; 2487 uint32_t bad_dllp:1; 2488 uint32_t rply_rlovr:1; 2489 uint32_t rsrvd1:3; 2490 uint32_t rply_tmr_tmout:1; 2491 uint32_t adv_nf_err_mask:1; 2492 uint32_t rsrvd:18; 2493 #endif 2494 } bits; 2495 } corr_err_mask_t; 2496 2497 2498 /* 2499 * Register: AdvCapCtrl 2500 * Advanced Capability and Control 2501 * Description: Advanced Capability and Control 2502 * Fields: 2503 * ECRC Check Enable 2504 * ECRC Check Capable 2505 * ECRC Generation Enable 2506 * ECRC Generation Capability 2507 * First Error Pointer 2508 */ 2509 typedef union { 2510 uint32_t value; 2511 struct { 2512 #if defined(_BIG_ENDIAN) 2513 uint32_t rsrvd:23; 2514 uint32_t ecrc_chk_en:1; 2515 uint32_t ecrc_chk_cap:1; 2516 uint32_t ecrc_gen_en:1; 2517 uint32_t ecrc_gen_cap:1; 2518 uint32_t st_err_ptr:5; 2519 #else 2520 uint32_t st_err_ptr:5; 2521 uint32_t ecrc_gen_cap:1; 2522 uint32_t ecrc_gen_en:1; 2523 uint32_t ecrc_chk_cap:1; 2524 uint32_t ecrc_chk_en:1; 2525 uint32_t rsrvd:23; 2526 #endif 2527 } bits; 2528 } adv_cap_ctrl_t; 2529 2530 2531 /* 2532 * Register: HdrLog0 2533 * Header Log0 2534 * Description: Header Log0 2535 * Fields: 2536 * First DW of TLP header with error 2537 */ 2538 typedef union { 2539 uint32_t value; 2540 struct { 2541 #if defined(_BIG_ENDIAN) 2542 uint32_t data:32; 2543 #else 2544 uint32_t data:32; 2545 #endif 2546 } bits; 2547 } hdr_log0_t; 2548 2549 2550 /* 2551 * Register: HdrLog1 2552 * Header Log1 2553 * Description: Header Log1 2554 * Fields: 2555 * Second DW of TLP header with error 2556 */ 2557 typedef union { 2558 uint32_t value; 2559 struct { 2560 #if defined(_BIG_ENDIAN) 2561 uint32_t data:32; 2562 #else 2563 uint32_t data:32; 2564 #endif 2565 } bits; 2566 } hdr_log1_t; 2567 2568 2569 /* 2570 * Register: HdrLog2 2571 * Header Log2 2572 * Description: Header Log2 2573 * Fields: 2574 * Third DW of TLP header with error 2575 */ 2576 typedef union { 2577 uint32_t value; 2578 struct { 2579 #if defined(_BIG_ENDIAN) 2580 uint32_t data:32; 2581 #else 2582 uint32_t data:32; 2583 #endif 2584 } bits; 2585 } hdr_log2_t; 2586 2587 2588 /* 2589 * Register: HdrLog3 2590 * Header Log3 2591 * Description: Header Log3 2592 * Fields: 2593 * Fourth DW of TLP header with error 2594 */ 2595 typedef union { 2596 uint32_t value; 2597 struct { 2598 #if defined(_BIG_ENDIAN) 2599 uint32_t data:32; 2600 #else 2601 uint32_t data:32; 2602 #endif 2603 } bits; 2604 } hdr_log3_t; 2605 2606 2607 /* 2608 * Register: PipeRxTxControl 2609 * Pipe Rx/Tx Control 2610 * 00 : ewrap : Enable wrapback test mode 01 : padLoopback : 2611 * Enable Pad Serial Loopback test mode 10 : revLoopback : Enable 2612 * Reverse Loopback test mode 11 : efifoLoopback : Enable PCI 2613 * Express Slave loop back 2614 * 100 : Clock generator test x10 : Vil/Vih test x01 : Vih/Vil 2615 * test x11 : No-error test. A full test of the transceiver 111 : 2616 * Forced-error test. A full test of the transceiver with forced 2617 * errors 2618 * 1 : selects 20-bit mode 0 : selects 10-bit mode 2619 * 1 : selects Tx 20-bit fifo mode 2620 * 00 : 52 us (470 cycles) 01 : 53 us (720 cycles) 10 : 54 us 2621 * (970 cycles) 11 : 55 us (1220 cycles) 2622 * 1 : selects 20-bit mode 0 : selects 10-bit mode 2623 * 1 : Enable receiver reference clocks 2624 */ 2625 typedef union { 2626 uint32_t value; 2627 struct { 2628 #if defined(_BIG_ENDIAN) 2629 uint32_t rsrvd:1; 2630 uint32_t loopback:1; 2631 uint32_t loopback_mode_sel:2; 2632 uint32_t rsrvd1:1; 2633 uint32_t en_bist:3; 2634 uint32_t tdws20:1; 2635 uint32_t tdenfifo:1; 2636 uint32_t rxpreswin:2; 2637 uint32_t rdws20:1; 2638 uint32_t enstretch:1; 2639 uint32_t rsrvd2:18; 2640 #else 2641 uint32_t rsrvd2:18; 2642 uint32_t enstretch:1; 2643 uint32_t rdws20:1; 2644 uint32_t rxpreswin:2; 2645 uint32_t tdenfifo:1; 2646 uint32_t tdws20:1; 2647 uint32_t en_bist:3; 2648 uint32_t rsrvd1:1; 2649 uint32_t loopback_mode_sel:2; 2650 uint32_t loopback:1; 2651 uint32_t rsrvd:1; 2652 #endif 2653 } bits; 2654 } pipe_rx_tx_control_t; 2655 2656 2657 /* 2658 * Register: PipeRxTxStatus 2659 * Pipe Rx/Tx Status 2660 */ 2661 typedef union { 2662 uint32_t value; 2663 struct { 2664 #if defined(_BIG_ENDIAN) 2665 uint32_t rsrvd:32; 2666 #else 2667 uint32_t rsrvd:32; 2668 #endif 2669 } bits; 2670 } pipe_rx_tx_status_t; 2671 2672 2673 /* 2674 * Register: PipeRxTxPwrCntl 2675 * Pipe Rx/Tx Power Control 2676 * 1 : power down termination trimming circuit 0 : normal 2677 * operation 2678 * Power down PECL Clock buffer 1 : when a bit is 1, power down 2679 * associated clock buffer cell 0 : normal operation 2680 * Power down Transmit PLL 1 : when a bit is 1, power down 2681 * associated Tx PLL circuit 0 : normal operation 2682 * Power down Differential O/P Clock buffer 1 : when a bit is 1, 2683 * power down associated differntial clock buffer that drives 2684 * gbtClkoutN/p 0 : normal operation 2685 * Power down Transmitter Analog section 1 : when a bit is 1, 2686 * power down analog section of the associated Transmitter and 2687 * the Tx buffer 0 : normal operation 2688 * Power down RxLOS 1 : when a bit is 1, it powers down the Rx 2689 * LOS circuitry for the associated serdes lanes 0 : normal 2690 * operation 2691 * Power down Receiver Analog section 1 : when a bit is 1, power 2692 * down analog section of the associated Receiver and the Tx 2693 * buffer 0 : normal operation 2694 */ 2695 typedef union { 2696 uint32_t value; 2697 struct { 2698 #if defined(_BIG_ENDIAN) 2699 uint32_t rsrvd:1; 2700 uint32_t pdrtrim:1; 2701 uint32_t pdownpecl:2; 2702 uint32_t pdownpll:2; 2703 uint32_t pdclkout:2; 2704 uint32_t pdownt:8; 2705 uint32_t pdrxlos:8; 2706 uint32_t pdownr:8; 2707 #else 2708 uint32_t pdownr:8; 2709 uint32_t pdrxlos:8; 2710 uint32_t pdownt:8; 2711 uint32_t pdclkout:2; 2712 uint32_t pdownpll:2; 2713 uint32_t pdownpecl:2; 2714 uint32_t pdrtrim:1; 2715 uint32_t rsrvd:1; 2716 #endif 2717 } bits; 2718 } pipe_rx_tx_pwr_cntl_t; 2719 2720 2721 /* 2722 * Register: PipeRxTxParam 2723 * Pipe Rx/Tx Parameter 2724 * Tx Driver Emphasis 2725 * Serial output Slew Rate Control 2726 * Tx Voltage Mux control 2727 * Tx Voltage Pulse control 2728 * Output Swing setting 2729 * Transmitter Clock generator pole adjust 2730 * Transmitter Clock generator zero adjust 2731 * Receiver Clock generator pole adjust 2732 * Receiver Clock generator zero adjust 2733 * Bias Control for factory testing and debugging 2734 * Receiver LOS Threshold adjustment. This value is determined by 2735 * LSI. 2736 * Receiver Input Equalizer control 2737 */ 2738 typedef union { 2739 uint32_t value; 2740 struct { 2741 #if defined(_BIG_ENDIAN) 2742 uint32_t rsrvd:1; 2743 uint32_t emph:3; 2744 uint32_t rsrvd1:1; 2745 uint32_t risefall:3; 2746 uint32_t vmuxlo:2; 2747 uint32_t vpulselo:2; 2748 uint32_t vtxlo:4; 2749 uint32_t tp:2; 2750 uint32_t tz:2; 2751 uint32_t rp:2; 2752 uint32_t rz:2; 2753 uint32_t biascntl:1; 2754 uint32_t losadj:3; 2755 uint32_t rxeq:4; 2756 #else 2757 uint32_t rxeq:4; 2758 uint32_t losadj:3; 2759 uint32_t biascntl:1; 2760 uint32_t rz:2; 2761 uint32_t rp:2; 2762 uint32_t tz:2; 2763 uint32_t tp:2; 2764 uint32_t vtxlo:4; 2765 uint32_t vpulselo:2; 2766 uint32_t vmuxlo:2; 2767 uint32_t risefall:3; 2768 uint32_t rsrvd1:1; 2769 uint32_t emph:3; 2770 uint32_t rsrvd:1; 2771 #endif 2772 } bits; 2773 } pipe_rx_tx_param_t; 2774 2775 2776 /* 2777 * Register: PipeRxTxClock 2778 * Pipe Rx/Tx Clock 2779 * Reverse Loopback clock select 00 : gbtRbcAO 01 : gbtRbcBO 10 : 2780 * gbtRbcCO 11 : gbtRbcDO 2781 * Select Master Clock 100 : All lanes 000 : Lane A 001 : Lane B 2782 * 010 : Lane C 011 : Lane D 2783 * Transmit PLL Divider control 2784 * Transmit Data rate control 2785 * Receiver PLL Frequency control 2786 * Bit rate control to enable bit doubling feature 2787 * Reset Transmitter lane 2788 * Reset Receiver lane 2789 */ 2790 typedef union { 2791 uint32_t value; 2792 struct { 2793 #if defined(_BIG_ENDIAN) 2794 uint32_t rsrvd:2; 2795 uint32_t revlbrefsel:2; 2796 uint32_t rsrvd1:1; 2797 uint32_t tdmaster:3; 2798 uint32_t fbdivt:3; 2799 uint32_t half_ratet:1; 2800 uint32_t fbdivr:3; 2801 uint32_t half_rater:1; 2802 uint32_t txreset:8; 2803 uint32_t rxreset:8; 2804 #else 2805 uint32_t rxreset:8; 2806 uint32_t txreset:8; 2807 uint32_t half_rater:1; 2808 uint32_t fbdivr:3; 2809 uint32_t half_ratet:1; 2810 uint32_t fbdivt:3; 2811 uint32_t tdmaster:3; 2812 uint32_t rsrvd1:1; 2813 uint32_t revlbrefsel:2; 2814 uint32_t rsrvd:2; 2815 #endif 2816 } bits; 2817 } pipe_rx_tx_clock_t; 2818 2819 2820 /* 2821 * Register: PipeGlueCntl0 2822 * Pipe Glue Control 0 2823 * Lock to Bitstream Initialization Time 2824 * RXLOS Test bit 2825 * Electrical Idle Ordered set enable 2826 * Enable RxLOS 2827 * Enable Fast resync 2828 * RxLOS Sample Interval 2829 * RxLOS threshold 2830 */ 2831 typedef union { 2832 uint32_t value; 2833 struct { 2834 #if defined(_BIG_ENDIAN) 2835 uint32_t bitlocktime:16; 2836 uint32_t rxlos_test:1; 2837 uint32_t eiosenable:1; 2838 uint32_t rxlosenable:1; 2839 uint32_t fastresync:1; 2840 uint32_t samplerate:4; 2841 uint32_t thresholdcount:8; 2842 #else 2843 uint32_t thresholdcount:8; 2844 uint32_t samplerate:4; 2845 uint32_t fastresync:1; 2846 uint32_t rxlosenable:1; 2847 uint32_t eiosenable:1; 2848 uint32_t rxlos_test:1; 2849 uint32_t bitlocktime:16; 2850 #endif 2851 } bits; 2852 } pipe_glue_cntl0_t; 2853 2854 2855 /* 2856 * Register: PipeGlueCntl1 2857 * Pipe Glue Control 1 2858 * Receiver Trim Resistance Configuration 2859 * Transmitter Trim Resistance Configuration 2860 * Auto Trim Enable 2861 * 50 Ohm Termination Enable 2862 * Customer select for reference clock frequency 2863 * EFIFO Same clock select 2864 * EFIFO start depth 2865 * Lock to refclk initialization time 2866 */ 2867 typedef union { 2868 uint32_t value; 2869 struct { 2870 #if defined(_BIG_ENDIAN) 2871 uint32_t termrcfg:2; 2872 uint32_t termtcfg:2; 2873 uint32_t rtrimen:1; 2874 uint32_t ref50:1; 2875 uint32_t freq_sel:1; 2876 uint32_t same_sel:1; 2877 uint32_t rsrvd:1; 2878 uint32_t start_efifo:3; 2879 uint32_t rsrvd1:2; 2880 uint32_t inittime:18; 2881 #else 2882 uint32_t inittime:18; 2883 uint32_t rsrvd1:2; 2884 uint32_t start_efifo:3; 2885 uint32_t rsrvd:1; 2886 uint32_t same_sel:1; 2887 uint32_t freq_sel:1; 2888 uint32_t ref50:1; 2889 uint32_t rtrimen:1; 2890 uint32_t termtcfg:2; 2891 uint32_t termrcfg:2; 2892 #endif 2893 } bits; 2894 } pipe_glue_cntl1_t; 2895 2896 2897 /* 2898 * Register: HcrReg 2899 * HCR Registers 2900 * Description: Hydra Specific Configuration Registers for use by 2901 * software. These registers are loaded with the SPROM contents at 2902 * power on. A maximum of 128 DWords has been assigned for s/w to 2903 * use. This space generally stores the following informations : MAC 2904 * Address Number of MAC addresses MAC Phy Type Other data fields are 2905 * upto the software to use. 2906 * 2907 * Fields: 2908 * Hydra specific configuration controlled by software 2909 */ 2910 typedef union { 2911 uint32_t value; 2912 struct { 2913 #if defined(_BIG_ENDIAN) 2914 uint32_t hcr_val:32; 2915 #else 2916 uint32_t hcr_val:32; 2917 #endif 2918 } bits; 2919 } hcr_reg_t; 2920 2921 2922 /* 2923 * Register: BlockReset 2924 * Block Reset 2925 * Description: Soft resets to modules. Blade domain modules are 2926 * reset by setting the corresponding block reset to 1. Shared domain 2927 * resets are sent to SPI for processing and corresponding action by 2928 * SPI. Shared domains are reset only if all the blades have 2929 * requested a reset for that block. Below is an example scenario : 2930 * s/w initiates the reset by writing '1' to the dpmRst bit dpmRst 2931 * bit remains '1' until dpmRstStat is detected to be 1. Once 2932 * dpmRstStat is detected to be 1, even if s/w writes 1 to this bit 2933 * again no new reset will be initiated to the shared domain, ie, 2934 * DPM. dpmRstStat is driven by external i/f (shared domain status 2935 * provided by SPI) dpmRstStat bit will show '1' as long as the input 2936 * stays at 1 or until s/w reads the status and is cleared only after 2937 * s/w reads it and if dpmRstStat is 0 by then. 2938 * If Host wants to reset entire Hydra it should do so through the 2939 * mailbox. In this case, the message interprettation is upto the 2940 * software. Writing a '1' to any of these bits generates a single 2941 * pulse to the SP module which then controls the reset of the 2942 * respective block. 2943 * 2944 * Fields: 2945 * 1 : indicates that an active reset has been applied to the SP 2946 * based on the request from all of the blades. Clears on Read 2947 * provided the reset to SP has been deasserted by then by SPI. 2948 * Setting to 1 allows this blade to request Service Processor 2949 * (Shared) reset. However, SP reset can only occur if all blades 2950 * agree. The success of reset request is indicated by spRstStat 2951 * = 1 which is wired-AND of request from all the blades. Current 2952 * request can be removed by writing a '0' to this bit. This bit 2953 * clears automatically on detecting spRstStat = 1. 2954 * Enable blade to service processor (Shared) reset voter 2955 * registration = 1, disabled = 0 2956 * Issue power reset to the EP Core Clears to 0, writing 0 has no 2957 * effect. 2958 * Issue core reset to the EP Core Clears to 0, writing 0 has no 2959 * effect. 2960 * Issue system reset (sysPor) to the PIPE Core This issues reset 2961 * to the EP core, PCIe domains of Tdc, Rdc, and CIP. This shuts 2962 * down the PCIe clock until Pipe core comes out of reset. The 2963 * status of the Pipe core can be read by reading out the 2964 * cipLinkStat register's pipe core status and pcie reset status 2965 * bits. Clears to 0, writing 0 has no effect. 2966 * 1 : indicates that an active reset has been applied to the 2967 * NMAC based on the request from all of the blades. Clears on 2968 * Read provided the reset to NMAC has been deasserted by then by 2969 * SPI. 2970 * 1 : indicates that an active reset has been applied to the TDP 2971 * based on the request from all of the blades. Clears on Read 2972 * provided the reset to TDP has been deasserted by then by SPI. 2973 * 1 : indicates that an active reset has been applied to the DPM 2974 * based on the request from all of the blades. Clears on Read 2975 * provided the reset to DPM has been deasserted by then by SPI. 2976 * This bit is effective only if sharedVoterEn (bit 24 of this 2977 * reg) has been enabled. Writing '1' sends a request to SP to 2978 * reset NMAC if sharedVoterEn=1. Intended for backdoor access. 2979 * The success of reset request is indicated by nmacRstStat = 1 2980 * which is wired-AND of request from all the blades. This also 2981 * means that the reset request is successful only if all the 2982 * blades requested for reset of this block. Current request can 2983 * be removed by writing a '0' to this bit. This bit clears 2984 * automatically on detecting nmacRstStat = 1. 2985 * This bit is effective only if sharedVoterEn (bit 24 of this 2986 * reg) has been enabled. Writing '1' sends a request to SP to 2987 * reset TDP if sharedVoterEn=1. Intended for backdoor access. 2988 * Intended for backdoor access. The success of reset request is 2989 * indicated by tdpRstStat = 1 which is wired-AND of request from 2990 * all the blades. This also means that the reset request is 2991 * successful only if all the blades requested for reset of this 2992 * block. Current request can be removed by writing a '0' to this 2993 * bit. This bit clears automatically on detecting tdpRstStat = 2994 * 1. 2995 * This bit is effective only if sharedVoterEn (bit 24 of this 2996 * reg) has been enabled. Writing '1' sends a request to SP to 2997 * reset DPM if sharedVoterEn=1. Intended for backdoor access. 2998 * Intended for backdoor access. The success of reset request is 2999 * indicated by dpmRstStat = 1 which is wired-AND of request from 3000 * all the blades. This also means that the reset request is 3001 * successful only if all the blades requested for reset of this 3002 * block. Current request can be removed by writing a '0' to this 3003 * bit. This bit clears automatically on detecting dpmRstStat = 3004 * 1. 3005 * Setting to 1 generates tdcCoreReset and tdcPcieReset to the 3006 * TDC block. The reset will stay asserted for atleast 4 clock 3007 * cycles. Clears to 0, writing 0 has no effect. 3008 * Setting to 1 generates rdcCoreReset and rdcPcieReset to the 3009 * RDC block. The reset will stay asserted for atleast 4 clock 3010 * cycles. Clears to 0, writing 0 has no effect. 3011 * Setting to 1 generates reset to the PFC block. The reset will 3012 * stay asserted for atleast 4 clock cycles. Clears to 0, writing 3013 * 0 has no effect. 3014 * Setting to 1 generates reset to the VMAC block. The reset will 3015 * stay asserted for atleast 4 clock cycles. Clears to 0, writing 3016 * 0 has no effect. 3017 */ 3018 typedef union { 3019 uint32_t value; 3020 struct { 3021 #if defined(_BIG_ENDIAN) 3022 uint32_t rsrvd:13; 3023 uint32_t sp_rst_stat:1; 3024 uint32_t sp_rst:1; 3025 uint32_t shared_voter_en:1; 3026 uint32_t epcore_pwr_rst:1; 3027 uint32_t epcore_core_rst:1; 3028 uint32_t pipe_sys_rst:1; 3029 uint32_t nmac_rst_stat:1; 3030 uint32_t tdp_rst_stat:1; 3031 uint32_t dpm_rst_stat:1; 3032 uint32_t rsrvd1:1; 3033 uint32_t nmac_rst:1; 3034 uint32_t tdp_rst:1; 3035 uint32_t dpm_rst:1; 3036 uint32_t rsrvd2:1; 3037 uint32_t tdc_rst:1; 3038 uint32_t rdc_rst:1; 3039 uint32_t pfc_rst:1; 3040 uint32_t vmac_rst:1; 3041 uint32_t rsrvd3:1; 3042 #else 3043 uint32_t rsrvd3:1; 3044 uint32_t vmac_rst:1; 3045 uint32_t pfc_rst:1; 3046 uint32_t rdc_rst:1; 3047 uint32_t tdc_rst:1; 3048 uint32_t rsrvd2:1; 3049 uint32_t dpm_rst:1; 3050 uint32_t tdp_rst:1; 3051 uint32_t nmac_rst:1; 3052 uint32_t rsrvd1:1; 3053 uint32_t dpm_rst_stat:1; 3054 uint32_t tdp_rst_stat:1; 3055 uint32_t nmac_rst_stat:1; 3056 uint32_t pipe_sys_rst:1; 3057 uint32_t epcore_core_rst:1; 3058 uint32_t epcore_pwr_rst:1; 3059 uint32_t shared_voter_en:1; 3060 uint32_t sp_rst:1; 3061 uint32_t sp_rst_stat:1; 3062 uint32_t rsrvd:13; 3063 #endif 3064 } bits; 3065 } block_reset_t; 3066 3067 3068 /* 3069 * Register: TimeoutCfg 3070 * PIO Timeout Configuration 3071 * Description: PIO Timeout Configuration register to control wait 3072 * time for a PIO access to complete. The timer resolution is in 250 3073 * MHz clock. 3074 * Fields: 3075 * Programmable timeout counter value for PIO clients who did not 3076 * ack a transaction in time. Minimum value should be 64. 3077 * Timeout enable for PIO access to clients. 1 = enable. 3078 */ 3079 typedef union { 3080 uint32_t value; 3081 struct { 3082 #if defined(_BIG_ENDIAN) 3083 uint32_t rsrvd:21; 3084 uint32_t tmout_cnt:10; 3085 uint32_t tmout_en:1; 3086 #else 3087 uint32_t tmout_en:1; 3088 uint32_t tmout_cnt:10; 3089 uint32_t rsrvd:21; 3090 #endif 3091 } bits; 3092 } timeout_cfg_t; 3093 3094 3095 /* 3096 * Register: HeartCfg 3097 * PIO Heartbeat Config 3098 * Description: PIO Blade presence indication : Heartbeat 3099 * configuration The timer resolution is in 250 MHz clock. 3100 * Fields: 3101 * Heartbeat countdown 250Mhz clock divider which serves as 3102 * resolution for the heartTimer. 3103 * Heartbeat countdown enable 3104 */ 3105 typedef union { 3106 uint32_t value; 3107 struct { 3108 #if defined(_BIG_ENDIAN) 3109 uint32_t divider:28; 3110 uint32_t rsrvd:3; 3111 uint32_t en:1; 3112 #else 3113 uint32_t en:1; 3114 uint32_t rsrvd:3; 3115 uint32_t divider:28; 3116 #endif 3117 } bits; 3118 } heart_cfg_t; 3119 3120 3121 /* 3122 * Register: HeartTimer 3123 * PIO Heartbeat Timer 3124 * Description: PIO Blade presence indication : Heartbeat timer The 3125 * timer resolution is in 250 MHz clock. 3126 * Fields: 3127 * Number of heartCfg.divider ticks of the 250Mhz clock before 3128 * blade presence expires. This register decrements for every 3129 * heartCfg.divider number of 250MHz clock cycles. It expires to 3130 * 0 and so must be written periodically to reset the timer back 3131 * to the required value. This counter does not have any effect 3132 * on CIP functionality. 3133 */ 3134 typedef union { 3135 uint32_t value; 3136 struct { 3137 #if defined(_BIG_ENDIAN) 3138 uint32_t timer:32; 3139 #else 3140 uint32_t timer:32; 3141 #endif 3142 } bits; 3143 } heart_timer_t; 3144 3145 3146 /* 3147 * Register: CipGpCtrl 3148 * CIP General Purpose Control Register 3149 */ 3150 typedef union { 3151 uint32_t value; 3152 struct { 3153 #if defined(_BIG_ENDIAN) 3154 uint32_t rsrvd:30; 3155 uint32_t dma_override_relaxord:1; 3156 uint32_t dma_override_nosnoop:1; 3157 #else 3158 uint32_t dma_override_nosnoop:1; 3159 uint32_t dma_override_relaxord:1; 3160 uint32_t rsrvd:30; 3161 #endif 3162 } bits; 3163 } cip_gp_ctrl_t; 3164 3165 3166 /* 3167 * Register: CipStatus 3168 * CIP Status 3169 * Description: This register returns CIP block's current logic 3170 * status 3171 * Fields: 3172 * Current state of the cipEpc state machine 00 : epIdle ( wait 3173 * for EEPROM request from SP or Host ) 01 : waitAck0 ( wait for 3174 * ack from EEPROM for the first 16 bit read of the DW access ) 3175 * 11 : waitAck1 ( wait for ack from EEPROM for the second 16 bit 3176 * read of the DW access ) 10 : UNDEFINED ( Undefined/Unused 3177 * state; EPC is never expected to be in this state ) 3178 * Current state of the cipSpc state machine 000 : spReset ( wait 3179 * for Power-On SPROM download to start) 001 : getAddr ( Get 3180 * CfgReg Address ) 010 : getData ( Get CfgReg Data ) 011 : 3181 * ignoreData ( Address phase had an error, so ignore the Data 3182 * coming in ) 100 : idleCyc ( Idle cycle following an AHB 3183 * Address phase ) 101 : waitAck0 ( Wait for ack from EP Core 3184 * during SPROM Download ) 110 : waitAck1 ( Wait for ack from EP 3185 * Core during register read/write ) 111 : NORMAL ( SPROM 3186 * Download/Register read/write access completed and wait for 3187 * SP/Host initiated PCI/AHB/HCR read/write ) 3188 * PCI Bus Number as reported by EP core 3189 * PCI Bus Device Number as reported by EP core 3190 * 1: current csr access in progress is Local CIP csr access 3191 * 1: current csr access in progress is Blade Domain csr access 3192 * 1: a 64 bit blade domain access is in progress as two 32 bit 3193 * accesses 3194 * 1: indicates config values were downloaded from SPROM 3195 * 1: indicates non-zero number of HCR config values downloaded 3196 * from SPROM 3197 * 1: indicates non-zero number of PCI config values downloaded 3198 * from SPROM 3199 * 1: indicates non-zero number of Pipe config values downloaded 3200 * from SPROM 3201 */ 3202 typedef union { 3203 uint32_t value; 3204 struct { 3205 #if defined(_BIG_ENDIAN) 3206 uint32_t rsrvd:7; 3207 uint32_t cip_epc_sm:2; 3208 uint32_t cip_spc_sm:3; 3209 uint32_t pbus_num:8; 3210 uint32_t pbus_dev_num:5; 3211 uint32_t loc_csr_access:1; 3212 uint32_t bd_csr_access:1; 3213 uint32_t d64_in_progress:1; 3214 uint32_t spc_dnld_done:1; 3215 uint32_t hcr_nz_cfg:1; 3216 uint32_t pci_nz_cfg:1; 3217 uint32_t pipe_nz_cfg:1; 3218 #else 3219 uint32_t pipe_nz_cfg:1; 3220 uint32_t pci_nz_cfg:1; 3221 uint32_t hcr_nz_cfg:1; 3222 uint32_t spc_dnld_done:1; 3223 uint32_t d64_in_progress:1; 3224 uint32_t bd_csr_access:1; 3225 uint32_t loc_csr_access:1; 3226 uint32_t pbus_dev_num:5; 3227 uint32_t pbus_num:8; 3228 uint32_t cip_spc_sm:3; 3229 uint32_t cip_epc_sm:2; 3230 uint32_t rsrvd:7; 3231 #endif 3232 } bits; 3233 } cip_status_t; 3234 3235 3236 /* 3237 * Register: CipLinkStat 3238 * Link Status Register 3239 * Description: This register returns the Link status 3240 * Fields: 3241 * NMAC XPCS-2 Link Status 3242 * NMAC XPCS-1 Link Status 3243 * NMAC XPCS-0 Link Status 3244 * '1' indicates that pipe core went down suddenly when its reset 3245 * sources are at deactivated level. When this happens, the PCIe 3246 * domain logics are reset including the EP core, TDC/RDC PCIe 3247 * domains. All these logics, EP Core, and the pipe core are held 3248 * at reset until s/w writes 1 to this bit to clear status which 3249 * will also bring the PCIe domain out of reset 3250 * pipe core clock & reset status 1: core is up & running, ie, 3251 * PIPE core is out of reset and clock is ON 3252 * PCIe domain reset status 1: PCIe domain logics including EP 3253 * core are out of reset; This also implies that PCIe clock is up 3254 * and running 3255 * EP Core XDM Link State 3256 * EP Core RDM Link State 3257 * EP Core LTSSM State 3258 */ 3259 typedef union { 3260 uint32_t value; 3261 struct { 3262 #if defined(_BIG_ENDIAN) 3263 uint32_t rsrvd:13; 3264 uint32_t xpcs2_link_up:1; 3265 uint32_t xpcs1_link_up:1; 3266 uint32_t xpcs0_link_up:1; 3267 uint32_t rsrvd1:6; 3268 uint32_t surprise_pipedn:1; 3269 uint32_t pipe_core_stable:1; 3270 uint32_t pcie_domain_stable:1; 3271 uint32_t xmlh_link_up:1; 3272 uint32_t rdlh_link_up:1; 3273 uint32_t xmlh_ltssm_state:5; 3274 #else 3275 uint32_t xmlh_ltssm_state:5; 3276 uint32_t rdlh_link_up:1; 3277 uint32_t xmlh_link_up:1; 3278 uint32_t pcie_domain_stable:1; 3279 uint32_t pipe_core_stable:1; 3280 uint32_t surprise_pipedn:1; 3281 uint32_t rsrvd1:6; 3282 uint32_t xpcs0_link_up:1; 3283 uint32_t xpcs1_link_up:1; 3284 uint32_t xpcs2_link_up:1; 3285 uint32_t rsrvd:13; 3286 #endif 3287 } bits; 3288 } cip_link_stat_t; 3289 3290 3291 /* 3292 * Register: EpcStat 3293 * EEPROM PIO Status 3294 * Description: EEPROM PIO Status The Host may initiate access to the 3295 * EEPROM either thru this register or directly by TRGT1 interfaces 3296 * using ROM BAR access. Note that since the EEPROM can be accessed 3297 * by either Host or SP, access must be granted to the PEU using the 3298 * SPI PROM Control Register eepromPeuEn bit for proper operation. 3299 * All EEPROM accesses initiated from either the Host or SP are 3300 * always acknowledged. If a Host access is not acknowledged, then 3301 * check the SPI PROM Control Register eepromPeuEn bit to make sure 3302 * the PEU to EEPROM access has been enabled. Meanwhile, Host read 3303 * and write accesses through the TRGT1 interface may be held up 3304 * waiting for the acknowledgement. Thus, in order to recover from 3305 * any faulty/stuck condition due to the blocked EEPROM accesses, the 3306 * SP should configure the epcGotoNormal bit in the epcStat register. 3307 * When Host accesses are stuck, only the SP can write into this bit 3308 * to recover from this condition. 3309 * The EEPROM is 1M x 16 bits or 2M bytes. The read address in bits 3310 * [22:2] is byte address. The EEPROM access can only be DW access. 3311 * While accessing through these registers, the lower 2 bits of the 3312 * specified address is ignored resulting in a DW access to the 3313 * EEPROM controller. While accessing through the ROM BAR range, only 3314 * DW accesses are accepted and all other accesses will result in 3315 * error status returned to the host. 3316 * The read will initiate two reads to the EPC and the accumulated 3317 * 32 bit data is returned to the Host either via the Client2 bus or 3318 * in the epcData register depending on the cause of the transaction. 3319 * This means, a read addr=0,1,2,3 will return data from EPC 3320 * locations 0 & 1 which are 16 bits each, and a read to addr=4,5,6,7 3321 * will return data from EPC locations 2,3 which are 16 bits each. 3322 * Some examples for the address translation : 1) when Host gives 3323 * address 0x0000, it means to get bytes 0,1,2, and 3 from the 3324 * EEPROM. These bytes are stored at locations 0x0000 (bytes 0,1) and 3325 * 0x0001 (bytes 2,3) in EEPROM. Hence PEU will present address 3326 * 0x0000 followed by 0x0001 to the EEPROM. 3327 * 2) when Host gives address 0x0004, it means to get bytes 4,5,6, 3328 * and 7 from the EEPROM. These bytes are stored at locations 0x0002 3329 * (bytes 4,5) and 0x0003 (bytes 6,7) in EEPROM. Hence PEU will 3330 * present address 0x0002 followed by 0x0003 to the EEPROM. 3331 * etc .. 3332 * 3333 * Fields: 3334 * Force the EPC state machine to go to epIdle state. This bit is 3335 * used to force the EPC to skip the reading of the EEPROM and 3336 * goto the epIdle state which is normal state for EPC. The bit 3337 * is auto-cleared after switching to the epIdle state. Both SP 3338 * and HOST can write into this bit. However care must be taken 3339 * writing '1' into this bit since setting this bit will flush 3340 * out any pending EEPROM access request from Host. Hence, this 3341 * bit should be used only if the EPC State machine (cipEpcSm 3342 * bits in cipStatus register) is stuck at a non-zero state. 3343 * EEPROM Byte Address for read operation This field can be 3344 * updated only if there is no pending EEPROM read access. 3345 * Software should poll bit 0 of this register (epcRdInit) to 3346 * make sure that it is '0' before writing into this. If polled 3347 * epcRdInit value is '1', then write to epcAddr field is 3348 * ignored. This is to safe-guard the epcAddr value which is 3349 * being read out the EEPROM. 3350 * Read access completion status; set to '0' for successful 3351 * completion by EPC set to '1' to indicate read access error 3352 * from EPC 3353 * Note: Currently, the EEPROM controller in Hydra does not 3354 * return any error condition, ie, epcPeuErr = 1'b0 always. And 3355 * so, for the PIO read access by the Host, the epcStat register 3356 * in PEU will always show that the access was successful. For 3357 * EEPROM read initiated through the ROM BAR by the Host, CIP 3358 * will always return Successful Completion status to the Host. 3359 * Any error situation is reported only in the Status Register 3360 * within the EEPROM device. For access information about this 3361 * register, please refer to the EEPROM/SPI PRMs. 3362 * 3363 * Read Initiate. SW writes 1 to this bit to initiate a EEPROM 3364 * read. Clears to 0 on updating the epcData reg. Writing 0 has 3365 * no effect. 3366 */ 3367 typedef union { 3368 uint32_t value; 3369 struct { 3370 #if defined(_BIG_ENDIAN) 3371 uint32_t epc_goto_normal:1; 3372 uint32_t rsrvd:8; 3373 uint32_t epc_addr:21; 3374 uint32_t epc_cpl_stat:1; 3375 uint32_t epc_rd_init:1; 3376 #else 3377 uint32_t epc_rd_init:1; 3378 uint32_t epc_cpl_stat:1; 3379 uint32_t epc_addr:21; 3380 uint32_t rsrvd:8; 3381 uint32_t epc_goto_normal:1; 3382 #endif 3383 } bits; 3384 } epc_stat_t; 3385 3386 3387 /* 3388 * Register: EpcData 3389 * EEPROM PIO Data 3390 * Description: EEPROM PIO Data The data returned from EEPROM 3391 * controller for the EEPROM access initiated by the EEPROM PIO 3392 * Status register is returned in this register. 3393 * Fields: 3394 * EEPROM Read Data; valid when rdInit transitioned from 1 to 0. 3395 */ 3396 typedef union { 3397 uint32_t value; 3398 struct { 3399 #if defined(_BIG_ENDIAN) 3400 uint32_t eeprom_data:32; 3401 #else 3402 uint32_t eeprom_data:32; 3403 #endif 3404 } bits; 3405 } epc_data_t; 3406 3407 3408 /* 3409 * Register: SpcStat 3410 * SPROM PIO Status 3411 * Description: SPROM PIO Status 3412 * Fields: 3413 * Force the SPC state machine to go to NORMAL state. This bit is 3414 * used to force the SPC to skip the downloading of the SPROM 3415 * contents into the EP/Pipe/Hcr registers. Setting this bit will 3416 * make CIP to drop any pending requests to the DBI/AHB buses. 3417 * The bit is auto-cleared after switching to the Normal state. 3418 * This bit can not be used to terminate a pio access to 3419 * PCI/PIPE/HCR registers. If a pio access to these registers is 3420 * not responded to, by the respective block, then the pio access 3421 * will automatically timeout. The timeout value is specified by 3422 * the timeoutCfg:tmoutCnt value 3423 */ 3424 typedef union { 3425 uint32_t value; 3426 struct { 3427 #if defined(_BIG_ENDIAN) 3428 uint32_t rsrvd:29; 3429 uint32_t spc_goto_normal:1; 3430 uint32_t rsrvd1:2; 3431 #else 3432 uint32_t rsrvd1:2; 3433 uint32_t spc_goto_normal:1; 3434 uint32_t rsrvd:29; 3435 #endif 3436 } bits; 3437 } spc_stat_t; 3438 3439 3440 /* 3441 * Register: Host2spiIndaccAddr 3442 * HOST -> SPI Shared Domain Read Address 3443 * Description: Read address set by Host for indirect access to 3444 * shared domain address space The decoding of the address is as 3445 * follows: [23:20] - block select [19:0] - register offset from base 3446 * address of block 3447 * Fields: 3448 * Address in Shared domain 3449 */ 3450 typedef union { 3451 uint32_t value; 3452 struct { 3453 #if defined(_BIG_ENDIAN) 3454 uint32_t rsrvd:8; 3455 uint32_t addr:24; 3456 #else 3457 uint32_t addr:24; 3458 uint32_t rsrvd:8; 3459 #endif 3460 } bits; 3461 } host2spi_indacc_addr_t; 3462 3463 3464 /* 3465 * Register: Host2spiIndaccCtrl 3466 * HOST -> SPI Shared Domain Read Control 3467 * Description: Control word set by Host for indirect access to the 3468 * shared domain address space Writing to this register initiates the 3469 * indirect access to the shared domain. 3470 * The Host may read or write to a shared domain region data as 3471 * below : Host updates the host2spiIndaccAddr register with address 3472 * of the shared domain reg. For writes, Host updates the 3473 * host2spiIndaccData register with write data Host then writes to 3474 * bit 0 of host2spiIndaccCtrl register to '1' or '0' to initiate the 3475 * read or write access; 1 : write command, 0 : read command Host 3476 * should then poll bit 1 of host2spiIndaccCtrl register for the 3477 * access status. 1 : access is done, 0 : access is in progress 3478 * (busy) Host should then check bit 2 of host2spiIndaccCtrl register 3479 * to know if the command was successful; 1 : access error, 0 : 3480 * access successful For reads, Host then reads the 3481 * host2spiIndaccData register for the read data. 3482 * This register can be written into only when there is no pending 3483 * access, ie, indaccCtrl.cplStat=1. Writes when indaccCtrl.cplStat=0 3484 * is ignored. 3485 * 3486 * Fields: 3487 * command completion status; 0 : successful completion of 3488 * command by SPI 1 : access error from SPI 3489 * command progress status; 0 : access is in progress (busy) 1 : 3490 * access is done 3491 * 1 : Initiate a write access 0 : Initiate a read access 3492 */ 3493 typedef union { 3494 uint32_t value; 3495 struct { 3496 #if defined(_BIG_ENDIAN) 3497 uint32_t rsrvd:29; 3498 uint32_t err_stat:1; 3499 uint32_t cpl_stat:1; 3500 uint32_t rd_wr_cmd:1; 3501 #else 3502 uint32_t rd_wr_cmd:1; 3503 uint32_t cpl_stat:1; 3504 uint32_t err_stat:1; 3505 uint32_t rsrvd:29; 3506 #endif 3507 } bits; 3508 } host2spi_indacc_ctrl_t; 3509 3510 3511 /* 3512 * Register: Host2spiIndaccData 3513 * HOST -> SPI Shared Domain Read/Write Data 3514 * Description: For indirect read access by the Host, this register 3515 * returns the data returned from the Shared Domain For indirect 3516 * write access by the Host, the host should update this register 3517 * with the writeData for the Shared Domain, before writing to the 3518 * host2spiIndaccCtrl register to initiate the access. 3519 * This register can be written into only when there is no pending 3520 * access, ie, indaccCtrl.cplStat=1. Writes when indaccCtrl.cplStat=0 3521 * is ignored. 3522 * 3523 * Fields: 3524 * Shared domain read/write data 3525 */ 3526 typedef union { 3527 uint32_t value; 3528 struct { 3529 #if defined(_BIG_ENDIAN) 3530 uint32_t data:32; 3531 #else 3532 uint32_t data:32; 3533 #endif 3534 } bits; 3535 } host2spi_indacc_data_t; 3536 3537 3538 /* 3539 * Register: BtCtrl0 3540 * Mailbox Control & Access status 0 3541 * Description: Host (blade) <-> SP Block Transfer mailbox control 3542 * and access status register 0. 3543 * Host is allowed 8 bits read/write access to this register ; To do 3544 * the same, it should provide the btCtrl0 address, data on 3545 * hostDataBus[7:0], and assert hostBen[0], SPI is allowed 8 bits 3546 * read/write access to this register ; To do the same, it should 3547 * provide the btCtrl0 address, data on spiDataBus[7:0], and no need 3548 * of spiBen 3549 * 3550 * Fields: 3551 * The SP sets/clears this bit to indicate if it is busy and can 3552 * not accept any other request; write 1 to toggle the bit; Read 3553 * Only by Host. 3554 * The Host sets/clears this bit to indicate if it is busy and 3555 * can not accept any other request; Read Only by SP. 3556 * Reserved for definition by platform. Typical usage could be 3557 * "heartbeat" mechanism from/to the host. The host sets OEM0 to 3558 * interrupt the SP and then polls it to be cleared by SP 3559 * The SP sets this bit when it has detected and queued an SMS 3560 * message in the SP2HOST buffer that must be reported to the 3561 * HOST. The Host clears this bit by writing a 1 to it. This bit 3562 * may generate an intrpt to Host depending on the sp2hostIntEn 3563 * bit. Writing 0 has no effect 3564 * The SP writes 1 to this bit after it has finished writing a 3565 * message into the SP2HOST buffer. The Host clears this bit by 3566 * writing 1 to it after it has set the hostBusy bit This bit may 3567 * generate an intrpt to Host depending on the sp2hostIntEn bit. 3568 * Writing 0 has no effect 3569 * The Host writes 1 to this bit to generate an interrupt to SP 3570 * after it has finished writing a message into the HOST2SP 3571 * buffer. The SP clears this bit by writing 1 to it after it has 3572 * set the spBusy bit. Writing 0 has no effect 3573 * The host writes 1 to clear the read pointer to the BT SP2HOST 3574 * buffer; the SP writes 1 to clear the read pointer to the BT 3575 * HOST2SP buffer. This bit is always read back as 0; writing 0 3576 * has no effect. 3577 * The host writes 1 to clear the write pointer to the BT HOST2SP 3578 * buffer; the SP writes 1 to clear the write pointer to the BT 3579 * SP2HOST buffer. This bit is always read back as 0; writing 0 3580 * has no effect. 3581 */ 3582 typedef union { 3583 uint32_t value; 3584 struct { 3585 #if defined(_BIG_ENDIAN) 3586 uint32_t rsrvd:24; 3587 uint32_t sp_busy:1; 3588 uint32_t host_busy:1; 3589 uint32_t oem0:1; 3590 uint32_t sms_atn:1; 3591 uint32_t sp2host_atn:1; 3592 uint32_t host2sp_atn:1; 3593 uint32_t clr_rd_ptr:1; 3594 uint32_t clr_wr_ptr:1; 3595 #else 3596 uint32_t clr_wr_ptr:1; 3597 uint32_t clr_rd_ptr:1; 3598 uint32_t host2sp_atn:1; 3599 uint32_t sp2host_atn:1; 3600 uint32_t sms_atn:1; 3601 uint32_t oem0:1; 3602 uint32_t host_busy:1; 3603 uint32_t sp_busy:1; 3604 uint32_t rsrvd:24; 3605 #endif 3606 } bits; 3607 } bt_ctrl0_t; 3608 3609 3610 /* 3611 * Register: BtData0 3612 * Mailbox Data 0 3613 * Description: Host (blade) <-> SP mailbox data register 0. 3614 * Host is allowed a 32 bits read/write access to this register ; To 3615 * do the same, it should provide the btData0 address, data on 3616 * hostDataBus[31:0], and assert hostBen[1], SPI is allowed only 8 3617 * bits read/write access to this register ; To do the same, it 3618 * should provide the btData0 address, data on spiDataBus[7:0], and 3619 * no need of spiBen 3620 * All references to the mail box control bits in this register 3621 * refer to btCtrl0. When spBusy=0 && host2spAtn=0, data is written 3622 * by the host and read by the SP. When hostBusy=0 && sp2hostAtn=0, 3623 * data is written by the SP and read by the Host. 3624 * 3625 * Fields: 3626 * Bits 7:0 of message data to send to SP/HOST 3627 */ 3628 typedef union { 3629 uint32_t value; 3630 struct { 3631 #if defined(_BIG_ENDIAN) 3632 uint32_t rsrvd:24; 3633 uint32_t data:8; 3634 #else 3635 uint32_t data:8; 3636 uint32_t rsrvd:24; 3637 #endif 3638 } bits; 3639 } bt_data0_t; 3640 3641 3642 /* 3643 * Register: BtIntmask0 3644 * Mailbox Interrupt Mask & Status 0 3645 * Description: Host (blade) <-> SP Block Transfer Interrupt Mask and 3646 * Status register 0 3647 * Host is allowed 8 bits read/write access to this register ; To do 3648 * the same, it should provide the btIntmask0 address, data on 3649 * hostDataBus[23:16], and assert hostBen[2], SPI is allowed 8 bits 3650 * read only access to this register ; To do the same, it should 3651 * provide the btIntmask0 address and no need of spiBen 3652 * All references to the mail box control bits in this register 3653 * refer to btCtrl0 3654 * Fields: 3655 * The host writes 1 to reset the entire mailbox 0 accesses for 3656 * error recovery; resets both SP and HOST write and read 3657 * pointers. Writing 0 has no effect. This is non-sticky. Always 3658 * read back as 0. 3659 * Reserved for definition by platform manufacturer for BIOS/SMI 3660 * Handler use. Generic IPMI software must write this bit as 0 3661 * and ignore the value on read 3662 * Reserved for definition by platform manufacturer for BIOS/SMI 3663 * Handler use. Generic IPMI software must write this bit as 0 3664 * and ignore the value on read 3665 * Reserved for definition by platform manufacturer for BIOS/SMI 3666 * Handler use. Generic IPMI software must write this bit as 0 3667 * and ignore the value on read 3668 * SP to HOST Interrupt status This bit reflects the state of the 3669 * intrpt line to the Host. O/S driver should write 1 to clear. 3670 * SP to HOST Interrupt Enable The interrupt is generated if 3671 * sp2hIrqEn is 1 and either sp2hostAtn or smsAtn is 1 3672 */ 3673 typedef union { 3674 uint32_t value; 3675 struct { 3676 #if defined(_BIG_ENDIAN) 3677 uint32_t rsrvd:24; 3678 uint32_t mb_master_reset:1; 3679 uint32_t rsrvd1:2; 3680 uint32_t oem3:1; 3681 uint32_t oem2:1; 3682 uint32_t oem1:1; 3683 uint32_t sp2h_irq:1; 3684 uint32_t sp2h_irq_en:1; 3685 #else 3686 uint32_t sp2h_irq_en:1; 3687 uint32_t sp2h_irq:1; 3688 uint32_t oem1:1; 3689 uint32_t oem2:1; 3690 uint32_t oem3:1; 3691 uint32_t rsrvd1:2; 3692 uint32_t mb_master_reset:1; 3693 uint32_t rsrvd:24; 3694 #endif 3695 } bits; 3696 } bt_intmask0_t; 3697 3698 3699 /* 3700 * Register: BtCtrl1 3701 * Mailbox Control & Access status 1 3702 * Description: Host (blade) <-> SP Block Transfer mailbox control 3703 * and access status register 1. 3704 * Host is allowed 8 bits read/write access to this register ; To do 3705 * the same, it should provide the btCtrl1 address, data on 3706 * hostDataBus[7:0], and assert hostBen[0], SPI is allowed 8 bits 3707 * read/write access to this register ; To do the same, it should 3708 * provide the btCtrl1 address, data on spiDataBus[7:0], and no need 3709 * of spiBen 3710 * 3711 * Fields: 3712 * The SP sets/clears this bit to indicate that it is busy and 3713 * can not accept any other request; write 1 to toggle the bit; 3714 * Read only by Host. 3715 * The Host sets/clears this bit to indicate that it is busy and 3716 * can not accept any other request; Read only by SP. 3717 * Reserved for definition by platform. Typical usage could be 3718 * "heartbeat" mechanism from/to the host. The host sets OEM0 to 3719 * interrupt the SP and then polls it to be cleared by SP 3720 * The SP sets this bit when it has detected and queued an SMS 3721 * message in the SP2HOST buffer that must be reported to the 3722 * HOST. The Host clears this bit by writing a 1 to it. This bit 3723 * may generate an intrpt to Host depending on the sp2hostIntEn 3724 * bit. Writing 0 has no effect 3725 * The SP writes 1 to this bit after it has finished writing a 3726 * message into the SP2HOST buffer. The Host clears this bit by 3727 * writing 1 to it after it has set the hostBusy bit This bit may 3728 * generate an intrpt to Host depending on the sp2hostIntEn bit. 3729 * Writing 0 has no effect 3730 * The Host writes 1 to this bit to generate an interrupt to SP 3731 * after it has finished writing a message into the HOST2SP 3732 * buffer. The SP clears this bit by writing 1 to it after it has 3733 * set the spBusy bit. Writing 0 has no effect 3734 * The host writes 1 to clear the read pointer to the BT SP2HOST 3735 * buffer; the SP writes 1 to clear the read pointer to the BT 3736 * HOST2SP buffer. This bit is always read back as 0; writing 0 3737 * has no effect. 3738 * The host writes 1 to clear the write pointer to the BT HOST2SP 3739 * buffer; the SP writes 1 to clear the write pointer to the BT 3740 * SP2HOST buffer. This bit is always read back as 0; writing 0 3741 * has no effect. 3742 */ 3743 typedef union { 3744 uint32_t value; 3745 struct { 3746 #if defined(_BIG_ENDIAN) 3747 uint32_t rsrvd:24; 3748 uint32_t sp_busy:1; 3749 uint32_t host_busy:1; 3750 uint32_t oem0:1; 3751 uint32_t sms_atn:1; 3752 uint32_t sp2host_atn:1; 3753 uint32_t host2sp_atn:1; 3754 uint32_t clr_rd_ptr:1; 3755 uint32_t clr_wr_ptr:1; 3756 #else 3757 uint32_t clr_wr_ptr:1; 3758 uint32_t clr_rd_ptr:1; 3759 uint32_t host2sp_atn:1; 3760 uint32_t sp2host_atn:1; 3761 uint32_t sms_atn:1; 3762 uint32_t oem0:1; 3763 uint32_t host_busy:1; 3764 uint32_t sp_busy:1; 3765 uint32_t rsrvd:24; 3766 #endif 3767 } bits; 3768 } bt_ctrl1_t; 3769 3770 3771 /* 3772 * Register: BtData1 3773 * Mailbox Data 1 3774 * Description: Host (blade) <-> SP mailbox data register 1. 3775 * Host is allowed a 32 bits read/write access to this register ; To 3776 * do the same, it should provide the btData1 address, data on 3777 * hostDataBus[31:0], and assert hostBen[1], SPI is allowed only 8 3778 * bits read/write access to this register ; To do the same, it 3779 * should provide the btData1 address, data on spiDataBus[7:0], and 3780 * no need of spiBen 3781 * All references to the mail box control bits in this register 3782 * refer to btCtrl1. When spBusy=0 && host2spAtn=0, data is written 3783 * by the host and read by the SP. When hostBusy=0 && sp2hostAtn=0, 3784 * data is written by the SP and read by the Host. 3785 * Fields: 3786 * Bits 31:0 of message data to send to SP/HOST 3787 */ 3788 typedef union { 3789 uint32_t value; 3790 struct { 3791 #if defined(_BIG_ENDIAN) 3792 uint32_t rsrvd:24; 3793 uint32_t data:8; 3794 #else 3795 uint32_t data:8; 3796 uint32_t rsrvd:24; 3797 #endif 3798 } bits; 3799 } bt_data1_t; 3800 3801 3802 /* 3803 * Register: BtIntmask1 3804 * Mailbox Interrupt Mask & Status 1 3805 * Description: Host (blade) <-> SP Block Transfer Interrupt Mask and 3806 * Status register 1 3807 * Host is allowed 8 bits read/write access to this register ; To do 3808 * the same, it should provide the btIntmask1 address, data on 3809 * hostDataBus[23:16], and assert hostBen[2], SPI is allowed 8 bits 3810 * read only access to this register ; To do the same, it should 3811 * provide the btIntmask1 address and no need of spiBen 3812 * All references to the mail box control bits in this register 3813 * refer to btCtrl1 3814 * Fields: 3815 * The host writes 1 to reset the entire mailbox 1 accesses for 3816 * error recovery; resets both SP and HOST write and read 3817 * pointers. Writing 0 has no effect. This is non-sticky. Always 3818 * read back as 0. 3819 * Reserved for definition by platform manufacturer for BIOS/SMI 3820 * Handler use. Generic IPMI software must write this bit as 0 3821 * and ignore the value on read 3822 * Reserved for definition by platform manufacturer for BIOS/SMI 3823 * Handler use. Generic IPMI software must write this bit as 0 3824 * and ignore the value on read 3825 * Reserved for definition by platform manufacturer for BIOS/SMI 3826 * Handler use. Generic IPMI software must write this bit as 0 3827 * and ignore the value on read 3828 * SP to HOST Interrupt status This bit reflects the state of the 3829 * intrpt line to the Host. O/S driver should write 1 to clear. 3830 * SP to HOST Interrupt Enable The interrupt is generated if 3831 * sp2hIrqEn is 1 and either sp2hostAtn or smsAtn is 1 3832 */ 3833 typedef union { 3834 uint32_t value; 3835 struct { 3836 #if defined(_BIG_ENDIAN) 3837 uint32_t rsrvd:24; 3838 uint32_t mb_master_reset:1; 3839 uint32_t rsrvd1:2; 3840 uint32_t oem3:1; 3841 uint32_t oem2:1; 3842 uint32_t oem1:1; 3843 uint32_t sp2h_irq:1; 3844 uint32_t sp2h_irq_en:1; 3845 #else 3846 uint32_t sp2h_irq_en:1; 3847 uint32_t sp2h_irq:1; 3848 uint32_t oem1:1; 3849 uint32_t oem2:1; 3850 uint32_t oem3:1; 3851 uint32_t rsrvd1:2; 3852 uint32_t mb_master_reset:1; 3853 uint32_t rsrvd:24; 3854 #endif 3855 } bits; 3856 } bt_intmask1_t; 3857 3858 3859 /* 3860 * Register: BtCtrl2 3861 * Mailbox Control & Access status 2 3862 * Description: Host (blade) <-> SP Block Transfer mailbox control 3863 * and access status register 2. 3864 * Host is allowed 8 bits read/write access to this register ; To do 3865 * the same, it should provide the btCtrl2 address, data on 3866 * hostDataBus[7:0], and assert hostBen[0], SPI is allowed 8 bits 3867 * read/write access to this register ; To do the same, it should 3868 * provide the btCtrl2 address, data on spiDataBus[7:0], and no need 3869 * of spiBen 3870 * 3871 * Fields: 3872 * The SP sets/clears this bit to indicate that it is busy and 3873 * can not accept any other request; write 1 to toggle the bit; 3874 * Read only by Host. 3875 * The Host sets/clears this bit to indicate that it is busy and 3876 * can not accept any other request; Read only by SP. 3877 * Reserved for definition by platform. Typical usage could be 3878 * "heartbeat" mechanism from/to the host. The host sets OEM0 to 3879 * interrupt the SP and then polls it to be cleared by SP 3880 * The SP sets this bit when it has detected and queued an SMS 3881 * message in the SP2HOST buffer that must be reported to the 3882 * HOST. The Host clears this bit by writing a 1 to it. This bit 3883 * may generate an intrpt to Host depending on the sp2hostIntEn 3884 * bit. Writing 0 has no effect 3885 * The SP writes 1 to this bit after it has finished writing a 3886 * message into the SP2HOST buffer. The Host clears this bit by 3887 * writing 1 to it after it has set the hostBusy bit This bit may 3888 * generate an intrpt to Host depending on the sp2hostIntEn bit. 3889 * Writing 0 has no effect 3890 * The Host writes 1 to this bit to generate an interrupt to SP 3891 * after it has finished writing a message into the HOST2SP 3892 * buffer. The SP clears this bit by writing 1 to it after it has 3893 * set the spBusy bit. Writing 0 has no effect 3894 * The host writes 1 to clear the read pointer to the BT SP2HOST 3895 * buffer; the SP writes 1 to clear the read pointer to the BT 3896 * HOST2SP buffer. This bit is always read back as 0; writing 0 3897 * has no effect. 3898 * The host writes 1 to clear the write pointer to the BT HOST2SP 3899 * buffer; the SP writes 1 to clear the write pointer to the BT 3900 * SP2HOST buffer. This bit is always read back as 0; writing 0 3901 * has no effect. 3902 */ 3903 typedef union { 3904 uint32_t value; 3905 struct { 3906 #if defined(_BIG_ENDIAN) 3907 uint32_t rsrvd:24; 3908 uint32_t sp_busy:1; 3909 uint32_t host_busy:1; 3910 uint32_t oem0:1; 3911 uint32_t sms_atn:1; 3912 uint32_t sp2host_atn:1; 3913 uint32_t host2sp_atn:1; 3914 uint32_t clr_rd_ptr:1; 3915 uint32_t clr_wr_ptr:1; 3916 #else 3917 uint32_t clr_wr_ptr:1; 3918 uint32_t clr_rd_ptr:1; 3919 uint32_t host2sp_atn:1; 3920 uint32_t sp2host_atn:1; 3921 uint32_t sms_atn:1; 3922 uint32_t oem0:1; 3923 uint32_t host_busy:1; 3924 uint32_t sp_busy:1; 3925 uint32_t rsrvd:24; 3926 #endif 3927 } bits; 3928 } bt_ctrl2_t; 3929 3930 3931 /* 3932 * Register: BtData2 3933 * Mailbox Data 2 3934 * Description: Host (blade) <-> SP mailbox data register 2. All 3935 * references to the mail box control bits in this register refer to 3936 * btCtrl2. 3937 * Host is allowed a 32 bits read/write access to this register ; To 3938 * do the same, it should provide the btData2 address, data on 3939 * hostDataBus[31:0], and assert hostBen[1], SPI is allowed only 8 3940 * bits read/write access to this register ; To do the same, it 3941 * should provide the btData2 address, data on spiDataBus[7:0], and 3942 * no need of spiBen 3943 * When spBusy=0 && host2spAtn=0, data is written by the host and 3944 * read by the SP. When hostBusy=0 && sp2hostAtn=0, data is written 3945 * by the SP and read by the Host. 3946 * Fields: 3947 * Bits 31:0 of message data to send to SP/HOST 3948 */ 3949 typedef union { 3950 uint32_t value; 3951 struct { 3952 #if defined(_BIG_ENDIAN) 3953 uint32_t rsrvd:24; 3954 uint32_t data:8; 3955 #else 3956 uint32_t data:8; 3957 uint32_t rsrvd:24; 3958 #endif 3959 } bits; 3960 } bt_data2_t; 3961 3962 3963 /* 3964 * Register: BtIntmask2 3965 * Mailbox Interrupt Mask & Status 2 3966 * Description: Host (blade) <-> SP Block Transfer Interrupt Mask and 3967 * Status register 2 3968 * Host is allowed 8 bits read/write access to this register ; To do 3969 * the same, it should provide the btIntmask2 address, data on 3970 * hostDataBus[23:16], and assert hostBen[2], SPI is allowed 8 bits 3971 * read only access to this register ; To do the same, it should 3972 * provide the btIntmask2 address and no need of spiBen 3973 * All references to the mail box control bits in this register 3974 * refer to btCtrl2 3975 * Fields: 3976 * The host writes 1 to reset the entire mailbox 2 accesses for 3977 * error recovery; resets both SP and HOST write and read 3978 * pointers. Writing 0 has no effect. This is non-sticky. Always 3979 * read back as 0. 3980 * Reserved for definition by platform manufacturer for BIOS/SMI 3981 * Handler use. Generic IPMI software must write this bit as 0 3982 * and ignore the value on read 3983 * Reserved for definition by platform manufacturer for BIOS/SMI 3984 * Handler use. Generic IPMI software must write this bit as 0 3985 * and ignore the value on read 3986 * Reserved for definition by platform manufacturer for BIOS/SMI 3987 * Handler use. Generic IPMI software must write this bit as 0 3988 * and ignore the value on read 3989 * SP to HOST Interrupt status This bit reflects the state of the 3990 * intrpt line to the Host. O/S driver should write 1 to clear. 3991 * SP to HOST Interrupt Enable The interrupt is generated if 3992 * sp2hIrqEn is 1 and either sp2hostAtn or smsAtn is 1 3993 */ 3994 typedef union { 3995 uint32_t value; 3996 struct { 3997 #if defined(_BIG_ENDIAN) 3998 uint32_t rsrvd:24; 3999 uint32_t mb_master_reset:1; 4000 uint32_t rsrvd1:2; 4001 uint32_t oem3:1; 4002 uint32_t oem2:1; 4003 uint32_t oem1:1; 4004 uint32_t sp2h_irq:1; 4005 uint32_t sp2h_irq_en:1; 4006 #else 4007 uint32_t sp2h_irq_en:1; 4008 uint32_t sp2h_irq:1; 4009 uint32_t oem1:1; 4010 uint32_t oem2:1; 4011 uint32_t oem3:1; 4012 uint32_t rsrvd1:2; 4013 uint32_t mb_master_reset:1; 4014 uint32_t rsrvd:24; 4015 #endif 4016 } bits; 4017 } bt_intmask2_t; 4018 4019 4020 /* 4021 * Register: BtCtrl3 4022 * Mailbox Control & Access status 3 4023 * Description: Host (blade) <-> SP Block Transfer mailbox control 4024 * and access status register 3. 4025 * Host is allowed 8 bits read/write access to this register ; To do 4026 * the same, it should provide the btCtrl3 address, data on 4027 * hostDataBus[7:0], and assert hostBen[0], SPI is allowed 8 bits 4028 * read/write access to this register ; To do the same, it should 4029 * provide the btCtrl3 address, data on spiDataBus[7:0], and no need 4030 * of spiBen 4031 * 4032 * Fields: 4033 * The SP sets/clears this bit to indicate that it is busy and 4034 * can not accept any other request; write 1 to toggle the bit; 4035 * Read only by Host. 4036 * The Host sets/clears this bit to indicate that it is busy and 4037 * can not accept any other request; Read only by SP. 4038 * Reserved for definition by platform. Typical usage could be 4039 * "heartbeat" mechanism from/to the host. The host sets OEM0 to 4040 * interrupt the SP and then polls it to be cleared by SP 4041 * The SP sets this bit when it has detected and queued an SMS 4042 * message in the SP2HOST buffer that must be reported to the 4043 * HOST. The Host clears this bit by writing a 1 to it. This bit 4044 * may generate an intrpt to Host depending on the sp2hostIntEn 4045 * bit. Writing 0 has no effect 4046 * The SP writes 1 to this bit after it has finished writing a 4047 * message into the SP2HOST buffer. The Host clears this bit by 4048 * writing 1 to it after it has set the hostBusy bit This bit may 4049 * generate an intrpt to Host depending on the sp2hostIntEn bit. 4050 * Writing 0 has no effect 4051 * The Host writes 1 to this bit to generate an interrupt to SP 4052 * after it has finished writing a message into the HOST2SP 4053 * buffer. The SP clears this bit by writing 1 to it after it has 4054 * set the spBusy bit. Writing 0 has no effect 4055 * The host writes 1 to clear the read pointer to the BT SP2HOST 4056 * buffer; the SP writes 1 to clear the read pointer to the BT 4057 * HOST2SP buffer. This bit is always read back as 0; writing 0 4058 * has no effect. 4059 * The host writes 1 to clear the write pointer to the BT HOST2SP 4060 * buffer; the SP writes 1 to clear the write pointer to the BT 4061 * SP2HOST buffer. This bit is always read back as 0; writing 0 4062 * has no effect. 4063 */ 4064 typedef union { 4065 uint32_t value; 4066 struct { 4067 #if defined(_BIG_ENDIAN) 4068 uint32_t rsrvd:24; 4069 uint32_t sp_busy:1; 4070 uint32_t host_busy:1; 4071 uint32_t oem0:1; 4072 uint32_t sms_atn:1; 4073 uint32_t sp2host_atn:1; 4074 uint32_t host2sp_atn:1; 4075 uint32_t clr_rd_ptr:1; 4076 uint32_t clr_wr_ptr:1; 4077 #else 4078 uint32_t clr_wr_ptr:1; 4079 uint32_t clr_rd_ptr:1; 4080 uint32_t host2sp_atn:1; 4081 uint32_t sp2host_atn:1; 4082 uint32_t sms_atn:1; 4083 uint32_t oem0:1; 4084 uint32_t host_busy:1; 4085 uint32_t sp_busy:1; 4086 uint32_t rsrvd:24; 4087 #endif 4088 } bits; 4089 } bt_ctrl3_t; 4090 4091 4092 /* 4093 * Register: BtData3 4094 * Mailbox Data 3 4095 * Description: Host (blade) <-> SP mailbox data register 3. 4096 * Host is allowed a 32 bits read/write access to this register ; To 4097 * do the same, it should provide the btData3 address, data on 4098 * hostDataBus[31:0], and assert hostBen[1], SPI is allowed only 8 4099 * bits read/write access to this register ; To do the same, it 4100 * should provide the btData3 address, data on spiDataBus[7:0], and 4101 * no need of spiBen 4102 * All references to the mail box control bits in this register 4103 * refer to btCtrl3. When spBusy=0 && host2spAtn=0, data is written 4104 * by the host and read by the SP. When hostBusy=0 && sp2hostAtn=0, 4105 * data is written by the SP and read by the Host. 4106 * Fields: 4107 * Bits 31:0 of message data to send to SP/HOST 4108 */ 4109 typedef union { 4110 uint32_t value; 4111 struct { 4112 #if defined(_BIG_ENDIAN) 4113 uint32_t rsrvd:24; 4114 uint32_t data:8; 4115 #else 4116 uint32_t data:8; 4117 uint32_t rsrvd:24; 4118 #endif 4119 } bits; 4120 } bt_data3_t; 4121 4122 4123 /* 4124 * Register: BtIntmask3 4125 * Mailbox Interrupt Mask & Status 3 4126 * Description: Host (blade) <-> SP Block Transfer Interrupt Mask and 4127 * Status register 3 4128 * Host is allowed 8 bits read/write access to this register ; To do 4129 * the same, it should provide the btIntmask3 address, data on 4130 * hostDataBus[23:16], and assert hostBen[2], SPI is allowed 8 bits 4131 * read only access to this register ; To do the same, it should 4132 * provide the btIntmask3 address and no need of spiBen 4133 * All references to the mail box control bits in this register 4134 * refer to btCtrl3 4135 * Fields: 4136 * The host writes 1 to reset the entire mailbox 3 accesses for 4137 * error recovery; resets both SP and HOST write and read 4138 * pointers. Writing 0 has no effect. This is non-sticky. Always 4139 * read back as 0. 4140 * Reserved for definition by platform manufacturer for BIOS/SMI 4141 * Handler use. Generic IPMI software must write this bit as 0 4142 * and ignore the value on read 4143 * Reserved for definition by platform manufacturer for BIOS/SMI 4144 * Handler use. Generic IPMI software must write this bit as 0 4145 * and ignore the value on read 4146 * Reserved for definition by platform manufacturer for BIOS/SMI 4147 * Handler use. Generic IPMI software must write this bit as 0 4148 * and ignore the value on read 4149 * SP to HOST Interrupt status This bit reflects the state of the 4150 * intrpt line to the Host. O/S driver should write 1 to clear. 4151 * SP to HOST Interrupt Enable The interrupt is generated if 4152 * sp2hIrqEn is 1 and either sp2hostAtn or smsAtn is 1 4153 */ 4154 typedef union { 4155 uint32_t value; 4156 struct { 4157 #if defined(_BIG_ENDIAN) 4158 uint32_t rsrvd:24; 4159 uint32_t mb_master_reset:1; 4160 uint32_t rsrvd1:2; 4161 uint32_t oem3:1; 4162 uint32_t oem2:1; 4163 uint32_t oem1:1; 4164 uint32_t sp2h_irq:1; 4165 uint32_t sp2h_irq_en:1; 4166 #else 4167 uint32_t sp2h_irq_en:1; 4168 uint32_t sp2h_irq:1; 4169 uint32_t oem1:1; 4170 uint32_t oem2:1; 4171 uint32_t oem3:1; 4172 uint32_t rsrvd1:2; 4173 uint32_t mb_master_reset:1; 4174 uint32_t rsrvd:24; 4175 #endif 4176 } bits; 4177 } bt_intmask3_t; 4178 4179 4180 /* 4181 * Register: DebugSel 4182 * CIP Debug Data Select 4183 * Description: Selects the debug data signals from the CIP blocks 4184 * Fields: 4185 * Selects up to 16 groups of gbtDebug/pipeDebug on 4186 * peuPhyVdbgDebugPort[31:0] 4187 * Selects the high DW of the debug data - default is PCIe link 4188 * status 4189 * Selects the low DW of the debug data 4190 */ 4191 typedef union { 4192 uint32_t value; 4193 struct { 4194 #if defined(_BIG_ENDIAN) 4195 uint32_t rsrvd:12; 4196 uint32_t phy_dbug_sel:4; 4197 uint32_t rsrvd1:3; 4198 uint32_t cip_hdbug_sel:5; 4199 uint32_t rsrvd2:3; 4200 uint32_t cip_ldbug_sel:5; 4201 #else 4202 uint32_t cip_ldbug_sel:5; 4203 uint32_t rsrvd2:3; 4204 uint32_t cip_hdbug_sel:5; 4205 uint32_t rsrvd1:3; 4206 uint32_t phy_dbug_sel:4; 4207 uint32_t rsrvd:12; 4208 #endif 4209 } bits; 4210 } debug_sel_t; 4211 4212 4213 /* 4214 * Register: IndaccMem0Ctrl 4215 * CIP Mem0 Debug ctrl 4216 * Description: Debug data signals from the CIP blocks 4217 * Fields: 4218 * 1: rd/wr access is done 0: rd/wr access is in progress 4219 * 1: pkt injection is done 0: pkt injection is in progress 4220 * Ingress pkt injection enable: write to 1 for single pkt 4221 * injection. Must be 0 when enabling diagnostic rd/wr access to 4222 * memories. 4223 * 1: Diagnostic rd/wr access to memories enabled 0: Diagnostic 4224 * rd/wr access to memories disabled Must be 0 when enabling pkt 4225 * injection. 4226 * 1: read, 0: write 4227 * This bit is read/writable only if mem0Diagen=1 or if 4228 * mem0Diagen bit is also written with '1' along with enabling 4229 * this bit. Else, the write will not have any effect. 1: Apply 4230 * the parity mask provided in the Prty register 0: Do not apply 4231 * the parity mask provided in the Prty register 4232 * 0 : select npdataq memory 1 : select nphdrq memory 2 : select 4233 * pdataq memory 3 : select phdrq memory 4 : select cpldataq 4234 * memory 5 : select cplhdrq memory 4235 */ 4236 typedef union { 4237 uint32_t value; 4238 struct { 4239 #if defined(_BIG_ENDIAN) 4240 uint32_t mem0_access_status:1; 4241 uint32_t rsrvd:5; 4242 uint32_t mem0_pktinj_stat:1; 4243 uint32_t mem0_pktinj_en:1; 4244 uint32_t rsrvd1:1; 4245 uint32_t mem0_diagen:1; 4246 uint32_t mem0_command:1; 4247 uint32_t mem0_prty_wen:1; 4248 uint32_t rsrvd2:1; 4249 uint32_t mem0_sel:3; 4250 uint32_t mem0_addr:16; 4251 #else 4252 uint32_t mem0_addr:16; 4253 uint32_t mem0_sel:3; 4254 uint32_t rsrvd2:1; 4255 uint32_t mem0_prty_wen:1; 4256 uint32_t mem0_command:1; 4257 uint32_t mem0_diagen:1; 4258 uint32_t rsrvd1:1; 4259 uint32_t mem0_pktinj_en:1; 4260 uint32_t mem0_pktinj_stat:1; 4261 uint32_t rsrvd:5; 4262 uint32_t mem0_access_status:1; 4263 #endif 4264 } bits; 4265 } indacc_mem0_ctrl_t; 4266 4267 4268 /* 4269 * Register: IndaccMem0Data0 4270 * CIP Mem0 Debug Data0 4271 * Description: Debug data signals from the CIP blocks 4272 * Fields: 4273 * When pktInjectionEnable is 0: Data[31:0] from/for the memory 4274 * selected by mem0Sel bits from mem0Ctrl This data is written to 4275 * the memory when indaccMem0Ctrl register is written with the 4276 * write command When indaccMem0Ctrl register is written with the 4277 * read command, this register will hold the Data[31:0] returned 4278 * from the memory When pktInjectionEnable is 1: 4279 * debugData0Reg[31:0] is used in the following ways: [17:16] = 4280 * radmTrgt1Fmt[1:0]: 2'b00 3DW MRd 2'b01 4DW MRd 2'b10 3DW MWr 4281 * 2'b11 4DW MWr [13:12] = radmTrgt1DwLen[1:0]: 2'b01 1DW 2'b10 4282 * 2DW [11:8] = radmTrgt1LastBe[3:0]: 4'b0000 1DW 4'b1111 2DW [7] 4283 * = radmTrgt1RomInRange 1'b0 PIO Access 1'b1 EEPROM Access [6:4] 4284 * = radmTrgt1InMembarRange[2:0] 3'b000 PIO Access 3'b010 MSIX 4285 * Ram/PBA Table Access [1:0] = radmTrgt1Dwen[1:0] 2'b01 4286 * 1DW->last DW is at radmTrgt1Data[31:0] 2'b11 2DW->last DW is 4287 * at radmTrgt1Data[63:32] 4288 */ 4289 typedef union { 4290 uint32_t value; 4291 struct { 4292 #if defined(_BIG_ENDIAN) 4293 uint32_t mem0_data0:32; 4294 #else 4295 uint32_t mem0_data0:32; 4296 #endif 4297 } bits; 4298 } indacc_mem0_data0_t; 4299 4300 4301 /* 4302 * Register: IndaccMem0Data1 4303 * CIP Mem0 Debug Data1 4304 * Description: Debug data signals from the CIP blocks 4305 * Fields: 4306 * When pktInjectionEnable is 0: Data[63:32] from/for the memory 4307 * selected by mem0Sel bits from mem0Ctrl This data is written to 4308 * the memory when indaccMem0Ctrl register is written with the 4309 * write command When indaccMem0Ctrl register is written with the 4310 * read command, this register will hold the Data[63:32] returned 4311 * from the memory When pktInjectionEnable is 1: 4312 * debugData1Reg[31:0] is used as radmTrgt1Addr[31:0]. 4313 */ 4314 typedef union { 4315 uint32_t value; 4316 struct { 4317 #if defined(_BIG_ENDIAN) 4318 uint32_t mem0_data1:32; 4319 #else 4320 uint32_t mem0_data1:32; 4321 #endif 4322 } bits; 4323 } indacc_mem0_data1_t; 4324 4325 4326 /* 4327 * Register: IndaccMem0Data2 4328 * CIP Mem0 Debug Data2 4329 * Description: Debug data signals from the CIP blocks 4330 * Fields: 4331 * When pktInjectionEnable is 0: Data[95:64] from/for the memory 4332 * selected by mem0Sel bits from mem0Ctrl This data is written to 4333 * the memory when indaccMem0Ctrl register is written with the 4334 * write command When indaccMem0Ctrl register is written with the 4335 * read command, this register will hold the Data[95:64] returned 4336 * from the memory When pktInjectionEnable is 1: 4337 * debugData2Reg[31:0] is used as radmTrgt1Data[63:32]. Allows up 4338 * to QW=2DW access. 4339 */ 4340 typedef union { 4341 uint32_t value; 4342 struct { 4343 #if defined(_BIG_ENDIAN) 4344 uint32_t mem0_data2:32; 4345 #else 4346 uint32_t mem0_data2:32; 4347 #endif 4348 } bits; 4349 } indacc_mem0_data2_t; 4350 4351 4352 /* 4353 * Register: IndaccMem0Data3 4354 * CIP Mem0 Debug Data3 4355 * Description: Debug data signals from the CIP blocks 4356 * Fields: 4357 * When pktInjectionEnable is 0: Data[127:96] from/for the memory 4358 * selected by mem0Sel bits from mem0Ctrl This data is written to 4359 * the memory when indaccMem0Ctrl register is written with the 4360 * write command When indaccMem0Ctrl register is written with the 4361 * read command, this register will hold the Data[127:96] 4362 * returned from the memory When pktInjectionEnable is 1: 4363 * debugData3Reg[31:0] is used as radmTrgt1Data[31:0]. 4364 */ 4365 typedef union { 4366 uint32_t value; 4367 struct { 4368 #if defined(_BIG_ENDIAN) 4369 uint32_t mem0_data3:32; 4370 #else 4371 uint32_t mem0_data3:32; 4372 #endif 4373 } bits; 4374 } indacc_mem0_data3_t; 4375 4376 4377 /* 4378 * Register: IndaccMem0Prty 4379 * CIP Mem0 Debug Parity 4380 * Description: Debug data signals from the CIP blocks 4381 * Fields: 4382 * parity mask bits for the memory selected by mem0Sel bits from 4383 * mem0Ctrl to inject parity error These bits serve two purposes 4384 * regarding memory parity : - During indirect write access to 4385 * the memories, the value in this register is applied as mask to 4386 * the actual parity if prtyWen bit of the indaccCtrl register 4387 * has been enabled. The masked parity and data are written into 4388 * the specified memory location. - During indirect read access 4389 * to the memories, the value in this register is overwritten 4390 * with the parity value read from the memory location. If the 4391 * parity mask had been set and enabled to be written into this 4392 * location it will generate parity error for that memory 4393 * location 4394 */ 4395 typedef union { 4396 uint32_t value; 4397 struct { 4398 #if defined(_BIG_ENDIAN) 4399 uint32_t rsrvd:18; 4400 uint32_t mem0_parity:14; 4401 #else 4402 uint32_t mem0_parity:14; 4403 uint32_t rsrvd:18; 4404 #endif 4405 } bits; 4406 } indacc_mem0_prty_t; 4407 4408 4409 /* 4410 * Register: IndaccMem1Ctrl 4411 * CIP Mem1 Debug ctrl 4412 * Description: Debug data signals from the CIP blocks 4413 * Fields: 4414 * 1: rd/wr access is done 0: rd/wr access is in progress 4415 * 1: client pkt injection is done 0: client pkt injection is in 4416 * progress 4417 * 1: client1 pkt injection 0: client0 pkt injection 4418 * Mutually exclusive: Either client0 or client1 egress pkt 4419 * injection enable: write to 1 for single pkt injection. Must be 4420 * 0 when enabling diagnostic rd/wr access to memories. 4421 * 1: Diagnostic rd/wr access enabled 0: Diagnostic rd/wr access 4422 * disabled Must be 0 when enabling pkt injection. 4423 * 1: read, 0: write 4424 * This bit is read/writable only if mem1Diagen=1 or if 4425 * mem1Diagen bit is also written with '1' along with enabling 4426 * this bit. Else, the write will not have any effect. 1: Apply 4427 * the parity mask provided in the Prty register 0: Do not apply 4428 * the parity mask provided in the Prty register 4429 * 0 : select retry sot memory 1 : select retry buffer memory 2 : 4430 * select msix memory 3 : select hcr cfg memory 4431 */ 4432 typedef union { 4433 uint32_t value; 4434 struct { 4435 #if defined(_BIG_ENDIAN) 4436 uint32_t mem1_access_status:1; 4437 uint32_t rsrvd:4; 4438 uint32_t mem1_pktinj_stat:1; 4439 uint32_t mem1_pktinj_client:1; 4440 uint32_t mem1_pktinj_en:1; 4441 uint32_t rsrvd1:1; 4442 uint32_t mem1_diagen:1; 4443 uint32_t mem1_command:1; 4444 uint32_t mem1_prty_wen:1; 4445 uint32_t rsrvd2:2; 4446 uint32_t mem1_sel:2; 4447 uint32_t mem1_addr:16; 4448 #else 4449 uint32_t mem1_addr:16; 4450 uint32_t mem1_sel:2; 4451 uint32_t rsrvd2:2; 4452 uint32_t mem1_prty_wen:1; 4453 uint32_t mem1_command:1; 4454 uint32_t mem1_diagen:1; 4455 uint32_t rsrvd1:1; 4456 uint32_t mem1_pktinj_en:1; 4457 uint32_t mem1_pktinj_client:1; 4458 uint32_t mem1_pktinj_stat:1; 4459 uint32_t rsrvd:4; 4460 uint32_t mem1_access_status:1; 4461 #endif 4462 } bits; 4463 } indacc_mem1_ctrl_t; 4464 4465 4466 /* 4467 * Register: IndaccMem1Data0 4468 * CIP Mem1 Debug Data0 4469 * Description: Debug data signals from the CIP blocks 4470 * Fields: 4471 * When pktInjectionEnable is 0: Data[31:0] from/for the memory 4472 * selected by mem1Sel bits from mem1Ctrl This data is written to 4473 * the memory when indaccMem1Ctrl register is written with the 4474 * write command When indaccMem1Ctrl register is written with the 4475 * read command, this register will hold the Data[31:0] returned 4476 * from the memory 4477 * When pktInjectionEnable is 1: debugData0Reg[31:0] is used in 4478 * the following ways: [27:26] = tdcPeuTlp0[or 4479 * rdcPeuTlp1]_fmt[1:0]: 2'b00 3DW MRd 2'b01 4DW MRd 2'b10 3DW 4480 * MWr 2'b11 4DW MWr [25:13] = tdcPeuTlp0[or 4481 * rdcPeuTlp1]_byteLen[12:0]: Note MWr must be limited to 4B = 4482 * 13'b0000000000001. [12:8] = tdcPeuTlp0[or 4483 * rdcPeuTlp1]_tid[4:0]: 5 lsb of tid (TAG ID) [7:0] = 4484 * tdcPeuTlp0[or rdcPeuTlp1]_byteEn[7:0]: [7:4] = last DW byte 4485 * enables [3:0] = first DW byte enables 4486 */ 4487 typedef union { 4488 uint32_t value; 4489 struct { 4490 #if defined(_BIG_ENDIAN) 4491 uint32_t mem1_data0:32; 4492 #else 4493 uint32_t mem1_data0:32; 4494 #endif 4495 } bits; 4496 } indacc_mem1_data0_t; 4497 4498 4499 /* 4500 * Register: IndaccMem1Data1 4501 * CIP Mem1 Debug Data1 4502 * Description: Debug data signals from the CIP blocks 4503 * Fields: 4504 * When pktInjectionEnable is 0: Data[63:32] from/for the memory 4505 * selected by mem1Sel bits from mem1Ctrl This data is written to 4506 * the memory when indaccMem1Ctrl register is written with the 4507 * write command When indaccMem1Ctrl register is written with the 4508 * read command, this register will hold the Data[63:32] returned 4509 * from the memory 4510 * When pktInjectionEnable is 1: debugData1Reg[31:0] is used as 4511 * tdcPeuTlp0[or rdcPeuTlp1]_addr[63:32] high address bits. 4512 */ 4513 typedef union { 4514 uint32_t value; 4515 struct { 4516 #if defined(_BIG_ENDIAN) 4517 uint32_t mem1_data1:32; 4518 #else 4519 uint32_t mem1_data1:32; 4520 #endif 4521 } bits; 4522 } indacc_mem1_data1_t; 4523 4524 4525 /* 4526 * Register: IndaccMem1Data2 4527 * CIP Mem1 Debug Data2 4528 * Description: Debug data signals from the CIP blocks 4529 * Fields: 4530 * When pktInjectionEnable is 0: Data[95:64] from/for the memory 4531 * selected by mem1Sel bits from mem1Ctrl This data is written to 4532 * the memory when indaccMem1Ctrl register is written with the 4533 * write command When indaccMem1Ctrl register is written with the 4534 * read command, this register will hold the Data[95:64] returned 4535 * from the memory 4536 * When pktInjectionEnable is 1: debugData2Reg[31:0] is used as 4537 * tdcPeuTlp0[or rdcPeuTlp1]_addr[31:0] low address bits. 4538 */ 4539 typedef union { 4540 uint32_t value; 4541 struct { 4542 #if defined(_BIG_ENDIAN) 4543 uint32_t mem1_data2:32; 4544 #else 4545 uint32_t mem1_data2:32; 4546 #endif 4547 } bits; 4548 } indacc_mem1_data2_t; 4549 4550 4551 /* 4552 * Register: IndaccMem1Data3 4553 * CIP Mem1 Debug Data3 4554 * Description: Debug data signals from the CIP blocks 4555 * Fields: 4556 * When pktInjectionEnable is 0: Data[127:96] from/for the memory 4557 * selected by mem1Sel bits from mem1Ctrl This data is written to 4558 * the memory when indaccMem1Ctrl register is written with the 4559 * write command When indaccMem1Ctrl register is written with the 4560 * read command, this register will hold the Data[127:96] 4561 * returned from the memory 4562 * When pktInjectionEnable is 1: debugData3Reg[31:0] is used as 4563 * tdcPeuTlp0[or rdcPeuTlp1]_data[31:0] Limited for MWr to 1 DW. 4564 */ 4565 typedef union { 4566 uint32_t value; 4567 struct { 4568 #if defined(_BIG_ENDIAN) 4569 uint32_t mem1_data3:32; 4570 #else 4571 uint32_t mem1_data3:32; 4572 #endif 4573 } bits; 4574 } indacc_mem1_data3_t; 4575 4576 4577 /* 4578 * Register: IndaccMem1Prty 4579 * CIP Mem1 Debug Parity 4580 * Description: Debug data signals from the CIP blocks 4581 * Fields: 4582 * parity mask bits for the memory selected by mem1Sel bits from 4583 * mem1Ctrl to inject parity error These bits serve two purposes 4584 * regarding memory parity : - During indirect write access to 4585 * the memories, the value in this register is applied as mask to 4586 * the actual parity if prtyWen bit of the indaccCtrl register 4587 * has been enabled. The masked parity and data are written into 4588 * the specified memory location. - During indirect read access 4589 * to the memories, the value in this register is overwritten 4590 * with the parity value read from the memory location. If the 4591 * parity mask had been set and enabled to be written into this 4592 * location it will generate parity error for that memory 4593 * location 4594 */ 4595 typedef union { 4596 uint32_t value; 4597 struct { 4598 #if defined(_BIG_ENDIAN) 4599 uint32_t rsrvd:20; 4600 uint32_t mem1_parity:12; 4601 #else 4602 uint32_t mem1_parity:12; 4603 uint32_t rsrvd:20; 4604 #endif 4605 } bits; 4606 } indacc_mem1_prty_t; 4607 4608 4609 /* 4610 * Register: PhyDebugTrainingVec 4611 * peuPhy Debug Training Vector 4612 * Description: peuPhy Debug Training Vector register. 4613 * Fields: 4614 * Hard-coded value for peuPhy wrt global debug training block 4615 * signatures. 4616 * Blade Number, the value read depends on the blade this block 4617 * resides 4618 * debug training vector the sub-group select value of 0 selects 4619 * this vector 4620 */ 4621 typedef union { 4622 uint32_t value; 4623 struct { 4624 #if defined(_BIG_ENDIAN) 4625 uint32_t dbg_msb:1; 4626 uint32_t bld_num:3; 4627 uint32_t phydbg_training_vec:28; 4628 #else 4629 uint32_t phydbg_training_vec:28; 4630 uint32_t bld_num:3; 4631 uint32_t dbg_msb:1; 4632 #endif 4633 } bits; 4634 } phy_debug_training_vec_t; 4635 4636 4637 /* 4638 * Register: PeuDebugTrainingVec 4639 * PEU Debug Training Vector 4640 * Description: PEU Debug Training Vector register. 4641 * Fields: 4642 * Hard-coded value for PEU (VNMy - core clk domain) wrt global 4643 * debug training block signatures. 4644 * Blade Number, the value read depends on the blade this block 4645 * resides 4646 * debug training vector the sub-group select value of 0 selects 4647 * this vector 4648 * Hard-coded value for PEU (VNMy - core clk domain) wrt global 4649 * debug training block signatures. 4650 * Blade Number, the value read depends on the blade this block 4651 * resides 4652 * debug training vector the sub-group select value of 0 selects 4653 * this vector 4654 */ 4655 typedef union { 4656 uint32_t value; 4657 struct { 4658 #if defined(_BIG_ENDIAN) 4659 uint32_t dbgmsb_upper:1; 4660 uint32_t bld_num_upper:3; 4661 uint32_t peudbg_upper_training_vec:12; 4662 uint32_t dbgmsb_lower:1; 4663 uint32_t bld_num_lower:3; 4664 uint32_t peudbg_lower_training_vec:12; 4665 #else 4666 uint32_t peudbg_lower_training_vec:12; 4667 uint32_t bld_num_lower:3; 4668 uint32_t dbgmsb_lower:1; 4669 uint32_t peudbg_upper_training_vec:12; 4670 uint32_t bld_num_upper:3; 4671 uint32_t dbgmsb_upper:1; 4672 #endif 4673 } bits; 4674 } peu_debug_training_vec_t; 4675 4676 4677 /* 4678 * Register: PipeCfg0 4679 * PIPE Configuration 4680 * Description: These are controls signals for the pipe core and are 4681 * used to define the PIPE core configuration with PipeCfg1 reg value 4682 * (0x08124) 4683 * Fields: 4684 * If this bit is 1 when pipe reset is released, then the value 4685 * on the pipe core's input port 'pipeParameter' is loaded into 4686 * the Pipe Core's internal Rx/Tx Parameter register which is 4687 * pipeRxTxParam at addr 0x01010. Note that it is software's 4688 * responsibility to program the pipeParameter (Pipe Cfg1) 4689 * register correctly: e.g. LOSADJ must be 0x1. 4690 */ 4691 typedef union { 4692 uint32_t value; 4693 struct { 4694 #if defined(_BIG_ENDIAN) 4695 uint32_t rsrvd:21; 4696 uint32_t pipe_serdes_x1:1; 4697 uint32_t pipe_force_ewrap:1; 4698 uint32_t pipe_force_loopback:1; 4699 uint32_t pipe_force_parm:1; 4700 uint32_t pipe_freq_sel:1; 4701 uint32_t pipe_p1_pdown:1; 4702 uint32_t pipe_p1_pdtx:1; 4703 uint32_t pipe_same_sel:1; 4704 uint32_t pipe_system_clk:1; 4705 uint32_t gbt_term_i:2; 4706 #else 4707 uint32_t gbt_term_i:2; 4708 uint32_t pipe_system_clk:1; 4709 uint32_t pipe_same_sel:1; 4710 uint32_t pipe_p1_pdtx:1; 4711 uint32_t pipe_p1_pdown:1; 4712 uint32_t pipe_freq_sel:1; 4713 uint32_t pipe_force_parm:1; 4714 uint32_t pipe_force_loopback:1; 4715 uint32_t pipe_force_ewrap:1; 4716 uint32_t pipe_serdes_x1:1; 4717 uint32_t rsrvd:21; 4718 #endif 4719 } bits; 4720 } pipe_cfg0_t; 4721 4722 4723 /* 4724 * Register: PipeCfg1 4725 * PIPE Configuration 4726 * Description: These values define the PIPE core configuration and 4727 * is presented on the Pipe core's input port 'pipeParameter'. 4728 * The value on the pipe core's input 'pipeParameter' is loaded into 4729 * the pipe core's internal Rx/Tx Parameter register, which is 4730 * pipeRxTxParam at addr 0x01010, by forcing the pipeForceParm bit of 4731 * the Pipe Cfg0 Register at address 0x08120. 4732 * 4733 * Fields: 4734 * Tx Driver Emphasis 4735 * Serial output Slew Rate Control 4736 * Tx Voltage Mux control 4737 * Tx Voltage Pulse control 4738 * Output Swing setting 4739 * Transmitter Clock generator pole adjust 4740 * Transmitter Clock generator zero adjust 4741 * Receiver Clock generator pole adjust 4742 * Receiver Clock generator zero adjust 4743 * Bias Control for factory testing and debugging 4744 * Receiver LOS Threshold adjustment. LSI suggests this POR 4745 * default value must be 0x1 (which is the POR default value of 4746 * the Pipe Rx/Tx Parameter Register). 4747 * Receiver Input Equalizer control 4748 */ 4749 typedef union { 4750 uint32_t value; 4751 struct { 4752 #if defined(_BIG_ENDIAN) 4753 uint32_t rsrvd:1; 4754 uint32_t emph:3; 4755 uint32_t rsrvd1:1; 4756 uint32_t risefall:3; 4757 uint32_t vmuxlo:2; 4758 uint32_t vpulselo:2; 4759 uint32_t vtxlo:4; 4760 uint32_t tp:2; 4761 uint32_t tz:2; 4762 uint32_t rp:2; 4763 uint32_t rz:2; 4764 uint32_t biascntl:1; 4765 uint32_t losadj:3; 4766 uint32_t rxeq:4; 4767 #else 4768 uint32_t rxeq:4; 4769 uint32_t losadj:3; 4770 uint32_t biascntl:1; 4771 uint32_t rz:2; 4772 uint32_t rp:2; 4773 uint32_t tz:2; 4774 uint32_t tp:2; 4775 uint32_t vtxlo:4; 4776 uint32_t vpulselo:2; 4777 uint32_t vmuxlo:2; 4778 uint32_t risefall:3; 4779 uint32_t rsrvd1:1; 4780 uint32_t emph:3; 4781 uint32_t rsrvd:1; 4782 #endif 4783 } bits; 4784 } pipe_cfg1_t; 4785 4786 4787 /* 4788 * Register: CipBarMaskCfg 4789 * BAR Mask Config 4790 * Description: To write to the BAR MASK registers in the EP Core PCI 4791 * Config registers This register should be initialised before 4792 * writing the value to into the cipBarMask register. The lower 3 4793 * bits define the BAR register number whose mask value has to be 4794 * over written with the values that will be written into the 4795 * cipBarMask register. [2:0] = 0 thru 5 selects bar0Mask thru 4796 * bar5Mask registers = 6,7 selects Expansion romBarMask register 4797 * Hydra's configuration for the BARs is as below : BAR1, BAR0 : 4798 * Forms 64 bit PIO BAR. BAR1 handles the upper address bits BAR0 4799 * handles the lower address bits BAR3, BAR2 : Forms 64 bit MSIX BAR 4800 * BAR3 handles the upper address bits BAR2 handles the lower address 4801 * bits BAR5, BAR4 : Not used and so disabled. Hence, user writes 4802 * will not have any effect. romBar : Expansion romBar 4803 * 4804 * Fields: 4805 * 0 : bar0Mask 1 : bar1Mask 2 : bar2Mask 3 : bar3Mask 4 : 4806 * bar4Mask 5 : bar5Mask 6, 7 ; romBarMask 4807 */ 4808 typedef union { 4809 uint32_t value; 4810 struct { 4811 #if defined(_BIG_ENDIAN) 4812 uint32_t rsrvd:29; 4813 uint32_t data:3; 4814 #else 4815 uint32_t data:3; 4816 uint32_t rsrvd:29; 4817 #endif 4818 } bits; 4819 } cip_bar_mask_cfg_t; 4820 4821 4822 /* 4823 * Register: CipBarMask 4824 * BAR Mask 4825 * Description: Value to write to the BAR MASK registers in the EP 4826 * Core PCI Config registers The lower 3 bits of cipMaskCfg register 4827 * define the BAR register number Write to this register will 4828 * initiate the DBI access to the EP Core. The cipBarMaskCfg register 4829 * should be setup before writing to this register. [31:1] = Mask 4830 * value [0] = 1: BAR is enabled; 0: BAR is disabled. Note that the 4831 * BAR must be enabled ([0] == 1) before the Mask value will be 4832 * written into the actual bar mask register. If the BAR is disabled 4833 * ([0]==0), two writes to this register are required before the Mask 4834 * value is written into the actual bar mask register. Refer to EP 4835 * core data book for more details. 4836 * 4837 * Fields: 4838 */ 4839 typedef union { 4840 uint32_t value; 4841 struct { 4842 #if defined(_BIG_ENDIAN) 4843 uint32_t data:32; 4844 #else 4845 uint32_t data:32; 4846 #endif 4847 } bits; 4848 } cip_bar_mask_t; 4849 4850 4851 /* 4852 * Register: CipLdsv0Stat 4853 * LDSV0 Status (for debug purpose) 4854 * Description: Returns the status of LDSV0 Flags regardless of their 4855 * group 4856 * 4857 * Fields: 4858 */ 4859 typedef union { 4860 uint32_t value; 4861 struct { 4862 #if defined(_BIG_ENDIAN) 4863 uint32_t data:32; 4864 #else 4865 uint32_t data:32; 4866 #endif 4867 } bits; 4868 } cip_ldsv0_stat_t; 4869 4870 4871 /* 4872 * Register: CipLdsv1Stat 4873 * LDSV1 Status (for debug purpose) 4874 * Description: Returns the status of LDSV1 Flags regardless of their 4875 * group 4876 * 4877 * Fields: 4878 */ 4879 typedef union { 4880 uint32_t value; 4881 struct { 4882 #if defined(_BIG_ENDIAN) 4883 uint32_t data:32; 4884 #else 4885 uint32_t data:32; 4886 #endif 4887 } bits; 4888 } cip_ldsv1_stat_t; 4889 4890 4891 /* 4892 * Register: PeuIntrStat 4893 * PEU Interrupt Status 4894 * Description: Returns the parity error status of all of the PEU 4895 * RAMs, and external (to peu) block pio access errors. External 4896 * block pio access errors could be due to either host or SPI 4897 * initiated accesses. These fields are RO and can be cleared only 4898 * through a cip reset All these errors feed to devErrStat.peuErr1 4899 * which in turn feed to LDSV1.devErr1 4900 * Partity Error bits: These bits log the very first parity error 4901 * detected in a particular memory. The corresponding memory location 4902 * is logged in respective perrLoc registers. External Block PIO 4903 * Access Error bits: These bits log the very first error that 4904 * resulted in access error. The corresponding address is logged in 4905 * respective accErrLog registers. 4906 * These bits can be set by writing a '1' to the corresponding 4907 * mirror bit in the peuIntrStatMirror register. 4908 * Note: PEU RAM Parity Errors and their corresponding interrupt: 4909 * When these bits are set and the device error status interrupt is 4910 * not masked, the PEU attempts to send the corresponding interrupt 4911 * back to the RC. Depending on which ram is impacted and the 4912 * corresponding logic impacted in the EP core, a coherent interrupt 4913 * message may not be sent in all cases. For the times when the EP 4914 * core is unable to send an interrupt, the SPI interface is to be 4915 * used for error diagnosis as the PEU interrupt status is logged 4916 * regardless of whether the interrupt is sent to the RC. The 4917 * following data was collected via simulation: -Parity error 4918 * impacted rams that likely will be able to send an interrupt: 4919 * npDataq, pDataq, cplDataq, hcr. -Parity error impacted rams that 4920 * may not be able to send an interrupt: npHdrq, pHdrq, cplHdrq, MSIx 4921 * table, retryram, retrysot. 4922 * 4923 * Fields: 4924 * Error indication from SPROM Controller for Sprom Download 4925 * access This error indicates that a parity error was detected 4926 * from SRAM. For more details, please refer to SPROM Controller 4927 * PRM. 4928 * Error indication from TDC for PIO access The error location 4929 * and type are logged in tdcPioaccErrLog 4930 * Error indication from RDC for PIO access The error location 4931 * and type are logged in rdcPioaccErrLog 4932 * Error indication from PFC for PIO access The error location 4933 * and type are logged in pfcPioaccErrLog 4934 * Error indication from VMAC for PIO access The error location 4935 * and type are logged in vmacPioaccErrLog 4936 * memory in PCIe data path and value unknown until packet flow 4937 * starts. 4938 * memory in PCIe data path and value unknown until packet flow 4939 * starts. 4940 * memory in PCIe data path and value unknown until packet flow 4941 * starts. 4942 * memory in PCIe data path and value unknown until packet flow 4943 * starts. 4944 * memory in PCIe data path and value unknown until packet flow 4945 * starts. 4946 * memory in PCIe data path and value unknown until packet flow 4947 * starts. 4948 * memory in PCIe data path and value unknown until packet flow 4949 * starts. 4950 * memory in PCIe data path and value unknown until packet flow 4951 * starts. 4952 */ 4953 typedef union { 4954 uint32_t value; 4955 struct { 4956 #if defined(_BIG_ENDIAN) 4957 uint32_t rsrvd:11; 4958 uint32_t spc_acc_err:1; 4959 uint32_t tdc_pioacc_err:1; 4960 uint32_t rdc_pioacc_err:1; 4961 uint32_t pfc_pioacc_err:1; 4962 uint32_t vmac_pioacc_err:1; 4963 uint32_t rsrvd1:6; 4964 uint32_t cpl_hdrq_parerr:1; 4965 uint32_t cpl_dataq_parerr:1; 4966 uint32_t retryram_xdlh_parerr:1; 4967 uint32_t retrysotram_xdlh_parerr:1; 4968 uint32_t p_hdrq_parerr:1; 4969 uint32_t p_dataq_parerr:1; 4970 uint32_t np_hdrq_parerr:1; 4971 uint32_t np_dataq_parerr:1; 4972 uint32_t eic_msix_parerr:1; 4973 uint32_t hcr_parerr:1; 4974 #else 4975 uint32_t hcr_parerr:1; 4976 uint32_t eic_msix_parerr:1; 4977 uint32_t np_dataq_parerr:1; 4978 uint32_t np_hdrq_parerr:1; 4979 uint32_t p_dataq_parerr:1; 4980 uint32_t p_hdrq_parerr:1; 4981 uint32_t retrysotram_xdlh_parerr:1; 4982 uint32_t retryram_xdlh_parerr:1; 4983 uint32_t cpl_dataq_parerr:1; 4984 uint32_t cpl_hdrq_parerr:1; 4985 uint32_t rsrvd1:6; 4986 uint32_t vmac_pioacc_err:1; 4987 uint32_t pfc_pioacc_err:1; 4988 uint32_t rdc_pioacc_err:1; 4989 uint32_t tdc_pioacc_err:1; 4990 uint32_t spc_acc_err:1; 4991 uint32_t rsrvd:11; 4992 #endif 4993 } bits; 4994 } peu_intr_stat_t; 4995 4996 4997 /* 4998 * Register: PeuIntrMask 4999 * Parity Error Status Mask 5000 * Description: Masks for interrupt generation for block and parity 5001 * error in the PEU RAMs For the VNM errors (spc, tdc, rdc, pfc, & 5002 * vmac), note that the interrupt message to the host will be delayed 5003 * from the actual moment that the error is detected until the host 5004 * does a PIO access and this mask is cleared. 5005 * 5006 * Fields: 5007 * 1: Mask interrupt generation for access error from SPROM 5008 * Controller 5009 * 1: Mask interrupt generation for PIO access error from TDC 5010 * 1: Mask interrupt generation for PIO access error from RDC 5011 * 1: Mask interrupt generation for PIO access error from PFC 5012 * 1: Mask interrupt generation for PIO access error from VMAC 5013 * 1: Mask interrupt generation for parity error from Completion 5014 * Header Q memory 5015 * 1: Mask interrupt generation for parity error from Completion 5016 * Data Q memory 5017 * 1: Mask interrupt generation for parity error from Retry 5018 * memory 5019 * 1: Mask interrupt generation for parity error from Retry SOT 5020 * memory 5021 * 1: Mask interrupt generation for parity error from Posted 5022 * Header Q memory 5023 * 1: Mask interrupt generation for parity error from Posted Data 5024 * Q memory 5025 * 1: Mask interrupt generation for parity error from Non-Posted 5026 * Header Q memory 5027 * 1: Mask interrupt generation for parity error from Non-Posted 5028 * Data Q memory 5029 * 1: Mask interrupt generation for parity error from MSIX memory 5030 * 1: Mask interrupt generation for parity error from HCR memory 5031 */ 5032 typedef union { 5033 uint32_t value; 5034 struct { 5035 #if defined(_BIG_ENDIAN) 5036 uint32_t rsrvd:11; 5037 uint32_t spc_acc_err_mask:1; 5038 uint32_t tdc_pioacc_err_mask:1; 5039 uint32_t rdc_pioacc_err_mask:1; 5040 uint32_t pfc_pioacc_err_mask:1; 5041 uint32_t vmac_pioacc_err_mask:1; 5042 uint32_t rsrvd1:6; 5043 uint32_t cpl_hdrq_parerr_mask:1; 5044 uint32_t cpl_dataq_parerr_mask:1; 5045 uint32_t retryram_xdlh_parerr_mask:1; 5046 uint32_t retrysotram_xdlh_parerr_mask:1; 5047 uint32_t p_hdrq_parerr_mask:1; 5048 uint32_t p_dataq_parerr_mask:1; 5049 uint32_t np_hdrq_parerr_mask:1; 5050 uint32_t np_dataq_parerr_mask:1; 5051 uint32_t eic_msix_parerr_mask:1; 5052 uint32_t hcr_parerr_mask:1; 5053 #else 5054 uint32_t hcr_parerr_mask:1; 5055 uint32_t eic_msix_parerr_mask:1; 5056 uint32_t np_dataq_parerr_mask:1; 5057 uint32_t np_hdrq_parerr_mask:1; 5058 uint32_t p_dataq_parerr_mask:1; 5059 uint32_t p_hdrq_parerr_mask:1; 5060 uint32_t retrysotram_xdlh_parerr_mask:1; 5061 uint32_t retryram_xdlh_parerr_mask:1; 5062 uint32_t cpl_dataq_parerr_mask:1; 5063 uint32_t cpl_hdrq_parerr_mask:1; 5064 uint32_t rsrvd1:6; 5065 uint32_t vmac_pioacc_err_mask:1; 5066 uint32_t pfc_pioacc_err_mask:1; 5067 uint32_t rdc_pioacc_err_mask:1; 5068 uint32_t tdc_pioacc_err_mask:1; 5069 uint32_t spc_acc_err_mask:1; 5070 uint32_t rsrvd:11; 5071 #endif 5072 } bits; 5073 } peu_intr_mask_t; 5074 5075 5076 /* 5077 * Register: PeuIntrStatMirror 5078 * Parity Error Status Mirror 5079 * Description: Mirror bits for Parity error generation in the PEU 5080 * RAMs When set, the corresponding parity error is generated ; this 5081 * will cause an interrupt to occur if the respective mask bit is not 5082 * set. As the mirror of the Parity Error Status Register, clearing 5083 * of the status bits is controlled by how the Parity Error Status 5084 * Register is cleared. These bits cannot be cleared by writing 0 to 5085 * this register. 5086 * 5087 * Fields: 5088 */ 5089 typedef union { 5090 uint32_t value; 5091 struct { 5092 #if defined(_BIG_ENDIAN) 5093 uint32_t rsrvd:11; 5094 uint32_t spc_acc_err_mirror:1; 5095 uint32_t tdc_pioacc_err_mirror:1; 5096 uint32_t rdc_pioacc_err_mirror:1; 5097 uint32_t pfc_pioacc_err_mirror:1; 5098 uint32_t vmac_pioacc_err_mirror:1; 5099 uint32_t rsrvd1:6; 5100 uint32_t cpl_hdrq_parerr_mirror:1; 5101 uint32_t cpl_dataq_parerr_mirror:1; 5102 uint32_t retryram_xdlh_parerr_mirror:1; 5103 uint32_t retrysotram_xdlh_parerr_mirror:1; 5104 uint32_t p_hdrq_parerr_mirror:1; 5105 uint32_t p_dataq_parerr_mirror:1; 5106 uint32_t np_hdrq_parerr_mirror:1; 5107 uint32_t np_dataq_parerr_mirror:1; 5108 uint32_t eic_msix_parerr_mirror:1; 5109 uint32_t hcr_parerr_mirror:1; 5110 #else 5111 uint32_t hcr_parerr_mirror:1; 5112 uint32_t eic_msix_parerr_mirror:1; 5113 uint32_t np_dataq_parerr_mirror:1; 5114 uint32_t np_hdrq_parerr_mirror:1; 5115 uint32_t p_dataq_parerr_mirror:1; 5116 uint32_t p_hdrq_parerr_mirror:1; 5117 uint32_t retrysotram_xdlh_parerr_mirror:1; 5118 uint32_t retryram_xdlh_parerr_mirror:1; 5119 uint32_t cpl_dataq_parerr_mirror:1; 5120 uint32_t cpl_hdrq_parerr_mirror:1; 5121 uint32_t rsrvd1:6; 5122 uint32_t vmac_pioacc_err_mirror:1; 5123 uint32_t pfc_pioacc_err_mirror:1; 5124 uint32_t rdc_pioacc_err_mirror:1; 5125 uint32_t tdc_pioacc_err_mirror:1; 5126 uint32_t spc_acc_err_mirror:1; 5127 uint32_t rsrvd:11; 5128 #endif 5129 } bits; 5130 } peu_intr_stat_mirror_t; 5131 5132 5133 /* 5134 * Register: CplHdrqPerrLoc 5135 * Completion Header Queue Parity Error Location 5136 * Description: Returns the location of the first parity error 5137 * detected in Completion Header Q 5138 * 5139 * Fields: 5140 */ 5141 typedef union { 5142 uint32_t value; 5143 struct { 5144 #if defined(_BIG_ENDIAN) 5145 uint32_t rsrvd:16; 5146 uint32_t cpl_hdrq_parerr_loc:16; 5147 #else 5148 uint32_t cpl_hdrq_parerr_loc:16; 5149 uint32_t rsrvd:16; 5150 #endif 5151 } bits; 5152 } cpl_hdrq_perr_loc_t; 5153 5154 5155 /* 5156 * Register: CplDataqPerrLoc 5157 * Completion Data Queue Parity Error Location 5158 * Description: Returns the location of the first parity error 5159 * detected in Completion Data Q 5160 * 5161 * Fields: 5162 */ 5163 typedef union { 5164 uint32_t value; 5165 struct { 5166 #if defined(_BIG_ENDIAN) 5167 uint32_t rsrvd:16; 5168 uint32_t cpl_dataq_parerr_loc:16; 5169 #else 5170 uint32_t cpl_dataq_parerr_loc:16; 5171 uint32_t rsrvd:16; 5172 #endif 5173 } bits; 5174 } cpl_dataq_perr_loc_t; 5175 5176 5177 /* 5178 * Register: RetrPerrLoc 5179 * Retry RAM Parity Error Location 5180 * Description: Returns the location of the first parity error 5181 * detected in Retry RAM 5182 * 5183 * Fields: 5184 */ 5185 typedef union { 5186 uint32_t value; 5187 struct { 5188 #if defined(_BIG_ENDIAN) 5189 uint32_t rsrvd:16; 5190 uint32_t retr_parerr_loc:16; 5191 #else 5192 uint32_t retr_parerr_loc:16; 5193 uint32_t rsrvd:16; 5194 #endif 5195 } bits; 5196 } retr_perr_loc_t; 5197 5198 5199 /* 5200 * Register: RetrSotPerrLoc 5201 * Retry SOT RAM Parity Error Location 5202 * Description: Returns the location of the first parity error 5203 * detected in Retry RAM SOT 5204 * 5205 * Fields: 5206 */ 5207 typedef union { 5208 uint32_t value; 5209 struct { 5210 #if defined(_BIG_ENDIAN) 5211 uint32_t rsrvd:16; 5212 uint32_t retr_sot_parerr_loc:16; 5213 #else 5214 uint32_t retr_sot_parerr_loc:16; 5215 uint32_t rsrvd:16; 5216 #endif 5217 } bits; 5218 } retr_sot_perr_loc_t; 5219 5220 5221 /* 5222 * Register: PHdrqPerrLoc 5223 * Posted Header Queue Parity Error Location 5224 * Description: Returns the location of the first parity error 5225 * detected in Posted Header Q 5226 * 5227 * Fields: 5228 */ 5229 typedef union { 5230 uint32_t value; 5231 struct { 5232 #if defined(_BIG_ENDIAN) 5233 uint32_t rsrvd:16; 5234 uint32_t p_hdrq_parerr_loc:16; 5235 #else 5236 uint32_t p_hdrq_parerr_loc:16; 5237 uint32_t rsrvd:16; 5238 #endif 5239 } bits; 5240 } p_hdrq_perr_loc_t; 5241 5242 5243 /* 5244 * Register: PDataqPerrLoc 5245 * Posted Data Queue Parity Error Location 5246 * Description: Returns the location of the first parity error 5247 * detected in Posted Data Q 5248 * 5249 * Fields: 5250 */ 5251 typedef union { 5252 uint32_t value; 5253 struct { 5254 #if defined(_BIG_ENDIAN) 5255 uint32_t rsrvd:16; 5256 uint32_t p_dataq_parerr_loc:16; 5257 #else 5258 uint32_t p_dataq_parerr_loc:16; 5259 uint32_t rsrvd:16; 5260 #endif 5261 } bits; 5262 } p_dataq_perr_loc_t; 5263 5264 5265 /* 5266 * Register: NpHdrqPerrLoc 5267 * Non-Posted Header Queue Parity Error Location 5268 * Description: Returns the location of the first parity error 5269 * detected in Non-Posted Header Q 5270 * 5271 * Fields: 5272 */ 5273 typedef union { 5274 uint32_t value; 5275 struct { 5276 #if defined(_BIG_ENDIAN) 5277 uint32_t rsrvd:16; 5278 uint32_t np_hdrq_parerr_loc:16; 5279 #else 5280 uint32_t np_hdrq_parerr_loc:16; 5281 uint32_t rsrvd:16; 5282 #endif 5283 } bits; 5284 } np_hdrq_perr_loc_t; 5285 5286 5287 /* 5288 * Register: NpDataqPerrLoc 5289 * Non-Posted Data Queue Parity Error Location 5290 * Description: Returns the location of the first parity error 5291 * detected in Non-Posted Data Q 5292 * 5293 * Fields: 5294 */ 5295 typedef union { 5296 uint32_t value; 5297 struct { 5298 #if defined(_BIG_ENDIAN) 5299 uint32_t rsrvd:16; 5300 uint32_t np_dataq_parerr_loc:16; 5301 #else 5302 uint32_t np_dataq_parerr_loc:16; 5303 uint32_t rsrvd:16; 5304 #endif 5305 } bits; 5306 } np_dataq_perr_loc_t; 5307 5308 5309 /* 5310 * Register: MsixPerrLoc 5311 * MSIX Parity Error Location 5312 * Description: Returns the location of the first parity error 5313 * detected in MSIX memory 5314 * 5315 * Fields: 5316 */ 5317 typedef union { 5318 uint32_t value; 5319 struct { 5320 #if defined(_BIG_ENDIAN) 5321 uint32_t rsrvd:16; 5322 uint32_t eic_msix_parerr_loc:16; 5323 #else 5324 uint32_t eic_msix_parerr_loc:16; 5325 uint32_t rsrvd:16; 5326 #endif 5327 } bits; 5328 } msix_perr_loc_t; 5329 5330 5331 /* 5332 * Register: HcrPerrLoc 5333 * HCR Memory Parity Error Location 5334 * Description: Returns the location of the first parity error 5335 * detected in HCR Memory 5336 * 5337 * Fields: 5338 */ 5339 typedef union { 5340 uint32_t value; 5341 struct { 5342 #if defined(_BIG_ENDIAN) 5343 uint32_t rsrvd:16; 5344 uint32_t hcr_parerr_loc:16; 5345 #else 5346 uint32_t hcr_parerr_loc:16; 5347 uint32_t rsrvd:16; 5348 #endif 5349 } bits; 5350 } hcr_perr_loc_t; 5351 5352 5353 /* 5354 * Register: TdcPioaccErrLog 5355 * TDC PIO Access Error Location 5356 * Description: Returns the location of the first transaction 5357 * location that resulted in error 5358 * 5359 * Fields: 5360 * Type of access error 0 : Block returned error condition 1 : 5361 * Transaction resulted in time out by CIP 5362 * Transaction Location that resulted in error 5363 */ 5364 typedef union { 5365 uint32_t value; 5366 struct { 5367 #if defined(_BIG_ENDIAN) 5368 uint32_t rsrvd:11; 5369 uint32_t tdc_pioacc_err_type:1; 5370 uint32_t tdc_pioacc_err_loc:20; 5371 #else 5372 uint32_t tdc_pioacc_err_loc:20; 5373 uint32_t tdc_pioacc_err_type:1; 5374 uint32_t rsrvd:11; 5375 #endif 5376 } bits; 5377 } tdc_pioacc_err_log_t; 5378 5379 5380 /* 5381 * Register: RdcPioaccErrLog 5382 * RDC PIO Access Error Location 5383 * Description: Returns the location of the first transaction 5384 * location that resulted in error 5385 * 5386 * Fields: 5387 * Type of access error 0 : Block returned error condition 1 : 5388 * Transaction resulted in time out by CIP 5389 * Transaction Location that resulted in error 5390 */ 5391 typedef union { 5392 uint32_t value; 5393 struct { 5394 #if defined(_BIG_ENDIAN) 5395 uint32_t rsrvd:11; 5396 uint32_t rdc_pioacc_err_type:1; 5397 uint32_t rdc_pioacc_err_loc:20; 5398 #else 5399 uint32_t rdc_pioacc_err_loc:20; 5400 uint32_t rdc_pioacc_err_type:1; 5401 uint32_t rsrvd:11; 5402 #endif 5403 } bits; 5404 } rdc_pioacc_err_log_t; 5405 5406 5407 /* 5408 * Register: PfcPioaccErrLog 5409 * PFC PIO Access Error Location 5410 * Description: Returns the location of the first transaction 5411 * location that resulted in error 5412 * 5413 * Fields: 5414 * Type of access error 0 : Block returned error condition 1 : 5415 * Transaction resulted in time out by CIP 5416 * Transaction Location that resulted in error 5417 */ 5418 typedef union { 5419 uint32_t value; 5420 struct { 5421 #if defined(_BIG_ENDIAN) 5422 uint32_t rsrvd:11; 5423 uint32_t pfc_pioacc_err_type:1; 5424 uint32_t pfc_pioacc_err_loc:20; 5425 #else 5426 uint32_t pfc_pioacc_err_loc:20; 5427 uint32_t pfc_pioacc_err_type:1; 5428 uint32_t rsrvd:11; 5429 #endif 5430 } bits; 5431 } pfc_pioacc_err_log_t; 5432 5433 5434 /* 5435 * Register: VmacPioaccErrLog 5436 * VMAC PIO Access Error Location 5437 * Description: Returns the location of the first transaction 5438 * location that resulted in error 5439 * 5440 * Fields: 5441 * Type of access error 0 : Block returned error condition 1 : 5442 * Transaction resulted in time out by CIP 5443 * Transaction Location that resulted in error 5444 */ 5445 typedef union { 5446 uint32_t value; 5447 struct { 5448 #if defined(_BIG_ENDIAN) 5449 uint32_t rsrvd:11; 5450 uint32_t vmac_pioacc_err_type:1; 5451 uint32_t vmac_pioacc_err_loc:20; 5452 #else 5453 uint32_t vmac_pioacc_err_loc:20; 5454 uint32_t vmac_pioacc_err_type:1; 5455 uint32_t rsrvd:11; 5456 #endif 5457 } bits; 5458 } vmac_pioacc_err_log_t; 5459 5460 5461 /* 5462 * Register: LdGrpCtrl 5463 * Logical Device Group Control 5464 * Description: LD Group assignment 5465 * Fields: 5466 * Logical device group number of this logical device 5467 */ 5468 typedef union { 5469 uint32_t value; 5470 struct { 5471 #if defined(_BIG_ENDIAN) 5472 uint32_t rsrvd:27; 5473 uint32_t num:5; 5474 #else 5475 uint32_t num:5; 5476 uint32_t rsrvd:27; 5477 #endif 5478 } bits; 5479 } ld_grp_ctrl_t; 5480 5481 5482 /* 5483 * Register: DevErrStat 5484 * Device Error Status 5485 * Description: Device Error Status logs errors that cannot be 5486 * attributed to a given dma channel. It does not duplicate errors 5487 * already observable via specific block logical device groups. 5488 * Device Error Status bits [31:16] feed LDSV0.devErr0 Device Error 5489 * Status bits [15:0] feed LDSV1.devErr1 5490 * Fields: 5491 * Set to 1 if Reorder Buffer/Reorder Table has a single bit 5492 * ecc/parity error. This error condition is asserted by TDC to 5493 * PEU. 5494 * Set to 1 if RX Ctrl or Data FIFO has a single bit ecc error. 5495 * This error condition is asserted by RDC to PEU. 5496 * Set to 1 if any of the external block accesses have resulted 5497 * in error or if a parity error was detected in the SPROM 5498 * internal ram. Refer to peuIntrStat for the errors that 5499 * contribute to this bit. 5500 * Set to 1 if Reorder Buffer/Reorder Table has a double bit 5501 * ecc/parity error. This error condition is asserted by TDC to 5502 * PEU. 5503 * Set to 1 if RX Ctrl or Data FIFO has a double bit ecc error. 5504 * This error condition is asserted by RDC to PEU. 5505 * Set to 1 if any PEU ram (MSI-X, retrybuf/sot, p/np/cpl queues) 5506 * has a parity error Refer to peuIntrStat for the errors that 5507 * contribute to this bit. 5508 */ 5509 typedef union { 5510 uint32_t value; 5511 struct { 5512 #if defined(_BIG_ENDIAN) 5513 uint32_t rsrvd:13; 5514 uint32_t tdc_err0:1; 5515 uint32_t rdc_err0:1; 5516 uint32_t rsrvd1:1; 5517 uint32_t rsrvd2:12; 5518 uint32_t vnm_pio_err1:1; 5519 uint32_t tdc_err1:1; 5520 uint32_t rdc_err1:1; 5521 uint32_t peu_err1:1; 5522 #else 5523 uint32_t peu_err1:1; 5524 uint32_t rdc_err1:1; 5525 uint32_t tdc_err1:1; 5526 uint32_t vnm_pio_err1:1; 5527 uint32_t rsrvd2:12; 5528 uint32_t rsrvd1:1; 5529 uint32_t rdc_err0:1; 5530 uint32_t tdc_err0:1; 5531 uint32_t rsrvd:13; 5532 #endif 5533 } bits; 5534 } dev_err_stat_t; 5535 5536 5537 /* 5538 * Register: DevErrMask 5539 * Device Error Mask 5540 * Description: Device Error Mask (gates devErrStat) 5541 * Fields: 5542 * Mask for TDC error0 5543 * Mask for RDC error0 5544 * Mask for VNM PIO Access error 5545 * Mask for TDC error1 5546 * Mask for RDC error1 5547 * Mask for PEU memories parity error 5548 */ 5549 typedef union { 5550 uint32_t value; 5551 struct { 5552 #if defined(_BIG_ENDIAN) 5553 uint32_t rsrvd:13; 5554 uint32_t tdc_mask0:1; 5555 uint32_t rdc_mask0:1; 5556 uint32_t rsrvd1:1; 5557 uint32_t rsrvd2:12; 5558 uint32_t vnm_pio_mask1:1; 5559 uint32_t tdc_mask1:1; 5560 uint32_t rdc_mask1:1; 5561 uint32_t peu_mask1:1; 5562 #else 5563 uint32_t peu_mask1:1; 5564 uint32_t rdc_mask1:1; 5565 uint32_t tdc_mask1:1; 5566 uint32_t vnm_pio_mask1:1; 5567 uint32_t rsrvd2:12; 5568 uint32_t rsrvd1:1; 5569 uint32_t rdc_mask0:1; 5570 uint32_t tdc_mask0:1; 5571 uint32_t rsrvd:13; 5572 #endif 5573 } bits; 5574 } dev_err_mask_t; 5575 5576 5577 /* 5578 * Register: LdIntrTimRes 5579 * Logical Device Interrupt Timer Resolution 5580 * Description: Logical Device Interrupt Timer Resolution 5581 * Fields: 5582 * Timer resolution in 250 MHz cycles 5583 */ 5584 typedef union { 5585 uint32_t value; 5586 struct { 5587 #if defined(_BIG_ENDIAN) 5588 uint32_t rsrvd:12; 5589 uint32_t res:20; 5590 #else 5591 uint32_t res:20; 5592 uint32_t rsrvd:12; 5593 #endif 5594 } bits; 5595 } ld_intr_tim_res_t; 5596 5597 5598 /* 5599 * Register: LDSV0 5600 * Logical Device State Vector 0 5601 * Description: Logical Device State Vector 0 5602 * Fields: 5603 * Interrupt from mail box3 to HOST 5604 * Interrupt from mail box2 to HOST 5605 * Interrupt from mail box1 to HOST 5606 * Interrupt from mail box0 to HOST 5607 * Flag0 bits for Network MAC 5608 * Flag0 bits for Virtual MAC 5609 * Flag0 bits for Tx DMA channels 3-0 5610 * Flag0 bits for Rx DMA channels 3-0 5611 */ 5612 typedef union { 5613 uint32_t value; 5614 struct { 5615 #if defined(_BIG_ENDIAN) 5616 uint32_t dev_err0:1; 5617 uint32_t rsrvd:7; 5618 uint32_t mbox3_irq:1; 5619 uint32_t mbox2_irq:1; 5620 uint32_t mbox1_irq:1; 5621 uint32_t mbox0_irq:1; 5622 uint32_t rsrvd1:1; 5623 uint32_t nmac_f0:1; 5624 uint32_t pfc_f0:1; 5625 uint32_t vmac_f0:1; 5626 uint32_t rsrvd2:4; 5627 uint32_t tdc_f0:4; 5628 uint32_t rsrvd3:4; 5629 uint32_t rdc_f0:4; 5630 #else 5631 uint32_t rdc_f0:4; 5632 uint32_t rsrvd3:4; 5633 uint32_t tdc_f0:4; 5634 uint32_t rsrvd2:4; 5635 uint32_t vmac_f0:1; 5636 uint32_t pfc_f0:1; 5637 uint32_t nmac_f0:1; 5638 uint32_t rsrvd1:1; 5639 uint32_t mbox0_irq:1; 5640 uint32_t mbox1_irq:1; 5641 uint32_t mbox2_irq:1; 5642 uint32_t mbox3_irq:1; 5643 uint32_t rsrvd:7; 5644 uint32_t dev_err0:1; 5645 #endif 5646 } bits; 5647 } ldsv0_t; 5648 5649 5650 /* 5651 * Register: LDSV1 5652 * Logical Device State Vector 1 5653 * Description: Logical Device State Vector 1 5654 * Fields: 5655 * Flag1 bits for Network MAC 5656 * Flag1 bits for Tx DMA channels 3-0 5657 * Flag1 bits for Rx DMA channels 3-0 5658 */ 5659 typedef union { 5660 uint32_t value; 5661 struct { 5662 #if defined(_BIG_ENDIAN) 5663 uint32_t dev_err1:1; 5664 uint32_t rsrvd:7; 5665 uint32_t rsrvd1:5; 5666 uint32_t nmac_f1:1; 5667 uint32_t rsrvd2:1; 5668 uint32_t rsrvd3:1; 5669 uint32_t rsrvd4:4; 5670 uint32_t tdc_f1:4; 5671 uint32_t rsrvd5:4; 5672 uint32_t rdc_f1:4; 5673 #else 5674 uint32_t rdc_f1:4; 5675 uint32_t rsrvd5:4; 5676 uint32_t tdc_f1:4; 5677 uint32_t rsrvd4:4; 5678 uint32_t rsrvd3:1; 5679 uint32_t rsrvd2:1; 5680 uint32_t nmac_f1:1; 5681 uint32_t rsrvd1:5; 5682 uint32_t rsrvd:7; 5683 uint32_t dev_err1:1; 5684 #endif 5685 } bits; 5686 } ldsv1_t; 5687 5688 5689 /* 5690 * Register: LdIntrMask 5691 * Logical Device Interrupt Mask 5692 * Description: Logical Device Interrupt Mask 5693 * Fields: 5694 * Flag1 mask for logical device N (0-31) 5695 * Flag0 mask for logical device N (0-31) 5696 */ 5697 typedef union { 5698 uint32_t value; 5699 struct { 5700 #if defined(_BIG_ENDIAN) 5701 uint32_t rsrvd:30; 5702 uint32_t ldf1_mask:1; 5703 uint32_t ldf0_mask:1; 5704 #else 5705 uint32_t ldf0_mask:1; 5706 uint32_t ldf1_mask:1; 5707 uint32_t rsrvd:30; 5708 #endif 5709 } bits; 5710 } ld_intr_mask_t; 5711 5712 5713 /* 5714 * Register: LdIntrMgmt 5715 * Logical Device Interrupt Management 5716 * Description: Logical Device Interrupt Management 5717 * Fields: 5718 * SW arms the logical device for interrupt. Cleared by HW after 5719 * interrupt issued. (1 = arm) 5720 * Timer set by SW. Hardware counts down. 5721 */ 5722 typedef union { 5723 uint32_t value; 5724 struct { 5725 #if defined(_BIG_ENDIAN) 5726 uint32_t arm:1; 5727 uint32_t rsrvd:25; 5728 uint32_t timer:6; 5729 #else 5730 uint32_t timer:6; 5731 uint32_t rsrvd:25; 5732 uint32_t arm:1; 5733 #endif 5734 } bits; 5735 } ld_intr_mgmt_t; 5736 5737 5738 /* 5739 * Register: SID 5740 * System Interrupt Data 5741 * Description: System Interrupt Data (MSI Vectors) 5742 * Fields: 5743 * Data sent along with the interrupt 5744 */ 5745 typedef union { 5746 uint32_t value; 5747 struct { 5748 #if defined(_BIG_ENDIAN) 5749 uint32_t rsrvd:27; 5750 uint32_t data:5; 5751 #else 5752 uint32_t data:5; 5753 uint32_t rsrvd:27; 5754 #endif 5755 } bits; 5756 } sid_t; 5757 5758 5759 #ifdef __cplusplus 5760 } 5761 #endif 5762 5763 #endif /* _HXGE_PEU_HW_H */ 5764