xref: /onnv-gate/usr/src/uts/intel/io/pciex/pcie_nvidia.h (revision 12054:bcacc803343d)
13446Smrj /*
23446Smrj  * CDDL HEADER START
33446Smrj  *
43446Smrj  * The contents of this file are subject to the terms of the
53446Smrj  * Common Development and Distribution License (the "License").
63446Smrj  * You may not use this file except in compliance with the License.
73446Smrj  *
83446Smrj  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
93446Smrj  * or http://www.opensolaris.org/os/licensing.
103446Smrj  * See the License for the specific language governing permissions
113446Smrj  * and limitations under the License.
123446Smrj  *
133446Smrj  * When distributing Covered Code, include this CDDL HEADER in each
143446Smrj  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
153446Smrj  * If applicable, add the following below this CDDL HEADER, with the
163446Smrj  * fields enclosed by brackets "[]" replaced with your own identifying
173446Smrj  * information: Portions Copyright [yyyy] [name of copyright owner]
183446Smrj  *
193446Smrj  * CDDL HEADER END
203446Smrj  */
213446Smrj 
223446Smrj /*
23*12054SStephen.Hanson@Sun.COM  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
243446Smrj  */
253446Smrj 
263446Smrj #ifndef	_PCIEX_PCI_NVIDIA_H
273446Smrj #define	_PCIEX_PCI_NVIDIA_H
283446Smrj 
293446Smrj #ifdef	__cplusplus
303446Smrj extern "C" {
313446Smrj #endif
323446Smrj 
333446Smrj /*
343446Smrj  * PCI Configuration (Nvidia, PCIe) related library functions
353446Smrj  */
3611245SZhijun.Fu@Sun.COM boolean_t	look_for_any_pciex_device(uchar_t);
373446Smrj boolean_t	check_if_device_is_pciex(dev_info_t *, uchar_t, uchar_t,
38*12054SStephen.Hanson@Sun.COM 		    uchar_t, boolean_t *, ushort_t *, ushort_t *);
393446Smrj boolean_t	create_pcie_root_bus(uchar_t, dev_info_t *);
403446Smrj void		add_nvidia_isa_bridge_props(dev_info_t *, uchar_t, uchar_t,
413446Smrj 		    uchar_t);
423446Smrj 
433446Smrj /* Generic Nvidia chipset IDs and defines */
443446Smrj #define	NVIDIA_VENDOR_ID			0x10de	/* Nvidia Vendor Id */
453446Smrj #define	NVIDIA_INTR_BCR_OFF			0x3C	/* NV_XVR_INTR_BCR */
463446Smrj #define	NVIDIA_INTR_BCR_SERR_FORWARD_BIT	0x02	/* SERR_FORWARD bit */
473446Smrj 
483446Smrj /* CK8-04 PCIe RC and LPC-PCI Bridge device IDs */
493446Smrj #define	NVIDIA_CK804_DEVICE_ID			0x5d	/* ck8-04 dev id */
503446Smrj #define	NVIDIA_CK804_DEFAULT_ISA_BRIDGE_DEVID	0x50	/* LPC Default Bridge */
513446Smrj #define	NVIDIA_CK804_PRO_ISA_BRIDGE_DEVID	0x51	/* LPC Bridge */
523446Smrj #define	NVIDIA_CK804_SLAVE_ISA_BRIDGE_DEVID	0xd3	/* Slave LPC Bridge */
533446Smrj #define	NVIDIA_CK804_AER_VALID_REVID		0xa3	/* RID w/ AER enabled */
543446Smrj 
553446Smrj #define	NVIDIA_CK804_LPC2PCI_DEVICE_ID(did) \
563446Smrj 	(((did) == NVIDIA_CK804_DEFAULT_ISA_BRIDGE_DEVID) || \
573446Smrj 	((did) == NVIDIA_CK804_PRO_ISA_BRIDGE_DEVID) || \
583446Smrj 	((did) == NVIDIA_CK804_SLAVE_ISA_BRIDGE_DEVID))
593446Smrj 
603446Smrj /*
613446Smrj  * Only for Nvidia's CrushK 8-04 chipsets:
623446Smrj  *	To enable hotplug; we need to map in two I/O BARs
633446Smrj  *	from ISA bridge's config space
643446Smrj  */
653446Smrj #define	NVIDIA_CK804_ISA_SYSCTRL_BAR_OFF	0x64	/* System Control BAR */
663446Smrj #define	NVIDIA_CK804_ISA_ANALOG_BAR_OFF		0x68	/* Analog BAR */
673446Smrj 
683446Smrj /* NV_XVR_VEND_CYA1 related defines */
693446Smrj #define	NVIDIA_CK804_VEND_CYA1_OFF		0xf40	/* NV_XVR_VEND_CYA1 */
703446Smrj #define	NVIDIA_CK804_VEND_CYA1_ERPT_VAL		0x2000	/* enable CYA1 ERPT */
713446Smrj #define	NVIDIA_CK804_VEND_CYA1_ERPT_MASK	0xdfff	/* CYA1 ERPT mask */
723446Smrj 
733446Smrj /*
743446Smrj  * C51 related defines
753446Smrj  */
763446Smrj 
773446Smrj /* C51 PCIe Root Complex Device ID defines */
783446Smrj #define	NVIDIA_C51_DEVICE_ID_XVR16		0x2fb
793446Smrj #define	NVIDIA_C51_DEVICE_ID_XVR1_0		0x2fc
803446Smrj #define	NVIDIA_C51_DEVICE_ID_XVR1_1		0x2fd
813446Smrj 
823446Smrj #define	NVIDIA_C51_DEVICE_ID(did) \
833446Smrj 	(((did) == NVIDIA_C51_DEVICE_ID_XVR16) || \
843446Smrj 	((did) == NVIDIA_C51_DEVICE_ID_XVR1_0) || \
853446Smrj 	((did) == NVIDIA_C51_DEVICE_ID_XVR1_1))
863446Smrj 
873446Smrj /*
883446Smrj  * MCP55 related defines
893446Smrj  */
903446Smrj 
913446Smrj /* MCP55 PCIe Root Complex Device ID defines */
923446Smrj #define	NVIDIA_MCP55_DEVICE_ID_XVR4		0x374
933446Smrj #define	NVIDIA_MCP55_DEVICE_ID_XVR8		0x375
943446Smrj #define	NVIDIA_MCP55_DEVICE_ID_XVR8_VC1		0x376
953446Smrj #define	NVIDIA_MCP55_DEVICE_ID_XVR16		0x377
963446Smrj #define	NVIDIA_MCP55_DEVICE_ID_XVR4_VC1		0x378
973446Smrj 
983446Smrj #define	NVIDIA_MCP55_DEVICE_ID(did) \
993446Smrj 	(((did) == NVIDIA_MCP55_DEVICE_ID_XVR4) || \
1003446Smrj 	((did) == NVIDIA_MCP55_DEVICE_ID_XVR8) || \
1013446Smrj 	((did) == NVIDIA_MCP55_DEVICE_ID_XVR16) || \
1023446Smrj 	((did) == NVIDIA_MCP55_DEVICE_ID_XVR4_VC1) || \
1033446Smrj 	((did) == NVIDIA_MCP55_DEVICE_ID_XVR8_VC1))
1043446Smrj 
1053446Smrj /* MCP55 LPC-PCI Bridge Device ID defines */
1063446Smrj #define	NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP0	0x360
1073446Smrj #define	NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP1	0x361
1083446Smrj #define	NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP2	0x362
1093446Smrj #define	NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP3	0x363
1103446Smrj #define	NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP4	0x364
1113446Smrj #define	NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP5	0x365
1123446Smrj #define	NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP6	0x366
1133446Smrj #define	NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP7	0x367
1143446Smrj 
1153446Smrj #define	NVIDIA_MCP55_LPC2PCI_DEVICE_ID(did) \
1163446Smrj 	(((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP0) || \
1173446Smrj 	((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP1) || \
1183446Smrj 	((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP2) || \
1193446Smrj 	((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP3) || \
1203446Smrj 	((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP4) || \
1213446Smrj 	((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP5) || \
1223446Smrj 	((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP6) || \
1233446Smrj 	((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP7))
1243446Smrj 
1253446Smrj /*
1263446Smrj  * MCP61 related defines
1273446Smrj  */
1283446Smrj 
1293446Smrj /* MCP61 PCIe Root Complex Device ID defines */
1303446Smrj #define	NVIDIA_MCP61_DEVICE_ID_XVR4		0x3e8
1313446Smrj #define	NVIDIA_MCP61_DEVICE_ID_XVR8		0x3e9
1323446Smrj 
1333446Smrj #define	NVIDIA_MCP61_DEVICE_ID(did) \
1343446Smrj 	(((did) == NVIDIA_MCP61_DEVICE_ID_XVR4) || \
1353446Smrj 	((did) == NVIDIA_MCP61_DEVICE_ID_XVR8))
1363446Smrj 
1373446Smrj /*
1383446Smrj  * MCP65 related defines
1393446Smrj  */
1403446Smrj 
1413446Smrj /* MCP65 PCIe Root Complex Device ID defines */
1423446Smrj #define	NVIDIA_MCP65_DEVICE_ID_XVR4		0x458
1433446Smrj #define	NVIDIA_MCP65_DEVICE_ID_XVR8		0x459
1443446Smrj #define	NVIDIA_MCP65_DEVICE_ID_XVR16		0x45a
1453446Smrj 
1463446Smrj #define	NVIDIA_MCP65_DEVICE_ID(did) \
1473446Smrj 	(((did) == NVIDIA_MCP65_DEVICE_ID_XVR4) || \
1483446Smrj 	((did) == NVIDIA_MCP65_DEVICE_ID_XVR8) || \
1493446Smrj 	((did) == NVIDIA_MCP65_DEVICE_ID_XVR16))
1503446Smrj 
1513446Smrj /*
1523446Smrj  * Check if the given device is a Nvidia's LPC bridge
1533446Smrj  */
1543446Smrj #define	NVIDIA_IS_LPC_BRIDGE(vid, did) \
1553446Smrj 	    (((vid) == NVIDIA_VENDOR_ID) && \
1563446Smrj 	    (NVIDIA_CK804_LPC2PCI_DEVICE_ID(did) || \
1573446Smrj 	    NVIDIA_MCP55_LPC2PCI_DEVICE_ID(did)))
1583446Smrj 
1593446Smrj /* Check for PCIe RC Device ID */
1603446Smrj #define	NVIDIA_PCIE_RC_DEV_ID(did) \
1613446Smrj 	    (((did) == NVIDIA_CK804_DEVICE_ID) || \
1623446Smrj 	    NVIDIA_C51_DEVICE_ID(did) || \
1633446Smrj 	    NVIDIA_MCP55_DEVICE_ID(did) || \
1643446Smrj 	    NVIDIA_MCP61_DEVICE_ID(did) || \
1653446Smrj 	    NVIDIA_MCP65_DEVICE_ID(did))
1663446Smrj 
1673446Smrj /*
1683446Smrj  * Defines to figure out what kind of hotplug is supported
1693446Smrj  */
1703446Smrj #define	INBAND_HPC_NONE		0x0	/* No hotplug supported */
1713446Smrj #define	INBAND_HPC_PCIE		0x1	/* PCIe based hotplug supported */
1723446Smrj #define	INBAND_HPC_SHPC		0x2	/* SHPC based hotplug supported */
1733446Smrj 
1743446Smrj #ifdef	__cplusplus
1753446Smrj }
1763446Smrj #endif
1773446Smrj 
1783446Smrj #endif	/* _PCIEX_PCI_NVIDIA_H */
179