/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _HXGE_PEU_HW_H
#define _HXGE_PEU_HW_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
#define PIO_LDSV_BASE_ADDR 0X800000
#define PIO_BASE_ADDR 0X000000
#define PIO_LDMASK_BASE_ADDR 0XA00000
#define DEVICE_VENDOR_ID (PIO_BASE_ADDR + 0x0)
#define STATUS_COMMAND (PIO_BASE_ADDR + 0x4)
#define CLASSCODE_REV_ID (PIO_BASE_ADDR + 0x8)
#define BIST_HDRTYP_LATTMR_CASHLSZ (PIO_BASE_ADDR + 0xC)
#define PIO_BAR0 (PIO_BASE_ADDR + 0x10)
#define PIO_BAR1 (PIO_BASE_ADDR + 0x14)
#define MSIX_BAR0 (PIO_BASE_ADDR + 0x18)
#define MSIX_BAR1 (PIO_BASE_ADDR + 0x1C)
#define VIRT_BAR0 (PIO_BASE_ADDR + 0x20)
#define VIRT_BAR1 (PIO_BASE_ADDR + 0x24)
#define CIS_PTR (PIO_BASE_ADDR + 0x28)
#define SUB_VENDOR_ID (PIO_BASE_ADDR + 0x2C)
#define EXP_ROM_BAR (PIO_BASE_ADDR + 0x30)
#define CAP_PTR (PIO_BASE_ADDR + 0x34)
#define INT_LINE (PIO_BASE_ADDR + 0x3C)
#define PM_CAP (PIO_BASE_ADDR + 0x40)
#define PM_CTRL_STAT (PIO_BASE_ADDR + 0x44)
#define MSI_CAP (PIO_BASE_ADDR + 0x50)
#define MSI_LO_ADDR (PIO_BASE_ADDR + 0x54)
#define MSI_HI_ADDR (PIO_BASE_ADDR + 0x58)
#define MSI_DATA (PIO_BASE_ADDR + 0x5C)
#define MSI_MASK (PIO_BASE_ADDR + 0x60)
#define MSI_PEND (PIO_BASE_ADDR + 0x64)
#define MSIX_CAP (PIO_BASE_ADDR + 0x70)
#define MSIX_TAB_OFF (PIO_BASE_ADDR + 0x74)
#define MSIX_PBA_OFF (PIO_BASE_ADDR + 0x78)
#define PCIE_CAP (PIO_BASE_ADDR + 0x80)
#define DEV_CAP (PIO_BASE_ADDR + 0x84)
#define DEV_STAT_CTRL (PIO_BASE_ADDR + 0x88)
#define LNK_CAP (PIO_BASE_ADDR + 0x8C)
#define LNK_STAT_CTRL (PIO_BASE_ADDR + 0x90)
#define VEN_CAP_HDR (PIO_BASE_ADDR + 0x94)
#define VEN_CTRL (PIO_BASE_ADDR + 0x98)
#define VEN_PRT_HDR (PIO_BASE_ADDR + 0x9C)
#define ACKLAT_REPLAY (PIO_BASE_ADDR + 0xA0)
#define OTH_MSG (PIO_BASE_ADDR + 0xA4)
#define FORCE_LINK (PIO_BASE_ADDR + 0xA8)
#define ACK_FREQ (PIO_BASE_ADDR + 0xAC)
#define LINK_CTRL (PIO_BASE_ADDR + 0xB0)
#define LANE_SKEW (PIO_BASE_ADDR + 0xB4)
#define SYMBOL_NUM (PIO_BASE_ADDR + 0xB8)
#define SYMB_TIM_RADM_FLT1 (PIO_BASE_ADDR + 0xBC)
#define RADM_FLT2 (PIO_BASE_ADDR + 0xC0)
#define CASCADE_DEB_REG0 (PIO_BASE_ADDR + 0xC8)
#define CASCADE_DEB_REG1 (PIO_BASE_ADDR + 0xCC)
#define TXP_FC_CREDIT_STAT (PIO_BASE_ADDR + 0xD0)
#define TXNP_FC_CREDIT_STAT (PIO_BASE_ADDR + 0xD4)
#define TXCPL_FC_CREDIT_STAT (PIO_BASE_ADDR + 0xD8)
#define QUEUE_STAT (PIO_BASE_ADDR + 0xDC)
#define GBT_DEBUG0 (PIO_BASE_ADDR + 0xE0)
#define GBT_DEBUG1 (PIO_BASE_ADDR + 0xE4)
#define GBT_DEBUG2 (PIO_BASE_ADDR + 0xE8)
#define GBT_DEBUG3 (PIO_BASE_ADDR + 0xEC)
#define PIPE_DEBUG0 (PIO_BASE_ADDR + 0xF0)
#define PIPE_DEBUG1 (PIO_BASE_ADDR + 0xF4)
#define PIPE_DEBUG2 (PIO_BASE_ADDR + 0xF8)
#define PIPE_DEBUG3 (PIO_BASE_ADDR + 0xFC)
#define PCIE_ENH_CAP_HDR (PIO_BASE_ADDR + 0x100)
#define UNC_ERR_STAT (PIO_BASE_ADDR + 0x104)
#define UNC_ERR_MASK (PIO_BASE_ADDR + 0x108)
#define UNC_ERR_SVRTY (PIO_BASE_ADDR + 0x10C)
#define CORR_ERR_STAT (PIO_BASE_ADDR + 0x110)
#define CORR_ERR_MASK (PIO_BASE_ADDR + 0x114)
#define ADV_CAP_CTRL (PIO_BASE_ADDR + 0x118)
#define HDR_LOG0 (PIO_BASE_ADDR + 0x11C)
#define HDR_LOG1 (PIO_BASE_ADDR + 0x120)
#define HDR_LOG2 (PIO_BASE_ADDR + 0x124)
#define HDR_LOG3 (PIO_BASE_ADDR + 0x128)
#define PIPE_RX_TX_CONTROL (PIO_BASE_ADDR + 0x1000)
#define PIPE_RX_TX_STATUS (PIO_BASE_ADDR + 0x1004)
#define PIPE_RX_TX_PWR_CNTL (PIO_BASE_ADDR + 0x1008)
#define PIPE_RX_TX_PARAM (PIO_BASE_ADDR + 0x1010)
#define PIPE_RX_TX_CLOCK (PIO_BASE_ADDR + 0x1014)
#define PIPE_GLUE_CNTL0 (PIO_BASE_ADDR + 0x1018)
#define PIPE_GLUE_CNTL1 (PIO_BASE_ADDR + 0x101C)
#define HCR_REG (PIO_BASE_ADDR + 0x2000)
#define BLOCK_RESET (PIO_BASE_ADDR + 0x8000)
#define TIMEOUT_CFG (PIO_BASE_ADDR + 0x8004)
#define HEART_CFG (PIO_BASE_ADDR + 0x8008)
#define HEART_TIMER (PIO_BASE_ADDR + 0x800C)
#define CIP_GP_CTRL (PIO_BASE_ADDR + 0x8010)
#define CIP_STATUS (PIO_BASE_ADDR + 0x8014)
#define CIP_LINK_STAT (PIO_BASE_ADDR + 0x801C)
#define EPC_STAT (PIO_BASE_ADDR + 0x8020)
#define EPC_DATA (PIO_BASE_ADDR + 0x8024)
#define SPC_STAT (PIO_BASE_ADDR + 0x8030)
#define HOST2SPI_INDACC_ADDR (PIO_BASE_ADDR + 0x8050)
#define HOST2SPI_INDACC_CTRL (PIO_BASE_ADDR + 0x8054)
#define HOST2SPI_INDACC_DATA (PIO_BASE_ADDR + 0x8058)
#define BT_CTRL0 (PIO_BASE_ADDR + 0x8080)
#define BT_DATA0 (PIO_BASE_ADDR + 0x8084)
#define BT_INTMASK0 (PIO_BASE_ADDR + 0x8088)
#define BT_CTRL1 (PIO_BASE_ADDR + 0x8090)
#define BT_DATA1 (PIO_BASE_ADDR + 0x8094)
#define BT_INTMASK1 (PIO_BASE_ADDR + 0x8098)
#define BT_CTRL2 (PIO_BASE_ADDR + 0x80A0)
#define BT_DATA2 (PIO_BASE_ADDR + 0x80A4)
#define BT_INTMASK2 (PIO_BASE_ADDR + 0x80A8)
#define BT_CTRL3 (PIO_BASE_ADDR + 0x80B0)
#define BT_DATA3 (PIO_BASE_ADDR + 0x80B4)
#define BT_INTMASK3 (PIO_BASE_ADDR + 0x80B8)
#define DEBUG_SEL (PIO_BASE_ADDR + 0x80C0)
#define INDACC_MEM0_CTRL (PIO_BASE_ADDR + 0x80C4)
#define INDACC_MEM0_DATA0 (PIO_BASE_ADDR + 0x80C8)
#define INDACC_MEM0_DATA1 (PIO_BASE_ADDR + 0x80CC)
#define INDACC_MEM0_DATA2 (PIO_BASE_ADDR + 0x80D0)
#define INDACC_MEM0_DATA3 (PIO_BASE_ADDR + 0x80D4)
#define INDACC_MEM0_PRTY (PIO_BASE_ADDR + 0x80D8)
#define INDACC_MEM1_CTRL (PIO_BASE_ADDR + 0x80DC)
#define INDACC_MEM1_DATA0 (PIO_BASE_ADDR + 0x80E0)
#define INDACC_MEM1_DATA1 (PIO_BASE_ADDR + 0x80E4)
#define INDACC_MEM1_DATA2 (PIO_BASE_ADDR + 0x80E8)
#define INDACC_MEM1_DATA3 (PIO_BASE_ADDR + 0x80EC)
#define INDACC_MEM1_PRTY (PIO_BASE_ADDR + 0x80F0)
#define PHY_DEBUG_TRAINING_VEC (PIO_BASE_ADDR + 0x80F4)
#define PEU_DEBUG_TRAINING_VEC (PIO_BASE_ADDR + 0x80F8)
#define PIPE_CFG0 (PIO_BASE_ADDR + 0x8120)
#define PIPE_CFG1 (PIO_BASE_ADDR + 0x8124)
#define CIP_BAR_MASK_CFG (PIO_BASE_ADDR + 0x8134)
#define CIP_BAR_MASK (PIO_BASE_ADDR + 0x8138)
#define CIP_LDSV0_STAT (PIO_BASE_ADDR + 0x8140)
#define CIP_LDSV1_STAT (PIO_BASE_ADDR + 0x8144)
#define PEU_INTR_STAT (PIO_BASE_ADDR + 0x8148)
#define PEU_INTR_MASK (PIO_BASE_ADDR + 0x814C)
#define PEU_INTR_STAT_MIRROR (PIO_BASE_ADDR + 0x8150)
#define CPL_HDRQ_PERR_LOC (PIO_BASE_ADDR + 0x8154)
#define CPL_DATAQ_PERR_LOC (PIO_BASE_ADDR + 0x8158)
#define RETR_PERR_LOC (PIO_BASE_ADDR + 0x815C)
#define RETR_SOT_PERR_LOC (PIO_BASE_ADDR + 0x8160)
#define P_HDRQ_PERR_LOC (PIO_BASE_ADDR + 0x8164)
#define P_DATAQ_PERR_LOC (PIO_BASE_ADDR + 0x8168)
#define NP_HDRQ_PERR_LOC (PIO_BASE_ADDR + 0x816C)
#define NP_DATAQ_PERR_LOC (PIO_BASE_ADDR + 0x8170)
#define MSIX_PERR_LOC (PIO_BASE_ADDR + 0x8174)
#define HCR_PERR_LOC (PIO_BASE_ADDR + 0x8178)
#define TDC_PIOACC_ERR_LOG (PIO_BASE_ADDR + 0x8180)
#define RDC_PIOACC_ERR_LOG (PIO_BASE_ADDR + 0x8184)
#define PFC_PIOACC_ERR_LOG (PIO_BASE_ADDR + 0x8188)
#define VMAC_PIOACC_ERR_LOG (PIO_BASE_ADDR + 0x818C)
#define LD_GRP_CTRL (PIO_BASE_ADDR + 0x8300)
#define DEV_ERR_STAT (PIO_BASE_ADDR + 0x8380)
#define DEV_ERR_MASK (PIO_BASE_ADDR + 0x8384)
#define LD_INTR_TIM_RES (PIO_BASE_ADDR + 0x8390)
#define LDSV0 (PIO_LDSV_BASE_ADDR + 0x0)
#define LDSV1 (PIO_LDSV_BASE_ADDR + 0x4)
#define LD_INTR_MASK (PIO_LDMASK_BASE_ADDR + 0x0)
#define LD_INTR_MGMT (PIO_LDMASK_BASE_ADDR + 0x4)
#define SID (PIO_LDMASK_BASE_ADDR + 0x8)
/*
* Register: DeviceVendorId
* Device ID and Vendor ID
* Description: Device ID/Vendor ID
* Fields:
* Device ID Register: dbi writeable
* Vendor ID Register (Sun Microsystem): dbi writeable
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t device_id:16;
uint32_t vendor_id:16;
#else
uint32_t vendor_id:16;
uint32_t device_id:16;
#endif
} bits;
} device_vendor_id_t;
/*
* Register: StatusCommand
* Status and Command
* Description: Status/Command
* Fields:
* The device detected a parity error. The device detects
* Poisoned TLP received regardless of Command Register Parity
* Error Enable/Response bit.
* The device signaled a system error with SERR#. The device
* detects a UE, is about to send a F/NF error message; and if
* the Command Register SERR# enable is set.
* A transaction initiated by this device was terminated due to a
* Master Abort (i.e. Unsupported Request Completion Status was
* received).
* A transaction initiated by this device was terminated due to a
* Target Abort (i.e. Completer Abort Completion Status was
* received).
* Set when Completer Abort Completion Status is sent back to the
* RC. The request violated hydra's programming rules.
* The slowest DEVSEL# timing for this target device (N/A in
* PCIE)
* Master Data Parity Error - set if all the following conditions
* are true: received a poisoned TLP header or sending a poisoned
* write request; and the parity error response bit in the
* command register is set.
* Fast Back-to-Back Capable (N/A in PCIE)
* 66 MHz Capable (N/A in PCIE)
* Capabilities List - presence of extended capability item.
* INTx Status
* INTx Assertion Disable
* Fast Back-to-Back Enable (N/A in PCIE)
* This device can drive the SERR# line.
* IDSEL Stepping/Wait Cycle Control (N/A in PCIE)
* This device can drive the PERR# line.
* VGA Palette Snoop (N/A in PCIE)
* The device can issue Memory Write-and-Invalidate commands (N/A
* in PCIE)
* This device monitors for PCI Special Cycles (N/A in PCIE)
* This device's bus master capability is enabled.
* This device responds to PCI memory accesses.
* This device responds to PCI IO accesses (No I/O space used in
* Hydra)
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t det_par_err:1;
uint32_t sig_serr:1;
uint32_t rcv_mstr_abrt:1;
uint32_t rcv_tgt_abrt:1;
uint32_t sig_tgt_abrt:1;
uint32_t devsel_timing:2;
uint32_t mstr_dpe:1;
uint32_t fast_b2b_cap:1;
uint32_t rsrvd:1;
uint32_t mhz_cap:1;
uint32_t cap_list:1;
uint32_t intx_stat:1;
uint32_t rsrvd1:3;
uint32_t rsrvd2:5;
uint32_t intx_dis:1;
uint32_t fast_b2b_en:1;
uint32_t serr_en:1;
uint32_t idsel_step:1;
uint32_t par_err_en:1;
uint32_t vga_snoop:1;
uint32_t mwi_en:1;
uint32_t special_cycle:1;
uint32_t bm_en:1;
uint32_t mem_sp_en:1;
uint32_t io_sp_en:1;
#else
uint32_t io_sp_en:1;
uint32_t mem_sp_en:1;
uint32_t bm_en:1;
uint32_t special_cycle:1;
uint32_t mwi_en:1;
uint32_t vga_snoop:1;
uint32_t par_err_en:1;
uint32_t idsel_step:1;
uint32_t serr_en:1;
uint32_t fast_b2b_en:1;
uint32_t intx_dis:1;
uint32_t rsrvd2:5;
uint32_t rsrvd1:3;
uint32_t intx_stat:1;
uint32_t cap_list:1;
uint32_t mhz_cap:1;
uint32_t rsrvd:1;
uint32_t fast_b2b_cap:1;
uint32_t mstr_dpe:1;
uint32_t devsel_timing:2;
uint32_t sig_tgt_abrt:1;
uint32_t rcv_tgt_abrt:1;
uint32_t rcv_mstr_abrt:1;
uint32_t sig_serr:1;
uint32_t det_par_err:1;
#endif
} bits;
} status_command_t;
/*
* Register: ClasscodeRevId
* Class Code, and Revision ID
* Description: Class Code/Revision ID
* Fields:
* Base Class (Network Controller): dbi writeable
* Sub Class (Ethernet Controller): dbi writeable
* Programming Interface: dbi writeable
* Revision ID: dbi writeable
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t base_class:8;
uint32_t sub_class:8;
uint32_t prog_if:8;
uint32_t rev_id:8;
#else
uint32_t rev_id:8;
uint32_t prog_if:8;
uint32_t sub_class:8;
uint32_t base_class:8;
#endif
} bits;
} classcode_rev_id_t;
/*
* Register: BistHdrtypLattmrCashlsz
* BIST, Header Type, Latency Timer, and Cache Line Size
* Description: BIST, Latency Timer etc
* Fields:
* BIST is not supported. Header Type Fields
* Multi-Function Device: dbi writeable
* Configuration Header Format. 0 = Type 0.
* Master Latency Timer. (N/A in PCIE)
* Cache line size for legacy compatibility (N/A in PCIE)
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t value:8;
uint32_t mult_func_dev:1;
uint32_t cfg_hdr_fmt:7;
uint32_t timer:8;
uint32_t cache_line_sz:8;
#else
uint32_t cache_line_sz:8;
uint32_t timer:8;
uint32_t cfg_hdr_fmt:7;
uint32_t mult_func_dev:1;
uint32_t value:8;
#endif
} bits;
} bist_hdrtyp_lattmr_cashlsz_t;
/*
* Register: PioBar0
* PIO BAR0
* Description: PIO BAR0 - For Hydra PIO space PIO BAR1 & PIO BAR0
* are together configured as a 64b BAR register (Synopsys core
* implementation dependent) where PIO BAR1 handles the upper address
* bits and PIO BAR0 handles the lower address bits.
* Fields:
* Base Address Relocation : indirect dbi writeable via bar0Mask
* register in EP core
* Base Address for PIO (16MB space) : indirect dbi writeable via
* bar0Mask register in EP core
* Prefetchable if memory BAR (PIOs not prefetchable): dbi
* writeable
* If memory BAR, then 32 or 64 bit BAR (00 = 32 bit, 10 = 64
* bit): dbi writeable
* I/O or Memory space indicator (0 = memory BAR): dbi writeable
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t base_addr_rel_lo:8;
uint32_t base_addr:20;
uint32_t pftch:1;
uint32_t type:2;
uint32_t mem_sp_ind:1;
#else
uint32_t mem_sp_ind:1;
uint32_t type:2;
uint32_t pftch:1;
uint32_t base_addr:20;
uint32_t base_addr_rel_lo:8;
#endif
} bits;
} pio_bar0_t;
/*
* Register: PioBar1
* PIO BAR1
* Description: PIO BAR1
* Fields:
* Base Address Relocation : indirect dbi writeable via bar0Mask
* register in EP core
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t base_addr_rel_hi:32;
#else
uint32_t base_addr_rel_hi:32;
#endif
} bits;
} pio_bar1_t;
/*
* Register: MsixBar0
* MSIX BAR0
* Description: MSIX BAR0 - For MSI-X Tables and PBA MSIX BAR1 & MSIX
* BAR0 are together configured as a 64b BAR register (Synopsys core
* implementation dependent) where MSIX BAR1 handles the upper
* address bits and MSIX BAR0 handles the lower address bits.
* Fields:
* Base Address Relocation : indirect dbi writeable via bar2Mask
* register in EP core
* Base Address for MSIX (16KB space) : indirect dbi writeable
* via bar2Mask register in EP core
* Prefetchable if memory BAR (Not prefetchable) : dbi writeable
* If memory BAR, then 32 or 64 bit BAR (00 = 32 bit, 10 = 64
* bit): dbi writeable
* I/O or Memory space indicator (0 = memory BAR) : dbi writeable
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t base_addr_rel_lo:18;
uint32_t base_addr:10;
uint32_t pftch:1;
uint32_t type:2;
uint32_t mem_sp_ind:1;
#else
uint32_t mem_sp_ind:1;
uint32_t type:2;
uint32_t pftch:1;
uint32_t base_addr:10;
uint32_t base_addr_rel_lo:18;
#endif
} bits;
} msix_bar0_t;
/*
* Register: MsixBar1
* MSIX BAR1
* Description: MSIX BAR1
* Fields:
* Base Address Relocation : indirect dbi writeable via bar2Mask
* register in EP core
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t base_addr_rel_hi:32;
#else
uint32_t base_addr_rel_hi:32;
#endif
} bits;
} msix_bar1_t;
/*
* Register: VirtBar0
* Virtualization BAR0
* Description: Virtualization BAR0 - Previously for Hydra
* Virtualization space This bar is no longer enabled and is not dbi
* writeable. VIRT BAR1 & VIRT BAR0 could be configured as a 64b BAR
* register (Synopsys core implementation dependent), but this is not
* used in hydra.
* Fields:
* Base Address Relocation
* Base Address for Virtualization (64KB space)
* Prefetchable if memory BAR (Not prefetchable)
* If memory BAR, then 32 or 64 bit BAR (00 = 32 bit, 10 = 64
* bit)
* I/O or Memory space indicator (0 = memory BAR)
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t base_addr_rel_lo:17;
uint32_t base_addr:11;
uint32_t pftch:1;
uint32_t type:2;
uint32_t mem_sp_ind:1;
#else
uint32_t mem_sp_ind:1;
uint32_t type:2;
uint32_t pftch:1;
uint32_t base_addr:11;
uint32_t base_addr_rel_lo:17;
#endif
} bits;
} virt_bar0_t;
/*
* Register: VirtBar1
* Virtualization BAR1
* Description: Previously for Virtualization BAR1 This bar is no
* longer enabled and is not dbi writeable.
* Fields:
* Base Address Relocation
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t base_addr_rel_hi:32;
#else
uint32_t base_addr_rel_hi:32;
#endif
} bits;
} virt_bar1_t;
/*
* Register: CisPtr
* CardBus CIS Pointer
* Description: CardBus CIS Pointer
* Fields:
* CardBus CIS Pointer: dbi writeable
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t cis_ptr:32;
#else
uint32_t cis_ptr:32;
#endif
} bits;
} cis_ptr_t;
/*
* Register: SubVendorId
* Subsystem ID and Vendor ID
* Description: Subsystem ID and Vendor ID
* Fields:
* Subsystem ID as assigned by PCI-SIG : dbi writeable
* Subsystem Vendor ID as assigned by PCI-SIG : dbi writeable
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t dev_id:16;
uint32_t vendor_id:16;
#else
uint32_t vendor_id:16;
uint32_t dev_id:16;
#endif
} bits;
} sub_vendor_id_t;
/*
* Register: ExpRomBar
* Expansion ROM BAR
* Description: Expansion ROM BAR - For Hydra EEPROM space
* Fields:
* Base Address Relocatable : indirect dbi writeable via
* romBarMask register in EP core
* Base Address for ROM (2MB) : indirect dbi writeable via
* romBarMask register in EP core
* ROM Enable: dbi writeable
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t base_addr_rel:11;
uint32_t base_addr:10;
uint32_t rsrvd:10;
uint32_t rom_en:1;
#else
uint32_t rom_en:1;
uint32_t rsrvd:10;
uint32_t base_addr:10;
uint32_t base_addr_rel:11;
#endif
} bits;
} exp_rom_bar_t;
/*
* Register: CapPtr
* Capabilities Pointer
* Description: Capabilities Pointer
* Fields:
* Pointer to PM Capability structure : dbi writeable
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:24;
uint32_t pm_ptr:8;
#else
uint32_t pm_ptr:8;
uint32_t rsrvd:24;
#endif
} bits;
} cap_ptr_t;
/*
* Register: IntLine
* Interrupt Line
* Description: Interrupt Line
* Fields:
* Max Latency (N/A in PCIE)
* Minimum Grant (N/A in PCIE)
* Interrupt pin: dbi writeable
* Interrupt Line
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t max_lat:8;
uint32_t min_gnt:8;
uint32_t int_pin:8;
uint32_t int_line:8;
#else
uint32_t int_line:8;
uint32_t int_pin:8;
uint32_t min_gnt:8;
uint32_t max_lat:8;
#endif
} bits;
} int_line_t;
/*
* Register: PmCap
* Power Management Capability
* Description: Power Management Capability
* Fields:
* PME Support (N/A in Hydra): dbi writeable
* D2 Support (N/A in Hydra): dbi writeable
* D1 Support (N/A in Hydra): dbi writeable
* Aux Current (N/A in Hydra): dbi writeable
* Device Specific Initialization: dbi writeable
* PME Clock (N/A in PCIE)
* PM Spec Version: dbi writeable
* Next Capability Pointer: dbi writeable
* Power Management Capability ID: dbi writeable
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t pme_supt:5;
uint32_t d2_supt:1;
uint32_t d1_supt:1;
uint32_t aux_curr:3;
uint32_t dev_spec_init:1;
uint32_t rsrvd:1;
uint32_t pme_clk:1;
uint32_t pm_ver:3;
uint32_t nxt_cap_ptr:8;
uint32_t pm_id:8;
#else
uint32_t pm_id:8;
uint32_t nxt_cap_ptr:8;
uint32_t pm_ver:3;
uint32_t pme_clk:1;
uint32_t rsrvd:1;
uint32_t dev_spec_init:1;
uint32_t aux_curr:3;
uint32_t d1_supt:1;
uint32_t d2_supt:1;
uint32_t pme_supt:5;
#endif
} bits;
} pm_cap_t;
/*
* Register: PmCtrlStat
* Power Management Control and Status
* Description: Power Management Control and Status
* Fields:
* Data for additional info (N/A)
* Bus Power and Clock Control Enable (N/A in PCIE)
* B2/B3 Support (N/A in PCIE)
* Indicates if PME event occured
* Data Scale (N/A)
* Data Select (N/A)
* PME Enable (Sticky)
* Power State
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t pwr_data:8;
uint32_t pwr_clk_en:1;
uint32_t b2_b3_supt:1;
uint32_t rsrvd:6;
uint32_t pme_stat:1;
uint32_t data_scale:2;
uint32_t data_sel:4;
uint32_t pme_en:1;
uint32_t rsrvd1:6;
uint32_t pwr_st:2;
#else
uint32_t pwr_st:2;
uint32_t rsrvd1:6;
uint32_t pme_en:1;
uint32_t data_sel:4;
uint32_t data_scale:2;
uint32_t pme_stat:1;
uint32_t rsrvd:6;
uint32_t b2_b3_supt:1;
uint32_t pwr_clk_en:1;
uint32_t pwr_data:8;
#endif
} bits;
} pm_ctrl_stat_t;
/*
* Register: MsiCap
* MSI Capability
* Description: MSI Capability
* Fields:
* Mask and Pending bits available
* 64-bit Address Capable
* Multiple Messages Enabled
* Multiple Message Capable (32 messages = 0x5)
* MSI Enabled (if enabled, INTx must be diabled)
* Next Capability Pointer: dbi writeable
* MSI Capability ID
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:7;
uint32_t vect_mask:1;
uint32_t msi64_en:1;
uint32_t mult_msg_en:3;
uint32_t mult_msg_cap:3;
uint32_t msi_en:1;
uint32_t nxt_cap_ptr:8;
uint32_t msi_cap_id:8;
#else
uint32_t msi_cap_id:8;
uint32_t nxt_cap_ptr:8;
uint32_t msi_en:1;
uint32_t mult_msg_cap:3;
uint32_t mult_msg_en:3;
uint32_t msi64_en:1;
uint32_t vect_mask:1;
uint32_t rsrvd:7;
#endif
} bits;
} msi_cap_t;
/*
* Register: MsiLoAddr
* MSI Low Address
* Description: MSI Low Address
* Fields:
* Lower 32 bit Address
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t lo_addr:30;
uint32_t rsrvd:2;
#else
uint32_t rsrvd:2;
uint32_t lo_addr:30;
#endif
} bits;
} msi_lo_addr_t;
/*
* Register: MsiHiAddr
* MSI High Address
* Description: MSI High Address
* Fields:
* Upper 32 bit Address (only if msi64En = 1)
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t hi_addr:32;
#else
uint32_t hi_addr:32;
#endif
} bits;
} msi_hi_addr_t;
/*
* Register: MsiData
* MSI Data
* Description: MSI Data
* Fields:
* MSI Data. Depending on the value for multMsgEn in the MSI
* Capability Register which determines the number of allocated
* vectors, bits [4:0] may be replaced with msiVector[4:0] bits
* to generate up to 32 MSI messages. # allocated vectors Actual
* messageData[4:0] ------------------- ------------------------
* 1 DATA[4:0] (no replacement) 2 {DATA[4:1], msiVector[0]} 4
* {DATA[4:2], msiVector[1:0]} 8 {DATA[4:3], msiVector[2:0]} 16
* {DATA[4], msiVector[3:0]} 32 msiVector[4:0] (full replacement)
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:16;
uint32_t data:16;
#else
uint32_t data:16;
uint32_t rsrvd:16;
#endif
} bits;
} msi_data_t;
/*
* Register: MsiMask
* MSI Mask
* Description: MSI Mask
* Fields:
* per vector MSI Mask bits
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t mask:32;
#else
uint32_t mask:32;
#endif
} bits;
} msi_mask_t;
/*
* Register: MsiPend
* MSI Pending
* Description: MSI Pending
* Fields:
* per vector MSI Pending bits
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t pend:32;
#else
uint32_t pend:32;
#endif
} bits;
} msi_pend_t;
/*
* Register: MsixCap
* MSIX Capability
* Description: MSIX Capability
* Fields:
* MSIX Enable (if enabled, MSI and INTx must be disabled)
* Function Mask (1 = all vectors masked regardless of per vector
* mask, 0 = each vector's mask
* Table Size (0x1F = 32 entries): dbi writeable
* Next Capability Pointer: dbi writeable
* MSIX Capability ID
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t msix_en:1;
uint32_t func_mask:1;
uint32_t rsrvd:3;
uint32_t tab_sz:11;
uint32_t nxt_cap_ptr:8;
uint32_t msix_cap_id:8;
#else
uint32_t msix_cap_id:8;
uint32_t nxt_cap_ptr:8;
uint32_t tab_sz:11;
uint32_t rsrvd:3;
uint32_t func_mask:1;
uint32_t msix_en:1;
#endif
} bits;
} msix_cap_t;
/*
* Register: MsixTabOff
* MSIX Table Offset
* Description: MSIX Table Offset
* Fields:
* Table Offset (Base address of MSIX Table = msixTabBir.BAR +
* msixTabOff) : dbi writeable
* Table BAR Indicator (0x2 = BAR2 at loc 0x18) : dbi writeable
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t msix_tab_off:29;
uint32_t msix_tab_bir:3;
#else
uint32_t msix_tab_bir:3;
uint32_t msix_tab_off:29;
#endif
} bits;
} msix_tab_off_t;
/*
* Register: MsixPbaOff
* MSIX PBA Offset
* Description: MSIX PBA Offset
* Fields:
* Pending Bit Array (PBA) Offset (Base address of MSIX Table =
* msixTabBir.BAR + msixPbaOff); msixPbaOff is quad-aligned, i.e.
* starts at 0x2000 (half-way in MSI-X bar space. : dbi writeable
* Pending Bit Array (PBA) BAR Indicator (0x2 = BAR2 at loc 0x18)
* : dbi writeable
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t msix_pba_off:29;
uint32_t msix_pba_bir:3;
#else
uint32_t msix_pba_bir:3;
uint32_t msix_pba_off:29;
#endif
} bits;
} msix_pba_off_t;
/*
* Register: PcieCap
* PCIE Capability
* Description: PCIE Capability
* Fields:
* Interrupt Message Number (updated by HW)
* Slot Implemented (Endpoint must be 0)
* PCIE Express Device Port Type (Endpoint)
* PCIE Express Capability Version
* Next Capability Pointer: dbi writeable
* PCI Express Capability ID
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:2;
uint32_t int_msg_num:5;
uint32_t pcie_slt_imp:1;
uint32_t pcie_dev_type:4;
uint32_t pcie_cap_ver:4;
uint32_t nxt_cap_ptr:8;
uint32_t pcie_cap_id:8;
#else
uint32_t pcie_cap_id:8;
uint32_t nxt_cap_ptr:8;
uint32_t pcie_cap_ver:4;
uint32_t pcie_dev_type:4;
uint32_t pcie_slt_imp:1;
uint32_t int_msg_num:5;
uint32_t rsrvd:2;
#endif
} bits;
} pcie_cap_t;
/*
* Register: DevCap
* Device Capability
* Description: Device Capability
* Fields:
* Slot Power Limit Scale (Msg from RC) Hydra can capture
* Received setSlotPowerLimit message; values in this field are
* ignored as no power scaling is possible.
* Slot Power Limit Value (Msg from RC) Hydra can capture
* Received setSlotPowerLimit message; values in this field are
* ignored as no power scaling is possible.
* Introduced in PCIe 1.1 specification. : dbi writeable
* L1 Acceptable Latency (4 - 8 us) : dbi writeable
* LOs Acceptable Latency (2 - 4 us) : dbi writeable
* Extended Tag Field Support (N/A) : dbi writeable
* Phantom Function Supported (N/A) : dbi writeable
* Maximum Payload Size supported (Hydra = 1KB) : dbi writeable
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:4;
uint32_t slt_pwr_lmt_scle:2;
uint32_t slt_pwr_lmt_val:8;
uint32_t rsrvd1:2;
uint32_t role_based_err:1;
uint32_t rsrvd2:3;
uint32_t l1_lat:3;
uint32_t los_lat:3;
uint32_t ext_tag:1;
uint32_t phant_func:2;
uint32_t max_mtu:3;
#else
uint32_t max_mtu:3;
uint32_t phant_func:2;
uint32_t ext_tag:1;
uint32_t los_lat:3;
uint32_t l1_lat:3;
uint32_t rsrvd2:3;
uint32_t role_based_err:1;
uint32_t rsrvd1:2;
uint32_t slt_pwr_lmt_val:8;
uint32_t slt_pwr_lmt_scle:2;
uint32_t rsrvd:4;
#endif
} bits;
} dev_cap_t;
/*
* Register: DevStatCtrl
* Device Status and Control
* Description: Device Control
* Fields:
* Transaction Pending (1 if NP request not completed)
* Auxilliary Power Detected (1 if detected)
* Unsupported Request Detect
* Fatal Error Detected
* Non-Fatal Error Detected
* Correctable Error Detected ----- Control Fields
* Introduced in PCIe 1.1 specification.
* Maximum Read Request Size (default = 512B) for the device as a
* requester. 3'b000: 128 Bytes 3'b001: 256 Bytes 3'b010: 512
* Bytes 3'b011: 1K Bytes 3'b100: 2K Bytes 3'b101: 4K Bytes
* 3'b110: Reserved 3'b111: Reserved
* No Snoop Enable This bit indicates the device "could", not
* that it does. Both this bit and the hydra specific peuCip
* register bit must be set for the value of this bit to impact
* the TLP header no snoop attribute. When both are set, hydra
* sets the no snoop attribute on all initiated TLPs. Software
* must guarantee the No Snoop attribute is used in the system
* correctly.
* Auxilliary Power PM Enable
* Phantom Function enable
* Extended Tag Field Enable
* Maximum Payload Size. 3-bit value has the same encodings as
* the maxRdSz field.
* Relaxed Ordering Enable This bit indicates the device "could",
* not that it does. Both this bit and the hydra specific peuCip
* register bit must be set for the value of this bit to impact
* the TLP header relaxed ordering attribute. When both are set,
* packet operations set the relaxed ordering attribute. Mailbox
* updates always set the relaxed ordering attribute to 0,
* regardless of this bit. When this bit is 0, the default
* Sun4u/Sun4v ordering model is used.
* Unsupported Request Report Enable
* Fatal Error Report Enable
* Non-Fatal Error Report Enable
* Correctable Error Report Enable
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:10;
uint32_t trans_pend:1;
uint32_t aux_pwr_det:1;
uint32_t unsup_req_det:1;
uint32_t fat_err_det:1;
uint32_t nf_err_det:1;
uint32_t corr_err_det:1;
uint32_t pcie2pcix_brdg:1;
uint32_t max_rd_sz:3;
uint32_t no_snoop_en:1;
uint32_t aux_pwr_pm_en:1;
uint32_t phant_func_en:1;
uint32_t ext_tag_en:1;
uint32_t max_pld_sz:3;
uint32_t rlx_ord_en:1;
uint32_t unsup_req_en:1;
uint32_t fat_err_en:1;
uint32_t nf_err_en:1;
uint32_t corr_err_en:1;
#else
uint32_t corr_err_en:1;
uint32_t nf_err_en:1;
uint32_t fat_err_en:1;
uint32_t unsup_req_en:1;
uint32_t rlx_ord_en:1;
uint32_t max_pld_sz:3;
uint32_t ext_tag_en:1;
uint32_t phant_func_en:1;
uint32_t aux_pwr_pm_en:1;
uint32_t no_snoop_en:1;
uint32_t max_rd_sz:3;
uint32_t pcie2pcix_brdg:1;
uint32_t corr_err_det:1;
uint32_t nf_err_det:1;
uint32_t fat_err_det:1;
uint32_t unsup_req_det:1;
uint32_t aux_pwr_det:1;
uint32_t trans_pend:1;
uint32_t rsrvd:10;
#endif
} bits;
} dev_stat_ctrl_t;
/*
* Register: LnkCap
* Link Capability
* Description: Link Capability
* Fields:
* Port Number : dbi writeable
* Introduced in PCIe 1.1 specification.
* Introduced in PCIe 1.1 specification.
* Default Clock Power Management (N/A) Introduced in PCIe 1.1
* specification. : dbi writeable
* Default L1 Exit Latency (32us to 64us => 0x6) : dbi writeable
* Default L0s Exit Latency (1us to 2us => 0x5) : dbi writeable
* Active Link PM Support (only L0s = 1) : dbi writeable
* Maximum Link Width (x8) : dbi writeable
* Maximum Link Speed (2.5 Gbps = 1) : dbi writeable
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t prt_num:8;
uint32_t rsrvd:3;
uint32_t def_dll_act_rptg:1;
uint32_t def_surpise_down:1;
uint32_t def_clk_pm_cap:1;
uint32_t def_l1_lat:3;
uint32_t def_l0s_lat:3;
uint32_t as_lnk_pm_supt:2;
uint32_t max_lnk_wid:6;
uint32_t max_lnk_spd:4;
#else
uint32_t max_lnk_spd:4;
uint32_t max_lnk_wid:6;
uint32_t as_lnk_pm_supt:2;
uint32_t def_l0s_lat:3;
uint32_t def_l1_lat:3;
uint32_t def_clk_pm_cap:1;
uint32_t def_surpise_down:1;
uint32_t def_dll_act_rptg:1;
uint32_t rsrvd:3;
uint32_t prt_num:8;
#endif
} bits;
} lnk_cap_t;
/*
* Register: LnkStatCtrl
* Link Status and Control
* Description: Link Control
* Fields:
* Slot Clock Configuration (0 = using independent clock; pg 266
* PCIe 1.1) : dbi writeable
* Link Training (N/A for EP)
* Training Error (N/A for EP)
* Negotiated Link Width (Max negotiated: x8)
* Negotiated Link Speed (Max negotiated: 1 = 2.5 Gbps) -----
* Control Fields
* Introduced in PCIe 1.1.
* Extended Synch
* Common Clock Configuration
* Retrain Link (N/A for EP)
* Link Disable (N/A for EP)
* Read Completion Boundary (128B)
* Active State Link PM Control
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:2;
uint32_t dll_active:1;
uint32_t slt_clk_cfg:1;
uint32_t lnk_train:1;
uint32_t train_err:1;
uint32_t lnk_wid:6;
uint32_t lnk_spd:4;
uint32_t rsrvd1:7;
uint32_t en_clkpwr_mg:1;
uint32_t ext_sync:1;
uint32_t com_clk_cfg:1;
uint32_t retrain_lnk:1;
uint32_t lnk_dis:1;
uint32_t rd_cmpl_bndy:1;
uint32_t rsrvd2:1;
uint32_t aspm_ctrl:2;
#else
uint32_t aspm_ctrl:2;
uint32_t rsrvd2:1;
uint32_t rd_cmpl_bndy:1;
uint32_t lnk_dis:1;
uint32_t retrain_lnk:1;
uint32_t com_clk_cfg:1;
uint32_t ext_sync:1;
uint32_t en_clkpwr_mg:1;
uint32_t rsrvd1:7;
uint32_t lnk_spd:4;
uint32_t lnk_wid:6;
uint32_t train_err:1;
uint32_t lnk_train:1;
uint32_t slt_clk_cfg:1;
uint32_t dll_active:1;
uint32_t rsrvd:2;
#endif
} bits;
} lnk_stat_ctrl_t;
/*
* Register: VenCapHdr
* Vendor Specific Capability Header
* Description: Vendor Specific Capability Header
* Fields:
* Length
* Next Capbility Pointer
* Vendor Specific Capbility ID
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:8;
uint32_t len:8;
uint32_t nxt_cap_ptr:8;
uint32_t ven_cap_id:8;
#else
uint32_t ven_cap_id:8;
uint32_t nxt_cap_ptr:8;
uint32_t len:8;
uint32_t rsrvd:8;
#endif
} bits;
} ven_cap_hdr_t;
/*
* Register: VenCtrl
* Vendor Specific Control
* Description: Vendor Specific Control
* Fields:
* PCIe spec absolute minimum is 50usec - (likely ~10ms). PCIe
* spec absolute max is 50msec. Default set for 22.2 msec via
* adding time as follows: Bit 23: 3.21 secs <---POR 0 Bit 22:
* 201.3 msec <---POR 0 Bit 21: 100.8 msec <---POR 0 Bit 20: 25.2
* msec <---POR 0 Bit 19: 12.6 msec <---POR 1 Bit 18: 6.3 msec
* <---POR 1 Bit 17: 3.3 msec <---POR 1 Bit 16: if 0:
* Baseline0=50usec; else Baseline1(use for
* simulation-only)=804nsec
* Interrupt Control Mode (00 = Reserved, 01 = INTx emulation, 10
* = Reserved [Neptune INTx pins], 11 = Reserved [Neptune INTx
* emulation + pins]
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:8;
uint32_t eic_xtd_cpl_timout:8;
uint32_t rsrvd1:14;
uint32_t legacy_int_ctrl:2;
#else
uint32_t legacy_int_ctrl:2;
uint32_t rsrvd1:14;
uint32_t eic_xtd_cpl_timout:8;
uint32_t rsrvd:8;
#endif
} bits;
} ven_ctrl_t;
/*
* Register: VenPrtHdr
* Vendor Specific Port Logic Header
* Description: Vendor Specific Port Logic Header
* Fields:
* Length
* Next Capbility Pointer (END, no more)
* Vendor Specific Capbility ID
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:8;
uint32_t len:8;
uint32_t nxt_cap_ptr:8;
uint32_t ven_cap_id:8;
#else
uint32_t ven_cap_id:8;
uint32_t nxt_cap_ptr:8;
uint32_t len:8;
uint32_t rsrvd:8;
#endif
} bits;
} ven_prt_hdr_t;
/*
* Register: AcklatReplay
* Ack Latency and Replay Timer register
* Description: Ack Latency/Replay Timer
* Fields:
* Replay Time limit = 16'd12429/`cxNb where cxNb=1.
* Round Trip Latency Time limit = 9d'4143/`cxNb where cxNb=1.
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rep_tim:16;
uint32_t ack_tim:16;
#else
uint32_t ack_tim:16;
uint32_t rep_tim:16;
#endif
} bits;
} acklat_replay_t;
/*
* Register: OthMsg
* Other Message Register
* Description: Other Message Register
* Fields:
* Message to send/Data to corrupt LCRC
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t oth_msg:32;
#else
uint32_t oth_msg:32;
#endif
} bits;
} oth_msg_t;
/*
* Register: ForceLink
* Port Force Link
* Description: Other Message Register
* Fields:
* LinkState that the EP core will be forced to when ForceLink
* (bit[15]) is set
* Forces Link to the specified LinkState field below. Write this
* bit to generate a pulse to the ltssm. It clears itself once
* the pulse is generated. Read will always return 0.
* Link Number - N/A for Endpoint
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:10;
uint32_t link_state:6;
uint32_t force_link:1;
uint32_t rsrvd1:7;
uint32_t link_num:8;
#else
uint32_t link_num:8;
uint32_t rsrvd1:7;
uint32_t force_link:1;
uint32_t link_state:6;
uint32_t rsrvd:10;
#endif
} bits;
} force_link_t;
/*
* Register: AckFreq
* ACK Frequency Register
* Description: ACK Frequency Register
* Fields:
* NFTS = 115.
* NFTS = 115.
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:2;
uint32_t l1_entr_latency:3;
uint32_t los_entr_latency:3;
uint32_t cx_comm_nfts:8;
uint32_t nfts:8;
uint32_t def_ack_freq:8;
#else
uint32_t def_ack_freq:8;
uint32_t nfts:8;
uint32_t cx_comm_nfts:8;
uint32_t los_entr_latency:3;
uint32_t l1_entr_latency:3;
uint32_t rsrvd:2;
#endif
} bits;
} ack_freq_t;
/*
* Register: LinkCtrl
* Port Link Control
* Description: Port Link Control
* Fields:
* 8 lanes
* When set, this bit is only set for 1 cycle. A write of 0 has
* no effect.
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:4;
uint32_t rsrvd1:2;
uint32_t corrupt_lcrc:1;
uint32_t rsrvd2:1;
uint32_t rsrvd3:2;
uint32_t link_mode_en:6;
uint32_t rsrvd4:4;
uint32_t rsrvd5:4;
uint32_t fast_link_mode:1;
uint32_t rsrvd6:1;
uint32_t dll_link_en:1;
uint32_t rsrvd7:1;
uint32_t reset_assert:1;
uint32_t lpbk_en:1;
uint32_t scram_dis:1;
uint32_t oth_msg_req:1;
#else
uint32_t oth_msg_req:1;
uint32_t scram_dis:1;
uint32_t lpbk_en:1;
uint32_t reset_assert:1;
uint32_t rsrvd7:1;
uint32_t dll_link_en:1;
uint32_t rsrvd6:1;
uint32_t fast_link_mode:1;
uint32_t rsrvd5:4;
uint32_t rsrvd4:4;
uint32_t link_mode_en:6;
uint32_t rsrvd3:2;
uint32_t rsrvd2:1;
uint32_t corrupt_lcrc:1;
uint32_t rsrvd1:2;
uint32_t rsrvd:4;
#endif
} bits;
} link_ctrl_t;
/*
* Register: LaneSkew
* Lane Skew Register
* Description: Lane Skew Register
* Fields:
* prevents EP core from sending Ack/Nack DLLPs
* prevents EP core from sending FC DLLPs
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t dis_lane_to_lane_deskew:1;
uint32_t rsrvd:5;
uint32_t ack_nack_dis:1;
uint32_t flow_control_dis:1;
uint32_t tx_lane_skew:24;
#else
uint32_t tx_lane_skew:24;
uint32_t flow_control_dis:1;
uint32_t ack_nack_dis:1;
uint32_t rsrvd:5;
uint32_t dis_lane_to_lane_deskew:1;
#endif
} bits;
} lane_skew_t;
/*
* Register: SymbolNum
* Symbol Number Register
* Description: Symbol Number Register
* Fields:
* Timer modifier for Flow control Watch Dog timer
* Timer modifier for Ack/Nack latency timer
* Timer modifier for Replay timer
* Note: rtl uses defaultNSkipSymbols
* Note: rtl initialized using defaultNTs1Symbols
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:3;
uint32_t fc_wdog_tim_mod:5;
uint32_t ack_nack_tim_mod:5;
uint32_t rep_tim_mod:5;
uint32_t rsrvd1:3;
uint32_t num_skip_symb:3;
uint32_t rsrvd2:4;
uint32_t num_ts_symb:4;
#else
uint32_t num_ts_symb:4;
uint32_t rsrvd2:4;
uint32_t num_skip_symb:3;
uint32_t rsrvd1:3;
uint32_t rep_tim_mod:5;
uint32_t ack_nack_tim_mod:5;
uint32_t fc_wdog_tim_mod:5;
uint32_t rsrvd:3;
#endif
} bits;
} symbol_num_t;
/*
* Register: SymbTimRadmFlt1
* Symbol Timer Register / RADM Filter Mask Register 1
* Description: Symbol Timer / RADM Filter Mask 1
* Fields:
* No masking errors while filtering
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t mask_radm_flt:16;
uint32_t dis_fc_wdog:1;
uint32_t rsrvd:4;
uint32_t skip_interval:11;
#else
uint32_t skip_interval:11;
uint32_t rsrvd:4;
uint32_t dis_fc_wdog:1;
uint32_t mask_radm_flt:16;
#endif
} bits;
} symb_tim_radm_flt1_t;
/*
* Register: RadmFlt2
* RADM Filter Mask Register 2
* Description: RADM Filter Mask Register 2
* Fields:
* [31:2] = Reserved [1]=0=Vendor MSG Type0 dropped & treated as
* UR, [0]=0=Vendor MSG Type1 silently dropped.
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t mask_radm_flt:32;
#else
uint32_t mask_radm_flt:32;
#endif
} bits;
} radm_flt2_t;
/*
* Register: CascadeDebReg0
* Cascade core (EP) Debug Register 0
* Description: Debug Register 0 EP Core SII Interface bus :
* cxplDebugInfo[31:0]
* Fields:
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rmlh_ts_link_ctrl:4;
uint32_t rmlh_ts_lane_num_is_k237:1;
uint32_t rmlh_ts_link_num_is_k237:1;
uint32_t rmlh_rcvd_idle_bit0:1;
uint32_t rmlh_rcvd_idle_bit1:1;
uint32_t mac_phy_txdata:16;
uint32_t mac_phy_txdatak:2;
uint32_t rsrvd:1;
uint32_t xmlh_ltssm_state:5;
#else
uint32_t xmlh_ltssm_state:5;
uint32_t rsrvd:1;
uint32_t mac_phy_txdatak:2;
uint32_t mac_phy_txdata:16;
uint32_t rmlh_rcvd_idle_bit1:1;
uint32_t rmlh_rcvd_idle_bit0:1;
uint32_t rmlh_ts_link_num_is_k237:1;
uint32_t rmlh_ts_lane_num_is_k237:1;
uint32_t rmlh_ts_link_ctrl:4;
#endif
} bits;
} cascade_deb_reg0_t;
/*
* Register: CascadeDebReg1
* Cascade Core (EP) Debug Register 1
* Description: Debug Register 1 EP Core SII Interface bus :
* cxplDebugInfo[63:32]
* Fields:
* PCIe Link status. 0=down, 1=up
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t xmlh_scrambler_disable:1;
uint32_t xmlh_link_disable:1;
uint32_t xmlh_link_in_training:1;
uint32_t xmlh_rcvr_revrs_pol_en:1;
uint32_t xmlh_training_rst_n:1;
uint32_t rsrvd:4;
uint32_t mac_phy_txdetectrx_loopback:1;
uint32_t mac_phy_txelecidle_bit0:1;
uint32_t mac_phy_txcompliance_bit0:1;
uint32_t app_init_rst:1;
uint32_t rsrvd1:3;
uint32_t rmlh_rs_link_num:8;
uint32_t rmlh_link_mode:3;
uint32_t xmlh_link_up:1;
uint32_t rmlh_inskip_rcv:1;
uint32_t rmlh_ts1_rcvd:1;
uint32_t rmlh_ts2_rcvd:1;
uint32_t rmlh_rcvd_lane_rev:1;
#else
uint32_t rmlh_rcvd_lane_rev:1;
uint32_t rmlh_ts2_rcvd:1;
uint32_t rmlh_ts1_rcvd:1;
uint32_t rmlh_inskip_rcv:1;
uint32_t xmlh_link_up:1;
uint32_t rmlh_link_mode:3;
uint32_t rmlh_rs_link_num:8;
uint32_t rsrvd1:3;
uint32_t app_init_rst:1;
uint32_t mac_phy_txcompliance_bit0:1;
uint32_t mac_phy_txelecidle_bit0:1;
uint32_t mac_phy_txdetectrx_loopback:1;
uint32_t rsrvd:4;
uint32_t xmlh_training_rst_n:1;
uint32_t xmlh_rcvr_revrs_pol_en:1;
uint32_t xmlh_link_in_training:1;
uint32_t xmlh_link_disable:1;
uint32_t xmlh_scrambler_disable:1;
#endif
} bits;
} cascade_deb_reg1_t;
/*
* Register: TxpFcCreditStat
* Transmit Posted FC Credit Status
* Description: Transmit Posted FC Credit Status
* Fields:
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:12;
uint32_t txp_fc_hdr_credit_stat:8;
uint32_t txp_fc_data_credit_stat:12;
#else
uint32_t txp_fc_data_credit_stat:12;
uint32_t txp_fc_hdr_credit_stat:8;
uint32_t rsrvd:12;
#endif
} bits;
} txp_fc_credit_stat_t;
/*
* Register: TxnpFcCreditStat
* Transmit Non-Posted FC Credit Status
* Description: Transmit Non-Posted FC Credit Status
* Fields:
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:12;
uint32_t txnp_fc_hdr_credit_stat:8;
uint32_t txnp_fc_data_credit_stat:12;
#else
uint32_t txnp_fc_data_credit_stat:12;
uint32_t txnp_fc_hdr_credit_stat:8;
uint32_t rsrvd:12;
#endif
} bits;
} txnp_fc_credit_stat_t;
/*
* Register: TxcplFcCreditStat
* Transmit Completion FC Credit Status
* Description: Transmit Completion FC Credit Status
* Fields:
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:12;
uint32_t txcpl_fc_hdr_credit_stat:8;
uint32_t txcpl_fc_data_credit_stat:12;
#else
uint32_t txcpl_fc_data_credit_stat:12;
uint32_t txcpl_fc_hdr_credit_stat:8;
uint32_t rsrvd:12;
#endif
} bits;
} txcpl_fc_credit_stat_t;
/*
* Register: QueueStat
* Queue Status
* Description: Queue Status
* Fields:
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:29;
uint32_t rx_queue_not_empty:1;
uint32_t tx_rbuf_not_empty:1;
uint32_t tx_fc_credit_not_ret:1;
#else
uint32_t tx_fc_credit_not_ret:1;
uint32_t tx_rbuf_not_empty:1;
uint32_t rx_queue_not_empty:1;
uint32_t rsrvd:29;
#endif
} bits;
} queue_stat_t;
/*
* Register: GbtDebug0
* GBT Debug, Status register
* Description: This register returns bits [31:0] of the PIPE core's
* gbtDebug bus
* Fields:
* [6] & [22] = rxclkO will always read 1'b0 [7] & [23] =
* tbcout10O will always read 1'b0
* The value specified here is the Power On Reset value as given
* in spec. except for the clock bits which are hardwired to
* 1'b0.
* The gbtDebug[0:15] bus is provided for each lane as an output
* from the pcieGbtopWrapper.v module. These signals are not
* required for manufacturing test and may be left unconnected.
* The cw00041130PipeParam.vh bus width is the number of lanes
* multiplied by 16. lane0 is bits[15:0], lane1 is bits[31:16],
* lane2 is bits[47:32], lane3 is bits[63:48], lane4 is
* bits[79:64], lane5 is bits[95:80], lane6 is bits[111:96],
* lane7 is bits[127:112].
* Refer to section 4.2.2.4, Gigablaze Debug Signals section.
* (pgs 4.27 - 4.28) in the following document :
* /home/cadtools/cores/lsi/cw000411/cw00041131/prod/docs/manuals/
* cw000411TechMan.pdf
* lane0 is bits[15:0], which is gbtDebug0[15:0] lane1 is
* bits[31:16], which is gbtDebug0[31:16]
*
* -------------------------------------------------------------------------
* Signal Bit Reset Description
* -------------------------------------------------------------------------
* gbtResetRbcI [16n+15] [15] 1 Reset receiver bit clock
* gbtResetTbc20I [16n+14] [14] 1 Reset transmit 20-bit clock
* gbtResetRI [16n+13] [13] 1 Reset receiver logic gbtResetTI
* [16n+12] [12] 1 Reset transmit logic reserved [16n+11:16n+8]
* [11:8] 0 reserved gbtTbcout10 [16n+7] [7] 1 transmit clock
* 10-bit gbtRxclkO [16n+6] [6] 0 receiver PLL clock gbtRxpresO
* [16n+5] [5] 0 receiver detect present gbtRxpresvalidO [16n+4]
* [4] 0 gbtRxpresO is valid gbtRxlosO [16n+3] [3] 1 raw receiver
* loss-of-signal gbtPassnO [16n+2] [2] 1 GigaBlaze BIST pass
* active low reserved [16n+1] [1] 0 reserved reserved [16n] [0]
* 0 reserved
* -------------------------------------------------------------------------
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t data:32;
#else
uint32_t data:32;
#endif
} bits;
} gbt_debug0_t;
/*
* Register: GbtDebug1
* GBT Debug, Status register
* Description: This register returns bits [63:32] of the PIPE core's
* gbtDebug bus
* Fields:
* [6] & [22] = rxclkO will always read 1'b0 [7] & [23] =
* tbcout10O will always read 1'b0
* The value specified here is the Power On Reset value as given
* in spec. except for the clock bits which are hardwired to
* 1'b0.
* The gbtDebug[0:15] bus is provided for each lane as an output
* from the pcieGbtopWrapper.v module. These signals are not
* required for manufacturing test and may be left unconnected.
* The cw00041130PipeParam.vh bus width is the number of lanes
* multiplied by 16.
* Refer to section 4.2.2.4, Gigablaze Debug Signals section.
* (pgs 4.27 - 4.28) in the following document :
* /home/cadtools/cores/lsi/cw000411/cw00041131/prod/docs/manuals/
* cw000411TechMan.pdf
* lane2 is bits[47:32], which is gbtDebug1[15:0] lane3 is
* bits[63:48], which is gbtDebug1[31:16]
*
* -------------------------------------------------------------------------
* Signal Bit Reset Description
* -------------------------------------------------------------------------
* gbtResetRbcI [16n+15] [15] 1 Reset receiver bit clock
* gbtResetTbc20I [16n+14] [14] 1 Reset transmit 20-bit clock
* gbtResetRI [16n+13] [13] 1 Reset receiver logic gbtResetTI
* [16n+12] [12] 1 Reset transmit logic reserved [16n+11:16n+8]
* [11:8] 0 reserved gbtTbcout10 [16n+7] [7] 1 transmit clock
* 10-bit gbtRxclkO [16n+6] [6] 0 receiver PLL clock gbtRxpresO
* [16n+5] [5] 0 receiver detect present gbtRxpresvalidO [16n+4]
* [4] 0 gbtRxpresO is valid gbtRxlosO [16n+3] [3] 1 raw receiver
* loss-of-signal gbtPassnO [16n+2] [2] 1 GigaBlaze BIST pass
* active low reserved [16n+1] [1] 0 reserved reserved [16n] [0]
* 0 reserved
* -------------------------------------------------------------------------
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t data:32;
#else
uint32_t data:32;
#endif
} bits;
} gbt_debug1_t;
/*
* Register: GbtDebug2
* GBT Debug, Status register
* Description: This register returns bits [95:64] of the PIPE core's
* gbtDebug bus
* Fields:
* [6] & [22] = rxclkO will always read 1'b0 [7] & [23] =
* tbcout10O will always read 1'b0
* The value specified here is the Power On Reset value as given
* in spec. except for the clock bits which are hardwired to
* 1'b0.
* The gbtDebug[0:15] bus is provided for each lane as an output
* from the pcieGbtopWrapper.v module. These signals are not
* required for manufacturing test and may be left unconnected.
* The cw00041130PipeParam.vh bus width is the number of lanes
* multiplied by 16.
* Refer to section 4.2.2.4, Gigablaze Debug Signals section.
* (pgs 4.27 - 4.28) in the following document :
* /home/cadtools/cores/lsi/cw000411/cw00041131/prod/docs/manuals/
* cw000411TechMan.pdf
* lane4 is bits[79:64], which is gbtDebug2[15:0] lane5 is
* bits[95:80], which is gbtDebug2[31:16]
*
* -------------------------------------------------------------------------
* Signal Bit Reset Description
* -------------------------------------------------------------------------
* gbtResetRbcI [16n+15] [15] 1 Reset receiver bit clock
* gbtResetTbc20I [16n+14] [14] 1 Reset transmit 20-bit clock
* gbtResetRI [16n+13] [13] 1 Reset receiver logic gbtResetTI
* [16n+12] [12] 1 Reset transmit logic reserved [16n+11:16n+8]
* [11:8] 0 reserved gbtTbcout10 [16n+7] [7] 1 transmit clock
* 10-bit gbtRxclkO [16n+6] [6] 0 receiver PLL clock gbtRxpresO
* [16n+5] [5] 0 receiver detect present gbtRxpresvalidO [16n+4]
* [4] 0 gbtRxpresO is valid gbtRxlosO [16n+3] [3] 1 raw receiver
* loss-of-signal gbtPassnO [16n+2] [2] 1 GigaBlaze BIST pass
* active low reserved [16n+1] [1] 0 reserved reserved [16n] [0]
* 0 reserved
* -------------------------------------------------------------------------
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t data:32;
#else
uint32_t data:32;
#endif
} bits;
} gbt_debug2_t;
/*
* Register: GbtDebug3
* GBT Debug, Status register
* Description: This register returns bits [127:96] of the PIPE
* core's gbtDebug bus
* Fields:
* [6] & [22] = rxclkO will always read 1'b0 [7] & [23] =
* tbcout10O will always read 1'b0
* The value specified here is the Power On Reset value as given
* in spec. except for the clock bits which are hardwired to
* 1'b0.
* The gbtDebug[0:15] bus is provided for each lane as an output
* from the pcieGbtopWrapper.v module. These signals are not
* required for manufacturing test and may be left unconnected.
* The cw00041130PipeParam.vh bus width is the number of lanes
* multiplied by 16.
* Refer to section 4.2.2.4, Gigablaze Debug Signals section.
* (pgs 4.27 - 4.28) in the following document :
* /home/cadtools/cores/lsi/cw000411/cw00041131/prod/docs/manuals/
* cw000411TechMan.pdf
* lane6 is bits[111:96], which is gbtDebug3[15:0] lane7 is
* bits[127:112], which is gbtDebug3[31:16]
*
* -------------------------------------------------------------------------
* Signal Bit Reset Description
* -------------------------------------------------------------------------
* gbtResetRbcI [16n+15] [15] 1 Reset receiver bit clock
* gbtResetTbc20I [16n+14] [14] 1 Reset transmit 20-bit clock
* gbtResetRI [16n+13] [13] 1 Reset receiver logic gbtResetTI
* [16n+12] [12] 1 Reset transmit logic reserved [16n+11:16n+8]
* [11:8] 0 reserved gbtTbcout10 [16n+7] [7] 1 transmit clock
* 10-bit gbtRxclkO [16n+6] [6] 0 receiver PLL clock gbtRxpresO
* [16n+5] [5] 0 receiver detect present gbtRxpresvalidO [16n+4]
* [4] 0 gbtRxpresO is valid gbtRxlosO [16n+3] [3] 1 raw receiver
* loss-of-signal gbtPassnO [16n+2] [2] 1 GigaBlaze BIST pass
* active low reserved [16n+1] [1] 0 reserved reserved [16n] [0]
* 0 reserved
* -------------------------------------------------------------------------
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t data:32;
#else
uint32_t data:32;
#endif
} bits;
} gbt_debug3_t;
/*
* Register: PipeDebug0
* PIPE Debug, status register
* Description: This register returns bits [31:0] of the PIPE core's
* gbtDebug bus
* Fields:
* The value specified here is the Power On Reset value as given
* in spec.
* This 16-bit debug bus reports operating conditions for the
* PIPE. The pipeDebug[0:15] bus is provided for each lane. lane0
* is bits[15:0], lane1 is bits[31:16], lane2 is bits[47:32],
* lane3 is bits[63:48], lane4 is bits[79:64], lane5 is
* bits[95:80], lane6 is bits[111:96], lane7 is bits[127:112].
* Refer to section 4.2.1.5 Single-Lane PIPE Debug Signals in
* the following document :
* /home/cadtools/cores/lsi/cw000411/cw00041131/prod/docs/manuals/
* cw000411TechMan.pdf
* lane0 is bit[15:0], which is pipeDebug0[15:0] lane1 is
* bit[31:16], which is pipeDebug0[31:16]
*
* -------------------------------------------------------------------------
* pipeDebug Signal or Condition Description Reset
* -------------------------------------------------------------------------
* [15] efifoOverflow or EFIFO overflow or 0 efifoUnderflow EFIFO
* underflow occurred
* [14] skipInsert or EFIFO skip inserted or 0 skipDelete
* deleted 0
* [13] fifordData[12] == Skip flag read by EFIFO. 0 skipFlag
* Used with skipcharflag to verify EFIFO depth.
* [12] skipcharflag Skip flag written by EFIFO 0
* [11:8] efifoDepth[3:0] Indicates EFIFO depth 0000
* [7] efifoEios Detected EFIFO 0 electrical-idle ordered-set
* output
* [6] efifoBytesync EFIFO output byte 0 synchronization
* [5] rxinvalid 8b/10b error or 0 or code violation
* [4] rxinitdone Receiver bit-init done. 0 Synchronous with
* pipeClk.
* [3] txinitdone Transmitter-bit init done. 0 Synchronous with
* pipeClk.
* [2] filteredrxlos Filtered loss of signal used 1 to generate
* p2lRxelectidle. Synchronous with pipeClk.
* [1] rxdetectInt Receiver detected 0
* [0] pipeMasterDoneOut Receiver detection valid 0
*
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t data:32;
#else
uint32_t data:32;
#endif
} bits;
} pipe_debug0_t;
/*
* Register: PipeDebug1
* PIPE Debug, status register
* Description: This register returns bits [63:32] of the PIPE core's
* gbtDebug bus
* Fields:
* The value specified here is the Power On Reset value as given
* in spec.
* This 16-bit debug bus reports operating conditions for the
* PIPE. The pipeDebug[0:15] bus is provided for each lane. lane0
* is bits[15:0], lane1 is bits[31:16], lane2 is bits[47:32],
* lane3 is bits[63:48], lane4 is bits[79:64], lane5 is
* bits[95:80], lane6 is bits[111:96], lane7 is bits[127:112].
* Refer to section 4.2.1.5 Single-Lane PIPE Debug Signals in
* the following document :
* /home/cadtools/cores/lsi/cw000411/cw00041131/prod/docs/manuals/
* cw000411TechMan.pdf
* lane2 is bits[47:32], which is pipeDebug1[15:0] lane3 is
* bits[63:48], which is pipeDebug1[31:16]
*
* -------------------------------------------------------------------------
* pipeDebug Signal or Condition Description Reset
* -------------------------------------------------------------------------
* [15] efifoOverflow or EFIFO overflow or 0 efifoUnderflow EFIFO
* underflow occurred
* [14] skipInsert or EFIFO skip inserted or 0 skipDelete
* deleted 0
* [13] fifordData[12] == Skip flag read by EFIFO. 0 skipFlag
* Used with skipcharflag to verify EFIFO depth.
* [12] skipcharflag Skip flag written by EFIFO 0
* [11:8] efifoDepth[3:0] Indicates EFIFO depth 0000
* [7] efifoEios Detected EFIFO 0 electrical-idle ordered-set
* output
* [6] efifoBytesync EFIFO output byte 0 synchronization
* [5] rxinvalid 8b/10b error or 0 or code violation
* [4] rxinitdone Receiver bit-init done. 0 Synchronous with
* pipeClk.
* [3] txinitdone Transmitter-bit init done. 0 Synchronous with
* pipeClk.
* [2] filteredrxlos Filtered loss of signal used 1 to generate
* p2lRxelectidle. Synchronous with pipeClk.
* [1] rxdetectInt Receiver detected 0
* [0] pipeMasterDoneOut Receiver detection valid 0
*
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t data:32;
#else
uint32_t data:32;
#endif
} bits;
} pipe_debug1_t;
/*
* Register: PipeDebug2
* PIPE Debug, status register
* The value specified here is the Power On Reset value as given
* in spec.
* This 16-bit debug bus reports operating conditions for the
* PIPE. The pipeDebug[0:15] bus is provided for each lane. lane0
* is bits[15:0], lane1 is bits[31:16], lane2 is bits[47:32],
* lane3 is bits[63:48], lane4 is bits[79:64], lane5 is
* bits[95:80], lane6 is bits[111:96], lane7 is bits[127:112].
* Refer to section 4.2.1.5 Single-Lane PIPE Debug Signals in
* the following document :
* /home/cadtools/cores/lsi/cw000411/cw00041131/prod/docs/manuals/
* cw000411TechMan.pdf
* lane4 is bits[79:64], which is pipeDebug2[15:0] lane5 is
* bits[95:80], which is pipeDebug2[31:16]
*
* -------------------------------------------------------------------------
* pipeDebug Signal or Condition Description Reset
* -------------------------------------------------------------------------
* [15] efifoOverflow or EFIFO overflow or 0 efifoUnderflow EFIFO
* underflow occurred
* [14] skipInsert or EFIFO skip inserted or 0 skipDelete
* deleted 0
* [13] fifordData[12] == Skip flag read by EFIFO. 0 skipFlag
* Used with skipcharflag to verify EFIFO depth.
* [12] skipcharflag Skip flag written by EFIFO 0
* [11:8] efifoDepth[3:0] Indicates EFIFO depth 0000
* [7] efifoEios Detected EFIFO 0 electrical-idle ordered-set
* output
* [6] efifoBytesync EFIFO output byte 0 synchronization
* [5] rxinvalid 8b/10b error or 0 or code violation
* [4] rxinitdone Receiver bit-init done. 0 Synchronous with
* pipeClk.
* [3] txinitdone Transmitter-bit init done. 0 Synchronous with
* pipeClk.
* [2] filteredrxlos Filtered loss of signal used 1 to generate
* p2lRxelectidle. Synchronous with pipeClk.
* [1] rxdetectInt Receiver detected 0
* [0] pipeMasterDoneOut Receiver detection valid 0
*
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t data:32;
#else
uint32_t data:32;
#endif
} bits;
} pipe_debug2_t;
/*
* Register: PipeDebug3
* PIPE Debug, status register
* Description: This register returns bits [127:96] of the PIPE
* core's gbtDebug bus
* Fields:
* The value specified here is the Power On Reset value as given
* in spec.
* This 16-bit debug bus reports operating conditions for the
* PIPE. The pipeDebug[0:15] bus is provided for each lane. lane0
* is bits[15:0], lane1 is bits[31:16], lane2 is bits[47:32],
* lane3 is bits[63:48], lane4 is bits[79:64], lane5 is
* bits[95:80], lane6 is bits[111:96], lane7 is bits[127:112].
* Refer to section 4.2.1.5 Single-Lane PIPE Debug Signals in
* the following document :
* /home/cadtools/cores/lsi/cw000411/cw00041131/prod/docs/manuals/
* cw000411TechMan.pdf
* lane6 is bits[111:96], which is pipeDebug3[15:0] lane7 is
* bits[127:112], which is pipeDebug3[31:16]
*
* -------------------------------------------------------------------------
* pipeDebug Signal or Condition Description Reset
* -------------------------------------------------------------------------
* [15] efifoOverflow or EFIFO overflow or 0 efifoUnderflow EFIFO
* underflow occurred
* [14] skipInsert or EFIFO skip inserted or 0 skipDelete
* deleted 0
* [13] fifordData[12] == Skip flag read by EFIFO. 0 skipFlag
* Used with skipcharflag to verify EFIFO depth.
* [12] skipcharflag Skip flag written by EFIFO 0
* [11:8] efifoDepth[3:0] Indicates EFIFO depth 0000
* [7] efifoEios Detected EFIFO 0 electrical-idle ordered-set
* output
* [6] efifoBytesync EFIFO output byte 0 synchronization
* [5] rxinvalid 8b/10b error or 0 or code violation
* [4] rxinitdone Receiver bit-init done. 0 Synchronous with
* pipeClk.
* [3] txinitdone Transmitter-bit init done. 0 Synchronous with
* pipeClk.
* [2] filteredrxlos Filtered loss of signal used 1 to generate
* p2lRxelectidle. Synchronous with pipeClk.
* [1] rxdetectInt Receiver detected 0
* [0] pipeMasterDoneOut Receiver detection valid 0
*
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t data:32;
#else
uint32_t data:32;
#endif
} bits;
} pipe_debug3_t;
/*
* Register: PcieEnhCapHdr
* PCIE Enhanced Capability Header
* Description: PCIE Enhanced Capability Header
* Fields:
* Next Capability Offset (END, no more)
* Capability Version
* PCI Express Enhanced Capability ID (0x1 = Advanced Error
* Reporting)
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t nxt_cap_offset:12;
uint32_t cap_ver:4;
uint32_t pcie_enh_cap_id:16;
#else
uint32_t pcie_enh_cap_id:16;
uint32_t cap_ver:4;
uint32_t nxt_cap_offset:12;
#endif
} bits;
} pcie_enh_cap_hdr_t;
/*
* Register: UncErrStat
* Uncorrectable Error Status
* Description: Uncorrectable Error Status
* Fields:
* Unsupported Request Error
* ECRC Error
* Malformed TLP
* Reciever Overflow
* Unexpected Completion
* Completion Abort
* Completion Timeout
* Flow Control Protocol Error
* Poisoned TLP
* Introduced in PCIe 1.1 specification.
* Data Link Protocol Error
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:11;
uint32_t unsup_req_err:1;
uint32_t ecrc_err:1;
uint32_t bad_tlp:1;
uint32_t rcv_ovfl:1;
uint32_t unexp_cpl:1;
uint32_t cpl_abrt:1;
uint32_t cpl_tmout:1;
uint32_t fc_err:1;
uint32_t psn_tlp:1;
uint32_t rsrvd1:6;
uint32_t surprise_down_err:1;
uint32_t dlp_err:1;
uint32_t rsrvd2:4;
#else
uint32_t rsrvd2:4;
uint32_t dlp_err:1;
uint32_t surprise_down_err:1;
uint32_t rsrvd1:6;
uint32_t psn_tlp:1;
uint32_t fc_err:1;
uint32_t cpl_tmout:1;
uint32_t cpl_abrt:1;
uint32_t unexp_cpl:1;
uint32_t rcv_ovfl:1;
uint32_t bad_tlp:1;
uint32_t ecrc_err:1;
uint32_t unsup_req_err:1;
uint32_t rsrvd:11;
#endif
} bits;
} unc_err_stat_t;
/*
* Register: UncErrMask
* Uncorrectable Error Mask
* Description: Uncorrectable Error Mask
* Fields:
* Unsupported Request Error
* ECRC Error
* Malformed TLP
* Reciever Overflow
* Unexpected Completion
* Completion Abort
* Completion Timeout
* Flow Control Protocol Error
* Poisoned TLP
* Introduced in PCIe 1.1
* Data Link Protocol Error
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:11;
uint32_t unsup_req_err:1;
uint32_t ecrc_err:1;
uint32_t bad_tlp:1;
uint32_t rcv_ovfl:1;
uint32_t unexp_cpl:1;
uint32_t cpl_abrt:1;
uint32_t cpl_tmout:1;
uint32_t fc_err:1;
uint32_t psn_tlp:1;
uint32_t rsrvd1:6;
uint32_t surprise_down_err:1;
uint32_t dlp_err:1;
uint32_t rsrvd2:4;
#else
uint32_t rsrvd2:4;
uint32_t dlp_err:1;
uint32_t surprise_down_err:1;
uint32_t rsrvd1:6;
uint32_t psn_tlp:1;
uint32_t fc_err:1;
uint32_t cpl_tmout:1;
uint32_t cpl_abrt:1;
uint32_t unexp_cpl:1;
uint32_t rcv_ovfl:1;
uint32_t bad_tlp:1;
uint32_t ecrc_err:1;
uint32_t unsup_req_err:1;
uint32_t rsrvd:11;
#endif
} bits;
} unc_err_mask_t;
/*
* Register: UncErrSvrty
* Uncorrectable Error Severity
* Description: Uncorrectable Error Severity
* Fields:
* Unsupported Request Error
* ECRC Error
* Malformed TLP
* Reciever Overflow
* Unexpected Completion
* Completion Abort
* Completion Timeout
* Flow Control Protocol Error
* Poisoned TLP
* Introduced in PCIe 1.1 specification. Not supported; use PCIe
* default.
* Data Link Protocol Error
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:11;
uint32_t unsup_req_err:1;
uint32_t ecrc_err:1;
uint32_t bad_tlp:1;
uint32_t rcv_ovfl:1;
uint32_t unexp_cpl:1;
uint32_t cpl_abrt:1;
uint32_t cpl_tmout:1;
uint32_t fc_err:1;
uint32_t psn_tlp:1;
uint32_t rsrvd1:6;
uint32_t surprise_down_err:1;
uint32_t dlp_err:1;
uint32_t rsrvd2:4;
#else
uint32_t rsrvd2:4;
uint32_t dlp_err:1;
uint32_t surprise_down_err:1;
uint32_t rsrvd1:6;
uint32_t psn_tlp:1;
uint32_t fc_err:1;
uint32_t cpl_tmout:1;
uint32_t cpl_abrt:1;
uint32_t unexp_cpl:1;
uint32_t rcv_ovfl:1;
uint32_t bad_tlp:1;
uint32_t ecrc_err:1;
uint32_t unsup_req_err:1;
uint32_t rsrvd:11;
#endif
} bits;
} unc_err_svrty_t;
/*
* Register: CorrErrStat
* Correctable Error Status
* Description: Correctable Error Status
* Fields:
* Advisory Non-Fatal Error Introduced in PCIe 1.1 specification.
* Reply Timer Timeout
* Replay Number Rollover
* Bad DLLP
* Bad TLP
* Receive Error
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:18;
uint32_t adv_nf_err:1;
uint32_t rply_tmr_tmout:1;
uint32_t rsrvd1:3;
uint32_t rply_rlovr:1;
uint32_t bad_dllp:1;
uint32_t bad_tlp:1;
uint32_t rsrvd2:5;
uint32_t rcv_err:1;
#else
uint32_t rcv_err:1;
uint32_t rsrvd2:5;
uint32_t bad_tlp:1;
uint32_t bad_dllp:1;
uint32_t rply_rlovr:1;
uint32_t rsrvd1:3;
uint32_t rply_tmr_tmout:1;
uint32_t adv_nf_err:1;
uint32_t rsrvd:18;
#endif
} bits;
} corr_err_stat_t;
/*
* Register: CorrErrMask
* Correctable Error Mask
* Description: Correctable Error Mask
* Fields:
* Advisory Non Fatal Error Mask
* Reply Timer Timeout
* Replay Number Rollover
* Bad DLLP
* Bad TLP
* Receive Error
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:18;
uint32_t adv_nf_err_mask:1;
uint32_t rply_tmr_tmout:1;
uint32_t rsrvd1:3;
uint32_t rply_rlovr:1;
uint32_t bad_dllp:1;
uint32_t bad_tlp:1;
uint32_t rsrvd2:5;
uint32_t rcv_err:1;
#else
uint32_t rcv_err:1;
uint32_t rsrvd2:5;
uint32_t bad_tlp:1;
uint32_t bad_dllp:1;
uint32_t rply_rlovr:1;
uint32_t rsrvd1:3;
uint32_t rply_tmr_tmout:1;
uint32_t adv_nf_err_mask:1;
uint32_t rsrvd:18;
#endif
} bits;
} corr_err_mask_t;
/*
* Register: AdvCapCtrl
* Advanced Capability and Control
* Description: Advanced Capability and Control
* Fields:
* ECRC Check Enable
* ECRC Check Capable
* ECRC Generation Enable
* ECRC Generation Capability
* First Error Pointer
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:23;
uint32_t ecrc_chk_en:1;
uint32_t ecrc_chk_cap:1;
uint32_t ecrc_gen_en:1;
uint32_t ecrc_gen_cap:1;
uint32_t st_err_ptr:5;
#else
uint32_t st_err_ptr:5;
uint32_t ecrc_gen_cap:1;
uint32_t ecrc_gen_en:1;
uint32_t ecrc_chk_cap:1;
uint32_t ecrc_chk_en:1;
uint32_t rsrvd:23;
#endif
} bits;
} adv_cap_ctrl_t;
/*
* Register: HdrLog0
* Header Log0
* Description: Header Log0
* Fields:
* First DW of TLP header with error
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t data:32;
#else
uint32_t data:32;
#endif
} bits;
} hdr_log0_t;
/*
* Register: HdrLog1
* Header Log1
* Description: Header Log1
* Fields:
* Second DW of TLP header with error
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t data:32;
#else
uint32_t data:32;
#endif
} bits;
} hdr_log1_t;
/*
* Register: HdrLog2
* Header Log2
* Description: Header Log2
* Fields:
* Third DW of TLP header with error
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t data:32;
#else
uint32_t data:32;
#endif
} bits;
} hdr_log2_t;
/*
* Register: HdrLog3
* Header Log3
* Description: Header Log3
* Fields:
* Fourth DW of TLP header with error
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t data:32;
#else
uint32_t data:32;
#endif
} bits;
} hdr_log3_t;
/*
* Register: PipeRxTxControl
* Pipe Rx/Tx Control
* 00 : ewrap : Enable wrapback test mode 01 : padLoopback :
* Enable Pad Serial Loopback test mode 10 : revLoopback : Enable
* Reverse Loopback test mode 11 : efifoLoopback : Enable PCI
* Express Slave loop back
* 100 : Clock generator test x10 : Vil/Vih test x01 : Vih/Vil
* test x11 : No-error test. A full test of the transceiver 111 :
* Forced-error test. A full test of the transceiver with forced
* errors
* 1 : selects 20-bit mode 0 : selects 10-bit mode
* 1 : selects Tx 20-bit fifo mode
* 00 : 52 us (470 cycles) 01 : 53 us (720 cycles) 10 : 54 us
* (970 cycles) 11 : 55 us (1220 cycles)
* 1 : selects 20-bit mode 0 : selects 10-bit mode
* 1 : Enable receiver reference clocks
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:1;
uint32_t loopback:1;
uint32_t loopback_mode_sel:2;
uint32_t rsrvd1:1;
uint32_t en_bist:3;
uint32_t tdws20:1;
uint32_t tdenfifo:1;
uint32_t rxpreswin:2;
uint32_t rdws20:1;
uint32_t enstretch:1;
uint32_t rsrvd2:18;
#else
uint32_t rsrvd2:18;
uint32_t enstretch:1;
uint32_t rdws20:1;
uint32_t rxpreswin:2;
uint32_t tdenfifo:1;
uint32_t tdws20:1;
uint32_t en_bist:3;
uint32_t rsrvd1:1;
uint32_t loopback_mode_sel:2;
uint32_t loopback:1;
uint32_t rsrvd:1;
#endif
} bits;
} pipe_rx_tx_control_t;
/*
* Register: PipeRxTxStatus
* Pipe Rx/Tx Status
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:32;
#else
uint32_t rsrvd:32;
#endif
} bits;
} pipe_rx_tx_status_t;
/*
* Register: PipeRxTxPwrCntl
* Pipe Rx/Tx Power Control
* 1 : power down termination trimming circuit 0 : normal
* operation
* Power down PECL Clock buffer 1 : when a bit is 1, power down
* associated clock buffer cell 0 : normal operation
* Power down Transmit PLL 1 : when a bit is 1, power down
* associated Tx PLL circuit 0 : normal operation
* Power down Differential O/P Clock buffer 1 : when a bit is 1,
* power down associated differntial clock buffer that drives
* gbtClkoutN/p 0 : normal operation
* Power down Transmitter Analog section 1 : when a bit is 1,
* power down analog section of the associated Transmitter and
* the Tx buffer 0 : normal operation
* Power down RxLOS 1 : when a bit is 1, it powers down the Rx
* LOS circuitry for the associated serdes lanes 0 : normal
* operation
* Power down Receiver Analog section 1 : when a bit is 1, power
* down analog section of the associated Receiver and the Tx
* buffer 0 : normal operation
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:1;
uint32_t pdrtrim:1;
uint32_t pdownpecl:2;
uint32_t pdownpll:2;
uint32_t pdclkout:2;
uint32_t pdownt:8;
uint32_t pdrxlos:8;
uint32_t pdownr:8;
#else
uint32_t pdownr:8;
uint32_t pdrxlos:8;
uint32_t pdownt:8;
uint32_t pdclkout:2;
uint32_t pdownpll:2;
uint32_t pdownpecl:2;
uint32_t pdrtrim:1;
uint32_t rsrvd:1;
#endif
} bits;
} pipe_rx_tx_pwr_cntl_t;
/*
* Register: PipeRxTxParam
* Pipe Rx/Tx Parameter
* Tx Driver Emphasis
* Serial output Slew Rate Control
* Tx Voltage Mux control
* Tx Voltage Pulse control
* Output Swing setting
* Transmitter Clock generator pole adjust
* Transmitter Clock generator zero adjust
* Receiver Clock generator pole adjust
* Receiver Clock generator zero adjust
* Bias Control for factory testing and debugging
* Receiver LOS Threshold adjustment. This value is determined by
* LSI.
* Receiver Input Equalizer control
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:1;
uint32_t emph:3;
uint32_t rsrvd1:1;
uint32_t risefall:3;
uint32_t vmuxlo:2;
uint32_t vpulselo:2;
uint32_t vtxlo:4;
uint32_t tp:2;
uint32_t tz:2;
uint32_t rp:2;
uint32_t rz:2;
uint32_t biascntl:1;
uint32_t losadj:3;
uint32_t rxeq:4;
#else
uint32_t rxeq:4;
uint32_t losadj:3;
uint32_t biascntl:1;
uint32_t rz:2;
uint32_t rp:2;
uint32_t tz:2;
uint32_t tp:2;
uint32_t vtxlo:4;
uint32_t vpulselo:2;
uint32_t vmuxlo:2;
uint32_t risefall:3;
uint32_t rsrvd1:1;
uint32_t emph:3;
uint32_t rsrvd:1;
#endif
} bits;
} pipe_rx_tx_param_t;
/*
* Register: PipeRxTxClock
* Pipe Rx/Tx Clock
* Reverse Loopback clock select 00 : gbtRbcAO 01 : gbtRbcBO 10 :
* gbtRbcCO 11 : gbtRbcDO
* Select Master Clock 100 : All lanes 000 : Lane A 001 : Lane B
* 010 : Lane C 011 : Lane D
* Transmit PLL Divider control
* Transmit Data rate control
* Receiver PLL Frequency control
* Bit rate control to enable bit doubling feature
* Reset Transmitter lane
* Reset Receiver lane
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:2;
uint32_t revlbrefsel:2;
uint32_t rsrvd1:1;
uint32_t tdmaster:3;
uint32_t fbdivt:3;
uint32_t half_ratet:1;
uint32_t fbdivr:3;
uint32_t half_rater:1;
uint32_t txreset:8;
uint32_t rxreset:8;
#else
uint32_t rxreset:8;
uint32_t txreset:8;
uint32_t half_rater:1;
uint32_t fbdivr:3;
uint32_t half_ratet:1;
uint32_t fbdivt:3;
uint32_t tdmaster:3;
uint32_t rsrvd1:1;
uint32_t revlbrefsel:2;
uint32_t rsrvd:2;
#endif
} bits;
} pipe_rx_tx_clock_t;
/*
* Register: PipeGlueCntl0
* Pipe Glue Control 0
* Lock to Bitstream Initialization Time
* RXLOS Test bit
* Electrical Idle Ordered set enable
* Enable RxLOS
* Enable Fast resync
* RxLOS Sample Interval
* RxLOS threshold
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t bitlocktime:16;
uint32_t rxlos_test:1;
uint32_t eiosenable:1;
uint32_t rxlosenable:1;
uint32_t fastresync:1;
uint32_t samplerate:4;
uint32_t thresholdcount:8;
#else
uint32_t thresholdcount:8;
uint32_t samplerate:4;
uint32_t fastresync:1;
uint32_t rxlosenable:1;
uint32_t eiosenable:1;
uint32_t rxlos_test:1;
uint32_t bitlocktime:16;
#endif
} bits;
} pipe_glue_cntl0_t;
/*
* Register: PipeGlueCntl1
* Pipe Glue Control 1
* Receiver Trim Resistance Configuration
* Transmitter Trim Resistance Configuration
* Auto Trim Enable
* 50 Ohm Termination Enable
* Customer select for reference clock frequency
* EFIFO Same clock select
* EFIFO start depth
* Lock to refclk initialization time
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t termrcfg:2;
uint32_t termtcfg:2;
uint32_t rtrimen:1;
uint32_t ref50:1;
uint32_t freq_sel:1;
uint32_t same_sel:1;
uint32_t rsrvd:1;
uint32_t start_efifo:3;
uint32_t rsrvd1:2;
uint32_t inittime:18;
#else
uint32_t inittime:18;
uint32_t rsrvd1:2;
uint32_t start_efifo:3;
uint32_t rsrvd:1;
uint32_t same_sel:1;
uint32_t freq_sel:1;
uint32_t ref50:1;
uint32_t rtrimen:1;
uint32_t termtcfg:2;
uint32_t termrcfg:2;
#endif
} bits;
} pipe_glue_cntl1_t;
/*
* Register: HcrReg
* HCR Registers
* Description: Hydra Specific Configuration Registers for use by
* software. These registers are loaded with the SPROM contents at
* power on. A maximum of 128 DWords has been assigned for s/w to
* use. This space generally stores the following informations : MAC
* Address Number of MAC addresses MAC Phy Type Other data fields are
* upto the software to use.
*
* Fields:
* Hydra specific configuration controlled by software
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t hcr_val:32;
#else
uint32_t hcr_val:32;
#endif
} bits;
} hcr_reg_t;
/*
* Register: BlockReset
* Block Reset
* Description: Soft resets to modules. Blade domain modules are
* reset by setting the corresponding block reset to 1. Shared domain
* resets are sent to SPI for processing and corresponding action by
* SPI. Shared domains are reset only if all the blades have
* requested a reset for that block. Below is an example scenario :
* s/w initiates the reset by writing '1' to the dpmRst bit dpmRst
* bit remains '1' until dpmRstStat is detected to be 1. Once
* dpmRstStat is detected to be 1, even if s/w writes 1 to this bit
* again no new reset will be initiated to the shared domain, ie,
* DPM. dpmRstStat is driven by external i/f (shared domain status
* provided by SPI) dpmRstStat bit will show '1' as long as the input
* stays at 1 or until s/w reads the status and is cleared only after
* s/w reads it and if dpmRstStat is 0 by then.
* If Host wants to reset entire Hydra it should do so through the
* mailbox. In this case, the message interprettation is upto the
* software. Writing a '1' to any of these bits generates a single
* pulse to the SP module which then controls the reset of the
* respective block.
*
* Fields:
* 1 : indicates that an active reset has been applied to the SP
* based on the request from all of the blades. Clears on Read
* provided the reset to SP has been deasserted by then by SPI.
* Setting to 1 allows this blade to request Service Processor
* (Shared) reset. However, SP reset can only occur if all blades
* agree. The success of reset request is indicated by spRstStat
* = 1 which is wired-AND of request from all the blades. Current
* request can be removed by writing a '0' to this bit. This bit
* clears automatically on detecting spRstStat = 1.
* Enable blade to service processor (Shared) reset voter
* registration = 1, disabled = 0
* Issue power reset to the EP Core Clears to 0, writing 0 has no
* effect.
* Issue core reset to the EP Core Clears to 0, writing 0 has no
* effect.
* Issue system reset (sysPor) to the PIPE Core This issues reset
* to the EP core, PCIe domains of Tdc, Rdc, and CIP. This shuts
* down the PCIe clock until Pipe core comes out of reset. The
* status of the Pipe core can be read by reading out the
* cipLinkStat register's pipe core status and pcie reset status
* bits. Clears to 0, writing 0 has no effect.
* 1 : indicates that an active reset has been applied to the
* NMAC based on the request from all of the blades. Clears on
* Read provided the reset to NMAC has been deasserted by then by
* SPI.
* 1 : indicates that an active reset has been applied to the TDP
* based on the request from all of the blades. Clears on Read
* provided the reset to TDP has been deasserted by then by SPI.
* 1 : indicates that an active reset has been applied to the DPM
* based on the request from all of the blades. Clears on Read
* provided the reset to DPM has been deasserted by then by SPI.
* This bit is effective only if sharedVoterEn (bit 24 of this
* reg) has been enabled. Writing '1' sends a request to SP to
* reset NMAC if sharedVoterEn=1. Intended for backdoor access.
* The success of reset request is indicated by nmacRstStat = 1
* which is wired-AND of request from all the blades. This also
* means that the reset request is successful only if all the
* blades requested for reset of this block. Current request can
* be removed by writing a '0' to this bit. This bit clears
* automatically on detecting nmacRstStat = 1.
* This bit is effective only if sharedVoterEn (bit 24 of this
* reg) has been enabled. Writing '1' sends a request to SP to
* reset TDP if sharedVoterEn=1. Intended for backdoor access.
* Intended for backdoor access. The success of reset request is
* indicated by tdpRstStat = 1 which is wired-AND of request from
* all the blades. This also means that the reset request is
* successful only if all the blades requested for reset of this
* block. Current request can be removed by writing a '0' to this
* bit. This bit clears automatically on detecting tdpRstStat =
* 1.
* This bit is effective only if sharedVoterEn (bit 24 of this
* reg) has been enabled. Writing '1' sends a request to SP to
* reset DPM if sharedVoterEn=1. Intended for backdoor access.
* Intended for backdoor access. The success of reset request is
* indicated by dpmRstStat = 1 which is wired-AND of request from
* all the blades. This also means that the reset request is
* successful only if all the blades requested for reset of this
* block. Current request can be removed by writing a '0' to this
* bit. This bit clears automatically on detecting dpmRstStat =
* 1.
* Setting to 1 generates tdcCoreReset and tdcPcieReset to the
* TDC block. The reset will stay asserted for atleast 4 clock
* cycles. Clears to 0, writing 0 has no effect.
* Setting to 1 generates rdcCoreReset and rdcPcieReset to the
* RDC block. The reset will stay asserted for atleast 4 clock
* cycles. Clears to 0, writing 0 has no effect.
* Setting to 1 generates reset to the PFC block. The reset will
* stay asserted for atleast 4 clock cycles. Clears to 0, writing
* 0 has no effect.
* Setting to 1 generates reset to the VMAC block. The reset will
* stay asserted for atleast 4 clock cycles. Clears to 0, writing
* 0 has no effect.
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:13;
uint32_t sp_rst_stat:1;
uint32_t sp_rst:1;
uint32_t shared_voter_en:1;
uint32_t epcore_pwr_rst:1;
uint32_t epcore_core_rst:1;
uint32_t pipe_sys_rst:1;
uint32_t nmac_rst_stat:1;
uint32_t tdp_rst_stat:1;
uint32_t dpm_rst_stat:1;
uint32_t rsrvd1:1;
uint32_t nmac_rst:1;
uint32_t tdp_rst:1;
uint32_t dpm_rst:1;
uint32_t rsrvd2:1;
uint32_t tdc_rst:1;
uint32_t rdc_rst:1;
uint32_t pfc_rst:1;
uint32_t vmac_rst:1;
uint32_t rsrvd3:1;
#else
uint32_t rsrvd3:1;
uint32_t vmac_rst:1;
uint32_t pfc_rst:1;
uint32_t rdc_rst:1;
uint32_t tdc_rst:1;
uint32_t rsrvd2:1;
uint32_t dpm_rst:1;
uint32_t tdp_rst:1;
uint32_t nmac_rst:1;
uint32_t rsrvd1:1;
uint32_t dpm_rst_stat:1;
uint32_t tdp_rst_stat:1;
uint32_t nmac_rst_stat:1;
uint32_t pipe_sys_rst:1;
uint32_t epcore_core_rst:1;
uint32_t epcore_pwr_rst:1;
uint32_t shared_voter_en:1;
uint32_t sp_rst:1;
uint32_t sp_rst_stat:1;
uint32_t rsrvd:13;
#endif
} bits;
} block_reset_t;
/*
* Register: TimeoutCfg
* PIO Timeout Configuration
* Description: PIO Timeout Configuration register to control wait
* time for a PIO access to complete. The timer resolution is in 250
* MHz clock.
* Fields:
* Programmable timeout counter value for PIO clients who did not
* ack a transaction in time. Minimum value should be 64.
* Timeout enable for PIO access to clients. 1 = enable.
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:21;
uint32_t tmout_cnt:10;
uint32_t tmout_en:1;
#else
uint32_t tmout_en:1;
uint32_t tmout_cnt:10;
uint32_t rsrvd:21;
#endif
} bits;
} timeout_cfg_t;
/*
* Register: HeartCfg
* PIO Heartbeat Config
* Description: PIO Blade presence indication : Heartbeat
* configuration The timer resolution is in 250 MHz clock.
* Fields:
* Heartbeat countdown 250Mhz clock divider which serves as
* resolution for the heartTimer.
* Heartbeat countdown enable
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t divider:28;
uint32_t rsrvd:3;
uint32_t en:1;
#else
uint32_t en:1;
uint32_t rsrvd:3;
uint32_t divider:28;
#endif
} bits;
} heart_cfg_t;
/*
* Register: HeartTimer
* PIO Heartbeat Timer
* Description: PIO Blade presence indication : Heartbeat timer The
* timer resolution is in 250 MHz clock.
* Fields:
* Number of heartCfg.divider ticks of the 250Mhz clock before
* blade presence expires. This register decrements for every
* heartCfg.divider number of 250MHz clock cycles. It expires to
* 0 and so must be written periodically to reset the timer back
* to the required value. This counter does not have any effect
* on CIP functionality.
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t timer:32;
#else
uint32_t timer:32;
#endif
} bits;
} heart_timer_t;
/*
* Register: CipGpCtrl
* CIP General Purpose Control Register
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:30;
uint32_t dma_override_relaxord:1;
uint32_t dma_override_nosnoop:1;
#else
uint32_t dma_override_nosnoop:1;
uint32_t dma_override_relaxord:1;
uint32_t rsrvd:30;
#endif
} bits;
} cip_gp_ctrl_t;
/*
* Register: CipStatus
* CIP Status
* Description: This register returns CIP block's current logic
* status
* Fields:
* Current state of the cipEpc state machine 00 : epIdle ( wait
* for EEPROM request from SP or Host ) 01 : waitAck0 ( wait for
* ack from EEPROM for the first 16 bit read of the DW access )
* 11 : waitAck1 ( wait for ack from EEPROM for the second 16 bit
* read of the DW access ) 10 : UNDEFINED ( Undefined/Unused
* state; EPC is never expected to be in this state )
* Current state of the cipSpc state machine 000 : spReset ( wait
* for Power-On SPROM download to start) 001 : getAddr ( Get
* CfgReg Address ) 010 : getData ( Get CfgReg Data ) 011 :
* ignoreData ( Address phase had an error, so ignore the Data
* coming in ) 100 : idleCyc ( Idle cycle following an AHB
* Address phase ) 101 : waitAck0 ( Wait for ack from EP Core
* during SPROM Download ) 110 : waitAck1 ( Wait for ack from EP
* Core during register read/write ) 111 : NORMAL ( SPROM
* Download/Register read/write access completed and wait for
* SP/Host initiated PCI/AHB/HCR read/write )
* PCI Bus Number as reported by EP core
* PCI Bus Device Number as reported by EP core
* 1: current csr access in progress is Local CIP csr access
* 1: current csr access in progress is Blade Domain csr access
* 1: a 64 bit blade domain access is in progress as two 32 bit
* accesses
* 1: indicates config values were downloaded from SPROM
* 1: indicates non-zero number of HCR config values downloaded
* from SPROM
* 1: indicates non-zero number of PCI config values downloaded
* from SPROM
* 1: indicates non-zero number of Pipe config values downloaded
* from SPROM
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:7;
uint32_t cip_epc_sm:2;
uint32_t cip_spc_sm:3;
uint32_t pbus_num:8;
uint32_t pbus_dev_num:5;
uint32_t loc_csr_access:1;
uint32_t bd_csr_access:1;
uint32_t d64_in_progress:1;
uint32_t spc_dnld_done:1;
uint32_t hcr_nz_cfg:1;
uint32_t pci_nz_cfg:1;
uint32_t pipe_nz_cfg:1;
#else
uint32_t pipe_nz_cfg:1;
uint32_t pci_nz_cfg:1;
uint32_t hcr_nz_cfg:1;
uint32_t spc_dnld_done:1;
uint32_t d64_in_progress:1;
uint32_t bd_csr_access:1;
uint32_t loc_csr_access:1;
uint32_t pbus_dev_num:5;
uint32_t pbus_num:8;
uint32_t cip_spc_sm:3;
uint32_t cip_epc_sm:2;
uint32_t rsrvd:7;
#endif
} bits;
} cip_status_t;
/*
* Register: CipLinkStat
* Link Status Register
* Description: This register returns the Link status
* Fields:
* NMAC XPCS-2 Link Status
* NMAC XPCS-1 Link Status
* NMAC XPCS-0 Link Status
* '1' indicates that pipe core went down suddenly when its reset
* sources are at deactivated level. When this happens, the PCIe
* domain logics are reset including the EP core, TDC/RDC PCIe
* domains. All these logics, EP Core, and the pipe core are held
* at reset until s/w writes 1 to this bit to clear status which
* will also bring the PCIe domain out of reset
* pipe core clock & reset status 1: core is up & running, ie,
* PIPE core is out of reset and clock is ON
* PCIe domain reset status 1: PCIe domain logics including EP
* core are out of reset; This also implies that PCIe clock is up
* and running
* EP Core XDM Link State
* EP Core RDM Link State
* EP Core LTSSM State
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:13;
uint32_t xpcs2_link_up:1;
uint32_t xpcs1_link_up:1;
uint32_t xpcs0_link_up:1;
uint32_t rsrvd1:6;
uint32_t surprise_pipedn:1;
uint32_t pipe_core_stable:1;
uint32_t pcie_domain_stable:1;
uint32_t xmlh_link_up:1;
uint32_t rdlh_link_up:1;
uint32_t xmlh_ltssm_state:5;
#else
uint32_t xmlh_ltssm_state:5;
uint32_t rdlh_link_up:1;
uint32_t xmlh_link_up:1;
uint32_t pcie_domain_stable:1;
uint32_t pipe_core_stable:1;
uint32_t surprise_pipedn:1;
uint32_t rsrvd1:6;
uint32_t xpcs0_link_up:1;
uint32_t xpcs1_link_up:1;
uint32_t xpcs2_link_up:1;
uint32_t rsrvd:13;
#endif
} bits;
} cip_link_stat_t;
/*
* Register: EpcStat
* EEPROM PIO Status
* Description: EEPROM PIO Status The Host may initiate access to the
* EEPROM either thru this register or directly by TRGT1 interfaces
* using ROM BAR access. Note that since the EEPROM can be accessed
* by either Host or SP, access must be granted to the PEU using the
* SPI PROM Control Register eepromPeuEn bit for proper operation.
* All EEPROM accesses initiated from either the Host or SP are
* always acknowledged. If a Host access is not acknowledged, then
* check the SPI PROM Control Register eepromPeuEn bit to make sure
* the PEU to EEPROM access has been enabled. Meanwhile, Host read
* and write accesses through the TRGT1 interface may be held up
* waiting for the acknowledgement. Thus, in order to recover from
* any faulty/stuck condition due to the blocked EEPROM accesses, the
* SP should configure the epcGotoNormal bit in the epcStat register.
* When Host accesses are stuck, only the SP can write into this bit
* to recover from this condition.
* The EEPROM is 1M x 16 bits or 2M bytes. The read address in bits
* [22:2] is byte address. The EEPROM access can only be DW access.
* While accessing through these registers, the lower 2 bits of the
* specified address is ignored resulting in a DW access to the
* EEPROM controller. While accessing through the ROM BAR range, only
* DW accesses are accepted and all other accesses will result in
* error status returned to the host.
* The read will initiate two reads to the EPC and the accumulated
* 32 bit data is returned to the Host either via the Client2 bus or
* in the epcData register depending on the cause of the transaction.
* This means, a read addr=0,1,2,3 will return data from EPC
* locations 0 & 1 which are 16 bits each, and a read to addr=4,5,6,7
* will return data from EPC locations 2,3 which are 16 bits each.
* Some examples for the address translation : 1) when Host gives
* address 0x0000, it means to get bytes 0,1,2, and 3 from the
* EEPROM. These bytes are stored at locations 0x0000 (bytes 0,1) and
* 0x0001 (bytes 2,3) in EEPROM. Hence PEU will present address
* 0x0000 followed by 0x0001 to the EEPROM.
* 2) when Host gives address 0x0004, it means to get bytes 4,5,6,
* and 7 from the EEPROM. These bytes are stored at locations 0x0002
* (bytes 4,5) and 0x0003 (bytes 6,7) in EEPROM. Hence PEU will
* present address 0x0002 followed by 0x0003 to the EEPROM.
* etc ..
*
* Fields:
* Force the EPC state machine to go to epIdle state. This bit is
* used to force the EPC to skip the reading of the EEPROM and
* goto the epIdle state which is normal state for EPC. The bit
* is auto-cleared after switching to the epIdle state. Both SP
* and HOST can write into this bit. However care must be taken
* writing '1' into this bit since setting this bit will flush
* out any pending EEPROM access request from Host. Hence, this
* bit should be used only if the EPC State machine (cipEpcSm
* bits in cipStatus register) is stuck at a non-zero state.
* EEPROM Byte Address for read operation This field can be
* updated only if there is no pending EEPROM read access.
* Software should poll bit 0 of this register (epcRdInit) to
* make sure that it is '0' before writing into this. If polled
* epcRdInit value is '1', then write to epcAddr field is
* ignored. This is to safe-guard the epcAddr value which is
* being read out the EEPROM.
* Read access completion status; set to '0' for successful
* completion by EPC set to '1' to indicate read access error
* from EPC
* Note: Currently, the EEPROM controller in Hydra does not
* return any error condition, ie, epcPeuErr = 1'b0 always. And
* so, for the PIO read access by the Host, the epcStat register
* in PEU will always show that the access was successful. For
* EEPROM read initiated through the ROM BAR by the Host, CIP
* will always return Successful Completion status to the Host.
* Any error situation is reported only in the Status Register
* within the EEPROM device. For access information about this
* register, please refer to the EEPROM/SPI PRMs.
*
* Read Initiate. SW writes 1 to this bit to initiate a EEPROM
* read. Clears to 0 on updating the epcData reg. Writing 0 has
* no effect.
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t epc_goto_normal:1;
uint32_t rsrvd:8;
uint32_t epc_addr:21;
uint32_t epc_cpl_stat:1;
uint32_t epc_rd_init:1;
#else
uint32_t epc_rd_init:1;
uint32_t epc_cpl_stat:1;
uint32_t epc_addr:21;
uint32_t rsrvd:8;
uint32_t epc_goto_normal:1;
#endif
} bits;
} epc_stat_t;
/*
* Register: EpcData
* EEPROM PIO Data
* Description: EEPROM PIO Data The data returned from EEPROM
* controller for the EEPROM access initiated by the EEPROM PIO
* Status register is returned in this register.
* Fields:
* EEPROM Read Data; valid when rdInit transitioned from 1 to 0.
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t eeprom_data:32;
#else
uint32_t eeprom_data:32;
#endif
} bits;
} epc_data_t;
/*
* Register: SpcStat
* SPROM PIO Status
* Description: SPROM PIO Status
* Fields:
* Force the SPC state machine to go to NORMAL state. This bit is
* used to force the SPC to skip the downloading of the SPROM
* contents into the EP/Pipe/Hcr registers. Setting this bit will
* make CIP to drop any pending requests to the DBI/AHB buses.
* The bit is auto-cleared after switching to the Normal state.
* This bit can not be used to terminate a pio access to
* PCI/PIPE/HCR registers. If a pio access to these registers is
* not responded to, by the respective block, then the pio access
* will automatically timeout. The timeout value is specified by
* the timeoutCfg:tmoutCnt value
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:29;
uint32_t spc_goto_normal:1;
uint32_t rsrvd1:2;
#else
uint32_t rsrvd1:2;
uint32_t spc_goto_normal:1;
uint32_t rsrvd:29;
#endif
} bits;
} spc_stat_t;
/*
* Register: Host2spiIndaccAddr
* HOST -> SPI Shared Domain Read Address
* Description: Read address set by Host for indirect access to
* shared domain address space The decoding of the address is as
* follows: [23:20] - block select [19:0] - register offset from base
* address of block
* Fields:
* Address in Shared domain
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:8;
uint32_t addr:24;
#else
uint32_t addr:24;
uint32_t rsrvd:8;
#endif
} bits;
} host2spi_indacc_addr_t;
/*
* Register: Host2spiIndaccCtrl
* HOST -> SPI Shared Domain Read Control
* Description: Control word set by Host for indirect access to the
* shared domain address space Writing to this register initiates the
* indirect access to the shared domain.
* The Host may read or write to a shared domain region data as
* below : Host updates the host2spiIndaccAddr register with address
* of the shared domain reg. For writes, Host updates the
* host2spiIndaccData register with write data Host then writes to
* bit 0 of host2spiIndaccCtrl register to '1' or '0' to initiate the
* read or write access; 1 : write command, 0 : read command Host
* should then poll bit 1 of host2spiIndaccCtrl register for the
* access status. 1 : access is done, 0 : access is in progress
* (busy) Host should then check bit 2 of host2spiIndaccCtrl register
* to know if the command was successful; 1 : access error, 0 :
* access successful For reads, Host then reads the
* host2spiIndaccData register for the read data.
* This register can be written into only when there is no pending
* access, ie, indaccCtrl.cplStat=1. Writes when indaccCtrl.cplStat=0
* is ignored.
*
* Fields:
* command completion status; 0 : successful completion of
* command by SPI 1 : access error from SPI
* command progress status; 0 : access is in progress (busy) 1 :
* access is done
* 1 : Initiate a write access 0 : Initiate a read access
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:29;
uint32_t err_stat:1;
uint32_t cpl_stat:1;
uint32_t rd_wr_cmd:1;
#else
uint32_t rd_wr_cmd:1;
uint32_t cpl_stat:1;
uint32_t err_stat:1;
uint32_t rsrvd:29;
#endif
} bits;
} host2spi_indacc_ctrl_t;
/*
* Register: Host2spiIndaccData
* HOST -> SPI Shared Domain Read/Write Data
* Description: For indirect read access by the Host, this register
* returns the data returned from the Shared Domain For indirect
* write access by the Host, the host should update this register
* with the writeData for the Shared Domain, before writing to the
* host2spiIndaccCtrl register to initiate the access.
* This register can be written into only when there is no pending
* access, ie, indaccCtrl.cplStat=1. Writes when indaccCtrl.cplStat=0
* is ignored.
*
* Fields:
* Shared domain read/write data
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t data:32;
#else
uint32_t data:32;
#endif
} bits;
} host2spi_indacc_data_t;
/*
* Register: BtCtrl0
* Mailbox Control & Access status 0
* Description: Host (blade) <-> SP Block Transfer mailbox control
* and access status register 0.
* Host is allowed 8 bits read/write access to this register ; To do
* the same, it should provide the btCtrl0 address, data on
* hostDataBus[7:0], and assert hostBen[0], SPI is allowed 8 bits
* read/write access to this register ; To do the same, it should
* provide the btCtrl0 address, data on spiDataBus[7:0], and no need
* of spiBen
*
* Fields:
* The SP sets/clears this bit to indicate if it is busy and can
* not accept any other request; write 1 to toggle the bit; Read
* Only by Host.
* The Host sets/clears this bit to indicate if it is busy and
* can not accept any other request; Read Only by SP.
* Reserved for definition by platform. Typical usage could be
* "heartbeat" mechanism from/to the host. The host sets OEM0 to
* interrupt the SP and then polls it to be cleared by SP
* The SP sets this bit when it has detected and queued an SMS
* message in the SP2HOST buffer that must be reported to the
* HOST. The Host clears this bit by writing a 1 to it. This bit
* may generate an intrpt to Host depending on the sp2hostIntEn
* bit. Writing 0 has no effect
* The SP writes 1 to this bit after it has finished writing a
* message into the SP2HOST buffer. The Host clears this bit by
* writing 1 to it after it has set the hostBusy bit This bit may
* generate an intrpt to Host depending on the sp2hostIntEn bit.
* Writing 0 has no effect
* The Host writes 1 to this bit to generate an interrupt to SP
* after it has finished writing a message into the HOST2SP
* buffer. The SP clears this bit by writing 1 to it after it has
* set the spBusy bit. Writing 0 has no effect
* The host writes 1 to clear the read pointer to the BT SP2HOST
* buffer; the SP writes 1 to clear the read pointer to the BT
* HOST2SP buffer. This bit is always read back as 0; writing 0
* has no effect.
* The host writes 1 to clear the write pointer to the BT HOST2SP
* buffer; the SP writes 1 to clear the write pointer to the BT
* SP2HOST buffer. This bit is always read back as 0; writing 0
* has no effect.
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:24;
uint32_t sp_busy:1;
uint32_t host_busy:1;
uint32_t oem0:1;
uint32_t sms_atn:1;
uint32_t sp2host_atn:1;
uint32_t host2sp_atn:1;
uint32_t clr_rd_ptr:1;
uint32_t clr_wr_ptr:1;
#else
uint32_t clr_wr_ptr:1;
uint32_t clr_rd_ptr:1;
uint32_t host2sp_atn:1;
uint32_t sp2host_atn:1;
uint32_t sms_atn:1;
uint32_t oem0:1;
uint32_t host_busy:1;
uint32_t sp_busy:1;
uint32_t rsrvd:24;
#endif
} bits;
} bt_ctrl0_t;
/*
* Register: BtData0
* Mailbox Data 0
* Description: Host (blade) <-> SP mailbox data register 0.
* Host is allowed a 32 bits read/write access to this register ; To
* do the same, it should provide the btData0 address, data on
* hostDataBus[31:0], and assert hostBen[1], SPI is allowed only 8
* bits read/write access to this register ; To do the same, it
* should provide the btData0 address, data on spiDataBus[7:0], and
* no need of spiBen
* All references to the mail box control bits in this register
* refer to btCtrl0. When spBusy=0 && host2spAtn=0, data is written
* by the host and read by the SP. When hostBusy=0 && sp2hostAtn=0,
* data is written by the SP and read by the Host.
*
* Fields:
* Bits 7:0 of message data to send to SP/HOST
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:24;
uint32_t data:8;
#else
uint32_t data:8;
uint32_t rsrvd:24;
#endif
} bits;
} bt_data0_t;
/*
* Register: BtIntmask0
* Mailbox Interrupt Mask & Status 0
* Description: Host (blade) <-> SP Block Transfer Interrupt Mask and
* Status register 0
* Host is allowed 8 bits read/write access to this register ; To do
* the same, it should provide the btIntmask0 address, data on
* hostDataBus[23:16], and assert hostBen[2], SPI is allowed 8 bits
* read only access to this register ; To do the same, it should
* provide the btIntmask0 address and no need of spiBen
* All references to the mail box control bits in this register
* refer to btCtrl0
* Fields:
* The host writes 1 to reset the entire mailbox 0 accesses for
* error recovery; resets both SP and HOST write and read
* pointers. Writing 0 has no effect. This is non-sticky. Always
* read back as 0.
* Reserved for definition by platform manufacturer for BIOS/SMI
* Handler use. Generic IPMI software must write this bit as 0
* and ignore the value on read
* Reserved for definition by platform manufacturer for BIOS/SMI
* Handler use. Generic IPMI software must write this bit as 0
* and ignore the value on read
* Reserved for definition by platform manufacturer for BIOS/SMI
* Handler use. Generic IPMI software must write this bit as 0
* and ignore the value on read
* SP to HOST Interrupt status This bit reflects the state of the
* intrpt line to the Host. O/S driver should write 1 to clear.
* SP to HOST Interrupt Enable The interrupt is generated if
* sp2hIrqEn is 1 and either sp2hostAtn or smsAtn is 1
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:24;
uint32_t mb_master_reset:1;
uint32_t rsrvd1:2;
uint32_t oem3:1;
uint32_t oem2:1;
uint32_t oem1:1;
uint32_t sp2h_irq:1;
uint32_t sp2h_irq_en:1;
#else
uint32_t sp2h_irq_en:1;
uint32_t sp2h_irq:1;
uint32_t oem1:1;
uint32_t oem2:1;
uint32_t oem3:1;
uint32_t rsrvd1:2;
uint32_t mb_master_reset:1;
uint32_t rsrvd:24;
#endif
} bits;
} bt_intmask0_t;
/*
* Register: BtCtrl1
* Mailbox Control & Access status 1
* Description: Host (blade) <-> SP Block Transfer mailbox control
* and access status register 1.
* Host is allowed 8 bits read/write access to this register ; To do
* the same, it should provide the btCtrl1 address, data on
* hostDataBus[7:0], and assert hostBen[0], SPI is allowed 8 bits
* read/write access to this register ; To do the same, it should
* provide the btCtrl1 address, data on spiDataBus[7:0], and no need
* of spiBen
*
* Fields:
* The SP sets/clears this bit to indicate that it is busy and
* can not accept any other request; write 1 to toggle the bit;
* Read only by Host.
* The Host sets/clears this bit to indicate that it is busy and
* can not accept any other request; Read only by SP.
* Reserved for definition by platform. Typical usage could be
* "heartbeat" mechanism from/to the host. The host sets OEM0 to
* interrupt the SP and then polls it to be cleared by SP
* The SP sets this bit when it has detected and queued an SMS
* message in the SP2HOST buffer that must be reported to the
* HOST. The Host clears this bit by writing a 1 to it. This bit
* may generate an intrpt to Host depending on the sp2hostIntEn
* bit. Writing 0 has no effect
* The SP writes 1 to this bit after it has finished writing a
* message into the SP2HOST buffer. The Host clears this bit by
* writing 1 to it after it has set the hostBusy bit This bit may
* generate an intrpt to Host depending on the sp2hostIntEn bit.
* Writing 0 has no effect
* The Host writes 1 to this bit to generate an interrupt to SP
* after it has finished writing a message into the HOST2SP
* buffer. The SP clears this bit by writing 1 to it after it has
* set the spBusy bit. Writing 0 has no effect
* The host writes 1 to clear the read pointer to the BT SP2HOST
* buffer; the SP writes 1 to clear the read pointer to the BT
* HOST2SP buffer. This bit is always read back as 0; writing 0
* has no effect.
* The host writes 1 to clear the write pointer to the BT HOST2SP
* buffer; the SP writes 1 to clear the write pointer to the BT
* SP2HOST buffer. This bit is always read back as 0; writing 0
* has no effect.
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:24;
uint32_t sp_busy:1;
uint32_t host_busy:1;
uint32_t oem0:1;
uint32_t sms_atn:1;
uint32_t sp2host_atn:1;
uint32_t host2sp_atn:1;
uint32_t clr_rd_ptr:1;
uint32_t clr_wr_ptr:1;
#else
uint32_t clr_wr_ptr:1;
uint32_t clr_rd_ptr:1;
uint32_t host2sp_atn:1;
uint32_t sp2host_atn:1;
uint32_t sms_atn:1;
uint32_t oem0:1;
uint32_t host_busy:1;
uint32_t sp_busy:1;
uint32_t rsrvd:24;
#endif
} bits;
} bt_ctrl1_t;
/*
* Register: BtData1
* Mailbox Data 1
* Description: Host (blade) <-> SP mailbox data register 1.
* Host is allowed a 32 bits read/write access to this register ; To
* do the same, it should provide the btData1 address, data on
* hostDataBus[31:0], and assert hostBen[1], SPI is allowed only 8
* bits read/write access to this register ; To do the same, it
* should provide the btData1 address, data on spiDataBus[7:0], and
* no need of spiBen
* All references to the mail box control bits in this register
* refer to btCtrl1. When spBusy=0 && host2spAtn=0, data is written
* by the host and read by the SP. When hostBusy=0 && sp2hostAtn=0,
* data is written by the SP and read by the Host.
* Fields:
* Bits 31:0 of message data to send to SP/HOST
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:24;
uint32_t data:8;
#else
uint32_t data:8;
uint32_t rsrvd:24;
#endif
} bits;
} bt_data1_t;
/*
* Register: BtIntmask1
* Mailbox Interrupt Mask & Status 1
* Description: Host (blade) <-> SP Block Transfer Interrupt Mask and
* Status register 1
* Host is allowed 8 bits read/write access to this register ; To do
* the same, it should provide the btIntmask1 address, data on
* hostDataBus[23:16], and assert hostBen[2], SPI is allowed 8 bits
* read only access to this register ; To do the same, it should
* provide the btIntmask1 address and no need of spiBen
* All references to the mail box control bits in this register
* refer to btCtrl1
* Fields:
* The host writes 1 to reset the entire mailbox 1 accesses for
* error recovery; resets both SP and HOST write and read
* pointers. Writing 0 has no effect. This is non-sticky. Always
* read back as 0.
* Reserved for definition by platform manufacturer for BIOS/SMI
* Handler use. Generic IPMI software must write this bit as 0
* and ignore the value on read
* Reserved for definition by platform manufacturer for BIOS/SMI
* Handler use. Generic IPMI software must write this bit as 0
* and ignore the value on read
* Reserved for definition by platform manufacturer for BIOS/SMI
* Handler use. Generic IPMI software must write this bit as 0
* and ignore the value on read
* SP to HOST Interrupt status This bit reflects the state of the
* intrpt line to the Host. O/S driver should write 1 to clear.
* SP to HOST Interrupt Enable The interrupt is generated if
* sp2hIrqEn is 1 and either sp2hostAtn or smsAtn is 1
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:24;
uint32_t mb_master_reset:1;
uint32_t rsrvd1:2;
uint32_t oem3:1;
uint32_t oem2:1;
uint32_t oem1:1;
uint32_t sp2h_irq:1;
uint32_t sp2h_irq_en:1;
#else
uint32_t sp2h_irq_en:1;
uint32_t sp2h_irq:1;
uint32_t oem1:1;
uint32_t oem2:1;
uint32_t oem3:1;
uint32_t rsrvd1:2;
uint32_t mb_master_reset:1;
uint32_t rsrvd:24;
#endif
} bits;
} bt_intmask1_t;
/*
* Register: BtCtrl2
* Mailbox Control & Access status 2
* Description: Host (blade) <-> SP Block Transfer mailbox control
* and access status register 2.
* Host is allowed 8 bits read/write access to this register ; To do
* the same, it should provide the btCtrl2 address, data on
* hostDataBus[7:0], and assert hostBen[0], SPI is allowed 8 bits
* read/write access to this register ; To do the same, it should
* provide the btCtrl2 address, data on spiDataBus[7:0], and no need
* of spiBen
*
* Fields:
* The SP sets/clears this bit to indicate that it is busy and
* can not accept any other request; write 1 to toggle the bit;
* Read only by Host.
* The Host sets/clears this bit to indicate that it is busy and
* can not accept any other request; Read only by SP.
* Reserved for definition by platform. Typical usage could be
* "heartbeat" mechanism from/to the host. The host sets OEM0 to
* interrupt the SP and then polls it to be cleared by SP
* The SP sets this bit when it has detected and queued an SMS
* message in the SP2HOST buffer that must be reported to the
* HOST. The Host clears this bit by writing a 1 to it. This bit
* may generate an intrpt to Host depending on the sp2hostIntEn
* bit. Writing 0 has no effect
* The SP writes 1 to this bit after it has finished writing a
* message into the SP2HOST buffer. The Host clears this bit by
* writing 1 to it after it has set the hostBusy bit This bit may
* generate an intrpt to Host depending on the sp2hostIntEn bit.
* Writing 0 has no effect
* The Host writes 1 to this bit to generate an interrupt to SP
* after it has finished writing a message into the HOST2SP
* buffer. The SP clears this bit by writing 1 to it after it has
* set the spBusy bit. Writing 0 has no effect
* The host writes 1 to clear the read pointer to the BT SP2HOST
* buffer; the SP writes 1 to clear the read pointer to the BT
* HOST2SP buffer. This bit is always read back as 0; writing 0
* has no effect.
* The host writes 1 to clear the write pointer to the BT HOST2SP
* buffer; the SP writes 1 to clear the write pointer to the BT
* SP2HOST buffer. This bit is always read back as 0; writing 0
* has no effect.
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:24;
uint32_t sp_busy:1;
uint32_t host_busy:1;
uint32_t oem0:1;
uint32_t sms_atn:1;
uint32_t sp2host_atn:1;
uint32_t host2sp_atn:1;
uint32_t clr_rd_ptr:1;
uint32_t clr_wr_ptr:1;
#else
uint32_t clr_wr_ptr:1;
uint32_t clr_rd_ptr:1;
uint32_t host2sp_atn:1;
uint32_t sp2host_atn:1;
uint32_t sms_atn:1;
uint32_t oem0:1;
uint32_t host_busy:1;
uint32_t sp_busy:1;
uint32_t rsrvd:24;
#endif
} bits;
} bt_ctrl2_t;
/*
* Register: BtData2
* Mailbox Data 2
* Description: Host (blade) <-> SP mailbox data register 2. All
* references to the mail box control bits in this register refer to
* btCtrl2.
* Host is allowed a 32 bits read/write access to this register ; To
* do the same, it should provide the btData2 address, data on
* hostDataBus[31:0], and assert hostBen[1], SPI is allowed only 8
* bits read/write access to this register ; To do the same, it
* should provide the btData2 address, data on spiDataBus[7:0], and
* no need of spiBen
* When spBusy=0 && host2spAtn=0, data is written by the host and
* read by the SP. When hostBusy=0 && sp2hostAtn=0, data is written
* by the SP and read by the Host.
* Fields:
* Bits 31:0 of message data to send to SP/HOST
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:24;
uint32_t data:8;
#else
uint32_t data:8;
uint32_t rsrvd:24;
#endif
} bits;
} bt_data2_t;
/*
* Register: BtIntmask2
* Mailbox Interrupt Mask & Status 2
* Description: Host (blade) <-> SP Block Transfer Interrupt Mask and
* Status register 2
* Host is allowed 8 bits read/write access to this register ; To do
* the same, it should provide the btIntmask2 address, data on
* hostDataBus[23:16], and assert hostBen[2], SPI is allowed 8 bits
* read only access to this register ; To do the same, it should
* provide the btIntmask2 address and no need of spiBen
* All references to the mail box control bits in this register
* refer to btCtrl2
* Fields:
* The host writes 1 to reset the entire mailbox 2 accesses for
* error recovery; resets both SP and HOST write and read
* pointers. Writing 0 has no effect. This is non-sticky. Always
* read back as 0.
* Reserved for definition by platform manufacturer for BIOS/SMI
* Handler use. Generic IPMI software must write this bit as 0
* and ignore the value on read
* Reserved for definition by platform manufacturer for BIOS/SMI
* Handler use. Generic IPMI software must write this bit as 0
* and ignore the value on read
* Reserved for definition by platform manufacturer for BIOS/SMI
* Handler use. Generic IPMI software must write this bit as 0
* and ignore the value on read
* SP to HOST Interrupt status This bit reflects the state of the
* intrpt line to the Host. O/S driver should write 1 to clear.
* SP to HOST Interrupt Enable The interrupt is generated if
* sp2hIrqEn is 1 and either sp2hostAtn or smsAtn is 1
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:24;
uint32_t mb_master_reset:1;
uint32_t rsrvd1:2;
uint32_t oem3:1;
uint32_t oem2:1;
uint32_t oem1:1;
uint32_t sp2h_irq:1;
uint32_t sp2h_irq_en:1;
#else
uint32_t sp2h_irq_en:1;
uint32_t sp2h_irq:1;
uint32_t oem1:1;
uint32_t oem2:1;
uint32_t oem3:1;
uint32_t rsrvd1:2;
uint32_t mb_master_reset:1;
uint32_t rsrvd:24;
#endif
} bits;
} bt_intmask2_t;
/*
* Register: BtCtrl3
* Mailbox Control & Access status 3
* Description: Host (blade) <-> SP Block Transfer mailbox control
* and access status register 3.
* Host is allowed 8 bits read/write access to this register ; To do
* the same, it should provide the btCtrl3 address, data on
* hostDataBus[7:0], and assert hostBen[0], SPI is allowed 8 bits
* read/write access to this register ; To do the same, it should
* provide the btCtrl3 address, data on spiDataBus[7:0], and no need
* of spiBen
*
* Fields:
* The SP sets/clears this bit to indicate that it is busy and
* can not accept any other request; write 1 to toggle the bit;
* Read only by Host.
* The Host sets/clears this bit to indicate that it is busy and
* can not accept any other request; Read only by SP.
* Reserved for definition by platform. Typical usage could be
* "heartbeat" mechanism from/to the host. The host sets OEM0 to
* interrupt the SP and then polls it to be cleared by SP
* The SP sets this bit when it has detected and queued an SMS
* message in the SP2HOST buffer that must be reported to the
* HOST. The Host clears this bit by writing a 1 to it. This bit
* may generate an intrpt to Host depending on the sp2hostIntEn
* bit. Writing 0 has no effect
* The SP writes 1 to this bit after it has finished writing a
* message into the SP2HOST buffer. The Host clears this bit by
* writing 1 to it after it has set the hostBusy bit This bit may
* generate an intrpt to Host depending on the sp2hostIntEn bit.
* Writing 0 has no effect
* The Host writes 1 to this bit to generate an interrupt to SP
* after it has finished writing a message into the HOST2SP
* buffer. The SP clears this bit by writing 1 to it after it has
* set the spBusy bit. Writing 0 has no effect
* The host writes 1 to clear the read pointer to the BT SP2HOST
* buffer; the SP writes 1 to clear the read pointer to the BT
* HOST2SP buffer. This bit is always read back as 0; writing 0
* has no effect.
* The host writes 1 to clear the write pointer to the BT HOST2SP
* buffer; the SP writes 1 to clear the write pointer to the BT
* SP2HOST buffer. This bit is always read back as 0; writing 0
* has no effect.
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:24;
uint32_t sp_busy:1;
uint32_t host_busy:1;
uint32_t oem0:1;
uint32_t sms_atn:1;
uint32_t sp2host_atn:1;
uint32_t host2sp_atn:1;
uint32_t clr_rd_ptr:1;
uint32_t clr_wr_ptr:1;
#else
uint32_t clr_wr_ptr:1;
uint32_t clr_rd_ptr:1;
uint32_t host2sp_atn:1;
uint32_t sp2host_atn:1;
uint32_t sms_atn:1;
uint32_t oem0:1;
uint32_t host_busy:1;
uint32_t sp_busy:1;
uint32_t rsrvd:24;
#endif
} bits;
} bt_ctrl3_t;
/*
* Register: BtData3
* Mailbox Data 3
* Description: Host (blade) <-> SP mailbox data register 3.
* Host is allowed a 32 bits read/write access to this register ; To
* do the same, it should provide the btData3 address, data on
* hostDataBus[31:0], and assert hostBen[1], SPI is allowed only 8
* bits read/write access to this register ; To do the same, it
* should provide the btData3 address, data on spiDataBus[7:0], and
* no need of spiBen
* All references to the mail box control bits in this register
* refer to btCtrl3. When spBusy=0 && host2spAtn=0, data is written
* by the host and read by the SP. When hostBusy=0 && sp2hostAtn=0,
* data is written by the SP and read by the Host.
* Fields:
* Bits 31:0 of message data to send to SP/HOST
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:24;
uint32_t data:8;
#else
uint32_t data:8;
uint32_t rsrvd:24;
#endif
} bits;
} bt_data3_t;
/*
* Register: BtIntmask3
* Mailbox Interrupt Mask & Status 3
* Description: Host (blade) <-> SP Block Transfer Interrupt Mask and
* Status register 3
* Host is allowed 8 bits read/write access to this register ; To do
* the same, it should provide the btIntmask3 address, data on
* hostDataBus[23:16], and assert hostBen[2], SPI is allowed 8 bits
* read only access to this register ; To do the same, it should
* provide the btIntmask3 address and no need of spiBen
* All references to the mail box control bits in this register
* refer to btCtrl3
* Fields:
* The host writes 1 to reset the entire mailbox 3 accesses for
* error recovery; resets both SP and HOST write and read
* pointers. Writing 0 has no effect. This is non-sticky. Always
* read back as 0.
* Reserved for definition by platform manufacturer for BIOS/SMI
* Handler use. Generic IPMI software must write this bit as 0
* and ignore the value on read
* Reserved for definition by platform manufacturer for BIOS/SMI
* Handler use. Generic IPMI software must write this bit as 0
* and ignore the value on read
* Reserved for definition by platform manufacturer for BIOS/SMI
* Handler use. Generic IPMI software must write this bit as 0
* and ignore the value on read
* SP to HOST Interrupt status This bit reflects the state of the
* intrpt line to the Host. O/S driver should write 1 to clear.
* SP to HOST Interrupt Enable The interrupt is generated if
* sp2hIrqEn is 1 and either sp2hostAtn or smsAtn is 1
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:24;
uint32_t mb_master_reset:1;
uint32_t rsrvd1:2;
uint32_t oem3:1;
uint32_t oem2:1;
uint32_t oem1:1;
uint32_t sp2h_irq:1;
uint32_t sp2h_irq_en:1;
#else
uint32_t sp2h_irq_en:1;
uint32_t sp2h_irq:1;
uint32_t oem1:1;
uint32_t oem2:1;
uint32_t oem3:1;
uint32_t rsrvd1:2;
uint32_t mb_master_reset:1;
uint32_t rsrvd:24;
#endif
} bits;
} bt_intmask3_t;
/*
* Register: DebugSel
* CIP Debug Data Select
* Description: Selects the debug data signals from the CIP blocks
* Fields:
* Selects up to 16 groups of gbtDebug/pipeDebug on
* peuPhyVdbgDebugPort[31:0]
* Selects the high DW of the debug data - default is PCIe link
* status
* Selects the low DW of the debug data
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:12;
uint32_t phy_dbug_sel:4;
uint32_t rsrvd1:3;
uint32_t cip_hdbug_sel:5;
uint32_t rsrvd2:3;
uint32_t cip_ldbug_sel:5;
#else
uint32_t cip_ldbug_sel:5;
uint32_t rsrvd2:3;
uint32_t cip_hdbug_sel:5;
uint32_t rsrvd1:3;
uint32_t phy_dbug_sel:4;
uint32_t rsrvd:12;
#endif
} bits;
} debug_sel_t;
/*
* Register: IndaccMem0Ctrl
* CIP Mem0 Debug ctrl
* Description: Debug data signals from the CIP blocks
* Fields:
* 1: rd/wr access is done 0: rd/wr access is in progress
* 1: pkt injection is done 0: pkt injection is in progress
* Ingress pkt injection enable: write to 1 for single pkt
* injection. Must be 0 when enabling diagnostic rd/wr access to
* memories.
* 1: Diagnostic rd/wr access to memories enabled 0: Diagnostic
* rd/wr access to memories disabled Must be 0 when enabling pkt
* injection.
* 1: read, 0: write
* This bit is read/writable only if mem0Diagen=1 or if
* mem0Diagen bit is also written with '1' along with enabling
* this bit. Else, the write will not have any effect. 1: Apply
* the parity mask provided in the Prty register 0: Do not apply
* the parity mask provided in the Prty register
* 0 : select npdataq memory 1 : select nphdrq memory 2 : select
* pdataq memory 3 : select phdrq memory 4 : select cpldataq
* memory 5 : select cplhdrq memory
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t mem0_access_status:1;
uint32_t rsrvd:5;
uint32_t mem0_pktinj_stat:1;
uint32_t mem0_pktinj_en:1;
uint32_t rsrvd1:1;
uint32_t mem0_diagen:1;
uint32_t mem0_command:1;
uint32_t mem0_prty_wen:1;
uint32_t rsrvd2:1;
uint32_t mem0_sel:3;
uint32_t mem0_addr:16;
#else
uint32_t mem0_addr:16;
uint32_t mem0_sel:3;
uint32_t rsrvd2:1;
uint32_t mem0_prty_wen:1;
uint32_t mem0_command:1;
uint32_t mem0_diagen:1;
uint32_t rsrvd1:1;
uint32_t mem0_pktinj_en:1;
uint32_t mem0_pktinj_stat:1;
uint32_t rsrvd:5;
uint32_t mem0_access_status:1;
#endif
} bits;
} indacc_mem0_ctrl_t;
/*
* Register: IndaccMem0Data0
* CIP Mem0 Debug Data0
* Description: Debug data signals from the CIP blocks
* Fields:
* When pktInjectionEnable is 0: Data[31:0] from/for the memory
* selected by mem0Sel bits from mem0Ctrl This data is written to
* the memory when indaccMem0Ctrl register is written with the
* write command When indaccMem0Ctrl register is written with the
* read command, this register will hold the Data[31:0] returned
* from the memory When pktInjectionEnable is 1:
* debugData0Reg[31:0] is used in the following ways: [17:16] =
* radmTrgt1Fmt[1:0]: 2'b00 3DW MRd 2'b01 4DW MRd 2'b10 3DW MWr
* 2'b11 4DW MWr [13:12] = radmTrgt1DwLen[1:0]: 2'b01 1DW 2'b10
* 2DW [11:8] = radmTrgt1LastBe[3:0]: 4'b0000 1DW 4'b1111 2DW [7]
* = radmTrgt1RomInRange 1'b0 PIO Access 1'b1 EEPROM Access [6:4]
* = radmTrgt1InMembarRange[2:0] 3'b000 PIO Access 3'b010 MSIX
* Ram/PBA Table Access [1:0] = radmTrgt1Dwen[1:0] 2'b01
* 1DW->last DW is at radmTrgt1Data[31:0] 2'b11 2DW->last DW is
* at radmTrgt1Data[63:32]
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t mem0_data0:32;
#else
uint32_t mem0_data0:32;
#endif
} bits;
} indacc_mem0_data0_t;
/*
* Register: IndaccMem0Data1
* CIP Mem0 Debug Data1
* Description: Debug data signals from the CIP blocks
* Fields:
* When pktInjectionEnable is 0: Data[63:32] from/for the memory
* selected by mem0Sel bits from mem0Ctrl This data is written to
* the memory when indaccMem0Ctrl register is written with the
* write command When indaccMem0Ctrl register is written with the
* read command, this register will hold the Data[63:32] returned
* from the memory When pktInjectionEnable is 1:
* debugData1Reg[31:0] is used as radmTrgt1Addr[31:0].
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t mem0_data1:32;
#else
uint32_t mem0_data1:32;
#endif
} bits;
} indacc_mem0_data1_t;
/*
* Register: IndaccMem0Data2
* CIP Mem0 Debug Data2
* Description: Debug data signals from the CIP blocks
* Fields:
* When pktInjectionEnable is 0: Data[95:64] from/for the memory
* selected by mem0Sel bits from mem0Ctrl This data is written to
* the memory when indaccMem0Ctrl register is written with the
* write command When indaccMem0Ctrl register is written with the
* read command, this register will hold the Data[95:64] returned
* from the memory When pktInjectionEnable is 1:
* debugData2Reg[31:0] is used as radmTrgt1Data[63:32]. Allows up
* to QW=2DW access.
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t mem0_data2:32;
#else
uint32_t mem0_data2:32;
#endif
} bits;
} indacc_mem0_data2_t;
/*
* Register: IndaccMem0Data3
* CIP Mem0 Debug Data3
* Description: Debug data signals from the CIP blocks
* Fields:
* When pktInjectionEnable is 0: Data[127:96] from/for the memory
* selected by mem0Sel bits from mem0Ctrl This data is written to
* the memory when indaccMem0Ctrl register is written with the
* write command When indaccMem0Ctrl register is written with the
* read command, this register will hold the Data[127:96]
* returned from the memory When pktInjectionEnable is 1:
* debugData3Reg[31:0] is used as radmTrgt1Data[31:0].
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t mem0_data3:32;
#else
uint32_t mem0_data3:32;
#endif
} bits;
} indacc_mem0_data3_t;
/*
* Register: IndaccMem0Prty
* CIP Mem0 Debug Parity
* Description: Debug data signals from the CIP blocks
* Fields:
* parity mask bits for the memory selected by mem0Sel bits from
* mem0Ctrl to inject parity error These bits serve two purposes
* regarding memory parity : - During indirect write access to
* the memories, the value in this register is applied as mask to
* the actual parity if prtyWen bit of the indaccCtrl register
* has been enabled. The masked parity and data are written into
* the specified memory location. - During indirect read access
* to the memories, the value in this register is overwritten
* with the parity value read from the memory location. If the
* parity mask had been set and enabled to be written into this
* location it will generate parity error for that memory
* location
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:18;
uint32_t mem0_parity:14;
#else
uint32_t mem0_parity:14;
uint32_t rsrvd:18;
#endif
} bits;
} indacc_mem0_prty_t;
/*
* Register: IndaccMem1Ctrl
* CIP Mem1 Debug ctrl
* Description: Debug data signals from the CIP blocks
* Fields:
* 1: rd/wr access is done 0: rd/wr access is in progress
* 1: client pkt injection is done 0: client pkt injection is in
* progress
* 1: client1 pkt injection 0: client0 pkt injection
* Mutually exclusive: Either client0 or client1 egress pkt
* injection enable: write to 1 for single pkt injection. Must be
* 0 when enabling diagnostic rd/wr access to memories.
* 1: Diagnostic rd/wr access enabled 0: Diagnostic rd/wr access
* disabled Must be 0 when enabling pkt injection.
* 1: read, 0: write
* This bit is read/writable only if mem1Diagen=1 or if
* mem1Diagen bit is also written with '1' along with enabling
* this bit. Else, the write will not have any effect. 1: Apply
* the parity mask provided in the Prty register 0: Do not apply
* the parity mask provided in the Prty register
* 0 : select retry sot memory 1 : select retry buffer memory 2 :
* select msix memory 3 : select hcr cfg memory
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t mem1_access_status:1;
uint32_t rsrvd:4;
uint32_t mem1_pktinj_stat:1;
uint32_t mem1_pktinj_client:1;
uint32_t mem1_pktinj_en:1;
uint32_t rsrvd1:1;
uint32_t mem1_diagen:1;
uint32_t mem1_command:1;
uint32_t mem1_prty_wen:1;
uint32_t rsrvd2:2;
uint32_t mem1_sel:2;
uint32_t mem1_addr:16;
#else
uint32_t mem1_addr:16;
uint32_t mem1_sel:2;
uint32_t rsrvd2:2;
uint32_t mem1_prty_wen:1;
uint32_t mem1_command:1;
uint32_t mem1_diagen:1;
uint32_t rsrvd1:1;
uint32_t mem1_pktinj_en:1;
uint32_t mem1_pktinj_client:1;
uint32_t mem1_pktinj_stat:1;
uint32_t rsrvd:4;
uint32_t mem1_access_status:1;
#endif
} bits;
} indacc_mem1_ctrl_t;
/*
* Register: IndaccMem1Data0
* CIP Mem1 Debug Data0
* Description: Debug data signals from the CIP blocks
* Fields:
* When pktInjectionEnable is 0: Data[31:0] from/for the memory
* selected by mem1Sel bits from mem1Ctrl This data is written to
* the memory when indaccMem1Ctrl register is written with the
* write command When indaccMem1Ctrl register is written with the
* read command, this register will hold the Data[31:0] returned
* from the memory
* When pktInjectionEnable is 1: debugData0Reg[31:0] is used in
* the following ways: [27:26] = tdcPeuTlp0[or
* rdcPeuTlp1]_fmt[1:0]: 2'b00 3DW MRd 2'b01 4DW MRd 2'b10 3DW
* MWr 2'b11 4DW MWr [25:13] = tdcPeuTlp0[or
* rdcPeuTlp1]_byteLen[12:0]: Note MWr must be limited to 4B =
* 13'b0000000000001. [12:8] = tdcPeuTlp0[or
* rdcPeuTlp1]_tid[4:0]: 5 lsb of tid (TAG ID) [7:0] =
* tdcPeuTlp0[or rdcPeuTlp1]_byteEn[7:0]: [7:4] = last DW byte
* enables [3:0] = first DW byte enables
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t mem1_data0:32;
#else
uint32_t mem1_data0:32;
#endif
} bits;
} indacc_mem1_data0_t;
/*
* Register: IndaccMem1Data1
* CIP Mem1 Debug Data1
* Description: Debug data signals from the CIP blocks
* Fields:
* When pktInjectionEnable is 0: Data[63:32] from/for the memory
* selected by mem1Sel bits from mem1Ctrl This data is written to
* the memory when indaccMem1Ctrl register is written with the
* write command When indaccMem1Ctrl register is written with the
* read command, this register will hold the Data[63:32] returned
* from the memory
* When pktInjectionEnable is 1: debugData1Reg[31:0] is used as
* tdcPeuTlp0[or rdcPeuTlp1]_addr[63:32] high address bits.
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t mem1_data1:32;
#else
uint32_t mem1_data1:32;
#endif
} bits;
} indacc_mem1_data1_t;
/*
* Register: IndaccMem1Data2
* CIP Mem1 Debug Data2
* Description: Debug data signals from the CIP blocks
* Fields:
* When pktInjectionEnable is 0: Data[95:64] from/for the memory
* selected by mem1Sel bits from mem1Ctrl This data is written to
* the memory when indaccMem1Ctrl register is written with the
* write command When indaccMem1Ctrl register is written with the
* read command, this register will hold the Data[95:64] returned
* from the memory
* When pktInjectionEnable is 1: debugData2Reg[31:0] is used as
* tdcPeuTlp0[or rdcPeuTlp1]_addr[31:0] low address bits.
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t mem1_data2:32;
#else
uint32_t mem1_data2:32;
#endif
} bits;
} indacc_mem1_data2_t;
/*
* Register: IndaccMem1Data3
* CIP Mem1 Debug Data3
* Description: Debug data signals from the CIP blocks
* Fields:
* When pktInjectionEnable is 0: Data[127:96] from/for the memory
* selected by mem1Sel bits from mem1Ctrl This data is written to
* the memory when indaccMem1Ctrl register is written with the
* write command When indaccMem1Ctrl register is written with the
* read command, this register will hold the Data[127:96]
* returned from the memory
* When pktInjectionEnable is 1: debugData3Reg[31:0] is used as
* tdcPeuTlp0[or rdcPeuTlp1]_data[31:0] Limited for MWr to 1 DW.
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t mem1_data3:32;
#else
uint32_t mem1_data3:32;
#endif
} bits;
} indacc_mem1_data3_t;
/*
* Register: IndaccMem1Prty
* CIP Mem1 Debug Parity
* Description: Debug data signals from the CIP blocks
* Fields:
* parity mask bits for the memory selected by mem1Sel bits from
* mem1Ctrl to inject parity error These bits serve two purposes
* regarding memory parity : - During indirect write access to
* the memories, the value in this register is applied as mask to
* the actual parity if prtyWen bit of the indaccCtrl register
* has been enabled. The masked parity and data are written into
* the specified memory location. - During indirect read access
* to the memories, the value in this register is overwritten
* with the parity value read from the memory location. If the
* parity mask had been set and enabled to be written into this
* location it will generate parity error for that memory
* location
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:20;
uint32_t mem1_parity:12;
#else
uint32_t mem1_parity:12;
uint32_t rsrvd:20;
#endif
} bits;
} indacc_mem1_prty_t;
/*
* Register: PhyDebugTrainingVec
* peuPhy Debug Training Vector
* Description: peuPhy Debug Training Vector register.
* Fields:
* Hard-coded value for peuPhy wrt global debug training block
* signatures.
* Blade Number, the value read depends on the blade this block
* resides
* debug training vector the sub-group select value of 0 selects
* this vector
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t dbg_msb:1;
uint32_t bld_num:3;
uint32_t phydbg_training_vec:28;
#else
uint32_t phydbg_training_vec:28;
uint32_t bld_num:3;
uint32_t dbg_msb:1;
#endif
} bits;
} phy_debug_training_vec_t;
/*
* Register: PeuDebugTrainingVec
* PEU Debug Training Vector
* Description: PEU Debug Training Vector register.
* Fields:
* Hard-coded value for PEU (VNMy - core clk domain) wrt global
* debug training block signatures.
* Blade Number, the value read depends on the blade this block
* resides
* debug training vector the sub-group select value of 0 selects
* this vector
* Hard-coded value for PEU (VNMy - core clk domain) wrt global
* debug training block signatures.
* Blade Number, the value read depends on the blade this block
* resides
* debug training vector the sub-group select value of 0 selects
* this vector
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t dbgmsb_upper:1;
uint32_t bld_num_upper:3;
uint32_t peudbg_upper_training_vec:12;
uint32_t dbgmsb_lower:1;
uint32_t bld_num_lower:3;
uint32_t peudbg_lower_training_vec:12;
#else
uint32_t peudbg_lower_training_vec:12;
uint32_t bld_num_lower:3;
uint32_t dbgmsb_lower:1;
uint32_t peudbg_upper_training_vec:12;
uint32_t bld_num_upper:3;
uint32_t dbgmsb_upper:1;
#endif
} bits;
} peu_debug_training_vec_t;
/*
* Register: PipeCfg0
* PIPE Configuration
* Description: These are controls signals for the pipe core and are
* used to define the PIPE core configuration with PipeCfg1 reg value
* (0x08124)
* Fields:
* If this bit is 1 when pipe reset is released, then the value
* on the pipe core's input port 'pipeParameter' is loaded into
* the Pipe Core's internal Rx/Tx Parameter register which is
* pipeRxTxParam at addr 0x01010. Note that it is software's
* responsibility to program the pipeParameter (Pipe Cfg1)
* register correctly: e.g. LOSADJ must be 0x1.
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:21;
uint32_t pipe_serdes_x1:1;
uint32_t pipe_force_ewrap:1;
uint32_t pipe_force_loopback:1;
uint32_t pipe_force_parm:1;
uint32_t pipe_freq_sel:1;
uint32_t pipe_p1_pdown:1;
uint32_t pipe_p1_pdtx:1;
uint32_t pipe_same_sel:1;
uint32_t pipe_system_clk:1;
uint32_t gbt_term_i:2;
#else
uint32_t gbt_term_i:2;
uint32_t pipe_system_clk:1;
uint32_t pipe_same_sel:1;
uint32_t pipe_p1_pdtx:1;
uint32_t pipe_p1_pdown:1;
uint32_t pipe_freq_sel:1;
uint32_t pipe_force_parm:1;
uint32_t pipe_force_loopback:1;
uint32_t pipe_force_ewrap:1;
uint32_t pipe_serdes_x1:1;
uint32_t rsrvd:21;
#endif
} bits;
} pipe_cfg0_t;
/*
* Register: PipeCfg1
* PIPE Configuration
* Description: These values define the PIPE core configuration and
* is presented on the Pipe core's input port 'pipeParameter'.
* The value on the pipe core's input 'pipeParameter' is loaded into
* the pipe core's internal Rx/Tx Parameter register, which is
* pipeRxTxParam at addr 0x01010, by forcing the pipeForceParm bit of
* the Pipe Cfg0 Register at address 0x08120.
*
* Fields:
* Tx Driver Emphasis
* Serial output Slew Rate Control
* Tx Voltage Mux control
* Tx Voltage Pulse control
* Output Swing setting
* Transmitter Clock generator pole adjust
* Transmitter Clock generator zero adjust
* Receiver Clock generator pole adjust
* Receiver Clock generator zero adjust
* Bias Control for factory testing and debugging
* Receiver LOS Threshold adjustment. LSI suggests this POR
* default value must be 0x1 (which is the POR default value of
* the Pipe Rx/Tx Parameter Register).
* Receiver Input Equalizer control
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:1;
uint32_t emph:3;
uint32_t rsrvd1:1;
uint32_t risefall:3;
uint32_t vmuxlo:2;
uint32_t vpulselo:2;
uint32_t vtxlo:4;
uint32_t tp:2;
uint32_t tz:2;
uint32_t rp:2;
uint32_t rz:2;
uint32_t biascntl:1;
uint32_t losadj:3;
uint32_t rxeq:4;
#else
uint32_t rxeq:4;
uint32_t losadj:3;
uint32_t biascntl:1;
uint32_t rz:2;
uint32_t rp:2;
uint32_t tz:2;
uint32_t tp:2;
uint32_t vtxlo:4;
uint32_t vpulselo:2;
uint32_t vmuxlo:2;
uint32_t risefall:3;
uint32_t rsrvd1:1;
uint32_t emph:3;
uint32_t rsrvd:1;
#endif
} bits;
} pipe_cfg1_t;
/*
* Register: CipBarMaskCfg
* BAR Mask Config
* Description: To write to the BAR MASK registers in the EP Core PCI
* Config registers This register should be initialised before
* writing the value to into the cipBarMask register. The lower 3
* bits define the BAR register number whose mask value has to be
* over written with the values that will be written into the
* cipBarMask register. [2:0] = 0 thru 5 selects bar0Mask thru
* bar5Mask registers = 6,7 selects Expansion romBarMask register
* Hydra's configuration for the BARs is as below : BAR1, BAR0 :
* Forms 64 bit PIO BAR. BAR1 handles the upper address bits BAR0
* handles the lower address bits BAR3, BAR2 : Forms 64 bit MSIX BAR
* BAR3 handles the upper address bits BAR2 handles the lower address
* bits BAR5, BAR4 : Not used and so disabled. Hence, user writes
* will not have any effect. romBar : Expansion romBar
*
* Fields:
* 0 : bar0Mask 1 : bar1Mask 2 : bar2Mask 3 : bar3Mask 4 :
* bar4Mask 5 : bar5Mask 6, 7 ; romBarMask
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:29;
uint32_t data:3;
#else
uint32_t data:3;
uint32_t rsrvd:29;
#endif
} bits;
} cip_bar_mask_cfg_t;
/*
* Register: CipBarMask
* BAR Mask
* Description: Value to write to the BAR MASK registers in the EP
* Core PCI Config registers The lower 3 bits of cipMaskCfg register
* define the BAR register number Write to this register will
* initiate the DBI access to the EP Core. The cipBarMaskCfg register
* should be setup before writing to this register. [31:1] = Mask
* value [0] = 1: BAR is enabled; 0: BAR is disabled. Note that the
* BAR must be enabled ([0] == 1) before the Mask value will be
* written into the actual bar mask register. If the BAR is disabled
* ([0]==0), two writes to this register are required before the Mask
* value is written into the actual bar mask register. Refer to EP
* core data book for more details.
*
* Fields:
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t data:32;
#else
uint32_t data:32;
#endif
} bits;
} cip_bar_mask_t;
/*
* Register: CipLdsv0Stat
* LDSV0 Status (for debug purpose)
* Description: Returns the status of LDSV0 Flags regardless of their
* group
*
* Fields:
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t data:32;
#else
uint32_t data:32;
#endif
} bits;
} cip_ldsv0_stat_t;
/*
* Register: CipLdsv1Stat
* LDSV1 Status (for debug purpose)
* Description: Returns the status of LDSV1 Flags regardless of their
* group
*
* Fields:
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t data:32;
#else
uint32_t data:32;
#endif
} bits;
} cip_ldsv1_stat_t;
/*
* Register: PeuIntrStat
* PEU Interrupt Status
* Description: Returns the parity error status of all of the PEU
* RAMs, and external (to peu) block pio access errors. External
* block pio access errors could be due to either host or SPI
* initiated accesses. These fields are RO and can be cleared only
* through a cip reset All these errors feed to devErrStat.peuErr1
* which in turn feed to LDSV1.devErr1
* Partity Error bits: These bits log the very first parity error
* detected in a particular memory. The corresponding memory location
* is logged in respective perrLoc registers. External Block PIO
* Access Error bits: These bits log the very first error that
* resulted in access error. The corresponding address is logged in
* respective accErrLog registers.
* These bits can be set by writing a '1' to the corresponding
* mirror bit in the peuIntrStatMirror register.
* Note: PEU RAM Parity Errors and their corresponding interrupt:
* When these bits are set and the device error status interrupt is
* not masked, the PEU attempts to send the corresponding interrupt
* back to the RC. Depending on which ram is impacted and the
* corresponding logic impacted in the EP core, a coherent interrupt
* message may not be sent in all cases. For the times when the EP
* core is unable to send an interrupt, the SPI interface is to be
* used for error diagnosis as the PEU interrupt status is logged
* regardless of whether the interrupt is sent to the RC. The
* following data was collected via simulation: -Parity error
* impacted rams that likely will be able to send an interrupt:
* npDataq, pDataq, cplDataq, hcr. -Parity error impacted rams that
* may not be able to send an interrupt: npHdrq, pHdrq, cplHdrq, MSIx
* table, retryram, retrysot.
*
* Fields:
* Error indication from SPROM Controller for Sprom Download
* access This error indicates that a parity error was detected
* from SRAM. For more details, please refer to SPROM Controller
* PRM.
* Error indication from TDC for PIO access The error location
* and type are logged in tdcPioaccErrLog
* Error indication from RDC for PIO access The error location
* and type are logged in rdcPioaccErrLog
* Error indication from PFC for PIO access The error location
* and type are logged in pfcPioaccErrLog
* Error indication from VMAC for PIO access The error location
* and type are logged in vmacPioaccErrLog
* memory in PCIe data path and value unknown until packet flow
* starts.
* memory in PCIe data path and value unknown until packet flow
* starts.
* memory in PCIe data path and value unknown until packet flow
* starts.
* memory in PCIe data path and value unknown until packet flow
* starts.
* memory in PCIe data path and value unknown until packet flow
* starts.
* memory in PCIe data path and value unknown until packet flow
* starts.
* memory in PCIe data path and value unknown until packet flow
* starts.
* memory in PCIe data path and value unknown until packet flow
* starts.
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:11;
uint32_t spc_acc_err:1;
uint32_t tdc_pioacc_err:1;
uint32_t rdc_pioacc_err:1;
uint32_t pfc_pioacc_err:1;
uint32_t vmac_pioacc_err:1;
uint32_t rsrvd1:6;
uint32_t cpl_hdrq_parerr:1;
uint32_t cpl_dataq_parerr:1;
uint32_t retryram_xdlh_parerr:1;
uint32_t retrysotram_xdlh_parerr:1;
uint32_t p_hdrq_parerr:1;
uint32_t p_dataq_parerr:1;
uint32_t np_hdrq_parerr:1;
uint32_t np_dataq_parerr:1;
uint32_t eic_msix_parerr:1;
uint32_t hcr_parerr:1;
#else
uint32_t hcr_parerr:1;
uint32_t eic_msix_parerr:1;
uint32_t np_dataq_parerr:1;
uint32_t np_hdrq_parerr:1;
uint32_t p_dataq_parerr:1;
uint32_t p_hdrq_parerr:1;
uint32_t retrysotram_xdlh_parerr:1;
uint32_t retryram_xdlh_parerr:1;
uint32_t cpl_dataq_parerr:1;
uint32_t cpl_hdrq_parerr:1;
uint32_t rsrvd1:6;
uint32_t vmac_pioacc_err:1;
uint32_t pfc_pioacc_err:1;
uint32_t rdc_pioacc_err:1;
uint32_t tdc_pioacc_err:1;
uint32_t spc_acc_err:1;
uint32_t rsrvd:11;
#endif
} bits;
} peu_intr_stat_t;
/*
* Register: PeuIntrMask
* Parity Error Status Mask
* Description: Masks for interrupt generation for block and parity
* error in the PEU RAMs For the VNM errors (spc, tdc, rdc, pfc, &
* vmac), note that the interrupt message to the host will be delayed
* from the actual moment that the error is detected until the host
* does a PIO access and this mask is cleared.
*
* Fields:
* 1: Mask interrupt generation for access error from SPROM
* Controller
* 1: Mask interrupt generation for PIO access error from TDC
* 1: Mask interrupt generation for PIO access error from RDC
* 1: Mask interrupt generation for PIO access error from PFC
* 1: Mask interrupt generation for PIO access error from VMAC
* 1: Mask interrupt generation for parity error from Completion
* Header Q memory
* 1: Mask interrupt generation for parity error from Completion
* Data Q memory
* 1: Mask interrupt generation for parity error from Retry
* memory
* 1: Mask interrupt generation for parity error from Retry SOT
* memory
* 1: Mask interrupt generation for parity error from Posted
* Header Q memory
* 1: Mask interrupt generation for parity error from Posted Data
* Q memory
* 1: Mask interrupt generation for parity error from Non-Posted
* Header Q memory
* 1: Mask interrupt generation for parity error from Non-Posted
* Data Q memory
* 1: Mask interrupt generation for parity error from MSIX memory
* 1: Mask interrupt generation for parity error from HCR memory
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:11;
uint32_t spc_acc_err_mask:1;
uint32_t tdc_pioacc_err_mask:1;
uint32_t rdc_pioacc_err_mask:1;
uint32_t pfc_pioacc_err_mask:1;
uint32_t vmac_pioacc_err_mask:1;
uint32_t rsrvd1:6;
uint32_t cpl_hdrq_parerr_mask:1;
uint32_t cpl_dataq_parerr_mask:1;
uint32_t retryram_xdlh_parerr_mask:1;
uint32_t retrysotram_xdlh_parerr_mask:1;
uint32_t p_hdrq_parerr_mask:1;
uint32_t p_dataq_parerr_mask:1;
uint32_t np_hdrq_parerr_mask:1;
uint32_t np_dataq_parerr_mask:1;
uint32_t eic_msix_parerr_mask:1;
uint32_t hcr_parerr_mask:1;
#else
uint32_t hcr_parerr_mask:1;
uint32_t eic_msix_parerr_mask:1;
uint32_t np_dataq_parerr_mask:1;
uint32_t np_hdrq_parerr_mask:1;
uint32_t p_dataq_parerr_mask:1;
uint32_t p_hdrq_parerr_mask:1;
uint32_t retrysotram_xdlh_parerr_mask:1;
uint32_t retryram_xdlh_parerr_mask:1;
uint32_t cpl_dataq_parerr_mask:1;
uint32_t cpl_hdrq_parerr_mask:1;
uint32_t rsrvd1:6;
uint32_t vmac_pioacc_err_mask:1;
uint32_t pfc_pioacc_err_mask:1;
uint32_t rdc_pioacc_err_mask:1;
uint32_t tdc_pioacc_err_mask:1;
uint32_t spc_acc_err_mask:1;
uint32_t rsrvd:11;
#endif
} bits;
} peu_intr_mask_t;
/*
* Register: PeuIntrStatMirror
* Parity Error Status Mirror
* Description: Mirror bits for Parity error generation in the PEU
* RAMs When set, the corresponding parity error is generated ; this
* will cause an interrupt to occur if the respective mask bit is not
* set. As the mirror of the Parity Error Status Register, clearing
* of the status bits is controlled by how the Parity Error Status
* Register is cleared. These bits cannot be cleared by writing 0 to
* this register.
*
* Fields:
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:11;
uint32_t spc_acc_err_mirror:1;
uint32_t tdc_pioacc_err_mirror:1;
uint32_t rdc_pioacc_err_mirror:1;
uint32_t pfc_pioacc_err_mirror:1;
uint32_t vmac_pioacc_err_mirror:1;
uint32_t rsrvd1:6;
uint32_t cpl_hdrq_parerr_mirror:1;
uint32_t cpl_dataq_parerr_mirror:1;
uint32_t retryram_xdlh_parerr_mirror:1;
uint32_t retrysotram_xdlh_parerr_mirror:1;
uint32_t p_hdrq_parerr_mirror:1;
uint32_t p_dataq_parerr_mirror:1;
uint32_t np_hdrq_parerr_mirror:1;
uint32_t np_dataq_parerr_mirror:1;
uint32_t eic_msix_parerr_mirror:1;
uint32_t hcr_parerr_mirror:1;
#else
uint32_t hcr_parerr_mirror:1;
uint32_t eic_msix_parerr_mirror:1;
uint32_t np_dataq_parerr_mirror:1;
uint32_t np_hdrq_parerr_mirror:1;
uint32_t p_dataq_parerr_mirror:1;
uint32_t p_hdrq_parerr_mirror:1;
uint32_t retrysotram_xdlh_parerr_mirror:1;
uint32_t retryram_xdlh_parerr_mirror:1;
uint32_t cpl_dataq_parerr_mirror:1;
uint32_t cpl_hdrq_parerr_mirror:1;
uint32_t rsrvd1:6;
uint32_t vmac_pioacc_err_mirror:1;
uint32_t pfc_pioacc_err_mirror:1;
uint32_t rdc_pioacc_err_mirror:1;
uint32_t tdc_pioacc_err_mirror:1;
uint32_t spc_acc_err_mirror:1;
uint32_t rsrvd:11;
#endif
} bits;
} peu_intr_stat_mirror_t;
/*
* Register: CplHdrqPerrLoc
* Completion Header Queue Parity Error Location
* Description: Returns the location of the first parity error
* detected in Completion Header Q
*
* Fields:
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:16;
uint32_t cpl_hdrq_parerr_loc:16;
#else
uint32_t cpl_hdrq_parerr_loc:16;
uint32_t rsrvd:16;
#endif
} bits;
} cpl_hdrq_perr_loc_t;
/*
* Register: CplDataqPerrLoc
* Completion Data Queue Parity Error Location
* Description: Returns the location of the first parity error
* detected in Completion Data Q
*
* Fields:
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:16;
uint32_t cpl_dataq_parerr_loc:16;
#else
uint32_t cpl_dataq_parerr_loc:16;
uint32_t rsrvd:16;
#endif
} bits;
} cpl_dataq_perr_loc_t;
/*
* Register: RetrPerrLoc
* Retry RAM Parity Error Location
* Description: Returns the location of the first parity error
* detected in Retry RAM
*
* Fields:
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:16;
uint32_t retr_parerr_loc:16;
#else
uint32_t retr_parerr_loc:16;
uint32_t rsrvd:16;
#endif
} bits;
} retr_perr_loc_t;
/*
* Register: RetrSotPerrLoc
* Retry SOT RAM Parity Error Location
* Description: Returns the location of the first parity error
* detected in Retry RAM SOT
*
* Fields:
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:16;
uint32_t retr_sot_parerr_loc:16;
#else
uint32_t retr_sot_parerr_loc:16;
uint32_t rsrvd:16;
#endif
} bits;
} retr_sot_perr_loc_t;
/*
* Register: PHdrqPerrLoc
* Posted Header Queue Parity Error Location
* Description: Returns the location of the first parity error
* detected in Posted Header Q
*
* Fields:
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:16;
uint32_t p_hdrq_parerr_loc:16;
#else
uint32_t p_hdrq_parerr_loc:16;
uint32_t rsrvd:16;
#endif
} bits;
} p_hdrq_perr_loc_t;
/*
* Register: PDataqPerrLoc
* Posted Data Queue Parity Error Location
* Description: Returns the location of the first parity error
* detected in Posted Data Q
*
* Fields:
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:16;
uint32_t p_dataq_parerr_loc:16;
#else
uint32_t p_dataq_parerr_loc:16;
uint32_t rsrvd:16;
#endif
} bits;
} p_dataq_perr_loc_t;
/*
* Register: NpHdrqPerrLoc
* Non-Posted Header Queue Parity Error Location
* Description: Returns the location of the first parity error
* detected in Non-Posted Header Q
*
* Fields:
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:16;
uint32_t np_hdrq_parerr_loc:16;
#else
uint32_t np_hdrq_parerr_loc:16;
uint32_t rsrvd:16;
#endif
} bits;
} np_hdrq_perr_loc_t;
/*
* Register: NpDataqPerrLoc
* Non-Posted Data Queue Parity Error Location
* Description: Returns the location of the first parity error
* detected in Non-Posted Data Q
*
* Fields:
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:16;
uint32_t np_dataq_parerr_loc:16;
#else
uint32_t np_dataq_parerr_loc:16;
uint32_t rsrvd:16;
#endif
} bits;
} np_dataq_perr_loc_t;
/*
* Register: MsixPerrLoc
* MSIX Parity Error Location
* Description: Returns the location of the first parity error
* detected in MSIX memory
*
* Fields:
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:16;
uint32_t eic_msix_parerr_loc:16;
#else
uint32_t eic_msix_parerr_loc:16;
uint32_t rsrvd:16;
#endif
} bits;
} msix_perr_loc_t;
/*
* Register: HcrPerrLoc
* HCR Memory Parity Error Location
* Description: Returns the location of the first parity error
* detected in HCR Memory
*
* Fields:
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:16;
uint32_t hcr_parerr_loc:16;
#else
uint32_t hcr_parerr_loc:16;
uint32_t rsrvd:16;
#endif
} bits;
} hcr_perr_loc_t;
/*
* Register: TdcPioaccErrLog
* TDC PIO Access Error Location
* Description: Returns the location of the first transaction
* location that resulted in error
*
* Fields:
* Type of access error 0 : Block returned error condition 1 :
* Transaction resulted in time out by CIP
* Transaction Location that resulted in error
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:11;
uint32_t tdc_pioacc_err_type:1;
uint32_t tdc_pioacc_err_loc:20;
#else
uint32_t tdc_pioacc_err_loc:20;
uint32_t tdc_pioacc_err_type:1;
uint32_t rsrvd:11;
#endif
} bits;
} tdc_pioacc_err_log_t;
/*
* Register: RdcPioaccErrLog
* RDC PIO Access Error Location
* Description: Returns the location of the first transaction
* location that resulted in error
*
* Fields:
* Type of access error 0 : Block returned error condition 1 :
* Transaction resulted in time out by CIP
* Transaction Location that resulted in error
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:11;
uint32_t rdc_pioacc_err_type:1;
uint32_t rdc_pioacc_err_loc:20;
#else
uint32_t rdc_pioacc_err_loc:20;
uint32_t rdc_pioacc_err_type:1;
uint32_t rsrvd:11;
#endif
} bits;
} rdc_pioacc_err_log_t;
/*
* Register: PfcPioaccErrLog
* PFC PIO Access Error Location
* Description: Returns the location of the first transaction
* location that resulted in error
*
* Fields:
* Type of access error 0 : Block returned error condition 1 :
* Transaction resulted in time out by CIP
* Transaction Location that resulted in error
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:11;
uint32_t pfc_pioacc_err_type:1;
uint32_t pfc_pioacc_err_loc:20;
#else
uint32_t pfc_pioacc_err_loc:20;
uint32_t pfc_pioacc_err_type:1;
uint32_t rsrvd:11;
#endif
} bits;
} pfc_pioacc_err_log_t;
/*
* Register: VmacPioaccErrLog
* VMAC PIO Access Error Location
* Description: Returns the location of the first transaction
* location that resulted in error
*
* Fields:
* Type of access error 0 : Block returned error condition 1 :
* Transaction resulted in time out by CIP
* Transaction Location that resulted in error
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:11;
uint32_t vmac_pioacc_err_type:1;
uint32_t vmac_pioacc_err_loc:20;
#else
uint32_t vmac_pioacc_err_loc:20;
uint32_t vmac_pioacc_err_type:1;
uint32_t rsrvd:11;
#endif
} bits;
} vmac_pioacc_err_log_t;
/*
* Register: LdGrpCtrl
* Logical Device Group Control
* Description: LD Group assignment
* Fields:
* Logical device group number of this logical device
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:27;
uint32_t num:5;
#else
uint32_t num:5;
uint32_t rsrvd:27;
#endif
} bits;
} ld_grp_ctrl_t;
/*
* Register: DevErrStat
* Device Error Status
* Description: Device Error Status logs errors that cannot be
* attributed to a given dma channel. It does not duplicate errors
* already observable via specific block logical device groups.
* Device Error Status bits [31:16] feed LDSV0.devErr0 Device Error
* Status bits [15:0] feed LDSV1.devErr1
* Fields:
* Set to 1 if Reorder Buffer/Reorder Table has a single bit
* ecc/parity error. This error condition is asserted by TDC to
* PEU.
* Set to 1 if RX Ctrl or Data FIFO has a single bit ecc error.
* This error condition is asserted by RDC to PEU.
* Set to 1 if any of the external block accesses have resulted
* in error or if a parity error was detected in the SPROM
* internal ram. Refer to peuIntrStat for the errors that
* contribute to this bit.
* Set to 1 if Reorder Buffer/Reorder Table has a double bit
* ecc/parity error. This error condition is asserted by TDC to
* PEU.
* Set to 1 if RX Ctrl or Data FIFO has a double bit ecc error.
* This error condition is asserted by RDC to PEU.
* Set to 1 if any PEU ram (MSI-X, retrybuf/sot, p/np/cpl queues)
* has a parity error Refer to peuIntrStat for the errors that
* contribute to this bit.
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:13;
uint32_t tdc_err0:1;
uint32_t rdc_err0:1;
uint32_t rsrvd1:1;
uint32_t rsrvd2:12;
uint32_t vnm_pio_err1:1;
uint32_t tdc_err1:1;
uint32_t rdc_err1:1;
uint32_t peu_err1:1;
#else
uint32_t peu_err1:1;
uint32_t rdc_err1:1;
uint32_t tdc_err1:1;
uint32_t vnm_pio_err1:1;
uint32_t rsrvd2:12;
uint32_t rsrvd1:1;
uint32_t rdc_err0:1;
uint32_t tdc_err0:1;
uint32_t rsrvd:13;
#endif
} bits;
} dev_err_stat_t;
/*
* Register: DevErrMask
* Device Error Mask
* Description: Device Error Mask (gates devErrStat)
* Fields:
* Mask for TDC error0
* Mask for RDC error0
* Mask for VNM PIO Access error
* Mask for TDC error1
* Mask for RDC error1
* Mask for PEU memories parity error
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:13;
uint32_t tdc_mask0:1;
uint32_t rdc_mask0:1;
uint32_t rsrvd1:1;
uint32_t rsrvd2:12;
uint32_t vnm_pio_mask1:1;
uint32_t tdc_mask1:1;
uint32_t rdc_mask1:1;
uint32_t peu_mask1:1;
#else
uint32_t peu_mask1:1;
uint32_t rdc_mask1:1;
uint32_t tdc_mask1:1;
uint32_t vnm_pio_mask1:1;
uint32_t rsrvd2:12;
uint32_t rsrvd1:1;
uint32_t rdc_mask0:1;
uint32_t tdc_mask0:1;
uint32_t rsrvd:13;
#endif
} bits;
} dev_err_mask_t;
/*
* Register: LdIntrTimRes
* Logical Device Interrupt Timer Resolution
* Description: Logical Device Interrupt Timer Resolution
* Fields:
* Timer resolution in 250 MHz cycles
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:12;
uint32_t res:20;
#else
uint32_t res:20;
uint32_t rsrvd:12;
#endif
} bits;
} ld_intr_tim_res_t;
/*
* Register: LDSV0
* Logical Device State Vector 0
* Description: Logical Device State Vector 0
* Fields:
* Interrupt from mail box3 to HOST
* Interrupt from mail box2 to HOST
* Interrupt from mail box1 to HOST
* Interrupt from mail box0 to HOST
* Flag0 bits for Network MAC
* Flag0 bits for Virtual MAC
* Flag0 bits for Tx DMA channels 3-0
* Flag0 bits for Rx DMA channels 3-0
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t dev_err0:1;
uint32_t rsrvd:7;
uint32_t mbox3_irq:1;
uint32_t mbox2_irq:1;
uint32_t mbox1_irq:1;
uint32_t mbox0_irq:1;
uint32_t rsrvd1:1;
uint32_t nmac_f0:1;
uint32_t pfc_f0:1;
uint32_t vmac_f0:1;
uint32_t rsrvd2:4;
uint32_t tdc_f0:4;
uint32_t rsrvd3:4;
uint32_t rdc_f0:4;
#else
uint32_t rdc_f0:4;
uint32_t rsrvd3:4;
uint32_t tdc_f0:4;
uint32_t rsrvd2:4;
uint32_t vmac_f0:1;
uint32_t pfc_f0:1;
uint32_t nmac_f0:1;
uint32_t rsrvd1:1;
uint32_t mbox0_irq:1;
uint32_t mbox1_irq:1;
uint32_t mbox2_irq:1;
uint32_t mbox3_irq:1;
uint32_t rsrvd:7;
uint32_t dev_err0:1;
#endif
} bits;
} ldsv0_t;
/*
* Register: LDSV1
* Logical Device State Vector 1
* Description: Logical Device State Vector 1
* Fields:
* Flag1 bits for Network MAC
* Flag1 bits for Tx DMA channels 3-0
* Flag1 bits for Rx DMA channels 3-0
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t dev_err1:1;
uint32_t rsrvd:7;
uint32_t rsrvd1:5;
uint32_t nmac_f1:1;
uint32_t rsrvd2:1;
uint32_t rsrvd3:1;
uint32_t rsrvd4:4;
uint32_t tdc_f1:4;
uint32_t rsrvd5:4;
uint32_t rdc_f1:4;
#else
uint32_t rdc_f1:4;
uint32_t rsrvd5:4;
uint32_t tdc_f1:4;
uint32_t rsrvd4:4;
uint32_t rsrvd3:1;
uint32_t rsrvd2:1;
uint32_t nmac_f1:1;
uint32_t rsrvd1:5;
uint32_t rsrvd:7;
uint32_t dev_err1:1;
#endif
} bits;
} ldsv1_t;
/*
* Register: LdIntrMask
* Logical Device Interrupt Mask
* Description: Logical Device Interrupt Mask
* Fields:
* Flag1 mask for logical device N (0-31)
* Flag0 mask for logical device N (0-31)
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:30;
uint32_t ldf1_mask:1;
uint32_t ldf0_mask:1;
#else
uint32_t ldf0_mask:1;
uint32_t ldf1_mask:1;
uint32_t rsrvd:30;
#endif
} bits;
} ld_intr_mask_t;
/*
* Register: LdIntrMgmt
* Logical Device Interrupt Management
* Description: Logical Device Interrupt Management
* Fields:
* SW arms the logical device for interrupt. Cleared by HW after
* interrupt issued. (1 = arm)
* Timer set by SW. Hardware counts down.
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t arm:1;
uint32_t rsrvd:25;
uint32_t timer:6;
#else
uint32_t timer:6;
uint32_t rsrvd:25;
uint32_t arm:1;
#endif
} bits;
} ld_intr_mgmt_t;
/*
* Register: SID
* System Interrupt Data
* Description: System Interrupt Data (MSI Vectors)
* Fields:
* Data sent along with the interrupt
*/
typedef union {
uint32_t value;
struct {
#if defined(_BIG_ENDIAN)
uint32_t rsrvd:27;
uint32_t data:5;
#else
uint32_t data:5;
uint32_t rsrvd:27;
#endif
} bits;
} sid_t;
#ifdef __cplusplus
}
#endif
#endif /* _HXGE_PEU_HW_H */