xref: /titanic_52/usr/src/uts/intel/io/pciex/pcie_nvidia.h (revision 0db3240d392634cfff2f95fb6da34b56b8dc574f)
1ae115bc7Smrj /*
2ae115bc7Smrj  * CDDL HEADER START
3ae115bc7Smrj  *
4ae115bc7Smrj  * The contents of this file are subject to the terms of the
5ae115bc7Smrj  * Common Development and Distribution License (the "License").
6ae115bc7Smrj  * You may not use this file except in compliance with the License.
7ae115bc7Smrj  *
8ae115bc7Smrj  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9ae115bc7Smrj  * or http://www.opensolaris.org/os/licensing.
10ae115bc7Smrj  * See the License for the specific language governing permissions
11ae115bc7Smrj  * and limitations under the License.
12ae115bc7Smrj  *
13ae115bc7Smrj  * When distributing Covered Code, include this CDDL HEADER in each
14ae115bc7Smrj  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15ae115bc7Smrj  * If applicable, add the following below this CDDL HEADER, with the
16ae115bc7Smrj  * fields enclosed by brackets "[]" replaced with your own identifying
17ae115bc7Smrj  * information: Portions Copyright [yyyy] [name of copyright owner]
18ae115bc7Smrj  *
19ae115bc7Smrj  * CDDL HEADER END
20ae115bc7Smrj  */
21ae115bc7Smrj 
22ae115bc7Smrj /*
23*0db3240dSStephen Hanson  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
24ae115bc7Smrj  */
25ae115bc7Smrj 
26ae115bc7Smrj #ifndef	_PCIEX_PCI_NVIDIA_H
27ae115bc7Smrj #define	_PCIEX_PCI_NVIDIA_H
28ae115bc7Smrj 
29ae115bc7Smrj #ifdef	__cplusplus
30ae115bc7Smrj extern "C" {
31ae115bc7Smrj #endif
32ae115bc7Smrj 
33ae115bc7Smrj /*
34ae115bc7Smrj  * PCI Configuration (Nvidia, PCIe) related library functions
35ae115bc7Smrj  */
36c0da6274SZhi-Jun Robin Fu boolean_t	look_for_any_pciex_device(uchar_t);
37ae115bc7Smrj boolean_t	check_if_device_is_pciex(dev_info_t *, uchar_t, uchar_t,
38*0db3240dSStephen Hanson 		    uchar_t, boolean_t *, ushort_t *, ushort_t *);
39ae115bc7Smrj boolean_t	create_pcie_root_bus(uchar_t, dev_info_t *);
40ae115bc7Smrj void		add_nvidia_isa_bridge_props(dev_info_t *, uchar_t, uchar_t,
41ae115bc7Smrj 		    uchar_t);
42ae115bc7Smrj 
43ae115bc7Smrj /* Generic Nvidia chipset IDs and defines */
44ae115bc7Smrj #define	NVIDIA_VENDOR_ID			0x10de	/* Nvidia Vendor Id */
45ae115bc7Smrj #define	NVIDIA_INTR_BCR_OFF			0x3C	/* NV_XVR_INTR_BCR */
46ae115bc7Smrj #define	NVIDIA_INTR_BCR_SERR_FORWARD_BIT	0x02	/* SERR_FORWARD bit */
47ae115bc7Smrj 
48ae115bc7Smrj /* CK8-04 PCIe RC and LPC-PCI Bridge device IDs */
49ae115bc7Smrj #define	NVIDIA_CK804_DEVICE_ID			0x5d	/* ck8-04 dev id */
50ae115bc7Smrj #define	NVIDIA_CK804_DEFAULT_ISA_BRIDGE_DEVID	0x50	/* LPC Default Bridge */
51ae115bc7Smrj #define	NVIDIA_CK804_PRO_ISA_BRIDGE_DEVID	0x51	/* LPC Bridge */
52ae115bc7Smrj #define	NVIDIA_CK804_SLAVE_ISA_BRIDGE_DEVID	0xd3	/* Slave LPC Bridge */
53ae115bc7Smrj #define	NVIDIA_CK804_AER_VALID_REVID		0xa3	/* RID w/ AER enabled */
54ae115bc7Smrj 
55ae115bc7Smrj #define	NVIDIA_CK804_LPC2PCI_DEVICE_ID(did) \
56ae115bc7Smrj 	(((did) == NVIDIA_CK804_DEFAULT_ISA_BRIDGE_DEVID) || \
57ae115bc7Smrj 	((did) == NVIDIA_CK804_PRO_ISA_BRIDGE_DEVID) || \
58ae115bc7Smrj 	((did) == NVIDIA_CK804_SLAVE_ISA_BRIDGE_DEVID))
59ae115bc7Smrj 
60ae115bc7Smrj /*
61ae115bc7Smrj  * Only for Nvidia's CrushK 8-04 chipsets:
62ae115bc7Smrj  *	To enable hotplug; we need to map in two I/O BARs
63ae115bc7Smrj  *	from ISA bridge's config space
64ae115bc7Smrj  */
65ae115bc7Smrj #define	NVIDIA_CK804_ISA_SYSCTRL_BAR_OFF	0x64	/* System Control BAR */
66ae115bc7Smrj #define	NVIDIA_CK804_ISA_ANALOG_BAR_OFF		0x68	/* Analog BAR */
67ae115bc7Smrj 
68ae115bc7Smrj /* NV_XVR_VEND_CYA1 related defines */
69ae115bc7Smrj #define	NVIDIA_CK804_VEND_CYA1_OFF		0xf40	/* NV_XVR_VEND_CYA1 */
70ae115bc7Smrj #define	NVIDIA_CK804_VEND_CYA1_ERPT_VAL		0x2000	/* enable CYA1 ERPT */
71ae115bc7Smrj #define	NVIDIA_CK804_VEND_CYA1_ERPT_MASK	0xdfff	/* CYA1 ERPT mask */
72ae115bc7Smrj 
73ae115bc7Smrj /*
74ae115bc7Smrj  * C51 related defines
75ae115bc7Smrj  */
76ae115bc7Smrj 
77ae115bc7Smrj /* C51 PCIe Root Complex Device ID defines */
78ae115bc7Smrj #define	NVIDIA_C51_DEVICE_ID_XVR16		0x2fb
79ae115bc7Smrj #define	NVIDIA_C51_DEVICE_ID_XVR1_0		0x2fc
80ae115bc7Smrj #define	NVIDIA_C51_DEVICE_ID_XVR1_1		0x2fd
81ae115bc7Smrj 
82ae115bc7Smrj #define	NVIDIA_C51_DEVICE_ID(did) \
83ae115bc7Smrj 	(((did) == NVIDIA_C51_DEVICE_ID_XVR16) || \
84ae115bc7Smrj 	((did) == NVIDIA_C51_DEVICE_ID_XVR1_0) || \
85ae115bc7Smrj 	((did) == NVIDIA_C51_DEVICE_ID_XVR1_1))
86ae115bc7Smrj 
87ae115bc7Smrj /*
88ae115bc7Smrj  * MCP55 related defines
89ae115bc7Smrj  */
90ae115bc7Smrj 
91ae115bc7Smrj /* MCP55 PCIe Root Complex Device ID defines */
92ae115bc7Smrj #define	NVIDIA_MCP55_DEVICE_ID_XVR4		0x374
93ae115bc7Smrj #define	NVIDIA_MCP55_DEVICE_ID_XVR8		0x375
94ae115bc7Smrj #define	NVIDIA_MCP55_DEVICE_ID_XVR8_VC1		0x376
95ae115bc7Smrj #define	NVIDIA_MCP55_DEVICE_ID_XVR16		0x377
96ae115bc7Smrj #define	NVIDIA_MCP55_DEVICE_ID_XVR4_VC1		0x378
97ae115bc7Smrj 
98ae115bc7Smrj #define	NVIDIA_MCP55_DEVICE_ID(did) \
99ae115bc7Smrj 	(((did) == NVIDIA_MCP55_DEVICE_ID_XVR4) || \
100ae115bc7Smrj 	((did) == NVIDIA_MCP55_DEVICE_ID_XVR8) || \
101ae115bc7Smrj 	((did) == NVIDIA_MCP55_DEVICE_ID_XVR16) || \
102ae115bc7Smrj 	((did) == NVIDIA_MCP55_DEVICE_ID_XVR4_VC1) || \
103ae115bc7Smrj 	((did) == NVIDIA_MCP55_DEVICE_ID_XVR8_VC1))
104ae115bc7Smrj 
105ae115bc7Smrj /* MCP55 LPC-PCI Bridge Device ID defines */
106ae115bc7Smrj #define	NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP0	0x360
107ae115bc7Smrj #define	NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP1	0x361
108ae115bc7Smrj #define	NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP2	0x362
109ae115bc7Smrj #define	NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP3	0x363
110ae115bc7Smrj #define	NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP4	0x364
111ae115bc7Smrj #define	NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP5	0x365
112ae115bc7Smrj #define	NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP6	0x366
113ae115bc7Smrj #define	NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP7	0x367
114ae115bc7Smrj 
115ae115bc7Smrj #define	NVIDIA_MCP55_LPC2PCI_DEVICE_ID(did) \
116ae115bc7Smrj 	(((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP0) || \
117ae115bc7Smrj 	((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP1) || \
118ae115bc7Smrj 	((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP2) || \
119ae115bc7Smrj 	((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP3) || \
120ae115bc7Smrj 	((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP4) || \
121ae115bc7Smrj 	((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP5) || \
122ae115bc7Smrj 	((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP6) || \
123ae115bc7Smrj 	((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP7))
124ae115bc7Smrj 
125ae115bc7Smrj /*
126ae115bc7Smrj  * MCP61 related defines
127ae115bc7Smrj  */
128ae115bc7Smrj 
129ae115bc7Smrj /* MCP61 PCIe Root Complex Device ID defines */
130ae115bc7Smrj #define	NVIDIA_MCP61_DEVICE_ID_XVR4		0x3e8
131ae115bc7Smrj #define	NVIDIA_MCP61_DEVICE_ID_XVR8		0x3e9
132ae115bc7Smrj 
133ae115bc7Smrj #define	NVIDIA_MCP61_DEVICE_ID(did) \
134ae115bc7Smrj 	(((did) == NVIDIA_MCP61_DEVICE_ID_XVR4) || \
135ae115bc7Smrj 	((did) == NVIDIA_MCP61_DEVICE_ID_XVR8))
136ae115bc7Smrj 
137ae115bc7Smrj /*
138ae115bc7Smrj  * MCP65 related defines
139ae115bc7Smrj  */
140ae115bc7Smrj 
141ae115bc7Smrj /* MCP65 PCIe Root Complex Device ID defines */
142ae115bc7Smrj #define	NVIDIA_MCP65_DEVICE_ID_XVR4		0x458
143ae115bc7Smrj #define	NVIDIA_MCP65_DEVICE_ID_XVR8		0x459
144ae115bc7Smrj #define	NVIDIA_MCP65_DEVICE_ID_XVR16		0x45a
145ae115bc7Smrj 
146ae115bc7Smrj #define	NVIDIA_MCP65_DEVICE_ID(did) \
147ae115bc7Smrj 	(((did) == NVIDIA_MCP65_DEVICE_ID_XVR4) || \
148ae115bc7Smrj 	((did) == NVIDIA_MCP65_DEVICE_ID_XVR8) || \
149ae115bc7Smrj 	((did) == NVIDIA_MCP65_DEVICE_ID_XVR16))
150ae115bc7Smrj 
151ae115bc7Smrj /*
152ae115bc7Smrj  * Check if the given device is a Nvidia's LPC bridge
153ae115bc7Smrj  */
154ae115bc7Smrj #define	NVIDIA_IS_LPC_BRIDGE(vid, did) \
155ae115bc7Smrj 	    (((vid) == NVIDIA_VENDOR_ID) && \
156ae115bc7Smrj 	    (NVIDIA_CK804_LPC2PCI_DEVICE_ID(did) || \
157ae115bc7Smrj 	    NVIDIA_MCP55_LPC2PCI_DEVICE_ID(did)))
158ae115bc7Smrj 
159ae115bc7Smrj /* Check for PCIe RC Device ID */
160ae115bc7Smrj #define	NVIDIA_PCIE_RC_DEV_ID(did) \
161ae115bc7Smrj 	    (((did) == NVIDIA_CK804_DEVICE_ID) || \
162ae115bc7Smrj 	    NVIDIA_C51_DEVICE_ID(did) || \
163ae115bc7Smrj 	    NVIDIA_MCP55_DEVICE_ID(did) || \
164ae115bc7Smrj 	    NVIDIA_MCP61_DEVICE_ID(did) || \
165ae115bc7Smrj 	    NVIDIA_MCP65_DEVICE_ID(did))
166ae115bc7Smrj 
167ae115bc7Smrj /*
168ae115bc7Smrj  * Defines to figure out what kind of hotplug is supported
169ae115bc7Smrj  */
170ae115bc7Smrj #define	INBAND_HPC_NONE		0x0	/* No hotplug supported */
171ae115bc7Smrj #define	INBAND_HPC_PCIE		0x1	/* PCIe based hotplug supported */
172ae115bc7Smrj #define	INBAND_HPC_SHPC		0x2	/* SHPC based hotplug supported */
173ae115bc7Smrj 
174ae115bc7Smrj #ifdef	__cplusplus
175ae115bc7Smrj }
176ae115bc7Smrj #endif
177ae115bc7Smrj 
178ae115bc7Smrj #endif	/* _PCIEX_PCI_NVIDIA_H */
179