summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/sys/pcie.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/sys/pcie.h')
-rw-r--r--usr/src/uts/common/sys/pcie.h152
1 files changed, 142 insertions, 10 deletions
diff --git a/usr/src/uts/common/sys/pcie.h b/usr/src/uts/common/sys/pcie.h
index 05b70a56fa..a26729c523 100644
--- a/usr/src/uts/common/sys/pcie.h
+++ b/usr/src/uts/common/sys/pcie.h
@@ -22,6 +22,9 @@
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
+/*
+ * Copyright 2019, Joyent, Inc.
+ */
#ifndef _SYS_PCIE_H
#define _SYS_PCIE_H
@@ -49,6 +52,7 @@ extern "C" {
#define PCIE_SLOTCTL 0x18 /* Slot Control */
#define PCIE_SLOTSTS 0x1A /* Slot Status */
#define PCIE_ROOTCTL 0x1C /* Root Control */
+#define PCIE_ROOTCAP 0x1E /* Root Capabilities */
#define PCIE_ROOTSTS 0x20 /* Root Status */
#define PCIE_DEVCAP2 0x24 /* Device Capability 2 */
#define PCIE_DEVCTL2 0x28 /* Device Control 2 */
@@ -125,6 +129,9 @@ extern "C" {
#define PCIE_DEVCAP_EP_L1_LAT_MAX 0x1C0 /* > 64 us */
#define PCIE_DEVCAP_EP_L1_LAT_MASK 0x700 /* EP L1 Accetable Latency */
+/*
+ * As of PCIe 2.x these three bits are now undefined.
+ */
#define PCIE_DEVCAP_ATTN_BUTTON 0x1000 /* Attention Button Present */
#define PCIE_DEVCAP_ATTN_INDICATOR 0x2000 /* Attn Indicator Present */
#define PCIE_DEVCAP_PWR_INDICATOR 0x4000 /* Power Indicator Present */
@@ -140,6 +147,8 @@ extern "C" {
#define PCIE_DEVCAP_PLMT_SCL_1_BY_1000 0xC000000 /* 0.001x Scale */
#define PCIE_DEVCAP_PLMT_SCL_MASK 0xC000000 /* Power Limit Scale */
+#define PCIE_DEVCAP_FLR 0x10000000 /* Function Level Reset */
+
/*
* Device Control Register (2 bytes)
*/
@@ -174,6 +183,9 @@ extern "C" {
#define PCIE_DEVCTL_MAX_READ_REQ_MASK 0x7000 /* Max_Read_Request_Size */
#define PCIE_DEVCTL_MAX_READ_REQ_SHIFT 0xC
+#define PCIE_DEVCTL_BRIDGE_RETRY 0x8000 /* Bridge can return CRS */
+#define PCIE_DEVCTL_INITIATE_FLR 0x8000 /* Start Function Level Reset */
+
/*
* Device Status Register (2 bytes)
*/
@@ -183,11 +195,20 @@ extern "C" {
#define PCIE_DEVSTS_UR_DETECTED 0x8 /* Unsupported Req Detected */
#define PCIE_DEVSTS_AUX_POWER 0x10 /* AUX Power Detected */
#define PCIE_DEVSTS_TRANS_PENDING 0x20 /* Transactions Pending */
+#define PCIE_DEVSTS_EPR_DETECTED 0x40 /* Emergency Power Reduction */
/*
* Link Capability Register (4 bytes)
*/
-#define PCIE_LINKCAP_MAX_SPEED_2_5 0x1 /* 2.5 Gb/s Speed */
+#define PCIE_LINKCAP_MAX_SPEED_2_5 0x1 /* 2.5 GT/s Speed */
+/*
+ * In version 2 of PCI express, this indicated that both 5.0 GT/s and 2.5 GT/s
+ * speeds were supported. The use of this as the maximum link speed was added
+ * with PCIex v3.
+ */
+#define PCIE_LINKCAP_MAX_SPEED_5 0x2 /* 5.0 GT/s Speed */
+#define PCIE_LINKCAP_MAX_SPEED_8 0x3 /* 8.0 GT/s Speed */
+#define PCIE_LINKCAP_MAX_SPEED_16 0x4 /* 16.0 GT/s Speed */
#define PCIE_LINKCAP_MAX_SPEED_MASK 0xF /* Maximum Link Speed */
#define PCIE_LINKCAP_MAX_WIDTH_X1 0x010
#define PCIE_LINKCAP_MAX_WIDTH_X2 0x020
@@ -199,6 +220,7 @@ extern "C" {
#define PCIE_LINKCAP_MAX_WIDTH_MASK 0x3f0 /* Maximum Link Width */
#define PCIE_LINKCAP_ASPM_SUP_L0S 0x400 /* L0s Entry Supported */
+#define PCIE_LINKCAP_ASPM_SUP_L1 0x800 /* L1 Entry Supported */
#define PCIE_LINKCAP_ASPM_SUP_L0S_L1 0xC00 /* L0s abd L1 Supported */
#define PCIE_LINKCAP_ASPM_SUP_MASK 0xC00 /* ASPM Support */
@@ -222,9 +244,12 @@ extern "C" {
#define PCIE_LINKCAP_L1_EXIT_LAT_MAX 0x38000 /* > 64 us */
#define PCIE_LINKCAP_L1_EXIT_LAT_MASK 0x38000 /* L1 Exit Latency */
-/* PCIe v1.1 spec based */
+#define PCIE_LINKCAP_CLOCK_POWER_MGMT 0x40000 /* Clock Power Management */
+#define PCIE_LINKCAP_SDER_CAP 0x80000 /* Surprise Down Err report */
#define PCIE_LINKCAP_DLL_ACTIVE_REP_CAPABLE 0x100000 /* DLL Active */
/* Capable bit */
+#define PCIE_LINKCAP_LINK_BW_NOTIFY_CAP 0x200000 /* Link Bandwidth Notify Cap */
+#define PCIE_LINKCAP_ASPM_OPTIONAL 0x400000 /* ASPM Opt. Comp. */
#define PCIE_LINKCAP_PORT_NUMBER 0xFF000000 /* Port Number */
#define PCIE_LINKCAP_PORT_NUMBER_SHIFT 24 /* Port Number Shift */
@@ -247,11 +272,23 @@ extern "C" {
#define PCIE_LINKCTL_RETRAIN_LINK 0x20 /* Retrain Link */
#define PCIE_LINKCTL_COMMON_CLK_CFG 0x40 /* Common Clock Configuration */
#define PCIE_LINKCTL_EXT_SYNCH 0x80 /* Extended Synch */
+#define PCIE_LINKCTL_CLOCK_POWER_MGMT 0x100 /* Enable Clock Power Mgmt. */
+#define PCIE_LINKCTL_HW_WIDTH_DISABLE 0x200 /* hw auto width disable */
+#define PCIE_LINKCTL_LINK_BW_INTR_EN 0x400 /* Link bw mgmt intr */
+#define PCIE_LINKCTL_LINK_AUTO_BW_INTR_EN 0x800 /* Auto bw intr */
+
+#define PCI_LINKCTRL_DRS_SIG_CTRL_NO_REP 0x00
+#define PCI_LINKCTRL_DRS_SIG_CTRL_IE 0x4000
+#define PCI_LINKCTRL_DRS_SIG_CTRL_DRS_FRS 0x8000
+#define PCIE_LINKCTL_DRS_SIG_CTRL_MASK 0xC000 /* DRS Signaling Control */
/*
* Link Status Register (2 bytes)
*/
-#define PCIE_LINKSTS_SPEED_2_5 0x1 /* Link Speed */
+#define PCIE_LINKSTS_SPEED_2_5 0x1 /* 2.5 GT/s Link Speed */
+#define PCIE_LINKSTS_SPEED_5 0x2 /* 5.0 GT/s Link Speed */
+#define PCIE_LINKSTS_SPEED_8 0x3 /* 8.0 GT/s Link Speed */
+#define PCIE_LINKSTS_SPEED_16 0x4 /* 16.0 GT/s Link Speed */
#define PCIE_LINKSTS_SPEED_MASK 0xF /* Link Speed */
#define PCIE_LINKSTS_NEG_WIDTH_X1 0x010
@@ -263,12 +300,13 @@ extern "C" {
#define PCIE_LINKSTS_NEG_WIDTH_X32 0x200
#define PCIE_LINKSTS_NEG_WIDTH_MASK 0x3F0 /* Negotiated Link Width */
+/* This bit is undefined as of PCIe 2.x */
#define PCIE_LINKSTS_TRAINING_ERROR 0x400 /* Training Error */
#define PCIE_LINKSTS_LINK_TRAINING 0x800 /* Link Training */
#define PCIE_LINKSTS_SLOT_CLK_CFG 0x1000 /* Slot Clock Configuration */
-
-/* PCIe v1.1 spec based */
#define PCIE_LINKSTS_DLL_LINK_ACTIVE 0x2000 /* DLL Link Active */
+#define PCIE_LINKSTS_LINK_BW_MGMT 0x4000 /* Link bw mgmt status */
+#define PCIE_LINKSTS_AUTO_BW 0x8000 /* Link auto BW status */
/*
* Slot Capability Register (4 bytes)
@@ -311,6 +349,7 @@ extern "C" {
#define PCIE_SLOTCTL_PWR_CONTROL 0x0400 /* Power controller Control */
#define PCIE_SLOTCTL_EMI_LOCK_CONTROL 0x0800 /* EMI Lock control */
#define PCIE_SLOTCTL_DLL_STATE_EN 0x1000 /* DLL State Changed En */
+#define PCIE_SLOTCTL_AUTO_SLOT_PL_DIS 0x2000 /* Auto Slot Power Limit Dis */
#define PCIE_SLOTCTL_ATTN_INDICATOR_MASK 0x00C0 /* Attn Indicator mask */
#define PCIE_SLOTCTL_PWR_INDICATOR_MASK 0x0300 /* Power Indicator mask */
#define PCIE_SLOTCTL_INTR_MASK 0x103f /* Supported intr mask */
@@ -354,6 +393,12 @@ extern "C" {
#define PCIE_ROOTCTL_SYS_ERR_ON_NFE_EN 0x2 /* Sys Err on NF Err Enable */
#define PCIE_ROOTCTL_SYS_ERR_ON_FE_EN 0x4 /* Sys Err on Fatal Err En */
#define PCIE_ROOTCTL_PME_INTERRUPT_EN 0x8 /* PME Interrupt Enable */
+#define PCIE_ROOTCTL_CRS_SW_VIS_EN 0x10 /* CRS SW Visibility EN */
+
+/*
+ * Root Capabilities register (2 bytes)
+ */
+#define PCIE_ROOTCAP_CRS_SW_VIS 0x01 /* CRS SW Visible */
/*
* Root Status Register (4 bytes)
@@ -378,14 +423,25 @@ extern "C" {
#define PCIE_DEVCAP2_LTR_MECH 0x800
#define PCIE_DEVCAP2_TPH_COMP_SHIFT 12
#define PCIE_DEVCAP2_TPH_COMP_MASK 0x3
+#define PCIE_DEVCAP2_LNSYS_CLS_SHIFT 14
+#define PCIE_DEVCAP2_LNSYS_CLS_MASK 0x3
+#define PCIE_DEVCAP2_10B_TAG_COMP_SUP 0x10000
+#define PCIE_DEVCAP2_10B_TAG_REQ_SUP 0x20000
+#define PCIE_DEVCAP2_OBFF_SHIFT 18
+#define PCIE_DEVCAP2_OBFF_MASK 0x3
#define PCIE_DEVCAP2_EXT_FMT_FIELD 0x100000
#define PCIE_DEVCAP2_END_END_TLP_PREFIX 0x200000
#define PCIE_DEVCAP2_MAX_END_END_SHIFT 22
#define PCIE_DEVCAP2_MAX_END_END_MASK 0x3
+#define PCIE_DEVCAP2_EPR_SUP_SHIFT 24
+#define PCIE_DEVCAP2_EPR_SUP_MASK 0x3
+#define PCIE_DEVCAP2_EPR_INIT_REQ 0x4000000
+#define PCIE_DEVCAP2_FRS_SUP 0x80000000
/*
* Device Control 2 Register (2 bytes)
*/
+#define PCIE_DEVCTL2_COM_TO_RANGE_MASK 0xf
#define PCIE_DEVCTL2_COM_TO_RANGE_0 0x0
#define PCIE_DEVCTL2_COM_TO_RANGE_1 0x1
#define PCIE_DEVCTL2_COM_TO_RANGE_2 0x2
@@ -402,11 +458,65 @@ extern "C" {
#define PCIE_DEVCTL2_IDO_REQ_EN 0x100
#define PCIE_DEVCTL2_IDO_COMPL_EN 0x200
#define PCIE_DEVCTL2_LTR_MECH_EN 0x400
+#define PCIE_DEVCTL2_EPR_REQ 0x800
+#define PCIE_DEVCTL2_10BTAG_REQ_EN 0x1000
+#define PCIE_DEVCTL2_OBFF_MASK 0x6000
+#define PCIE_DEVCTL2_OBFF_DISABLE 0x0000
+#define PCIE_DEVCTL2_OBFF_EN_VARA 0x2000
+#define PCIE_DEVCTL2_OBFF_EN_VARB 0x4000
+#define PCIE_DEVCTL2_OBFF_EN_WAKE 0x6000
#define PCIE_DEVCTL2_END_END_TLP_PREFIX 0x8000
-
-
+/*
+ * Link Capability 2 Register (4 bytes)
+ */
+#define PCIE_LINKCAP2_SPEED_2_5 0x02
+#define PCIE_LINKCAP2_SPEED_5 0x04
+#define PCIE_LINKCAP2_SPEED_8 0x08
+#define PCIE_LINKCAP2_SPEED_16 0x10
+#define PCIE_LINKCAP2_SPEED_MASK 0xfe
+#define PCIE_LINKCAP2_CROSSLINK 0x100
+#define PCIE_LINKCAP2_LSKP_OSGSS_MASK 0xfe00
+#define PCIE_LINKCAP2_LKSP_OSGSS_2_5 0x0200
+#define PCIE_LINKCAP2_LKSP_OSGSS_5 0x0400
+#define PCIE_LINKCAP2_LKSP_OSGSS_8 0x0800
+#define PCIE_LINKCAP2_LKSP_OSGSS_16 0x1000
+#define PCIE_LINKCAP2_LKSP_OSRSS_MASK 0x7f0000
+#define PCIE_LINKCAP2_LKSP_OSRSS_2_5 0x010000
+#define PCIE_LINKCAP2_LKSP_OSRSS_5 0x020000
+#define PCIE_LINKCAP2_LKSP_OSRSS_8 0x040000
+#define PCIE_LINKCAP2_LKSP_OSRSS_16 0x080000
+#define PCIE_LINKCAP2_RTPD_SUP 0x800000
+#define PCIE_LINKCAP2_TRTPD_SUP 0x01000000
+#define PCIE_LINKCAP2_DRS 0x80000000
+
+/*
+ * Link Control 2 Register (2 bytes)
+ */
+#define PCIE_LINKCTL2_TARGET_SPEED_MASK 0x000f
+#define PICE_LINKCTL2_ENTER_COMPLIANCE 0x0010
+#define PCIE_LINKCTL2_HW_AUTO_SPEED_DIS 0x0020
+#define PCIE_LINKCTL2_SELECT_DEEMPH 0x0040
+#define PCIE_LINKCTL2_TX_MARGIN_MASK 0x0380
+#define PCIE_LINKCTL2_ENTER_MOD_COMP 0x0400
+#define PCIE_LINKCTL2_COMP_SOS 0x0800
+#define PCIE_LINKCTL2_COMP_DEEMPM_MASK 0xf000
+
+/*
+ * Link Status 2 Register (2 bytes)
+ */
+#define PCIE_LINKSTS2_CUR_DEEMPH 0x0001
+#define PCIE_LINKSTS2_EQ8GT_COMP 0x0002
+#define PCIE_LINKSTS2_EQ8GT_P1_SUC 0x0004
+#define PCIE_LINKSTS2_EQ8GT_P2_SUC 0x0008
+#define PCIE_LINKSTS2_EQ8GT_P3_SUC 0x0010
+#define PCIE_LINKSTS2_LINK_EQ_REQ 0x0020
+#define PCIE_LINKSTS2_RETIMER_PRES_DET 0x0040
+#define PCIE_LINKSTS2_2RETIMER_PRES_DET 0x0080
+#define PCIE_LINKSTS2_XLINK_RES 0x0300
+#define PCIE_LINKSTS2_DS_COMP_PRES_MASK 0x7000
+#define PCIE_LINKSTS2_DRS_MSG_RX 0x8000
/*
* PCI-Express Enhanced Capabilities Link Entry Bit Offsets
@@ -441,6 +551,28 @@ extern "C" {
#define PCIE_EXT_CAP_ID_ACS 0xD /* Access Control Services */
#define PCIE_EXT_CAP_ID_ARI 0xE /* Alternative Routing ID */
#define PCIE_EXT_CAP_ID_ATS 0xF /* Address Translation Svcs */
+#define PCIE_EXT_CAP_ID_SRIOV 0x10 /* Single Root I/O Virt. */
+#define PCIE_EXT_CAP_ID_MRIOV 0x11 /* Multi Root I/O Virt. */
+#define PCIE_EXT_CAP_ID_MULTICAST 0x12 /* Multicast Services */
+#define PCIE_EXT_CAP_ID_EA 0x14 /* Enhanced Allocation */
+#define PCIE_EXT_CAP_ID_RESIZE_BAR 0x15 /* Resizable BAR */
+#define PCIE_EXT_CAP_ID_DPA 0x16 /* Dynamic Power Allocation */
+#define PCIE_EXT_CAP_ID_TPH_REQ 0x17 /* TPH Requester */
+#define PCIE_EXT_CAP_ID_LTR 0x18 /* Latency Tolerance Report */
+#define PCIE_EXT_CAP_ID_PCIE2 0x19 /* PCI Express Capability 2 */
+#define PCIE_EXT_CAP_ID_PASID 0x1B /* PASID */
+#define PCIE_EXT_CAP_ID_LNR 0x1C /* LNR */
+#define PCIE_EXT_CAP_ID_DPC 0x1D /* DPC */
+#define PCIE_EXT_CAP_ID_L1PM 0x1E /* L1 PM Substrates */
+#define PCIE_EXT_CAP_ID_PTM 0x1F /* Precision Time Management */
+#define PCIE_EXT_CAP_ID_FRS 0x21 /* Function Ready Stat. Queue */
+#define PCIE_EXT_CAP_ID_RTR 0x22 /* Readiness Time Reporting */
+#define PCIE_EXT_CAP_ID_DVS 0x23 /* Designated Vendor-Specific */
+#define PCIE_EXT_CAP_ID_DLF 0x25 /* Data Link Feature */
+#define PCIE_EXT_CAP_ID_PL16GTE 0x26 /* Physical Layer 16.0 GT/s */
+#define PCIE_EXT_CAP_ID_LANE_MARGIN 0x27 /* Lane Margining */
+#define PCIE_EXT_CAP_ID_HIEARCHY_ID 0x28 /* Hierarchy ID */
+#define PCIE_EXT_CAP_ID_NPEM 0x29 /* Native PCIe Enclosure Mgmt */
/*
* PCI-Express Advanced Error Reporting Extended Capability Offsets
@@ -545,10 +677,10 @@ extern "C" {
* AER Secondary Uncorrectable Error Register
*/
#define PCIE_AER_SUCE_TA_ON_SC 0x1 /* Target Abort on Split Comp */
-#define PCIE_AER_SUCE_MA_ON_SC 0x2 /* Master Abort on Split Comp */
+#define PCIE_AER_SUCE_MA_ON_SC 0x2 /* Master Abort on Split Comp */
#define PCIE_AER_SUCE_RCVD_TA 0x4 /* Received Target Abort */
-#define PCIE_AER_SUCE_RCVD_MA 0x8 /* Received Master Abort */
-#define PCIE_AER_SUCE_USC_ERR 0x20 /* Unexpected Split Comp Err */
+#define PCIE_AER_SUCE_RCVD_MA 0x8 /* Received Master Abort */
+#define PCIE_AER_SUCE_USC_ERR 0x20 /* Unexpected Split Comp Err */
#define PCIE_AER_SUCE_USC_MSG_DATA_ERR 0x40 /* USC Message Data Error */
#define PCIE_AER_SUCE_UC_DATA_ERR 0x80 /* Uncorrectable Data Error */
#define PCIE_AER_SUCE_UC_ATTR_ERR 0x100 /* UC Attribute Err */