xref: /onnv-gate/usr/src/uts/intel/io/intel_nb5000/nb5000.h (revision 10668:e0d0c98c8bae)
17532SSean.Ye@Sun.COM /*
27532SSean.Ye@Sun.COM  * CDDL HEADER START
37532SSean.Ye@Sun.COM  *
47532SSean.Ye@Sun.COM  * The contents of this file are subject to the terms of the
57532SSean.Ye@Sun.COM  * Common Development and Distribution License (the "License").
67532SSean.Ye@Sun.COM  * You may not use this file except in compliance with the License.
77532SSean.Ye@Sun.COM  *
87532SSean.Ye@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97532SSean.Ye@Sun.COM  * or http://www.opensolaris.org/os/licensing.
107532SSean.Ye@Sun.COM  * See the License for the specific language governing permissions
117532SSean.Ye@Sun.COM  * and limitations under the License.
127532SSean.Ye@Sun.COM  *
137532SSean.Ye@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
147532SSean.Ye@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157532SSean.Ye@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
167532SSean.Ye@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
177532SSean.Ye@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
187532SSean.Ye@Sun.COM  *
197532SSean.Ye@Sun.COM  * CDDL HEADER END
207532SSean.Ye@Sun.COM  */
217532SSean.Ye@Sun.COM 
227532SSean.Ye@Sun.COM /*
239783SAdrian.Frost@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
247532SSean.Ye@Sun.COM  * Use is subject to license terms.
257532SSean.Ye@Sun.COM  */
267532SSean.Ye@Sun.COM 
277532SSean.Ye@Sun.COM #ifndef _NB5000_H
287532SSean.Ye@Sun.COM #define	_NB5000_H
297532SSean.Ye@Sun.COM 
307532SSean.Ye@Sun.COM #ifdef __cplusplus
317532SSean.Ye@Sun.COM extern "C" {
327532SSean.Ye@Sun.COM #endif
337532SSean.Ye@Sun.COM 
347532SSean.Ye@Sun.COM #include <sys/cpu_module.h>
357532SSean.Ye@Sun.COM 
367532SSean.Ye@Sun.COM #define	NB_5000_MAX_MEM_CONTROLLERS	2
3710049SVuong.Nguyen@Sun.COM #define	NB_MAX_DIMMS_PER_CHANNEL	(nb_chipset == INTEL_NB_5100 ? 3 : \
3810049SVuong.Nguyen@Sun.COM 	(nb_chipset == INTEL_NB_7300 ? 8 : 4))
3910049SVuong.Nguyen@Sun.COM #define	NB_MAX_CHANNELS_PER_BRANCH	2
4010049SVuong.Nguyen@Sun.COM #define	NB_5100_RANKS_PER_CHANNEL	6
4110049SVuong.Nguyen@Sun.COM #define	NB_MEM_BRANCH_SELECT \
4210049SVuong.Nguyen@Sun.COM 	(nb_chipset == INTEL_NB_5400 || nb_chipset == INTEL_NB_5100 ? 2 : 3)
437532SSean.Ye@Sun.COM #define	NB_MAX_MEM_BRANCH_SELECT	3
447532SSean.Ye@Sun.COM #define	NB_MEM_RANK_SELECT		(nb_chipset == INTEL_NB_7300 ? 7 : 5)
457532SSean.Ye@Sun.COM #define	NB_MAX_MEM_RANK_SELECT		7
467532SSean.Ye@Sun.COM #define	NB_RANKS_IN_SELECT		4
477532SSean.Ye@Sun.COM #define	NB_PCI_DEV			10
487532SSean.Ye@Sun.COM 
497532SSean.Ye@Sun.COM #define	NB_PCI_NFUNC	4
507532SSean.Ye@Sun.COM 
517532SSean.Ye@Sun.COM #define	DOCMD_PEX_MASK	0x00
527532SSean.Ye@Sun.COM #define	DOCMD_5400_PEX_MASK	0x000
537532SSean.Ye@Sun.COM #define	DOCMD_PEX	0xf0
547532SSean.Ye@Sun.COM #define	DOCMD_5400_PEX	0xff0
557532SSean.Ye@Sun.COM 
567532SSean.Ye@Sun.COM #define	SPD_BUSY	0x1000
577532SSean.Ye@Sun.COM #define	SPD_BUS_ERROR	0x2000
587532SSean.Ye@Sun.COM #define	SPD_READ_DATA_VALID	0x8000
597532SSean.Ye@Sun.COM #define	SPD_EEPROM_WRITE	0xa8000000
607532SSean.Ye@Sun.COM #define	SPD_ADDR(slave, addr) ((((slave) & 7) << 24) | (((addr) & 0xff) << 16))
617532SSean.Ye@Sun.COM 
627532SSean.Ye@Sun.COM #define	MC_MIRROR	0x10000
637532SSean.Ye@Sun.COM #define	MC_PATROL_SCRUB	0x80
647532SSean.Ye@Sun.COM #define	MC_DEMAND_SCRUB	0x40
657532SSean.Ye@Sun.COM 
667532SSean.Ye@Sun.COM #define	MCA_SCHDIMM	0x4000
677532SSean.Ye@Sun.COM 
687532SSean.Ye@Sun.COM #define	TLOW_MAX	0x100000000ULL
697532SSean.Ye@Sun.COM 
707532SSean.Ye@Sun.COM #define	MTR_PRESENT(mtr) \
7110049SVuong.Nguyen@Sun.COM 	((mtr) & (nb_chipset == INTEL_NB_5400 || nb_chipset == INTEL_NB_5100 ? \
7210049SVuong.Nguyen@Sun.COM 	0x0400 : 0x0100))
737532SSean.Ye@Sun.COM #define	MTR_ETHROTTLE(mtr) \
7410049SVuong.Nguyen@Sun.COM 	((mtr) & (nb_chipset == INTEL_NB_5400 || nb_chipset == INTEL_NB_5100 ? \
7510049SVuong.Nguyen@Sun.COM 	? 0x0200 : 0x0080))
767532SSean.Ye@Sun.COM #define	MTR_WIDTH(mtr) \
7710049SVuong.Nguyen@Sun.COM 	((mtr) & (nb_chipset == INTEL_NB_5400 || nb_chipset == INTEL_NB_5100 ? \
7810049SVuong.Nguyen@Sun.COM 	0x0100 : 0x0040) ? 8 : 4)
797532SSean.Ye@Sun.COM #define	MTR_NUMBANK(mtr) \
8010049SVuong.Nguyen@Sun.COM 	((mtr) & (nb_chipset == INTEL_NB_5400 || nb_chipset == INTEL_NB_5100 ? \
8110049SVuong.Nguyen@Sun.COM 	0x0040 : 0x0020) ? 8 : 4)
8210049SVuong.Nguyen@Sun.COM #define	MTR_NUMRANK(mtr) (nb_chipset == INTEL_NB_5100 ? 1 : \
8310049SVuong.Nguyen@Sun.COM 	(((mtr) & (nb_chipset == INTEL_NB_5400 ? 0x0020 : 0x0010)) ? 2 : 1))
847532SSean.Ye@Sun.COM #define	MTR_NUMROW(mtr) ((((mtr) >> 2) & 3) + 13)
857532SSean.Ye@Sun.COM #define	MTR_NUMCOL(mtr) (((mtr) & 3) + 10)
867532SSean.Ye@Sun.COM 
877532SSean.Ye@Sun.COM #define	MTR_DIMMSIZE(mtr) 	((1ULL << (MTR_NUMCOL(mtr) + MTR_NUMROW(mtr))) \
887532SSean.Ye@Sun.COM 	* MTR_NUMRANK(mtr) * MTR_NUMBANK(mtr) * MTR_WIDTH(mtr))
8910049SVuong.Nguyen@Sun.COM #define	DIMMSIZE(nrow, ncol, nrank, nbank, width) \
9010049SVuong.Nguyen@Sun.COM 	((1ULL << ((ncol) + (nrow))) * (nrank) * (nbank) * (width))
9110049SVuong.Nguyen@Sun.COM #define	MTR_DDR2_DIMMSIZE(mtr, nrank) \
9210049SVuong.Nguyen@Sun.COM 	((1ULL << (MTR_NUMCOL(mtr) + MTR_NUMROW(mtr))) \
9310049SVuong.Nguyen@Sun.COM 	* (nrank) * MTR_NUMBANK(mtr) * MTR_WIDTH(mtr))
947532SSean.Ye@Sun.COM 
957532SSean.Ye@Sun.COM /* FERR_GLOBAL and NERR_GLOBAL */
967532SSean.Ye@Sun.COM #define	GE_FERR_FSB3_FATAL	0x800000000ULL	/* FSB3 Fatal Error */
977532SSean.Ye@Sun.COM #define	GE_FERR_FSB2_FATAL	0x400000000ULL	/* FSB2 Fatal Error */
987532SSean.Ye@Sun.COM #define	GE_FERR_FSB3_NF	0x200000000ULL	/* FSB3 Non-Fatal Error */
997532SSean.Ye@Sun.COM #define	GE_FERR_FSB2_NF	0x100000000ULL	/* FSB2 Non-Fatal Error */
1007532SSean.Ye@Sun.COM 
1017532SSean.Ye@Sun.COM #define	GE_INT_FATAL	0x80000000	/* North Bridge Internal Error */
1027532SSean.Ye@Sun.COM #define	GE_DMA_FATAL	0x40000000	/* DMA engine Fatal Error */
1037532SSean.Ye@Sun.COM #define	GE_FSB1_FATAL	0x20000000	/* FSB1 Fatal Error */
1047532SSean.Ye@Sun.COM #define	GE_FSB0_FATAL	0x10000000	/* FSB0 Fatal Error */
1057532SSean.Ye@Sun.COM #define	GE_FERR_FBD_FATAL	0x08000000	/* FBD channel Fatal Error */
1067532SSean.Ye@Sun.COM #define	GE_FERR_FBD3_FATAL	0x08000000	/* FBD3 channel Fatal Error */
1077532SSean.Ye@Sun.COM #define	GE_FERR_FBD2_FATAL	0x04000000	/* FBD2 channel Fatal Error */
1087532SSean.Ye@Sun.COM #define	GE_FERR_FBD1_FATAL	0x02000000	/* FBD1 channel Fatal Error */
1097532SSean.Ye@Sun.COM #define	GE_FERR_FBD0_FATAL	0x01000000	/* FBD0 channel Fatal Error */
1107532SSean.Ye@Sun.COM #define	GE_FERR_THERMAL_FATAL	0x04000000	/* Thermal Fatal Error */
1117532SSean.Ye@Sun.COM #define	GE_PCIEX9_FATAL	0x02000000	/* PCI Express device 9 Fatal Error */
1127532SSean.Ye@Sun.COM #define	GE_PCIEX8_FATAL	0x01000000	/* PCI Express device 8 Fatal Error */
1137532SSean.Ye@Sun.COM #define	GE_PCIEX7_FATAL	0x00800000	/* PCI Express device 7 Fatal Error */
1147532SSean.Ye@Sun.COM #define	GE_PCIEX6_FATAL	0x00400000	/* PCI Express device 6 Fatal Error */
1157532SSean.Ye@Sun.COM #define	GE_PCIEX5_FATAL	0x00200000	/* PCI Express device 5 Fatal Error */
1167532SSean.Ye@Sun.COM #define	GE_PCIEX4_FATAL	0x00100000	/* PCI Express device 4 Fatal Error */
1177532SSean.Ye@Sun.COM #define	GE_PCIEX3_FATAL	0x00080000	/* PCI Express device 3 Fatal Error */
1187532SSean.Ye@Sun.COM #define	GE_PCIEX2_FATAL	0x00040000	/* PCI Express device 2 Fatal Error */
1197532SSean.Ye@Sun.COM #define	GE_PCIEX1_FATAL	0x00020000	/* PCI Express device 1 Fatal Error */
1207532SSean.Ye@Sun.COM #define	GE_ESI_FATAL	0x00010000	/* ESI Fatal Error */
1217532SSean.Ye@Sun.COM #define	GE_INT_NF	0x00008000	/* North Bridge Internal Error */
1227532SSean.Ye@Sun.COM #define	GE_DMA_NF	0x00004000	/* DMA engine Non-Fatal Error */
1237532SSean.Ye@Sun.COM #define	GE_FSB1_NF	0x00002000	/* FSB1 Non-Fatal Error */
1247532SSean.Ye@Sun.COM #define	GE_FSB0_NF	0x00001000	/* FSB0 Non-Fatal Error */
1257532SSean.Ye@Sun.COM #define	GE_FERR_FBD3_NF	0x00000800	/* FBD channel 3 Non-Fatal Error */
1267532SSean.Ye@Sun.COM #define	GE_FERR_FBD2_NF	0x00000400	/* FBD channel 2 Non-Fatal Error */
1277532SSean.Ye@Sun.COM #define	GE_FERR_FBD1_NF	0x00000200	/* FBD channel 1 Non-Fatal Error */
1287532SSean.Ye@Sun.COM #define	GE_FERR_FBD0_NF	0x00000100	/* FBD channel 0 Non-Fatal Error */
1297532SSean.Ye@Sun.COM #define	GE_FERR_FBD_NF	0x00000800	/* FBD channel Non-Fatal Error */
13010049SVuong.Nguyen@Sun.COM #define	GE_FERR_MEM1_NF	0x00000200	/* DDR channel 1 Non-Fatal Error */
13110049SVuong.Nguyen@Sun.COM #define	GE_FERR_MEM0_NF	0x00000100	/* DDR channel 0 Non-Fatal Error */
1327532SSean.Ye@Sun.COM #define	GE_FERR_THERMAL_NF 0x00000400	/* Thermal Non-Fatal Error */
1337532SSean.Ye@Sun.COM #define	GE_PCIEX9_NF	0x00000200	/* PCI Express dev 9 Non-Fatal Error */
1347532SSean.Ye@Sun.COM #define	GE_PCIEX8_NF	0x00000100	/* PCI Express dev 8 Non-Fatal Error */
1357532SSean.Ye@Sun.COM #define	GE_PCIEX7_NF	0x00000080	/* PCI Express dev 7 Non-Fatal Error */
1367532SSean.Ye@Sun.COM #define	GE_PCIEX6_NF	0x00000040	/* PCI Express dev 6 Non-Fatal Error */
1377532SSean.Ye@Sun.COM #define	GE_PCIEX5_NF	0x00000020	/* PCI Express dev 5 Non-Fatal Error */
1387532SSean.Ye@Sun.COM #define	GE_PCIEX4_NF	0x00000010	/* PCI Express dev 4 Non-Fatal Error */
1397532SSean.Ye@Sun.COM #define	GE_PCIEX3_NF	0x00000008	/* PCI Express dev 3 Non-Fatal Error */
1407532SSean.Ye@Sun.COM #define	GE_PCIEX2_NF	0x00000004	/* PCI Express dev 2 Non-Fatal Error */
1417532SSean.Ye@Sun.COM #define	GE_PCIEX1_NF	0x00000002	/* PCI Express dev 1 Non-Fatal Error */
1427532SSean.Ye@Sun.COM #define	GE_ESI_NF	0x00000001	/* ESI Non-Fatal Error */
1437532SSean.Ye@Sun.COM 
1447532SSean.Ye@Sun.COM #define	GE_NERR_FSB2_FATAL	0x08000000 /* FSB2 Fatal Error */
1457532SSean.Ye@Sun.COM #define	GE_NERR_FSB3_FATAL	0x04000000 /* FSB3 Fatal Error */
14610049SVuong.Nguyen@Sun.COM #define	GE_NERR_FBD_FATAL	(nb_chipset == INTEL_NB_5100 ? 0 : 0x01000000)
14710049SVuong.Nguyen@Sun.COM 					/* FBD channel Fatal Error */
1487532SSean.Ye@Sun.COM #define	GE_NERR_FSB2_NF		0x00000800 /* FSB2 Non-Fatal Error */
1497532SSean.Ye@Sun.COM #define	GE_NERR_FSB3_NF		0x00000400 /* FSB3 Non-Fatal Error */
15010049SVuong.Nguyen@Sun.COM #define	GE_NERR_FBD_NF		(nb_chipset == INTEL_NB_5100 ? 0 : 0x00000100)
15110049SVuong.Nguyen@Sun.COM 					/* FBD channel Non-Fatal Error */
15210049SVuong.Nguyen@Sun.COM #define	GE_NERR_MEM_NF		(nb_chipset == INTEL_NB_5100 ? 0x00000100 : 0)
15310049SVuong.Nguyen@Sun.COM 					/* DDR channel0,1 Non-Fatal Error */
1547532SSean.Ye@Sun.COM #define	ERR_FAT_FSB_F9		0x20	/* F9Msk FSB Protocol */
1557532SSean.Ye@Sun.COM #define	ERR_FAT_FSB_F2		0x08	/* F2Msk Unsupported Bus Transaction */
1567532SSean.Ye@Sun.COM #define	ERR_FAT_FSB_F1		0x01 	/* F1Msk Request/Address Parity */
1577532SSean.Ye@Sun.COM 
1587532SSean.Ye@Sun.COM #define	ERR_NF_FSB_F7		0x04	/* F7Msk Detected MCERR */
1597532SSean.Ye@Sun.COM #define	ERR_NF_FSB_F8		0x02	/* F8Msk B-INIT */
1607532SSean.Ye@Sun.COM #define	ERR_NF_FSB_F6		0x01	/* F6Msk Data Parity */
1617532SSean.Ye@Sun.COM 
1627532SSean.Ye@Sun.COM #define	EMASK_FSB_F1		0x0001 	/* F1Msk Request/Address Parity */
1637532SSean.Ye@Sun.COM #define	EMASK_FSB_F2		0x0002	/* F2Msk Unsupported Bus Transaction */
1647532SSean.Ye@Sun.COM #define	EMASK_FSB_F6		0x0020	/* F6Msk Data Parity */
1657532SSean.Ye@Sun.COM #define	EMASK_FSB_F7		0x0040	/* F7Msk Detected MCERR */
1667532SSean.Ye@Sun.COM #define	EMASK_FSB_F8		0x0080	/* F8Msk B-INIT */
1677532SSean.Ye@Sun.COM #define	EMASK_FSB_F9		0x0100	/* F9Msk FSB Protocol */
1687532SSean.Ye@Sun.COM 
1697532SSean.Ye@Sun.COM #define	EMASK_FSB_FATAL		(EMASK_FSB_F1 | EMASK_FSB_F2 | EMASK_FSB_F9)
1707532SSean.Ye@Sun.COM #define	EMASK_FSB_NF		(EMASK_FSB_F6 | EMASK_FSB_F7 | EMASK_FSB_F8)
1717532SSean.Ye@Sun.COM 
1727532SSean.Ye@Sun.COM #define	ERR_FBD_CH_SHIFT	28 /* channel index in fat_fbd and nf_fbd */
1737532SSean.Ye@Sun.COM 
1747532SSean.Ye@Sun.COM #define	ERR_FAT_FBD_M23	0x00400000	/* M23Err Non-Redundant Fast Reset */
1757532SSean.Ye@Sun.COM 					/* Timeout */
1767532SSean.Ye@Sun.COM #define	ERR_FAT_FBD_M3	0x00000004	/* M3Err >Tmid thermal event with */
1777532SSean.Ye@Sun.COM 					/* intelligent throttling disabled */
1787532SSean.Ye@Sun.COM #define	ERR_FAT_FBD_M2	0x00000002	/* M2Err memory or FBD configuration */
1797532SSean.Ye@Sun.COM 					/* CRC read error */
1807532SSean.Ye@Sun.COM #define	ERR_FAT_FBD_M1	0x00000001	/* M1Err memory write error on */
1817532SSean.Ye@Sun.COM 					/* non-redundant retry or FBD */
1827532SSean.Ye@Sun.COM 					/* configuration write error on retry */
1837532SSean.Ye@Sun.COM #define	ERR_FAT_FBD_MASK 0x007fffff
1847532SSean.Ye@Sun.COM 
1857532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M29	0x02000000	/* M29Err DIMM-Isolation Completed */
1867532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M28	0x01000000	/* M28Err DIMM-Spare Copy Completed */
1877532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M27	0x00800000	/* M27Err DIMM-Spare Copy Initiated */
1887532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M26	0x00400000	/* M26Err Redundant Fast Reset */
1897532SSean.Ye@Sun.COM 					/* Timeout */
1907532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M25	0x00200000	/* M25Err Memory write error on */
1917532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M24	0x00100000	/* M24Err refresh error */
1927532SSean.Ye@Sun.COM 					/* redundant retry */
1937532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M22	0x00040000	/* M22Err SPD protocol */
1947532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M21	0x00020000	/* M21Err FBD Northbound parity on */
1957532SSean.Ye@Sun.COM 					/* FBD sync status */
1967532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M20	0x00010000	/* M20Err Correctable patrol data ECC */
1977532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M19	0x00008000	/* M19Err Correctasble resilver or */
1987532SSean.Ye@Sun.COM 					/* spare-copy data ECC */
1997532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M18	0x00004000	/* M18Err Correctable Mirrored demand */
2007532SSean.Ye@Sun.COM 					/* data ECC */
2017532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M17	0x00002000	/* M17Err Correctable Non-mirrored */
2027532SSean.Ye@Sun.COM 					/* demand data ECC */
2037532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M16	0x00001000	/* M16Err channel failed over */
2047532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M15	0x00000800	/* M15Err Memory or FBD configuration */
2057532SSean.Ye@Sun.COM 					/* CRC read error */
2067532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M14	0x00000400	/* M14Err FBD configuration write */
2077532SSean.Ye@Sun.COM 					/* error on first attempt */
2087532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M13	0x00000200	/* M13Err Memory write error on first */
2097532SSean.Ye@Sun.COM 					/* attempt */
2107532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M12	0x00000100	/* M12Err Non-Aliased uncorrectable */
2117532SSean.Ye@Sun.COM 					/* patrol data ECC */
2127532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M11	0x00000080	/* M11Err Non-Aliased uncorrectable */
2137532SSean.Ye@Sun.COM 					/* resilver or spare copy data ECC */
2147532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M10	0x00000040	/* M10Err Non-Aliased uncorrectable */
2157532SSean.Ye@Sun.COM 					/* mirrored demand data ECC */
2167532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M9	0x00000020	/* M9Err Non-Aliased uncorrectable */
2177532SSean.Ye@Sun.COM 					/* non-mirrored demand data ECC */
2187532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M8	0x00000010	/* M8Err Aliased uncorrectable */
2197532SSean.Ye@Sun.COM 					/* patrol data ECC */
2207532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M7	0x00000008	/* M7Err Aliased uncorrectable */
2217532SSean.Ye@Sun.COM 					/* resilver or spare copy data ECC */
2227532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M6	0x00000004	/* M6Err Aliased uncorrectable */
2237532SSean.Ye@Sun.COM 					/* mirrored demand data ECC */
2247532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M5	0x00000002	/* M5Err Aliased uncorrectable */
2257532SSean.Ye@Sun.COM 					/* non-mirrored demand data ECC */
2267532SSean.Ye@Sun.COM #define	ERR_NF_FBD_M4	0x00000001	/* M4Err uncorrectable data ECC on */
2277532SSean.Ye@Sun.COM 					/* replay */
2287532SSean.Ye@Sun.COM 
22910199SVuong.Nguyen@Sun.COM #define	ERR_DEFAULT_NF_FBD_MASK	0x01ffffff
23010199SVuong.Nguyen@Sun.COM #define	ERR_5000_NF_FBD_MASK	(ERR_NF_FBD_M28|ERR_NF_FBD_M27|ERR_NF_FBD_M22| \
23110199SVuong.Nguyen@Sun.COM     ERR_NF_FBD_M21|ERR_NF_FBD_M20|ERR_NF_FBD_M19|ERR_NF_FBD_M18| \
23210199SVuong.Nguyen@Sun.COM     ERR_NF_FBD_M17|ERR_NF_FBD_M15|ERR_NF_FBD_M14|ERR_NF_FBD_M13| \
23310199SVuong.Nguyen@Sun.COM     ERR_NF_FBD_M12|ERR_NF_FBD_M11|ERR_NF_FBD_M10|ERR_NF_FBD_M9|ERR_NF_FBD_M8| \
23410199SVuong.Nguyen@Sun.COM     ERR_NF_FBD_M7|ERR_NF_FBD_M6|ERR_NF_FBD_M5|ERR_NF_FBD_M4)
23510199SVuong.Nguyen@Sun.COM #define	ERR_5400_NF_FBD_MASK	(ERR_NF_FBD_M29|ERR_NF_FBD_M28|ERR_NF_FBD_M27| \
23610199SVuong.Nguyen@Sun.COM     ERR_NF_FBD_M26|ERR_NF_FBD_M25|ERR_NF_FBD_M24|ERR_NF_FBD_M22| \
23710199SVuong.Nguyen@Sun.COM     ERR_NF_FBD_M21|ERR_NF_FBD_M20|ERR_NF_FBD_M19|ERR_NF_FBD_M18| \
23810199SVuong.Nguyen@Sun.COM     ERR_NF_FBD_M17|ERR_NF_FBD_M16|ERR_NF_FBD_M15|ERR_NF_FBD_M14| \
23910199SVuong.Nguyen@Sun.COM     ERR_NF_FBD_M13|ERR_NF_FBD_M12|ERR_NF_FBD_M11|ERR_NF_FBD_M10| \
24010199SVuong.Nguyen@Sun.COM     ERR_NF_FBD_M9|ERR_NF_FBD_M8|ERR_NF_FBD_M7|ERR_NF_FBD_M6|ERR_NF_FBD_M5| \
24110199SVuong.Nguyen@Sun.COM     ERR_NF_FBD_M4)
24210199SVuong.Nguyen@Sun.COM #define	ERR_7300_NF_FBD_MASK	(ERR_NF_FBD_M28|ERR_NF_FBD_M27|ERR_NF_FBD_M26| \
24310199SVuong.Nguyen@Sun.COM     ERR_NF_FBD_M25|ERR_NF_FBD_M22|ERR_NF_FBD_M21|ERR_NF_FBD_M20| \
24410199SVuong.Nguyen@Sun.COM     ERR_NF_FBD_M19|ERR_NF_FBD_M18|ERR_NF_FBD_M17|ERR_NF_FBD_M15| \
24510199SVuong.Nguyen@Sun.COM     ERR_NF_FBD_M14|ERR_NF_FBD_M13|ERR_NF_FBD_M12|ERR_NF_FBD_M11| \
24610199SVuong.Nguyen@Sun.COM     ERR_NF_FBD_M10|ERR_NF_FBD_M9|ERR_NF_FBD_M8|ERR_NF_FBD_M7|ERR_NF_FBD_M6| \
24710199SVuong.Nguyen@Sun.COM     ERR_NF_FBD_M5|ERR_NF_FBD_M4)
24810199SVuong.Nguyen@Sun.COM 
24910199SVuong.Nguyen@Sun.COM /* Bitmask of the FB-DIMM non-fatal errors */
25010199SVuong.Nguyen@Sun.COM #define	ERR_NF_FBD_MASK ( \
25110199SVuong.Nguyen@Sun.COM 	(nb_chipset == INTEL_NB_5000P || nb_chipset == INTEL_NB_5000V || \
25210199SVuong.Nguyen@Sun.COM 	nb_chipset == INTEL_NB_5000X || nb_chipset == INTEL_NB_5000Z) ? \
25310199SVuong.Nguyen@Sun.COM 	ERR_5000_NF_FBD_MASK : \
25410199SVuong.Nguyen@Sun.COM 	nb_chipset == INTEL_NB_5400 ? ERR_5400_NF_FBD_MASK : \
25510199SVuong.Nguyen@Sun.COM 	nb_chipset == INTEL_NB_7300 ? ERR_7300_NF_FBD_MASK : \
25610199SVuong.Nguyen@Sun.COM 	ERR_DEFAULT_NF_FBD_MASK)
25710199SVuong.Nguyen@Sun.COM 
2587532SSean.Ye@Sun.COM #define	ERR_NF_FBD_ECC_UE	(ERR_NF_FBD_M12|ERR_NF_FBD_M11|ERR_NF_FBD_M10| \
2597532SSean.Ye@Sun.COM     ERR_NF_FBD_M9|ERR_NF_FBD_M8|ERR_NF_FBD_M7|ERR_NF_FBD_M6|ERR_NF_FBD_M5| \
2607532SSean.Ye@Sun.COM     ERR_NF_FBD_M4)
2617532SSean.Ye@Sun.COM #define	ERR_NF_FBD_MA	(ERR_NF_FBD_M14)
2627532SSean.Ye@Sun.COM #define	ERR_NF_FBD_ECC_CE	(ERR_NF_FBD_M20|ERR_NF_FBD_M19|ERR_NF_FBD_M18| \
2637532SSean.Ye@Sun.COM     ERR_NF_FBD_M17|ERR_NF_FBD_M15|ERR_NF_FBD_M21)
2647532SSean.Ye@Sun.COM #define	ERR_NF_FBD_SPARE (ERR_NF_FBD_M28|ERR_NF_FBD_M27)
2657532SSean.Ye@Sun.COM 
2667532SSean.Ye@Sun.COM #define	EMASK_FBD_M29	0x10000000	/* M29Err DIMM-Isolation Completed */
2677532SSean.Ye@Sun.COM #define	EMASK_FBD_M28	0x08000000	/* M28Err DIMM-Spare Copy Completed */
2687532SSean.Ye@Sun.COM #define	EMASK_FBD_M27	0x04000000	/* M27Err DIMM-Spare Copy Initiated */
2697532SSean.Ye@Sun.COM #define	EMASK_FBD_M26	0x02000000	/* M26Err Redundant Fast Reset */
2707532SSean.Ye@Sun.COM 					/* Timeout */
2717532SSean.Ye@Sun.COM #define	EMASK_FBD_M25	0x01000000	/* M25Err Memory write error on */
2727532SSean.Ye@Sun.COM 					/* redundant retry */
2737532SSean.Ye@Sun.COM #define	EMASK_FBD_M24	0x00800000	/* M24Err refresh error */
2747532SSean.Ye@Sun.COM #define	EMASK_FBD_M23	0x00400000	/* M23Err Non-Redundant Fast Reset */
2757532SSean.Ye@Sun.COM 					/* Timeout */
2767532SSean.Ye@Sun.COM #define	EMASK_FBD_M22	0x00200000	/* M22Err SPD protocol */
2777532SSean.Ye@Sun.COM #define	EMASK_FBD_M21	0x00100000	/* M21Err FBD Northbound parity on */
2787532SSean.Ye@Sun.COM 					/* FBD sync status */
2797532SSean.Ye@Sun.COM #define	EMASK_FBD_M20	0x00080000	/* M20Err Correctable patrol data ECC */
2807532SSean.Ye@Sun.COM #define	EMASK_FBD_M19	0x00040000	/* M19Err Correctasble resilver or */
2817532SSean.Ye@Sun.COM 					/* spare-copy data ECC */
2827532SSean.Ye@Sun.COM #define	EMASK_FBD_M18	0x00020000	/* M18Err Correctable Mirrored demand */
2837532SSean.Ye@Sun.COM 					/* data ECC */
2847532SSean.Ye@Sun.COM #define	EMASK_FBD_M17	0x00010000	/* M17Err Correctable Non-mirrored */
2857532SSean.Ye@Sun.COM 					/* demand data ECC */
2867532SSean.Ye@Sun.COM #define	EMASK_FBD_M16	0x00008000	/* M16Err channel failed over */
2877532SSean.Ye@Sun.COM #define	EMASK_FBD_M15	0x00004000	/* M15Err Memory or FBD configuration */
2887532SSean.Ye@Sun.COM 					/* CRC read error */
2897532SSean.Ye@Sun.COM #define	EMASK_FBD_M14	0x00002000	/* M14Err FBD configuration write */
2907532SSean.Ye@Sun.COM 					/* error on first attempt */
2917532SSean.Ye@Sun.COM #define	EMASK_FBD_M13	0x00001000	/* M13Err Memory write error on first */
2927532SSean.Ye@Sun.COM 					/* attempt */
2937532SSean.Ye@Sun.COM #define	EMASK_FBD_M12	0x00000800	/* M12Err Non-Aliased uncorrectable */
2947532SSean.Ye@Sun.COM 					/* patrol data ECC */
2957532SSean.Ye@Sun.COM #define	EMASK_FBD_M11	0x00000400	/* M11Err Non-Aliased uncorrectable */
2967532SSean.Ye@Sun.COM 					/* resilver or spare copy data ECC */
2977532SSean.Ye@Sun.COM #define	EMASK_FBD_M10	0x00000200	/* M10Err Non-Aliased uncorrectable */
2987532SSean.Ye@Sun.COM 					/* mirrored demand data ECC */
2997532SSean.Ye@Sun.COM #define	EMASK_FBD_M9	0x00000100	/* M9Err Non-Aliased uncorrectable */
3007532SSean.Ye@Sun.COM 					/* non-mirrored demand data ECC */
3017532SSean.Ye@Sun.COM #define	EMASK_FBD_M8	0x00000080	/* M8Err Aliased uncorrectable */
3027532SSean.Ye@Sun.COM 					/* patrol data ECC */
3037532SSean.Ye@Sun.COM #define	EMASK_FBD_M7	0x00000040	/* M7Err Aliased uncorrectable */
3047532SSean.Ye@Sun.COM 					/* resilver or spare copy data ECC */
3057532SSean.Ye@Sun.COM #define	EMASK_FBD_M6	0x00000020	/* M6Err Aliased uncorrectable */
3067532SSean.Ye@Sun.COM 					/* mirrored demand data ECC */
3077532SSean.Ye@Sun.COM #define	EMASK_FBD_M5	0x00000010	/* M5Err Aliased uncorrectable */
3087532SSean.Ye@Sun.COM 					/* non-mirrored demand data ECC */
3097532SSean.Ye@Sun.COM #define	EMASK_FBD_M4	0x00000008	/* M4Err uncorrectable data ECC on */
3107532SSean.Ye@Sun.COM 					/* replay */
3117532SSean.Ye@Sun.COM #define	EMASK_FBD_M3	0x00000004	/* M3Err >Tmid thermal event with */
3127532SSean.Ye@Sun.COM 					/* intelligent throttling disabled */
3137532SSean.Ye@Sun.COM #define	EMASK_FBD_M2	0x00000002	/* M2Err memory or FBD configuration */
3147532SSean.Ye@Sun.COM 					/* CRC read error */
3157532SSean.Ye@Sun.COM #define	EMASK_FBD_M1	0x00000001	/* M1Err memory write error on */
3167532SSean.Ye@Sun.COM 					/* non-redundant retry or FBD */
3177532SSean.Ye@Sun.COM 					/* configuration write error on retry */
3187532SSean.Ye@Sun.COM /* MCH 7300 errata 34 (reserved mask bits) */
3197532SSean.Ye@Sun.COM #define	EMASK_5000_FBD_RES	(EMASK_FBD_M24|EMASK_FBD_M16)
3207532SSean.Ye@Sun.COM #define	EMASK_FBD_RES	(nb_chipset == INTEL_NB_5400 ? 0 : EMASK_5000_FBD_RES)
3217532SSean.Ye@Sun.COM 
322*10668SVuong.Nguyen@Sun.COM #define	EMASK_FBD_FATAL	(EMASK_FBD_M3|EMASK_FBD_M2|EMASK_FBD_M1)
3237532SSean.Ye@Sun.COM #define	EMASK_FBD_NF (EMASK_FBD_M28|EMASK_FBD_M27|EMASK_FBD_M26|EMASK_FBD_M25| \
3247532SSean.Ye@Sun.COM 	EMASK_FBD_M22|EMASK_FBD_M21|EMASK_FBD_M20|EMASK_FBD_M19|EMASK_FBD_M18| \
3257532SSean.Ye@Sun.COM 	EMASK_FBD_M17|EMASK_FBD_M15|EMASK_FBD_M14|EMASK_FBD_M13|EMASK_FBD_M12| \
3267532SSean.Ye@Sun.COM 	EMASK_FBD_M11|EMASK_FBD_M10|EMASK_FBD_M9|EMASK_FBD_M8|EMASK_FBD_M7| \
3277532SSean.Ye@Sun.COM 	EMASK_FBD_M6|EMASK_FBD_M5|EMASK_FBD_M4)
3287532SSean.Ye@Sun.COM #define	EMASK_5400_FBD_FATAL	(EMASK_FBD_M23|EMASK_FBD_M2|EMASK_FBD_M1)
3297532SSean.Ye@Sun.COM #define	EMASK_5400_FBD_NF (EMASK_FBD_M29|EMASK_FBD_M28|EMASK_FBD_M27| \
3307532SSean.Ye@Sun.COM 	EMASK_FBD_M26|EMASK_FBD_M25|EMASK_FBD_M24|EMASK_FBD_M22|EMASK_FBD_M21| \
3317532SSean.Ye@Sun.COM 	EMASK_FBD_M20|EMASK_FBD_M19|EMASK_FBD_M18|EMASK_FBD_M17|EMASK_FBD_M16| \
3327532SSean.Ye@Sun.COM 	EMASK_FBD_M15|EMASK_FBD_M14|EMASK_FBD_M13|EMASK_FBD_M12| \
3337532SSean.Ye@Sun.COM 	EMASK_FBD_M11|EMASK_FBD_M10|EMASK_FBD_M9|EMASK_FBD_M8|EMASK_FBD_M7| \
3347532SSean.Ye@Sun.COM 	EMASK_FBD_M6|EMASK_FBD_M5|EMASK_FBD_M4)
335*10668SVuong.Nguyen@Sun.COM #define	EMASK_7300_FBD_FATAL	(EMASK_FBD_M23|EMASK_FBD_M3|EMASK_FBD_M2| \
336*10668SVuong.Nguyen@Sun.COM 	EMASK_FBD_M1)
337*10668SVuong.Nguyen@Sun.COM #define	EMASK_7300_FBD_NF	EMASK_FBD_NF
3387532SSean.Ye@Sun.COM 
33910049SVuong.Nguyen@Sun.COM /* FERR_NF_MEM: MC First non-fatal errors */
34010049SVuong.Nguyen@Sun.COM #define	ERR_MEM_CH_SHIFT	28	/* channel index in nf_mem */
34110049SVuong.Nguyen@Sun.COM 
34210049SVuong.Nguyen@Sun.COM #define	ERR_NF_MEM_M21	0x00200000	/* M21Err Spare Copy Completed */
34310049SVuong.Nguyen@Sun.COM #define	ERR_NF_MEM_M20	0x00100000	/* M20Err Spare Copy Initiated */
34410049SVuong.Nguyen@Sun.COM #define	ERR_NF_MEM_M18	0x00040000	/* M18Err SPD protocal */
34510049SVuong.Nguyen@Sun.COM #define	ERR_NF_MEM_M16	0x00010000	/* M16Err Correctable Patrol Data ECC */
34610049SVuong.Nguyen@Sun.COM #define	ERR_NF_MEM_M15	0x00008000	/* M15Err Correctable Spare-copy ECC */
34710049SVuong.Nguyen@Sun.COM #define	ERR_NF_MEM_M14	0x00004000	/* M14Err Correctable demand data ECC */
34810049SVuong.Nguyen@Sun.COM #define	ERR_NF_MEM_M12	0x00001000	/* M12Err non-aliased ue Patrol ECC */
34910049SVuong.Nguyen@Sun.COM #define	ERR_NF_MEM_M11	0x00000800	/* M11Err non-aliased ue  Spare-copy */
35010049SVuong.Nguyen@Sun.COM #define	ERR_NF_MEM_M10	0x00000400	/* M10Err non-aliased ue demand data */
35110049SVuong.Nguyen@Sun.COM #define	ERR_NF_MEM_M6	0x00000040	/* M6Err aliased ue Patrol Data ECC */
35210049SVuong.Nguyen@Sun.COM #define	ERR_NF_MEM_M5	0x00000020	/* M5Err aliased ue Spare-copy ECC */
35310049SVuong.Nguyen@Sun.COM #define	ERR_NF_MEM_M4	0x00000010	/* M4Err aliased ue demand data ECC */
35410049SVuong.Nguyen@Sun.COM #define	ERR_NF_MEM_M1	0x00000002	/* M1Err ue data ECC on replay */
35510049SVuong.Nguyen@Sun.COM 
35610049SVuong.Nguyen@Sun.COM #define	ERR_NF_MEM_MASK 0x0003fffff
35710049SVuong.Nguyen@Sun.COM #define	ERR_NF_MEM_ECC_UE	(ERR_NF_MEM_M12|ERR_NF_MEM_M11|ERR_NF_MEM_M10| \
35810049SVuong.Nguyen@Sun.COM     ERR_NF_MEM_M6|ERR_NF_MEM_M5|ERR_NF_MEM_M4|ERR_NF_MEM_M1)
35910049SVuong.Nguyen@Sun.COM #define	ERR_NF_MEM_ECC_CE	(ERR_NF_MEM_M16|ERR_NF_MEM_M15|ERR_NF_MEM_M14)
36010049SVuong.Nguyen@Sun.COM #define	ERR_NF_MEM_SPARE	(ERR_NF_MEM_M21|ERR_NF_MEM_M20)
36110049SVuong.Nguyen@Sun.COM 
36210049SVuong.Nguyen@Sun.COM #define	EMASK_MEM_M21	ERR_NF_MEM_M21
36310049SVuong.Nguyen@Sun.COM #define	EMASK_MEM_M20	ERR_NF_MEM_M20
36410049SVuong.Nguyen@Sun.COM #define	EMASK_MEM_M18	ERR_NF_MEM_M18
36510049SVuong.Nguyen@Sun.COM #define	EMASK_MEM_M16	ERR_NF_MEM_M16
36610049SVuong.Nguyen@Sun.COM #define	EMASK_MEM_M15	ERR_NF_MEM_M15
36710049SVuong.Nguyen@Sun.COM #define	EMASK_MEM_M14	ERR_NF_MEM_M14
36810049SVuong.Nguyen@Sun.COM #define	EMASK_MEM_M12	ERR_NF_MEM_M12
36910049SVuong.Nguyen@Sun.COM #define	EMASK_MEM_M11	ERR_NF_MEM_M11
37010049SVuong.Nguyen@Sun.COM #define	EMASK_MEM_M10	ERR_NF_MEM_M10
37110049SVuong.Nguyen@Sun.COM #define	EMASK_MEM_M6	ERR_NF_MEM_M6
37210049SVuong.Nguyen@Sun.COM #define	EMASK_MEM_M5	ERR_NF_MEM_M5
37310049SVuong.Nguyen@Sun.COM #define	EMASK_MEM_M4	ERR_NF_MEM_M4
37410049SVuong.Nguyen@Sun.COM #define	EMASK_MEM_M1	ERR_NF_MEM_M1
37510049SVuong.Nguyen@Sun.COM 
37610049SVuong.Nguyen@Sun.COM #define	EMASK_MEM_NF (EMASK_FBD_M21|EMASK_FBD_M20|EMASK_FBD_M18|EMASK_FBD_M16| \
37710049SVuong.Nguyen@Sun.COM 	EMASK_FBD_M15|EMASK_FBD_M14|EMASK_FBD_M12|EMASK_FBD_M11|EMASK_FBD_M10| \
37810049SVuong.Nguyen@Sun.COM 	EMASK_MEM_M6|EMASK_MEM_M5|EMASK_MEM_M4|EMASK_MEM_M1)
37910049SVuong.Nguyen@Sun.COM 
3809783SAdrian.Frost@Sun.COM #define	ERR_INT_ALL	(nb_chipset == INTEL_NB_5400 ? 0xffffffff : 0xff)
3819783SAdrian.Frost@Sun.COM 
3827532SSean.Ye@Sun.COM #define	ERR_FAT_INT_B14	0x0400	/* B14Msk SF Scrub DBE */
3837532SSean.Ye@Sun.COM #define	ERR_FAT_INT_B12	0x0100	/* B12Msk Parity Protected register */
3847532SSean.Ye@Sun.COM #define	ERR_FAT_INT_B25	0x0080	/* B25Msk illegal HISMM/TSEG access */
3857532SSean.Ye@Sun.COM #define	ERR_FAT_INT_B23	0x0040	/* B23Msk Vt Unaffiliated port error */
3867532SSean.Ye@Sun.COM #define	ERR_FAT_INT_B21	0x0020	/* B21Msk illegal way */
3877532SSean.Ye@Sun.COM #define	ERR_FAT_INT_B7	0x0010	/* B7Msk Multiple ECC error in any of */
3887532SSean.Ye@Sun.COM 					/* the ways during SF lookup */
3897532SSean.Ye@Sun.COM #define	ERR_FAT_INT_B4	0x08	/* B4Msk Virtual pin port error */
3907532SSean.Ye@Sun.COM #define	ERR_FAT_INT_B3	0x04	/* B3Msk Coherency violation error for EWB */
3917532SSean.Ye@Sun.COM #define	ERR_FAT_INT_B2	0x02	/* B2Msk Multi-tag hit SF */
3927532SSean.Ye@Sun.COM #define	ERR_FAT_INT_B1	0x01	/* B1Msk DM parity error */
3937532SSean.Ye@Sun.COM 
3947532SSean.Ye@Sun.COM #define	ERR_NF_INT_B27	0x4000	/* B27Msk Request received when in S1 */
3957532SSean.Ye@Sun.COM #define	ERR_NF_INT_B24	0x2000	/* B24Msk DFXERR */
3967532SSean.Ye@Sun.COM #define	ERR_NF_INT_B19	0x1000	/* B19Msk scrub SBE (SF) */
3977532SSean.Ye@Sun.COM #define	ERR_NF_INT_B18	0x0800	/* B18Msk perfmon task completion */
3987532SSean.Ye@Sun.COM #define	ERR_NF_INT_B17	0x0400	/* B17Msk JTAG/TAP error status */
3997532SSean.Ye@Sun.COM #define	ERR_NF_INT_B16	0x0200	/* B16Msk SMBus error status */
4007532SSean.Ye@Sun.COM #define	ERR_NF_INT_B22	0x0080	/* B22Msk Victim ROM parity */
4017532SSean.Ye@Sun.COM #define	ERR_NF_INT_B20	0x0040	/* B20Msk Configuration write abort */
4027532SSean.Ye@Sun.COM #define	ERR_NF_INT_B11	0x0020	/* B11Msk Victim Ram parity error */
4037532SSean.Ye@Sun.COM #define	ERR_NF_INT_B10	0x0010	/* B10Msk DM Parity */
4047532SSean.Ye@Sun.COM #define	ERR_NF_INT_B9	0x0008	/* B9Msk illeagl access */
4057532SSean.Ye@Sun.COM #define	ERR_NF_INT_B8	0x0004	/* B8Msk SF Coherency Error for BIL */
4067532SSean.Ye@Sun.COM #define	ERR_NF_INT_B6	0x0002	/* B6Msk Single ECC error on SF lookup */
4077532SSean.Ye@Sun.COM #define	ERR_NF_INT_B5	0x0001	/* B5Msk Address Map error */
4087532SSean.Ye@Sun.COM 
4097532SSean.Ye@Sun.COM #define	NERR_NF_5400_INT_B26	0x0004	/* B26Msk Illeagl Access to */
4107532SSean.Ye@Sun.COM 				/* non-coherent address space */
4117532SSean.Ye@Sun.COM 
4127532SSean.Ye@Sun.COM #define	EMASK_INT_RES	0x02000000	/* Do not change */
4137532SSean.Ye@Sun.COM #define	EMASK_INT_B25	0x01000000	/* B25Msk illegal HISMM/TSEG access */
4147532SSean.Ye@Sun.COM #define	EMASK_INT_B23	0x00400000	/* B23Msk Vt Unaffiliated port error */
4157532SSean.Ye@Sun.COM #define	EMASK_INT_B22	0x00200000	/* B22Msk Victim ROM parity */
4167532SSean.Ye@Sun.COM #define	EMASK_INT_B21	0x00100000	/* B21Msk illegal way */
4177532SSean.Ye@Sun.COM #define	EMASK_INT_B20	0x00080000	/* B20Msk Configuration write abort  */
4187532SSean.Ye@Sun.COM #define	EMASK_INT_B19	0x00040000	/* B19Msk Scrub SBE */
4197532SSean.Ye@Sun.COM #define	EMASK_INT_B14	0x00002000	/* B14Msk Scrub DBE */
4207532SSean.Ye@Sun.COM #define	EMASK_INT_B12	0x00000800	/* B12Msk Parity Protected */
4217532SSean.Ye@Sun.COM #define	EMASK_INT_B11	0x00000400	/* B11Msk Victim Ram parity error */
4227532SSean.Ye@Sun.COM #define	EMASK_INT_B10	0x00000200	/* B10Msk DM Parity */
4237532SSean.Ye@Sun.COM #define	EMASK_INT_B9	0x00000100	/* B9Msk Illegal Accesss */
4247532SSean.Ye@Sun.COM 
4257532SSean.Ye@Sun.COM #define	EMASK_INT_B8	0x80	/* B8Msk SF Coherency Error for BIL */
4267532SSean.Ye@Sun.COM #define	EMASK_INT_B7	0x40	/* B7Msk Multiple ECC error in any of */
4277532SSean.Ye@Sun.COM 				/* the ways during SF lookup */
4287532SSean.Ye@Sun.COM #define	EMASK_INT_B6	0x20	/* B6Msk Single ECC error on SF lookup */
4297532SSean.Ye@Sun.COM #define	EMASK_INT_B5	0x10	/* B5Msk Address Map error */
4307532SSean.Ye@Sun.COM #define	EMASK_INT_B4	0x08	/* B4Msk Virtual pin port error */
4317532SSean.Ye@Sun.COM #define	EMASK_INT_B3	0x04	/* B3Msk Coherency violation error for EWB */
4327532SSean.Ye@Sun.COM #define	EMASK_INT_B2	0x02	/* B2Msk Multi-tag hit SF */
4337532SSean.Ye@Sun.COM #define	EMASK_INT_B1	0x01	/* B1Msk DM parity error */
4347532SSean.Ye@Sun.COM 
435*10668SVuong.Nguyen@Sun.COM /* MCH 5000 errata 2: disable B1 */
4367532SSean.Ye@Sun.COM #define	EMASK_INT_5000	EMASK_INT_B1
437*10668SVuong.Nguyen@Sun.COM /* MCH 5100: mask all except B3 and B5 */
438*10668SVuong.Nguyen@Sun.COM #define	EMASK_INT_5100	(~(EMASK_INT_B5|EMASK_INT_B3) & 0xff)
4397532SSean.Ye@Sun.COM /* MCH 7300 errata 17 & 20 */
4407532SSean.Ye@Sun.COM #define	EMASK_INT_7300	(EMASK_INT_B3|EMASK_INT_B1)
4417532SSean.Ye@Sun.COM /* MCH 7300 errata 17,20 & 21 */
4427532SSean.Ye@Sun.COM #define	EMASK_INT_7300_STEP_0	(EMASK_INT_B7|EMASK_INT_B3|EMASK_INT_B1)
4439783SAdrian.Frost@Sun.COM #define	EMASK_INT_5400 0
4447532SSean.Ye@Sun.COM 
4457532SSean.Ye@Sun.COM #define	EMASK_INT_FATAL (EMASK_INT_B7|EMASK_INT_B4|EMASK_INT_B3|EMASK_INT_B2| \
4467532SSean.Ye@Sun.COM 	EMASK_INT_B1)
4477532SSean.Ye@Sun.COM #define	EMASK_INT_NF	(EMASK_INT_B8|EMASK_INT_B6|EMASK_INT_B5)
448*10668SVuong.Nguyen@Sun.COM #define	EMASK_INT_5100_FATAL	(EMASK_INT_B3|EMASK_INT_B1)
449*10668SVuong.Nguyen@Sun.COM #define	EMASK_INT_5100_NF	(EMASK_INT_B5)
450*10668SVuong.Nguyen@Sun.COM 
4517532SSean.Ye@Sun.COM #define	GE_FBD_FATAL ((nb_chipset == INTEL_NB_5400) ? GE_FERR_FBD_FATAL : \
45210049SVuong.Nguyen@Sun.COM 	(nb_chipset == INTEL_NB_5100) ? 0 : \
4537532SSean.Ye@Sun.COM 	(GE_FERR_FBD0_FATAL|GE_FERR_FBD1_FATAL|GE_FERR_FBD2_FATAL| \
4547532SSean.Ye@Sun.COM 	GE_FERR_FBD3_FATAL))
4557532SSean.Ye@Sun.COM #define	GE_FBD_NF ((nb_chipset == INTEL_NB_5400) ? GE_FERR_FBD_NF : \
45610049SVuong.Nguyen@Sun.COM 	(nb_chipset == INTEL_NB_5100) ? 0 : \
4577532SSean.Ye@Sun.COM 	(GE_FERR_FBD0_NF|GE_FERR_FBD1_NF|GE_FERR_FBD2_NF|GE_FERR_FBD3_NF))
45810049SVuong.Nguyen@Sun.COM #define	GE_MEM_NF	((nb_chipset == INTEL_NB_5100) ? \
45910049SVuong.Nguyen@Sun.COM 	(GE_FERR_MEM0_NF|GE_FERR_MEM1_NF) : 0)
4607532SSean.Ye@Sun.COM 
4617532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_IO18	0x00200000	/* ESI Reset timeout */
4627532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_IO2	0x00100000	/* Received an unsupported */
4637532SSean.Ye@Sun.COM 						/* request */
4647532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_IO9	0x00040000	/* Malformed TLP Status */
4657532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_IO10	0x00020000	/* Received buffer overflow */
4667532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_IO8	0x00010000	/* unexpected completion */
4677532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_IO7	0x00008000	/* completion abort */
4687532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_IO6	0x00004000	/* completion timeout */
4697532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_IO5	0x00002000	/* flow control protocol */
4707532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_IO4	0x00001000	/* poisoned TLP */
4717532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_IO19	0x00000020	/* surprise link down */
4727532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_IO0	0x00000010	/* data link protocol */
4737532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_IO3	0x00000001	/* training error */
4747532SSean.Ye@Sun.COM 
4757532SSean.Ye@Sun.COM #define	EMASK_COR_PEX_IO20	0x00002000	/* Advisory Non Fatal */
4767532SSean.Ye@Sun.COM #define	EMASK_COR_PEX_IO16	0x00001000	/* replay timer timeout */
4777532SSean.Ye@Sun.COM #define	EMASK_COR_PEX_IO15	0x00000100	/* replay num pollover */
4787532SSean.Ye@Sun.COM #define	EMASK_COR_PEX_IO14	0x00000080	/* bad DLLP */
4797532SSean.Ye@Sun.COM #define	EMASK_COR_PEX_IO13	0x00000040	/* bad TLP */
4807532SSean.Ye@Sun.COM #define	EMASK_COR_PEX_IO12	0x00000001	/* receiver error mask */
4817532SSean.Ye@Sun.COM 
4827532SSean.Ye@Sun.COM #define	EMASK_RP_PEX_IO1	0x00000004	/* fatal message detect */
4837532SSean.Ye@Sun.COM #define	EMASK_RP_PEX_IO11	0x00000002	/* uncorrectable message */
4847532SSean.Ye@Sun.COM #define	EMASK_RP_PEX_IO17	0x00000001	/* correctable message */
4857532SSean.Ye@Sun.COM 
4867532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO33	0x00002000	/* Link autonomous BW change */
4877532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO32	0x00001000	/* Received CA Posted Req */
4887532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO31	0x00000800	/* Received UR Posted Req */
4897532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO30	0x00000400	/* VT-d internal HW */
4907532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO29	0x00000200	/* MSI address */
4917532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO28	0x00000100	/* Link BW change */
4927532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO27	0x00000080	/* stop & scream */
4937532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO26	0x00000040	/* Received CA response */
4947532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO25	0x00000020	/* Received UR response */
4957532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO24	0x00000010	/* Outbound poisoned data */
4967532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO23	0x00000008	/* VTd fault */
4977532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO22	0x00000004	/* internal header/ctl parity */
4987532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_IO18	0x00000002	/* ESI reset timeout */
4997532SSean.Ye@Sun.COM #define	EMASK_UNIT_PEX_VPP	0x00000001	/* correctable message detect */
5007532SSean.Ye@Sun.COM 
5017532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO32	0x00800000	/* Received CA Posted Request */
5027532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO31	0x00400000	/* Received UR Posted Request */
5037532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO30	0x00200000	/* VT-d Internal HW */
5047532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO29	0x00100000	/* MSI Address */
5057532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO27	0x00040000	/* Stop & Scream */
5067532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO26	0x00020000	/* Received CA Response */
5077532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO25	0x00010000	/* Received UR Response */
5087532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO24	0x00008000	/* Outbound poisoned TLP */
5097532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO23	0x00004000	/* VT-d Fault */
5107532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO22	0x00002000	/* Internal Header/Control */
5117532SSean.Ye@Sun.COM 						/* Parity */
5127532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO18	0x00001000	/* ESI reset timeout */
5137532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO1	0x00000400	/* received fatal error msg */
5147532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO2	0x00000200	/* received unsupported req  */
5157532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO9	0x00000100	/* malformed TLP */
5167532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO10	0x00000080	/* receiver buffer overflow */
5177532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO8	0x00000040	/* unexpected completion */
5187532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO7	0x00000020	/* completer abort */
5197532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO6	0x00000010	/* completion timeout */
5207532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO5	0x00000008	/* flow control protocol */
5217532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO4	0x00000004	/* poisoned TLP */
5227532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO19	0x00000002	/* surprise link down */
5237532SSean.Ye@Sun.COM #define	PEX_5400_FAT_IO0	0x00000001	/* data link layer protocol */
5247532SSean.Ye@Sun.COM #define	PEX_FAT_IO19	0x00001000	/* surprise link down */
5257532SSean.Ye@Sun.COM #define	PEX_FAT_IO18	0x00000800	/* ESI reset timeout */
5267532SSean.Ye@Sun.COM #define	PEX_FAT_IO9	0x00000400	/* malformed TLP */
5277532SSean.Ye@Sun.COM #define	PEX_FAT_IO10	0x00000200	/* receiver buffer overflow */
5287532SSean.Ye@Sun.COM #define	PEX_FAT_IO8	0x00000100	/* unexpected completion */
5297532SSean.Ye@Sun.COM #define	PEX_FAT_IO7	0x00000080	/* completer abort */
5307532SSean.Ye@Sun.COM #define	PEX_FAT_IO6	0x00000040	/* completion timeout */
5317532SSean.Ye@Sun.COM #define	PEX_FAT_IO5	0x00000020	/* flow control protocol */
5327532SSean.Ye@Sun.COM #define	PEX_FAT_IO4	0x00000010	/* poisoned TLP */
5337532SSean.Ye@Sun.COM #define	PEX_FAT_IO3	0x00000008	/* training error */
5347532SSean.Ye@Sun.COM #define	PEX_FAT_IO2	0x00000004	/* received unsupported req  */
5357532SSean.Ye@Sun.COM #define	PEX_FAT_IO1	0x00000002	/* received fatal error message */
5367532SSean.Ye@Sun.COM #define	PEX_FAT_IO0	0x00000001	/* data link layer protocol */
5377532SSean.Ye@Sun.COM 
5387532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO33	0x20000000	/* link autonomous bandwidth */
5397532SSean.Ye@Sun.COM 						/* change (correctable) */
5407532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO32	0x10000000	/* Received CA Posted Request */
5417532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO31	0x08000000	/* Received UR Posted Request */
5427532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO30	0x04000000	/* VT-d Internal HW */
5437532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO29	0x02000000	/* MSI Address */
5447532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO28	0x01000000	/* Link bandwidth change */
5457532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO27	0x00800000	/* Stop & Scream */
5467532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO26	0x00400000	/* Received CA Response */
5477532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO25	0x00200000	/* Received UR Response */
5487532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO24	0x00100000	/* Outbound poisoned TLP */
5497532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO23	0x00080000	/* VT-d Fault */
5507532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO11	0x00040000	/* received non fatal err msg */
5517532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO17	0x00020000 	/* rec correctable error msg */
5527532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO2		0x00008000	/* Received unsupported req */
5537532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO9		0x00004000	/* Malformed TLP */
5547532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO10	0x00002000	/* Received buffer overflow */
5557532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO8		0x00001000	/* unexpected completion err */
5567532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO7		0x00000800	/* completion abort */
5577532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO6		0x00000400	/* completion timeout */
5587532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO5		0x00000200	/* flow control protocol */
5597532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO4		0x00000100	/* poisoned TLP */
5607532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO19	0x00000080	/* surprise link down */
5617532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO0		0x00000040	/* data link layer protocol */
5627532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO20	0x00000020	/* Advisory Non Fatel */
5637532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO16	0x00000010	/* replay timer timeout */
5647532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO15	0x00000008	/* replay num pollover */
5657532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO14	0x00000004	/* bad DLLP */
5667532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO13	0x00000002	/* bad TLP */
5677532SSean.Ye@Sun.COM #define	PEX_5400_NF_IO12	0x00000001	/* receiver error mask */
5687532SSean.Ye@Sun.COM #define	PEX_NF_IO19	0x00020000	/* surprise link down */
5697532SSean.Ye@Sun.COM #define	PEX_NF_IO17	0x00010000	/* received correctable error message */
5707532SSean.Ye@Sun.COM #define	PEX_NF_IO16	0x00008000	/* replay timer timeout */
5717532SSean.Ye@Sun.COM #define	PEX_NF_IO15	0x00004000	/* replay num pollover */
5727532SSean.Ye@Sun.COM #define	PEX_NF_IO14	0x00002000	/* bad DLLP */
5737532SSean.Ye@Sun.COM #define	PEX_NF_IO13	0x00001000	/* bad TLP */
5747532SSean.Ye@Sun.COM #define	PEX_NF_IO12	0x00000800	/* receiver error mask */
5757532SSean.Ye@Sun.COM #define	PEX_NF_IO11	0x00000400	/* received non fatal error message */
5767532SSean.Ye@Sun.COM #define	PEX_NF_IO10	0x00000200	/* Received buffer overflow */
5777532SSean.Ye@Sun.COM #define	PEX_NF_IO9	0x00000100	/* Malformed TLP */
5787532SSean.Ye@Sun.COM #define	PEX_NF_IO8	0x00000080
5797532SSean.Ye@Sun.COM #define	PEX_NF_IO7	0x00000040
5807532SSean.Ye@Sun.COM #define	PEX_NF_IO6	0x00000020	/* completion timeout */
5817532SSean.Ye@Sun.COM #define	PEX_NF_IO5	0x00000010	/* flow control protocol */
5827532SSean.Ye@Sun.COM #define	PEX_NF_IO4	0x00000008	/* poisoned TLP */
5837532SSean.Ye@Sun.COM #define	PEX_NF_IO3	0x00000004
5847532SSean.Ye@Sun.COM #define	PEX_NF_IO2	0x00000002
5857532SSean.Ye@Sun.COM #define	PEX_NF_IO0	0x00000001	/* data link layer protocol */
5867532SSean.Ye@Sun.COM 
5877532SSean.Ye@Sun.COM #define	ERR_FAT_TH2	0x02	/* >tmid thermal event */
5887532SSean.Ye@Sun.COM #define	ERR_FAT_TH1	0x01	/* Catastrophic on-die thermal event */
5897532SSean.Ye@Sun.COM 
5907532SSean.Ye@Sun.COM #define	ERR_NF_TH5	0x10	/* timeout on cooling update */
5917532SSean.Ye@Sun.COM #define	ERR_NF_TH4	0x08	/* TSMAX update */
5927532SSean.Ye@Sun.COM #define	ERR_NF_TH3	0x04	/* on-die throttling event */
5937532SSean.Ye@Sun.COM 
5947532SSean.Ye@Sun.COM #define	EMASK_TH5	0x0010 	/* TH5Msk timeout on cooling update */
5957532SSean.Ye@Sun.COM #define	EMASK_TH4	0x0008 	/* TH4Msk TSMAX update */
5967532SSean.Ye@Sun.COM #define	EMASK_TH3	0x0004 	/* TH3Msk on-die throttling event */
5977532SSean.Ye@Sun.COM #define	EMASK_TH2	0x0002 	/* TH2Msk >tmid thermal event */
5987532SSean.Ye@Sun.COM #define	EMASK_TH1	0x0001 	/* TH1Msk Catastrophic on-die thermal event */
5997532SSean.Ye@Sun.COM 
6007532SSean.Ye@Sun.COM #define	GE_FERR_FSB(ferr) ( \
6017532SSean.Ye@Sun.COM 	((ferr) & (GE_FSB0_FATAL|GE_FSB0_NF)) ? 0 : \
6027532SSean.Ye@Sun.COM 	((ferr) & (GE_FSB1_FATAL|GE_FSB1_NF)) ? 1 : \
6037532SSean.Ye@Sun.COM 	(nb_chipset == INTEL_NB_7300) && \
6047532SSean.Ye@Sun.COM 	((ferr) & (GE_FERR_FSB2_FATAL|GE_FERR_FSB2_NF)) ? 2 : \
6057532SSean.Ye@Sun.COM 	(nb_chipset == INTEL_NB_7300) && \
6067532SSean.Ye@Sun.COM 	((ferr) & (GE_FERR_FSB3_FATAL|GE_FERR_FSB3_NF)) ? 3 : \
6077532SSean.Ye@Sun.COM 	-1)
6087532SSean.Ye@Sun.COM 
6097532SSean.Ye@Sun.COM #define	GE_NERR_TO_FERR_FSB(nerr) \
6107532SSean.Ye@Sun.COM 	((((nerr) & GE_NERR_FSB3_FATAL) ? GE_FERR_FSB3_FATAL : 0) | \
6117532SSean.Ye@Sun.COM 	(((nerr) & GE_NERR_FSB2_FATAL) ? GE_FERR_FSB2_FATAL : 0) | \
6127532SSean.Ye@Sun.COM 	(((nerr) & GE_FSB1_FATAL) ? GE_FSB1_FATAL : 0) | \
6137532SSean.Ye@Sun.COM 	(((nerr) & GE_FSB0_FATAL) ? GE_FSB0_FATAL : 0) | \
6147532SSean.Ye@Sun.COM 	(((nerr) & GE_NERR_FSB3_NF) ? GE_FERR_FSB3_NF : 0) | \
6157532SSean.Ye@Sun.COM 	(((nerr) & GE_NERR_FSB2_NF) ? GE_FERR_FSB2_NF : 0) | \
6167532SSean.Ye@Sun.COM 	(((nerr) & GE_FSB1_NF) ? GE_FSB1_NF : 0) | \
6177532SSean.Ye@Sun.COM 	(((nerr) & GE_FSB0_NF) ? GE_FSB0_NF : 0))
6187532SSean.Ye@Sun.COM 
6197532SSean.Ye@Sun.COM #define	GE_ERR_PEX(ferr) ( \
6207532SSean.Ye@Sun.COM 	((ferr) & (GE_ESI_FATAL|GE_ESI_NF)) ? 0 : \
6217532SSean.Ye@Sun.COM 	((nb_chipset == INTEL_NB_7300 || nb_chipset == INTEL_NB_5400) && \
6227532SSean.Ye@Sun.COM 	((ferr) & (GE_PCIEX1_FATAL|GE_PCIEX1_NF))) ? 1 : \
6237532SSean.Ye@Sun.COM 	((ferr) & (GE_PCIEX2_FATAL|GE_PCIEX2_NF)) ? 2 : \
6247532SSean.Ye@Sun.COM 	((ferr) & (GE_PCIEX3_FATAL|GE_PCIEX3_NF)) ? 3 : \
6257532SSean.Ye@Sun.COM 	((ferr) & (GE_PCIEX4_FATAL|GE_PCIEX4_NF)) ? 4 : \
6267532SSean.Ye@Sun.COM 	((ferr) & (GE_PCIEX5_FATAL|GE_PCIEX5_NF)) ? 5 : \
6277532SSean.Ye@Sun.COM 	((ferr) & (GE_PCIEX6_FATAL|GE_PCIEX6_NF)) ? 6 : \
6287532SSean.Ye@Sun.COM 	((ferr) & (GE_PCIEX7_FATAL|GE_PCIEX7_NF)) ? 7 : \
6297532SSean.Ye@Sun.COM 	(nb_chipset == INTEL_NB_5400) && \
6307532SSean.Ye@Sun.COM 	((ferr) & (GE_PCIEX8_FATAL|GE_PCIEX8_NF)) ? 8 : \
6317532SSean.Ye@Sun.COM 	((ferr) & (GE_PCIEX9_FATAL|GE_PCIEX9_NF)) ? 9 : \
6327532SSean.Ye@Sun.COM 	-1)
6337532SSean.Ye@Sun.COM 
6347532SSean.Ye@Sun.COM #define	GE_FERR_FATAL	((nb_chipset == INTEL_NB_7300) ? \
6357532SSean.Ye@Sun.COM 	(GE_INT_FATAL|GE_DMA_FATAL|GE_FERR_FSB3_FATAL|GE_FERR_FSB2_FATAL| \
6367532SSean.Ye@Sun.COM 	GE_FSB1_FATAL|GE_FSB0_FATAL|GE_FBD_FATAL|GE_PCIEX7_FATAL| \
6377532SSean.Ye@Sun.COM 	GE_PCIEX6_FATAL| GE_PCIEX5_FATAL|GE_PCIEX4_FATAL|GE_PCIEX3_FATAL| \
6387532SSean.Ye@Sun.COM 	GE_PCIEX2_FATAL| GE_ESI_FATAL) :  \
6397532SSean.Ye@Sun.COM 	(GE_INT_FATAL|GE_DMA_FATAL|GE_FSB1_FATAL|GE_FSB0_FATAL|GE_FBD_FATAL| \
6407532SSean.Ye@Sun.COM 	GE_PCIEX7_FATAL|GE_PCIEX6_FATAL|GE_PCIEX5_FATAL|GE_PCIEX4_FATAL| \
6417532SSean.Ye@Sun.COM 	GE_PCIEX3_FATAL|GE_PCIEX2_FATAL|GE_ESI_FATAL))
6427532SSean.Ye@Sun.COM 
6437532SSean.Ye@Sun.COM #define	GE_NERR_FATAL	((nb_chipset == INTEL_NB_7300) ? \
6447532SSean.Ye@Sun.COM 	(GE_INT_FATAL|GE_DMA_FATAL|GE_NERR_FSB3_FATAL|GE_NERR_FSB2_FATAL| \
6457532SSean.Ye@Sun.COM 	GE_FSB1_FATAL|GE_FSB0_FATAL|GE_FBD_FATAL|GE_PCIEX7_FATAL| \
6467532SSean.Ye@Sun.COM 	GE_PCIEX6_FATAL|GE_PCIEX5_FATAL|GE_PCIEX4_FATAL|GE_PCIEX3_FATAL| \
6477532SSean.Ye@Sun.COM 	GE_PCIEX2_FATALGE_ESI_FATAL) :  \
6487532SSean.Ye@Sun.COM 	(GE_INT_FATAL|GE_DMA_FATAL|GE_FSB1_FATAL|GE_FSB0_FATAL|GE_FBD_FATAL| \
6497532SSean.Ye@Sun.COM 	GE_PCIEX7_FATAL|GE_PCIEX6_FATAL|GE_PCIEX5_FATAL|GE_PCIEX4_FATAL| \
6507532SSean.Ye@Sun.COM 	GE_PCIEX3_FATAL|GE_PCIEX2_FATAL|GE_ESI_FATAL))
6517532SSean.Ye@Sun.COM 
6527532SSean.Ye@Sun.COM #define	GE_PCIEX_FATAL	(GE_ESI_FATAL|GE_PCIEX1_FATAL|GE_PCIEX2_FATAL| \
6537532SSean.Ye@Sun.COM 	GE_PCIEX3_FATAL|GE_PCIEX4_FATAL|GE_PCIEX5_FATAL|GE_PCIEX6_FATAL| \
6547532SSean.Ye@Sun.COM 	GE_PCIEX7_FATAL)
6557532SSean.Ye@Sun.COM #define	GE_PCIEX_NF	(GE_ESI_NF|GE_PCIEX1_NF|GE_PCIEX2_NF|GE_PCIEX3_NF| \
6567532SSean.Ye@Sun.COM 	GE_PCIEX4_NF|GE_PCIEX5_NF|GE_PCIEX6_NF|GE_PCIEX7_NF)
6577532SSean.Ye@Sun.COM #define	GE_FERR_FSB_FATAL	((nb_chipset == INTEL_NB_7300) ? \
6587532SSean.Ye@Sun.COM 	(GE_FSB0_FATAL|GE_FSB1_FATAL|GE_FERR_FSB2_FATAL|GE_FERR_FSB3_FATAL) : \
6597532SSean.Ye@Sun.COM 	(GE_FSB0_FATAL|GE_FSB1_FATAL))
6607532SSean.Ye@Sun.COM #define	GE_NERR_FSB_FATAL	((nb_chipset == INTEL_NB_7300) ? \
6617532SSean.Ye@Sun.COM 	(GE_FSB0_FATAL|GE_FSB1_FATAL|GE_NERR_FSB2_FATAL|GE_NERR_FSB3_FATAL) : \
6627532SSean.Ye@Sun.COM 	(GE_FSB0_FATAL|GE_FSB1_FATAL))
6637532SSean.Ye@Sun.COM #define	GE_FERR_FSB_NF	((nb_chipset == INTEL_NB_7300) ? \
6647532SSean.Ye@Sun.COM 	(GE_FSB0_NF|GE_FSB1_NF|GE_FERR_FSB2_NF|GE_FERR_FSB3_NF) : \
6657532SSean.Ye@Sun.COM 	(GE_FSB0_NF|GE_FSB1_NF))
6667532SSean.Ye@Sun.COM #define	GE_NERR_FSB_NF	((nb_chipset == INTEL_NB_7300) ? \
6677532SSean.Ye@Sun.COM 	(GE_FSB0_NF|GE_FSB1_NF|GE_NERR_FSB2_NF|GE_NERR_FSB3_NF) : \
6687532SSean.Ye@Sun.COM 	(GE_FSB0_NF|GE_FSB1_NF))
6697532SSean.Ye@Sun.COM 
6707532SSean.Ye@Sun.COM #define	FERR_FBD_CHANNEL(reg)	((reg)>>28 & 3)
6717532SSean.Ye@Sun.COM 
6727532SSean.Ye@Sun.COM #define	NB5000_STEPPING()	nb_pci_getw(0, 0, 0, 8, 0)
6737532SSean.Ye@Sun.COM 
6747532SSean.Ye@Sun.COM #define	FERR_GLOBAL_RD()	((nb_chipset == INTEL_NB_7300) ? \
6757532SSean.Ye@Sun.COM 				    ((uint64_t)nb_pci_getl(0, 16, 2, \
6767532SSean.Ye@Sun.COM 				    0x48, 0) << 32) | nb_pci_getl(0, 16, 2, \
6777532SSean.Ye@Sun.COM 				    0x40, 0) : \
6787532SSean.Ye@Sun.COM 				    (uint64_t)nb_pci_getl(0, 16, 2, 0x40, 0))
6797532SSean.Ye@Sun.COM #define	NERR_GLOBAL_RD()	nb_pci_getl(0, 16, 2, 0x44, 0)
6807532SSean.Ye@Sun.COM #define	FERR_FAT_FSB_RD(fsb, ip)	((nb_chipset == INTEL_NB_7300) ? \
6817532SSean.Ye@Sun.COM 	nb_pci_getb(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xc0 : 0x40, ip) : \
6827532SSean.Ye@Sun.COM 	nb_pci_getb(0, 16, 0, fsb ? 0x480 : 0x180, ip))
6837532SSean.Ye@Sun.COM #define	FERR_NF_FSB_RD(fsb, ip)	((nb_chipset == INTEL_NB_7300) ? \
6847532SSean.Ye@Sun.COM 	nb_pci_getb(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xc1 : 0x41, ip) : \
6857532SSean.Ye@Sun.COM 	nb_pci_getb(0, 16, 0, fsb ? 0x481 : 0x181, ip))
6867532SSean.Ye@Sun.COM #define	NERR_FAT_FSB_RD(fsb, ip) ((nb_chipset == INTEL_NB_7300) ? \
6877532SSean.Ye@Sun.COM 	nb_pci_getb(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xc2 : 0x42, ip) : \
6887532SSean.Ye@Sun.COM 	nb_pci_getb(0, 16, 0, fsb ? 0x482 : 0x182, ip))
6897532SSean.Ye@Sun.COM #define	NERR_NF_FSB_RD(fsb, ip) ((nb_chipset == INTEL_NB_7300) ? \
6907532SSean.Ye@Sun.COM 	nb_pci_getb(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xc3 : 0x43, ip) : \
6917532SSean.Ye@Sun.COM 	nb_pci_getb(0, 16, 0, fsb ? 0x483 : 0x183, ip))
6927532SSean.Ye@Sun.COM 
6937532SSean.Ye@Sun.COM #define	NRECFSB_RD(fsb)	((nb_chipset == INTEL_NB_7300) ? \
6947532SSean.Ye@Sun.COM 	nb_pci_getl(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xc4 : 0x44, 0) : \
6957532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 0, fsb ? 0x484 : 0x184, 0))
6967532SSean.Ye@Sun.COM #define	NRECFSB_WR(fsb)	\
6977532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_7300) { \
6987532SSean.Ye@Sun.COM 		nb_pci_putl(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xc4 : 0x44, \
6997532SSean.Ye@Sun.COM 		    0); \
7007532SSean.Ye@Sun.COM 	} else { \
7017532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 0, fsb ? 0x484 : 0x184, 0); \
7027532SSean.Ye@Sun.COM 	}
7037532SSean.Ye@Sun.COM #define	RECFSB_RD(fsb)	((nb_chipset == INTEL_NB_7300) ? \
7047532SSean.Ye@Sun.COM 	nb_pci_getl(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xc8 : 0x48, 0) : \
7057532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 0, fsb ? 0x488 : 0x188, 0))
7067532SSean.Ye@Sun.COM #define	RECFSB_WR(fsb) \
7077532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_7300) { \
7087532SSean.Ye@Sun.COM 		nb_pci_putl(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xc8 : 0x48, \
7097532SSean.Ye@Sun.COM 		    0); \
7107532SSean.Ye@Sun.COM 	} else { \
7117532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 0, fsb ? 0x488 : 0x188, 0); \
7127532SSean.Ye@Sun.COM 	}
7137532SSean.Ye@Sun.COM #define	NRECADDR_RD(fsb)	((nb_chipset == INTEL_NB_7300) ? \
7147532SSean.Ye@Sun.COM 	((uint64_t)(nb_pci_getb(0, 17, (fsb & 2) ? 3 : 0, \
7157532SSean.Ye@Sun.COM 	(fsb & 1) ? 0xd0 : 0x50, 0)) << 32) | \
7167532SSean.Ye@Sun.COM 	nb_pci_getl(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xcc : 0x4c, 0) : \
7177532SSean.Ye@Sun.COM 	((uint64_t)(nb_pci_getb(0, 16, 0, fsb ? 0x490 : 0x190, 0)) << 32) | \
7187532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 0, fsb ? 0x48c : 0x18c, 0))
7197532SSean.Ye@Sun.COM #define	NRECADDR_WR(fsb) \
7207532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_7300) { \
7217532SSean.Ye@Sun.COM 		nb_pci_putb(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xd0 : 0x50, \
7227532SSean.Ye@Sun.COM 		    0); \
7237532SSean.Ye@Sun.COM 		nb_pci_putl(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xcc : 0x4c, \
7247532SSean.Ye@Sun.COM 		    0); \
7257532SSean.Ye@Sun.COM 	} else { \
7267532SSean.Ye@Sun.COM 		nb_pci_putb(0, 16, 0, fsb ? 0x490 : 0x190, 0); \
7277532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 0, fsb ? 0x48c : 0x18c, 0); \
7287532SSean.Ye@Sun.COM 	}
7297532SSean.Ye@Sun.COM #define	EMASK_FSB_RD(fsb)	((nb_chipset == INTEL_NB_7300) ? \
7307532SSean.Ye@Sun.COM 	nb_pci_getw(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xd2 : 0x52, 0) : \
7317532SSean.Ye@Sun.COM 	nb_pci_getw(0, 16, 0, fsb ? 0x492 : 0x192, 0))
7327532SSean.Ye@Sun.COM #define	ERR0_FSB_RD(fsb)	((nb_chipset == INTEL_NB_7300) ? \
7337532SSean.Ye@Sun.COM 	nb_pci_getw(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xd4 : 0x54, 0) : \
7347532SSean.Ye@Sun.COM 	nb_pci_getw(0, 16, 0, fsb ? 0x494 : 0x194, 0))
7357532SSean.Ye@Sun.COM #define	ERR1_FSB_RD(fsb)	((nb_chipset == INTEL_NB_7300) ? \
7367532SSean.Ye@Sun.COM 	nb_pci_getw(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xd6 : 0x56, 0) : \
7377532SSean.Ye@Sun.COM 	nb_pci_getw(0, 16, 0, fsb ? 0x496 : 0x196, 0))
7387532SSean.Ye@Sun.COM #define	ERR2_FSB_RD(fsb)	((nb_chipset == INTEL_NB_7300) ? \
7397532SSean.Ye@Sun.COM 	nb_pci_getw(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xd8 : 0x58, 0) : \
7407532SSean.Ye@Sun.COM 	nb_pci_getw(0, 16, 0, fsb ? 0x498 : 0x198, 0))
7417532SSean.Ye@Sun.COM #define	MCERR_FSB_RD(fsb)	((nb_chipset == INTEL_NB_7300) ? \
7427532SSean.Ye@Sun.COM 	nb_pci_getw(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xda : 0x5a, 0) : \
7437532SSean.Ye@Sun.COM 	nb_pci_getw(0, 16, 0, fsb ? 0x49a : 0x19a, 0))
7447532SSean.Ye@Sun.COM 
7457532SSean.Ye@Sun.COM #define	FERR_GLOBAL_WR(val) \
7467532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_7300) \
7477532SSean.Ye@Sun.COM 	{ \
7487532SSean.Ye@Sun.COM 		    nb_pci_putl(0, 16, 2, 0x48, (uint32_t)(val >> 32)); \
7497532SSean.Ye@Sun.COM 		    nb_pci_putl(0, 16, 2, 0x40, (uint32_t)val); \
7507532SSean.Ye@Sun.COM 	} else { \
7517532SSean.Ye@Sun.COM 		    nb_pci_putl(0, 16, 2, 0x40, (uint32_t)val); \
7527532SSean.Ye@Sun.COM 	}
7537532SSean.Ye@Sun.COM #define	NERR_GLOBAL_WR(val)	nb_pci_putl(0, 16, 2, 0x44, val)
7547532SSean.Ye@Sun.COM #define	FERR_FAT_FSB_WR(fsb, val)	((nb_chipset == INTEL_NB_7300) ? \
7557532SSean.Ye@Sun.COM 	nb_pci_putb(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xc0 : 0x40, val) : \
7567532SSean.Ye@Sun.COM 	nb_pci_putb(0, 16, 0, fsb ? 0x480 : 0x180, val))
7577532SSean.Ye@Sun.COM #define	FERR_NF_FSB_WR(fsb, val)	((nb_chipset == INTEL_NB_7300) ? \
7587532SSean.Ye@Sun.COM 	nb_pci_putb(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xc1 : 0x41, val) : \
7597532SSean.Ye@Sun.COM 	nb_pci_putb(0, 16, 0, fsb ? 0x481 : 0x181, val))
7607532SSean.Ye@Sun.COM #define	NERR_FAT_FSB_WR(fsb, val)	((nb_chipset == INTEL_NB_7300) ? \
7617532SSean.Ye@Sun.COM 	nb_pci_putb(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xc2 : 0x42, val) : \
7627532SSean.Ye@Sun.COM 	nb_pci_putb(0, 16, 0, fsb ? 0x482 : 0x182, val))
7637532SSean.Ye@Sun.COM #define	NERR_NF_FSB_WR(fsb, val)	((nb_chipset == INTEL_NB_7300) ? \
7647532SSean.Ye@Sun.COM 	nb_pci_putb(0, 17, (fsb & 2) ? 3 : 0, (fsb & 1) ? 0xc3 : 0x43, val) : \
7657532SSean.Ye@Sun.COM 	nb_pci_putb(0, 16, 0, fsb ? 0x483 : 0x183, val))
7667532SSean.Ye@Sun.COM #define	EMASK_FSB_WR(fsb, val) \
7677532SSean.Ye@Sun.COM 	{ \
7687532SSean.Ye@Sun.COM 		if (nb_chipset == INTEL_NB_7300) \
7697532SSean.Ye@Sun.COM 			nb_pci_putw(0, 17, ((fsb) & 2) ? 3 : 0, \
7707532SSean.Ye@Sun.COM 			    ((fsb) & 1) ? 0xd2 : 0x52, val); \
7717532SSean.Ye@Sun.COM 		else \
7727532SSean.Ye@Sun.COM 			nb_pci_putw(0, 16, 0, fsb ? 0x492 : 0x192, val); \
7737532SSean.Ye@Sun.COM 	}
7747532SSean.Ye@Sun.COM #define	ERR0_FSB_WR(fsb, val) \
7757532SSean.Ye@Sun.COM 	{ \
7767532SSean.Ye@Sun.COM 		if (nb_chipset == INTEL_NB_7300) \
7777532SSean.Ye@Sun.COM 			nb_pci_putw(0, 17, (fsb & 2) ? 3 : 0, \
7787532SSean.Ye@Sun.COM 			    (fsb & 1) ? 0xd4 : 0x54, val); \
7797532SSean.Ye@Sun.COM 		else \
7807532SSean.Ye@Sun.COM 			nb_pci_putw(0, 16, 0, fsb ? 0x494 : 0x194, val); \
7817532SSean.Ye@Sun.COM 	}
7827532SSean.Ye@Sun.COM #define	ERR1_FSB_WR(fsb, val) \
7837532SSean.Ye@Sun.COM 	{ \
7847532SSean.Ye@Sun.COM 		if (nb_chipset == INTEL_NB_7300) \
7857532SSean.Ye@Sun.COM 			nb_pci_putw(0, 17, (fsb & 2) ? 3 : 0, \
7867532SSean.Ye@Sun.COM 			    (fsb & 1) ? 0xd6 : 0x56, val); \
7877532SSean.Ye@Sun.COM 		else \
7887532SSean.Ye@Sun.COM 			nb_pci_putw(0, 16, 0, fsb ? 0x496 : 0x196, val); \
7897532SSean.Ye@Sun.COM 	}
7907532SSean.Ye@Sun.COM #define	ERR2_FSB_WR(fsb, val) \
7917532SSean.Ye@Sun.COM 	{ \
7927532SSean.Ye@Sun.COM 		if (nb_chipset == INTEL_NB_7300) \
7937532SSean.Ye@Sun.COM 			nb_pci_putw(0, 17, (fsb & 2) ? 3 : 0, \
7947532SSean.Ye@Sun.COM 			    (fsb & 1) ? 0xd8 : 0x58, val); \
7957532SSean.Ye@Sun.COM 		else \
7967532SSean.Ye@Sun.COM 			nb_pci_putw(0, 16, 0, fsb ? 0x498 : 0x198, val); \
7977532SSean.Ye@Sun.COM 	}
7987532SSean.Ye@Sun.COM #define	MCERR_FSB_WR(fsb, val) \
7997532SSean.Ye@Sun.COM 	{ \
8007532SSean.Ye@Sun.COM 		if (nb_chipset == INTEL_NB_7300) \
8017532SSean.Ye@Sun.COM 			nb_pci_putw(0, 17, (fsb & 2) ? 3 : 0, \
8027532SSean.Ye@Sun.COM 			    (fsb & 1) ? 0xda : 0x5a, val); \
8037532SSean.Ye@Sun.COM 		else \
8047532SSean.Ye@Sun.COM 			nb_pci_putw(0, 16, 0, fsb ? 0x49a : 0x19a, val); \
8057532SSean.Ye@Sun.COM 	}
8067532SSean.Ye@Sun.COM 
8077532SSean.Ye@Sun.COM #define	NRECSF_RD()	(nb_chipset == INTEL_NB_5000X || \
8087532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_7300) ? ((uint64_t)( \
8097532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 2, 0xb4, 0)) << 32) | \
8107532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 2, 0xb0, 0) : 0LL
8117532SSean.Ye@Sun.COM #define	RECSF_RD()	(nb_chipset == INTEL_NB_5000X || \
8127532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_7300) ? ((uint64_t)( \
8137532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 2, 0xbc, 0)) << 32) | \
8147532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 2, 0xb8, 0) : 0LL
8157532SSean.Ye@Sun.COM 
8167532SSean.Ye@Sun.COM #define	NRECSF_WR()	if (nb_chipset == INTEL_NB_5000X || \
8177532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_7300) { \
8187532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 2, 0xbc, 0); \
8197532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 2, 0xb0, 0); \
8207532SSean.Ye@Sun.COM 	}
8217532SSean.Ye@Sun.COM #define	RECSF_WR()	if (nb_chipset == INTEL_NB_5000X || \
8227532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_7300) { \
8237532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 2, 0xbc, 0); \
8247532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 2, 0xb8, 0); \
8257532SSean.Ye@Sun.COM 	}
8267532SSean.Ye@Sun.COM 
8277532SSean.Ye@Sun.COM #define	FERR_FAT_INT_RD(ip)	(((nb_chipset == INTEL_NB_5400) ? \
8287532SSean.Ye@Sun.COM 	((uint16_t)nb_pci_getb(0, 16, 2, 0xc1, ip) << 8) : (uint16_t)0) | \
8297532SSean.Ye@Sun.COM 	nb_pci_getb(0, 16, 2, 0xc0, ip))
8307532SSean.Ye@Sun.COM #define	FERR_NF_INT_RD(ip)	((nb_chipset == INTEL_NB_5400) ? \
8317532SSean.Ye@Sun.COM 	((uint16_t)nb_pci_getb(0, 16, 2, 0xc3, ip) << 8) | \
8327532SSean.Ye@Sun.COM 	nb_pci_getb(0, 16, 2, 0xc2, ip) : \
8337532SSean.Ye@Sun.COM 	(uint16_t)nb_pci_getb(0, 16, 2, 0xc1, ip))
8347532SSean.Ye@Sun.COM #define	NERR_FAT_INT_RD(ip)	((nb_chipset == INTEL_NB_5400) ? \
8359783SAdrian.Frost@Sun.COM 	((uint16_t)nb_pci_getb(0, 16, 2, 0xc5, ip) << 8) | \
8369783SAdrian.Frost@Sun.COM 	nb_pci_getb(0, 16, 2, 0xc4, ip) : \
8377532SSean.Ye@Sun.COM 	(uint16_t)nb_pci_getb(0, 16, 2, 0xc2, ip))
8387532SSean.Ye@Sun.COM #define	NERR_NF_INT_RD(ip)	((nb_chipset == INTEL_NB_5400) ? \
8399783SAdrian.Frost@Sun.COM 	((uint16_t)nb_pci_getb(0, 16, 2, 0xc7, ip) << 8) | \
8409783SAdrian.Frost@Sun.COM 	nb_pci_getb(0, 16, 2, 0xc6, ip) : \
8417532SSean.Ye@Sun.COM 	(uint16_t)nb_pci_getb(0, 16, 2, 0xc3, ip))
8427532SSean.Ye@Sun.COM #define	EMASK_INT_RD()		((nb_chipset == INTEL_NB_5400) ? \
8437532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 2, 0xd0, 0) : nb_pci_getb(0, 16, 2, 0xcc, 0))
8447532SSean.Ye@Sun.COM #define	ERR0_INT_RD()		((nb_chipset == INTEL_NB_5400) ? \
8457532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 2, 0xd4, 0) : nb_pci_getb(0, 16, 2, 0xd0, 0))
8467532SSean.Ye@Sun.COM #define	ERR1_INT_RD()		((nb_chipset == INTEL_NB_5400) ? \
8477532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 2, 0xd8, 0) : nb_pci_getb(0, 16, 2, 0xd1, 0))
8487532SSean.Ye@Sun.COM #define	ERR2_INT_RD()		((nb_chipset == INTEL_NB_5400) ? \
8497532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 2, 0xdc, 0) : nb_pci_getb(0, 16, 2, 0xd2, 0))
8507532SSean.Ye@Sun.COM #define	MCERR_INT_RD()		((nb_chipset == INTEL_NB_5400) ? \
8517532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 2, 0xe0, 0) : nb_pci_getb(0, 16, 2, 0xd3, 0))
8527532SSean.Ye@Sun.COM 
8537532SSean.Ye@Sun.COM #define	FERR_FAT_INT_WR(val)	if (nb_chipset == INTEL_NB_5400) { \
8547532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xc0,  \
8557532SSean.Ye@Sun.COM 					    val & 0xff); \
8567532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xc1, val >> 8); \
8577532SSean.Ye@Sun.COM 				} else { \
8587532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xc0, val); \
8597532SSean.Ye@Sun.COM 				}
8607532SSean.Ye@Sun.COM #define	FERR_NF_INT_WR(val)	if (nb_chipset == INTEL_NB_5400) { \
8617532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xc2,  \
8627532SSean.Ye@Sun.COM 					    val & 0xff); \
8637532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xc3, val >> 8); \
8647532SSean.Ye@Sun.COM 				} else { \
8657532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xc1, val); \
8667532SSean.Ye@Sun.COM 				}
8677532SSean.Ye@Sun.COM #define	NERR_FAT_INT_WR(val)	if (nb_chipset == INTEL_NB_5400) { \
8687532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xc4,  \
8697532SSean.Ye@Sun.COM 					    val & 0xff); \
8707532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xc5, val >> 8); \
8717532SSean.Ye@Sun.COM 				} else { \
8727532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xc2, val); \
8737532SSean.Ye@Sun.COM 				}
8747532SSean.Ye@Sun.COM #define	NERR_NF_INT_WR(val)	if (nb_chipset == INTEL_NB_5400) { \
8757532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xc6,  \
8767532SSean.Ye@Sun.COM 					    val & 0xff); \
8777532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xc7, val >> 8); \
8787532SSean.Ye@Sun.COM 				} else { \
8797532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xc3, val); \
8807532SSean.Ye@Sun.COM 				}
8817532SSean.Ye@Sun.COM #define	EMASK_5000_INT_WR(val)	nb_pci_putb(0, 16, 2, 0xcc, val)
8827532SSean.Ye@Sun.COM #define	EMASK_5400_INT_WR(val)	nb_pci_putl(0, 16, 2, 0xd0, val)
8837532SSean.Ye@Sun.COM #define	EMASK_INT_WR(val)	if (nb_chipset == INTEL_NB_5400) { \
8847532SSean.Ye@Sun.COM 					EMASK_5400_INT_WR(val); \
8857532SSean.Ye@Sun.COM 				} else { \
8867532SSean.Ye@Sun.COM 					EMASK_5000_INT_WR(val); \
8877532SSean.Ye@Sun.COM 				}
8887532SSean.Ye@Sun.COM #define	ERR0_INT_WR(val)	if (nb_chipset == INTEL_NB_5400) { \
8897532SSean.Ye@Sun.COM 					nb_pci_putl(0, 16, 2, 0xd4, val); \
8907532SSean.Ye@Sun.COM 				} else { \
8917532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xd0, val); \
8927532SSean.Ye@Sun.COM 				}
8937532SSean.Ye@Sun.COM #define	ERR1_INT_WR(val)	if (nb_chipset == INTEL_NB_5400) { \
8947532SSean.Ye@Sun.COM 					nb_pci_putl(0, 16, 2, 0xd8, val); \
8957532SSean.Ye@Sun.COM 				} else { \
8967532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xd1, val); \
8977532SSean.Ye@Sun.COM 				}
8987532SSean.Ye@Sun.COM #define	ERR2_INT_WR(val)	if (nb_chipset == INTEL_NB_5400) { \
8997532SSean.Ye@Sun.COM 					nb_pci_putl(0, 16, 2, 0xdc, val); \
9007532SSean.Ye@Sun.COM 				} else { \
9017532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xd2, val); \
9027532SSean.Ye@Sun.COM 				}
9037532SSean.Ye@Sun.COM #define	MCERR_INT_WR(val)	if (nb_chipset == INTEL_NB_5400) { \
9047532SSean.Ye@Sun.COM 					nb_pci_putl(0, 16, 2, 0xe0, val); \
9057532SSean.Ye@Sun.COM 				} else { \
9067532SSean.Ye@Sun.COM 					nb_pci_putb(0, 16, 2, 0xd3, val); \
9077532SSean.Ye@Sun.COM 				}
9087532SSean.Ye@Sun.COM 
90910049SVuong.Nguyen@Sun.COM #define	NRECINT_RD()		nb_pci_getl(0, 16, 2, \
91010049SVuong.Nguyen@Sun.COM 	nb_chipset == INTEL_NB_5400 ? 0xc8 : 0xc4, 0)
91110049SVuong.Nguyen@Sun.COM #define	RECINT_RD()		nb_pci_getl(0, 16, 2, \
91210049SVuong.Nguyen@Sun.COM 	nb_chipset == INTEL_NB_5400 ? 0xcc : 0xc8, 0)
9137532SSean.Ye@Sun.COM 
91410049SVuong.Nguyen@Sun.COM #define	NRECINT_WR()		nb_pci_putl(0, 16, 2, \
91510049SVuong.Nguyen@Sun.COM 	nb_chipset == INTEL_NB_5400 ? 0xc8 : 0xc4, 0)
91610049SVuong.Nguyen@Sun.COM #define	RECINT_WR()		nb_pci_putl(0, 16, 2, \
91710049SVuong.Nguyen@Sun.COM 	nb_chipset == INTEL_NB_5400 ? 0xcc : 0xc8, 0)
91810049SVuong.Nguyen@Sun.COM 
9197532SSean.Ye@Sun.COM 
9207532SSean.Ye@Sun.COM #define	FERR_FAT_FBD_RD(ip)	nb_pci_getl(0, 16, 1, 0x98, ip)
9217532SSean.Ye@Sun.COM #define	NERR_FAT_FBD_RD(ip)	nb_pci_getl(0, 16, 1, 0x9c, ip)
9227532SSean.Ye@Sun.COM #define	FERR_NF_FBD_RD(ip)	nb_pci_getl(0, 16, 1, 0xa0, ip)
9237532SSean.Ye@Sun.COM #define	NERR_NF_FBD_RD(ip)	nb_pci_getl(0, 16, 1, 0xa4, ip)
9247532SSean.Ye@Sun.COM #define	EMASK_FBD_RD()		nb_pci_getl(0, 16, 1, 0xa8, 0)
9257532SSean.Ye@Sun.COM #define	ERR0_FBD_RD()		nb_pci_getl(0, 16, 1, 0xac, 0)
9267532SSean.Ye@Sun.COM #define	ERR1_FBD_RD()		nb_pci_getl(0, 16, 1, 0xb0, 0)
9277532SSean.Ye@Sun.COM #define	ERR2_FBD_RD()		nb_pci_getl(0, 16, 1, 0xb4, 0)
9287532SSean.Ye@Sun.COM #define	MCERR_FBD_RD()		nb_pci_getl(0, 16, 1, 0xb8, 0)
9297532SSean.Ye@Sun.COM 
9307532SSean.Ye@Sun.COM #define	FERR_FAT_FBD_WR(val)	nb_pci_putl(0, 16, 1, 0x98, val)
9317532SSean.Ye@Sun.COM #define	NERR_FAT_FBD_WR(val)	nb_pci_putl(0, 16, 1, 0x9c, val)
9327532SSean.Ye@Sun.COM #define	FERR_NF_FBD_WR(val)	nb_pci_putl(0, 16, 1, 0xa0, val)
9337532SSean.Ye@Sun.COM #define	NERR_NF_FBD_WR(val)	nb_pci_putl(0, 16, 1, 0xa4, val)
9347532SSean.Ye@Sun.COM #define	EMASK_FBD_WR(val)	nb_pci_putl(0, 16, 1, 0xa8, val)
9357532SSean.Ye@Sun.COM #define	ERR0_FBD_WR(val)	nb_pci_putl(0, 16, 1, 0xac, val)
9367532SSean.Ye@Sun.COM #define	ERR1_FBD_WR(val)	nb_pci_putl(0, 16, 1, 0xb0, val)
9377532SSean.Ye@Sun.COM #define	ERR2_FBD_WR(val)	nb_pci_putl(0, 16, 1, 0xb4, val)
9387532SSean.Ye@Sun.COM #define	MCERR_FBD_WR(val)	nb_pci_putl(0, 16, 1, 0xb8, val)
9397532SSean.Ye@Sun.COM 
9407532SSean.Ye@Sun.COM #define	NRECMEMA_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
9417532SSean.Ye@Sun.COM 	nb_pci_getw(0, (branch) ? 22 : 21, 1, 0xbe, 0) : \
9427532SSean.Ye@Sun.COM 	nb_pci_getw(0, 16, 1, 0xbe, 0))
9437532SSean.Ye@Sun.COM #define	NRECMEMB_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
9447532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xc0, 0) : \
9457532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, 0xc0, 0))
9467532SSean.Ye@Sun.COM #define	NRECFGLOG_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
9477532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0x74, 0) : \
94810650SVuong.Nguyen@Sun.COM 	nb_pci_getl(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0x74 : 0xc4, 0))
9497532SSean.Ye@Sun.COM #define	NRECFBDA_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
9507532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xc4, 0) : \
9517532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0xc4 : 0xc8, 0))
9527532SSean.Ye@Sun.COM #define	NRECFBDB_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
9537532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xc8, 0) : \
9547532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0xc8 : 0xcc, 0))
9557532SSean.Ye@Sun.COM #define	NRECFBDC_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
9567532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xcc, 0) : \
9577532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0xcc : 0xd0, 0))
9587532SSean.Ye@Sun.COM #define	NRECFBDD_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
9597532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xd0, 0) : \
9607532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0xd0 : 0xd4, 0))
9617532SSean.Ye@Sun.COM #define	NRECFBDE_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
9627532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xd4, 0) : \
9637532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0xd4 : 0xd8, 0))
9647532SSean.Ye@Sun.COM #define	NRECFBDF_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
9657532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xd8, 0) : \
9667532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_7300 ? nb_pci_getw(0, 16, 1, 0xd8, 0) : 0)
9677532SSean.Ye@Sun.COM #define	REDMEMB_RD()	(nb_chipset == INTEL_NB_5400 ? \
9687532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0x7c, 0) : \
9697532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, 0x7c, 0))
9707532SSean.Ye@Sun.COM #define	RECMEMA_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
9717532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xe0, 0) & 0xffffff : \
9727532SSean.Ye@Sun.COM 	nb_pci_getw(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0xe0 : 0xe2, 0))
9737532SSean.Ye@Sun.COM #define	RECMEMB_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
9747532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xe4, 0) : \
9757532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, 0xe4, 0))
9767532SSean.Ye@Sun.COM #define	RECFGLOG_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
9777532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0x78, 0) : \
9787532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_7300 ?  nb_pci_getl(0, 16, 1, 0x78, 0) : \
9797532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, 0xe8, 0))
9807532SSean.Ye@Sun.COM #define	RECFBDA_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
9817532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xe8, 0) : \
9827532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0xe8 : 0xec, 0))
9837532SSean.Ye@Sun.COM #define	RECFBDB_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
9847532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xec, 0) : \
9857532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0xec : 0xf0, 0))
9867532SSean.Ye@Sun.COM #define	RECFBDC_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
9877532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xf0, 0) : \
9887532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0xf0 : 0xf4, 0))
9897532SSean.Ye@Sun.COM #define	RECFBDD_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
9907532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xf4, 0) : \
9917532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0xf4 : 0xf8, 0))
9927532SSean.Ye@Sun.COM #define	RECFBDE_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
9937532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xf8, 0) : \
9947532SSean.Ye@Sun.COM 	nb_pci_getl(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0xf8 : 0xfc, 0))
9957532SSean.Ye@Sun.COM #define	RECFBDF_RD(branch)	(nb_chipset == INTEL_NB_5400 ? \
9967532SSean.Ye@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 1, 0xfc, 0) : \
9977532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_7300 ? nb_pci_getw(0, 16, 1, 0xfc, 0) : 0)
9987532SSean.Ye@Sun.COM #define	NRECMEMA_WR(branch)	(nb_chipset == INTEL_NB_5400 ? \
9997532SSean.Ye@Sun.COM 	nb_pci_putw(0, (branch) ? 22 : 21, 1, 0xbe, 0) : \
10007532SSean.Ye@Sun.COM 	nb_pci_putw(0, 16, 1, 0xbe, 0))
10017532SSean.Ye@Sun.COM #define	NRECMEMB_WR(branch)	(nb_chipset == INTEL_NB_5400 ? \
10027532SSean.Ye@Sun.COM 	nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xc0, 0) : \
10037532SSean.Ye@Sun.COM 	nb_pci_putl(0, 16, 1, 0xc0, 0))
10047532SSean.Ye@Sun.COM #define	NRECFGLOG_WR(branch) \
10057532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
10067532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0x74, 0); \
10077532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
10087532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0x74, 0); \
10097532SSean.Ye@Sun.COM 	else \
10107532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xc4, 0)
10117532SSean.Ye@Sun.COM #define	NRECFBDA_WR(branch) \
10127532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
10137532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xc4, 0); \
10147532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
10157532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xc4, 0); \
10167532SSean.Ye@Sun.COM 	else \
10177532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xc8, 0)
10187532SSean.Ye@Sun.COM #define	NRECFBDB_WR(branch) \
10197532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
10207532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xc8, 0); \
10217532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
10227532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xc8, 0); \
10237532SSean.Ye@Sun.COM 	else \
10247532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xcc, 0)
10257532SSean.Ye@Sun.COM #define	NRECFBDC_WR(branch) \
10267532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
10277532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xcc, 0); \
10287532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
10297532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xcc, 0); \
10307532SSean.Ye@Sun.COM 	else \
10317532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xd0, 0)
10327532SSean.Ye@Sun.COM #define	NRECFBDD_WR(branch) \
10337532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
10347532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xd0, 0); \
10357532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
10367532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xd0, 0); \
10377532SSean.Ye@Sun.COM 	else \
10387532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xd4, 0)
10397532SSean.Ye@Sun.COM #define	NRECFBDE_WR(branch) \
10407532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
10417532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xd4, 0); \
10427532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
10437532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xd4, 0); \
10447532SSean.Ye@Sun.COM 	else \
10457532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xd8, 0)
10467532SSean.Ye@Sun.COM #define	NRECFBDF_WR(branch) \
10477532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
10487532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xd8, 0); \
10497532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
10507532SSean.Ye@Sun.COM 		nb_pci_putw(0, 16, 1, 0xd8, 0);
10517532SSean.Ye@Sun.COM #define	REDMEMB_WR(branch) \
10527532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
10537532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0x7c, 0); \
10547532SSean.Ye@Sun.COM 	else \
10557532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0x7c, 0)
10567532SSean.Ye@Sun.COM #define	RECMEMA_WR(branch) \
10577532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
10587532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xe0, 0); \
10597532SSean.Ye@Sun.COM 	else \
10607532SSean.Ye@Sun.COM 		nb_pci_putw(0, 16, 1, nb_chipset == INTEL_NB_7300 ? 0xe0 : \
10617532SSean.Ye@Sun.COM 		    0xe2, 0)
10627532SSean.Ye@Sun.COM #define	RECMEMB_WR(branch) \
10637532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
10647532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xe4, 0); \
10657532SSean.Ye@Sun.COM 	else \
10667532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xe4, 0)
10677532SSean.Ye@Sun.COM #define	RECFGLOG_WR(branch) \
10687532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
10697532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0x78, 0); \
10707532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
10717532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0x78, 0); \
10727532SSean.Ye@Sun.COM 	else \
10737532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xe8, 0)
10747532SSean.Ye@Sun.COM #define	RECFBDA_WR(branch) \
10757532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
10767532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xe8, 0); \
10777532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
10787532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xe8, 0); \
10797532SSean.Ye@Sun.COM 	else \
10807532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xec, 0)
10817532SSean.Ye@Sun.COM #define	RECFBDB_WR(branch) \
10827532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
10837532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xec, 0); \
10847532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
10857532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xec, 0); \
10867532SSean.Ye@Sun.COM 	else \
10877532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xf0, 0)
10887532SSean.Ye@Sun.COM #define	RECFBDC_WR(branch) \
10897532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
10907532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xf0, 0); \
10917532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
10927532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xf0, 0); \
10937532SSean.Ye@Sun.COM 	else \
10947532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xf4, 0)
10957532SSean.Ye@Sun.COM #define	RECFBDD_WR(branch) \
10967532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
10977532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xf4, 0); \
10987532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
10997532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xf4, 0); \
11007532SSean.Ye@Sun.COM 	else \
11017532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xf8, 0)
11027532SSean.Ye@Sun.COM #define	RECFBDE_WR(branch) \
11037532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
11047532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xf8, 0); \
11057532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
11067532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xf8, 0); \
11077532SSean.Ye@Sun.COM 	else \
11087532SSean.Ye@Sun.COM 		nb_pci_putl(0, 16, 1, 0xfc, 0)
11097532SSean.Ye@Sun.COM #define	RECFBDF_WR(branch) \
11107532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5400) \
11117532SSean.Ye@Sun.COM 		nb_pci_putl(0, (branch) ? 22 : 21, 1, 0xfc, 0); \
11127532SSean.Ye@Sun.COM 	else if (nb_chipset == INTEL_NB_7300) \
11137532SSean.Ye@Sun.COM 		nb_pci_putw(0, 16, 1, 0xf8, 0); \
11147532SSean.Ye@Sun.COM 
111510049SVuong.Nguyen@Sun.COM #define	FERR_NF_MEM_RD(ip)	nb_pci_getl(0, 16, 1, 0xa0, ip)
111610049SVuong.Nguyen@Sun.COM #define	NERR_NF_MEM_RD(ip)	nb_pci_getl(0, 16, 1, 0xa4, ip)
111710049SVuong.Nguyen@Sun.COM #define	EMASK_MEM_RD()		nb_pci_getl(0, 16, 1, 0xa8, 0)
111810049SVuong.Nguyen@Sun.COM #define	ERR0_MEM_RD()		nb_pci_getl(0, 16, 1, 0xac, 0)
111910049SVuong.Nguyen@Sun.COM #define	ERR1_MEM_RD()		nb_pci_getl(0, 16, 1, 0xb0, 0)
112010049SVuong.Nguyen@Sun.COM #define	ERR2_MEM_RD()		nb_pci_getl(0, 16, 1, 0xb4, 0)
112110049SVuong.Nguyen@Sun.COM #define	MCERR_MEM_RD()		nb_pci_getl(0, 16, 1, 0xb8, 0)
112210049SVuong.Nguyen@Sun.COM #define	FERR_NF_MEM_WR(val)	\
112310049SVuong.Nguyen@Sun.COM 	nb_pci_putl(0, 16, 1, 0xa0, (val))
112410049SVuong.Nguyen@Sun.COM #define	NERR_NF_MEM_WR(val)	\
112510049SVuong.Nguyen@Sun.COM 	nb_pci_putl(0, 16, 1, 0xa4, (val))
112610049SVuong.Nguyen@Sun.COM #define	EMASK_MEM_WR(val)	\
112710049SVuong.Nguyen@Sun.COM 	nb_pci_putl(0, 16, 1, 0xa8, (val))
112810049SVuong.Nguyen@Sun.COM #define	ERR0_MEM_WR(val)	\
112910049SVuong.Nguyen@Sun.COM 	nb_pci_putl(0, 16, 1, 0xac, (val))
113010049SVuong.Nguyen@Sun.COM #define	ERR1_MEM_WR(val)	\
113110049SVuong.Nguyen@Sun.COM 	nb_pci_putl(0, 16, 1, 0xb0, (val))
113210049SVuong.Nguyen@Sun.COM #define	ERR2_MEM_WR(val)	\
113310049SVuong.Nguyen@Sun.COM 	nb_pci_putl(0, 16, 1, 0xb4, (val))
113410049SVuong.Nguyen@Sun.COM #define	MCERR_MEM_WR(val)	\
113510049SVuong.Nguyen@Sun.COM 	nb_pci_putl(0, 16, 1, 0xb8, (val))
113610049SVuong.Nguyen@Sun.COM #define	VALIDLOG_RD(branch)	\
113710049SVuong.Nguyen@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 0, 0x18c, 0)
113810049SVuong.Nguyen@Sun.COM #define	MEM_NRECMEMA_RD(branch) \
113910049SVuong.Nguyen@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 0, 0x190, 0)
114010049SVuong.Nguyen@Sun.COM #define	MEM_NRECMEMB_RD(branch) \
114110049SVuong.Nguyen@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 0, 0x194, 0)
114210049SVuong.Nguyen@Sun.COM #define	MEM_REDMEMA_RD(branch) \
114310049SVuong.Nguyen@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 0, 0x198, 0)
114410049SVuong.Nguyen@Sun.COM #define	MEM_REDMEMB_RD(branch) \
114510049SVuong.Nguyen@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 0, 0x19c, 0)
114610049SVuong.Nguyen@Sun.COM #define	MEM_RECMEMA_RD(branch) \
114710049SVuong.Nguyen@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 0, 0x1a0, 0)
114810049SVuong.Nguyen@Sun.COM #define	MEM_RECMEMB_RD(branch) \
114910049SVuong.Nguyen@Sun.COM 	nb_pci_getl(0, (branch) ? 22 : 21, 0, 0x1a4, 0)
115010049SVuong.Nguyen@Sun.COM #define	MEM_CERRCNT_RD(branch) nb_pci_getl(0, 21, 0, 0x180, 0)
115110049SVuong.Nguyen@Sun.COM #define	MEM_CERRCNT_EXT_RD(branch) nb_pci_getw(0, 21, 0, 0x184, 0)
115210049SVuong.Nguyen@Sun.COM #define	MEM_NRECMEMA_WR(branch) \
115310049SVuong.Nguyen@Sun.COM 	nb_pci_putl(0, (branch) ? 22 : 21, 0, 0x190, 0)
115410049SVuong.Nguyen@Sun.COM #define	MEM_NRECMEMB_WR(branch) \
115510049SVuong.Nguyen@Sun.COM 	nb_pci_putl(0, (branch) ? 22 : 21, 0, 0x194, 0)
115610049SVuong.Nguyen@Sun.COM #define	MEM_REDMEMA_WR(branch) \
115710049SVuong.Nguyen@Sun.COM 	nb_pci_putl(0, (branch) ? 22 : 21, 0, 0x198, 0)
115810049SVuong.Nguyen@Sun.COM #define	MEM_REDMEMB_WR(branch) \
115910049SVuong.Nguyen@Sun.COM 	nb_pci_putl(0, (branch) ? 22 : 21, 0, 0x19c, 0)
116010049SVuong.Nguyen@Sun.COM #define	MEM_RECMEMA_WR(branch) \
116110049SVuong.Nguyen@Sun.COM 	nb_pci_putl(0, (branch) ? 22 : 21, 0, 0x1a0, 0)
116210049SVuong.Nguyen@Sun.COM #define	MEM_RECMEMB_WR(branch) \
116310049SVuong.Nguyen@Sun.COM 	nb_pci_putl(0, (branch) ? 22 : 21, 0, 0x1a4, 0)
116410049SVuong.Nguyen@Sun.COM 
11657532SSean.Ye@Sun.COM #define	MC_RD()		nb_pci_getl(0, 16, 1, 0x40, 0)
11667532SSean.Ye@Sun.COM #define	MC_WR(val)	nb_pci_putl(0, 16, 1, 0x40, val)
11677532SSean.Ye@Sun.COM #define	MCA_RD()	nb_pci_getl(0, 16, 1, 0x58, 0)
11687532SSean.Ye@Sun.COM #define	TOLM_RD()	nb_pci_getw(0, 16, 1, 0x6c, 0)
11697532SSean.Ye@Sun.COM 
117010049SVuong.Nguyen@Sun.COM #define	MTR_5100_RD(channel, rank) ((rank) < 4 ? \
117110049SVuong.Nguyen@Sun.COM 	nb_pci_getw(0, (channel) == 0 ? 21 : 22, 0, 0x154 + ((rank) * 2), 0) : \
117210049SVuong.Nguyen@Sun.COM 	nb_pci_getw(0, (channel) == 0 ? 21 : 22, 0, 0x1b0 + (((rank) & 3) * 2),\
117310049SVuong.Nguyen@Sun.COM 	0))
117410049SVuong.Nguyen@Sun.COM 
117510049SVuong.Nguyen@Sun.COM #define	MTR_RD(branch, dimm) (nb_chipset == INTEL_NB_5100 ? \
117610049SVuong.Nguyen@Sun.COM 	MTR_5100_RD(branch, dimm) : \
117710049SVuong.Nguyen@Sun.COM 	nb_chipset == INTEL_NB_5400 ? \
11787532SSean.Ye@Sun.COM 	nb_pci_getw(0, (branch) == 0 ? 21 : 22, 0, 0x80 + dimm * 2, 0) : \
11797532SSean.Ye@Sun.COM 	((branch) == 0) ? \
11807532SSean.Ye@Sun.COM 	nb_pci_getw(0, 21, 0, \
11817532SSean.Ye@Sun.COM 	dimm >= 4 ? 0x82 + (dimm & 3) * 4 : 0x80 + dimm * 4, 0) : \
11827532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
11837532SSean.Ye@Sun.COM 	nb_pci_getw(0, 22, 0, \
11847532SSean.Ye@Sun.COM 	dimm >= 4 ? 0x82 + (dimm & 3) * 4 : 0x80 + dimm * 4, 0) : 0)
11857532SSean.Ye@Sun.COM #define	MIR_RD(reg)	nb_pci_getw(0, 16, 1, 0x80 + ((reg)*4), 0)
11867532SSean.Ye@Sun.COM 
11877532SSean.Ye@Sun.COM #define	DMIR_RD(branch, reg) \
118810049SVuong.Nguyen@Sun.COM 	nb_chipset == INTEL_NB_5100 ? \
118910049SVuong.Nguyen@Sun.COM 	nb_pci_getl(0, ((branch) == 0) ? 21 : 22, 0, 0x15c + ((reg)*4), 0) : \
11907532SSean.Ye@Sun.COM 	((branch) == 0) ? nb_pci_getl(0, 21, 0, 0x90 + ((reg)*4), 0) : \
11917532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
11927532SSean.Ye@Sun.COM 	nb_pci_getl(0, 22, 0, 0x90 + ((reg)*4), 0) : 0
11937532SSean.Ye@Sun.COM 
11947532SSean.Ye@Sun.COM #define	SPCPC_RD(branch) (nb_chipset == INTEL_NB_5000P || \
11957532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000X || nb_chipset == INTEL_NB_5000V || \
11967532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000Z ? \
11977532SSean.Ye@Sun.COM 	(((branch) == 0) ? \
11987532SSean.Ye@Sun.COM 	(uint32_t)nb_pci_getb(0, 21, 0, 0x40, 0) : \
11997532SSean.Ye@Sun.COM 	    (nb_number_memory_controllers == 2) ? \
12007532SSean.Ye@Sun.COM 	    (uint32_t)nb_pci_getb(0, 22, 0, 0x40, 0) : 0) : \
12017532SSean.Ye@Sun.COM 	nb_pci_getl(0, ((branch) == 0) ? 21 : 22, 0, 0x40, 0))
12027532SSean.Ye@Sun.COM 
12037532SSean.Ye@Sun.COM #define	SPCPC_SPARE_ENABLE (nb_chipset == INTEL_NB_5000P || \
12047532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000X || nb_chipset == INTEL_NB_5000V || \
12057532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000Z ? 1 : 0x20)
12067532SSean.Ye@Sun.COM #define	SPCPC_SPRANK(spcpc) (nb_chipset == INTEL_NB_5000P || \
12077532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000X || nb_chipset == INTEL_NB_5000V || \
12087532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000Z ? \
12097532SSean.Ye@Sun.COM 	(((spcpc) >> 1) & 7) : ((spcpc) & 0xf))
12107532SSean.Ye@Sun.COM 
12117532SSean.Ye@Sun.COM #define	SPCPS_RD(branch) ((branch) == 0) ? \
12127532SSean.Ye@Sun.COM 	nb_pci_getb(0, 21, 0, nb_chipset == INTEL_NB_5000P || \
12137532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000X || nb_chipset == INTEL_NB_5000V || \
12147532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000Z ? 0x41 : 0x43, 0) : \
12157532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
12167532SSean.Ye@Sun.COM 	nb_pci_getb(0, 22, 0, nb_chipset == INTEL_NB_5000P || \
12177532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000X || nb_chipset == INTEL_NB_5000V || \
12187532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000Z ? 0x41 : 0x43, 0) : 0
12197532SSean.Ye@Sun.COM 
12207532SSean.Ye@Sun.COM #define	SPCPS_WR(branch) \
12217532SSean.Ye@Sun.COM 	if ((branch) == 0) { \
12227532SSean.Ye@Sun.COM 		nb_pci_putb(0, 21, 0, nb_chipset == INTEL_NB_5000P || \
12237532SSean.Ye@Sun.COM 		    nb_chipset == INTEL_NB_5000X || \
12247532SSean.Ye@Sun.COM 		    nb_chipset == INTEL_NB_5000V || \
12257532SSean.Ye@Sun.COM 		    nb_chipset == INTEL_NB_5000Z ? 0x41 : 0x43, 0); \
12267532SSean.Ye@Sun.COM 	} else if (nb_number_memory_controllers == 2) { \
12277532SSean.Ye@Sun.COM 		nb_pci_putb(0, 22, 0, nb_chipset == INTEL_NB_5000P || \
12287532SSean.Ye@Sun.COM 		    nb_chipset == INTEL_NB_5000X || \
12297532SSean.Ye@Sun.COM 		    nb_chipset == INTEL_NB_5000V || \
12307532SSean.Ye@Sun.COM 		    nb_chipset == INTEL_NB_5000Z ? 0x41 : 0x43, 0); \
12317532SSean.Ye@Sun.COM 	}
12327532SSean.Ye@Sun.COM 
12337532SSean.Ye@Sun.COM #define	SPCPS_SPARE_DEPLOYED (nb_chipset == INTEL_NB_5000P || \
12347532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000X || nb_chipset == INTEL_NB_5000V || \
12357532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000Z ? 0x11 : 0x60)
12367532SSean.Ye@Sun.COM #define	SPCPS_FAILED_RANK(spcps) (nb_chipset == INTEL_NB_5000P || \
12377532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000X || nb_chipset == INTEL_NB_5000V || \
12387532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000Z ? (((spcps) >> 1) & 7) : ((spcps) & 0xf))
12397532SSean.Ye@Sun.COM 
12407532SSean.Ye@Sun.COM #define	UERRCNT_RD(branch) ((branch) == 0) ? \
12417532SSean.Ye@Sun.COM 	nb_pci_getl(0, 21, 0, 0xa4, 0) : \
12427532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
12437532SSean.Ye@Sun.COM 	nb_pci_getl(0, 22, 0, 0xa4, 0) : 0
12447532SSean.Ye@Sun.COM #define	CERRCNT_RD(branch) ((branch) == 0) ? \
12457532SSean.Ye@Sun.COM 	nb_pci_getl(0, 21, 0, 0xa8, 0) : \
12467532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
12477532SSean.Ye@Sun.COM 	nb_pci_getl(0, 22, 0, 0xa8, 0) : 0
12487532SSean.Ye@Sun.COM #define	CERRCNTA_RD(branch, channel) \
12497532SSean.Ye@Sun.COM 	nb_pci_getl(0, branch == 0 ? 21 : 22, 0, \
12507532SSean.Ye@Sun.COM 	(channel & 1) == 0 ? 0xe0 : 0xf0, 0)
12517532SSean.Ye@Sun.COM #define	CERRCNTB_RD(branch, channel) \
12527532SSean.Ye@Sun.COM 	nb_pci_getl(0, branch == 0 ? 21 : 22, 0, \
12537532SSean.Ye@Sun.COM 	(channel & 1) == 0 ? 0xe4 : 0xf4, 0)
12547532SSean.Ye@Sun.COM #define	CERRCNTC_RD(branch, channel) \
12557532SSean.Ye@Sun.COM 	(nb_chipset == INTEL_NB_7300 ? \
12567532SSean.Ye@Sun.COM 	nb_pci_getl(0, branch == 0 ? 21 : 22, 0, \
12577532SSean.Ye@Sun.COM 	(channel & 1) == 0 ? 0xe8 : 0xf8, 0) : 0)
12587532SSean.Ye@Sun.COM #define	CERRCNTD_RD(branch, channel) \
12597532SSean.Ye@Sun.COM 	(nb_chipset == INTEL_NB_7300 ? \
12607532SSean.Ye@Sun.COM 	nb_pci_getl(0, branch == 0 ? 21 : 22, 0, \
12617532SSean.Ye@Sun.COM 	(channel & 1) == 0 ? 0xec : 0xfc, 0) : 0)
12627532SSean.Ye@Sun.COM #define	BADRAMA_RD(branch) ((branch) == 0) ? \
12637532SSean.Ye@Sun.COM 	nb_pci_getl(0, 21, 0, 0xac, 0) : \
12647532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
12657532SSean.Ye@Sun.COM 	nb_pci_getl(0, 22, 0, 0xac, 0) : 0
12667532SSean.Ye@Sun.COM #define	BADRAMB_RD(branch) ((branch) == 0) ? \
12677532SSean.Ye@Sun.COM 	nb_pci_getw(0, 21, 0, 0xb0, 0) : \
12687532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
12697532SSean.Ye@Sun.COM 	nb_pci_getw(0, 22, 0, 0xb0, 0) : 0
12707532SSean.Ye@Sun.COM #define	BADCNT_RD(branch) ((branch) == 0) ? \
12717532SSean.Ye@Sun.COM 	nb_pci_getl(0, 21, 0, 0xb4, 0) : \
12727532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
12737532SSean.Ye@Sun.COM 	nb_pci_getl(0, 22, 0, 0xb4, 0) : 0
12747532SSean.Ye@Sun.COM 
12757532SSean.Ye@Sun.COM #define	UERRCNT_WR(branch, val)	((branch) == 0) ? \
12767532SSean.Ye@Sun.COM 	nb_pci_putl(0, 21, 0, 0xa4, val) : \
12777532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
12787532SSean.Ye@Sun.COM 	nb_pci_putl(0, 22, 0, 0xa4, val) \
12797532SSean.Ye@Sun.COM 					: 0
12807532SSean.Ye@Sun.COM #define	CERRCNT_WR(branch, val)	((branch) == 0) ? \
12817532SSean.Ye@Sun.COM 	nb_pci_putl(0, 21, 0, 0xa8, val) : \
12827532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
12837532SSean.Ye@Sun.COM 	nb_pci_putl(0, 22, 0, 0xa8, val) : 0
12847532SSean.Ye@Sun.COM #define	BADRAMA_WR(branch, val)	((branch) == 0) ? \
12857532SSean.Ye@Sun.COM 	nb_pci_putl(0, 21, 0, 0xac, val) : \
12867532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
12877532SSean.Ye@Sun.COM 	nb_pci_putl(0, 22, 0, 0xac, val) : 0
12887532SSean.Ye@Sun.COM #define	BADRAMB_WR(branch, val)	((branch) == 0) ? \
12897532SSean.Ye@Sun.COM 	nb_pci_putw(0, 21, 0, 0xb0, val) : \
12907532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
12917532SSean.Ye@Sun.COM 	nb_pci_putw(0, 22, 0, 0xb0) : 0
12927532SSean.Ye@Sun.COM #define	BADCNT_WR(branch, val) ((branch) == 0) ? \
12937532SSean.Ye@Sun.COM 	nb_pci_putl(0, 21, 0, 0xb4, val) : \
12947532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
12957532SSean.Ye@Sun.COM 	nb_pci_putl(0, 22, 0, 0xb4, val) : 0
12967532SSean.Ye@Sun.COM 
129710049SVuong.Nguyen@Sun.COM #define	SPD_RD(branch, channel) \
129810049SVuong.Nguyen@Sun.COM 	nb_chipset == INTEL_NB_5100 ? nb_pci_getw(0, 16, 1, 0x48, 0) : \
129910049SVuong.Nguyen@Sun.COM 	((branch) == 0) ? \
13007532SSean.Ye@Sun.COM 	nb_pci_getw(0, 21, 0, 0x74 + ((channel) * 2), 0) : \
13017532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
13027532SSean.Ye@Sun.COM 	nb_pci_getw(0, 22, 0, 0x74 + ((channel) * 2), 0) : 0
13037532SSean.Ye@Sun.COM #define	SPDCMDRD(branch, channel) ((branch) == 0) ? \
13047532SSean.Ye@Sun.COM 	nb_pci_getl(0, 21, 0, 0x78 + ((channel) * 4), 0) : \
13057532SSean.Ye@Sun.COM 	(nb_number_memory_controllers == 2) ? \
13067532SSean.Ye@Sun.COM 	nb_pci_getl(0, 22, 0, 0x78 + ((channel) * 4), 0) : 0
13077532SSean.Ye@Sun.COM 
13087532SSean.Ye@Sun.COM #define	SPDCMD1_1_WR(val)	nb_pci_putl(0, 21, 0, 0x7c, val)
13097532SSean.Ye@Sun.COM #define	SPDCMD_WR(branch, channel, val)	\
131010049SVuong.Nguyen@Sun.COM 	if (nb_chipset == INTEL_NB_5100) \
131110049SVuong.Nguyen@Sun.COM 	nb_pci_putl(0, 16, 1, 0x4c, val); \
131210049SVuong.Nguyen@Sun.COM 	else if ((branch) == 0) \
13137532SSean.Ye@Sun.COM 	nb_pci_putl(0, 21, 0, 0x78 + ((channel) * 4), val); \
13147532SSean.Ye@Sun.COM 	else if (nb_number_memory_controllers == 2) \
13157532SSean.Ye@Sun.COM 	nb_pci_putl(0, 22, 0, 0x78 + ((channel) * 4), val)
13167532SSean.Ye@Sun.COM 
13177532SSean.Ye@Sun.COM #define	UNCERRSTS_RD(pex)		nb_pci_getl(0, pex, 0, 0x104, 0)
13187532SSean.Ye@Sun.COM #define	UNCERRMSK_RD(pex) nb_pci_getl(0, pex, 0, 0x108, 0)
13197532SSean.Ye@Sun.COM #define	PEX_FAT_FERR_ESI_RD()	nb_pci_getl(0, 0, 0, 0x154, 0)
13207532SSean.Ye@Sun.COM #define	PEX_FAT_NERR_ESI_RD()	nb_pci_getl(0, 0, 0, 0x15c, 0)
13217532SSean.Ye@Sun.COM #define	PEX_NF_FERR_ESI_RD()	nb_pci_getl(0, 0, 0, 0x158, 0)
13227532SSean.Ye@Sun.COM #define	PEX_NF_NERR_ESI_RD()	nb_pci_getl(0, 0, 0, 0x160, 0)
13237532SSean.Ye@Sun.COM #define	PEX_ERR_DOCMD_RD(pex)	((nb_chipset == INTEL_NB_5400) ? \
13247532SSean.Ye@Sun.COM     nb_pci_getw(0, pex, 0, 0x144, 0) : nb_pci_getl(0, pex, 0, 0x144, 0))
13257532SSean.Ye@Sun.COM #define	PEX_ERR_PIN_MASK_RD(pex)	nb_pci_getw(0, pex, 0, 0x146, 0)
13267532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_RD(pex)	nb_pci_getl(0, pex, 0, 0x148, 0)
13277532SSean.Ye@Sun.COM #define	EMASK_COR_PEX_RD(pex)	nb_pci_getl(0, pex, 0, 0x14c, 0)
13287532SSean.Ye@Sun.COM #define	EMASK_RP_PEX_RD(pex)	nb_pci_getl(0, pex, 0, 0x150, 0)
13297532SSean.Ye@Sun.COM 
13307532SSean.Ye@Sun.COM #define	UNCERRSTS_WR(pex, val)	nb_pci_putl(0, pex, 0, 0x104, val)
13317532SSean.Ye@Sun.COM #define	UNCERRMSK_WR(pex, val)	nb_pci_putl(0, pex, 0, 0x108, val)
13327532SSean.Ye@Sun.COM #define	PEX_FAT_FERR_ESI_WR(val) nb_pci_putl(0, 0, 0, 0x154, val)
13337532SSean.Ye@Sun.COM #define	PEX_FAT_NERR_ESI_WR(val) nb_pci_putl(0, 0, 0, 0x15c, val)
13347532SSean.Ye@Sun.COM #define	PEX_NF_FERR_ESI_WR(val)	nb_pci_putl(0, 0, 0, 0x158, val)
13357532SSean.Ye@Sun.COM #define	PEX_NF_NERR_ESI_WR(val)	nb_pci_putl(0, 0, 0, 0x160, val)
13367532SSean.Ye@Sun.COM #define	PEX_ERR_DOCMD_WR(pex, val)	((nb_chipset == INTEL_NB_5400) ? \
13377532SSean.Ye@Sun.COM     nb_pci_putw(0, pex, 0, 0x144, val) : nb_pci_putl(0, pex, 0, 0x144, val))
13387532SSean.Ye@Sun.COM #define	PEX_ERR_PIN_MASK_WR(pex, val)	nb_pci_putw(0, pex, 0, 0x146, val)
13397532SSean.Ye@Sun.COM #define	EMASK_UNCOR_PEX_WR(pex, val)	nb_pci_putl(0, pex, 0, 0x148, val)
13407532SSean.Ye@Sun.COM #define	EMASK_COR_PEX_WR(pex, val)	nb_pci_putl(0, pex, 0, 0x14c, val)
13417532SSean.Ye@Sun.COM #define	EMASK_RP_PEX_WR(pex, val)	nb_pci_putl(0, pex, 0, 0x150, val)
13427532SSean.Ye@Sun.COM 
13437532SSean.Ye@Sun.COM #define	PEX_FAT_FERR_RD(pex, ip)	nb_pci_getl(0, pex, 0, 0x154, ip)
13447532SSean.Ye@Sun.COM #define	PEX_FAT_NERR_RD(pex, ip)	nb_pci_getl(0, pex, 0, 0x15c, ip)
13457532SSean.Ye@Sun.COM #define	PEX_NF_FERR_RD(pex, ip)	nb_pci_getl(0, pex, 0, 0x158, ip)
13467532SSean.Ye@Sun.COM #define	PEX_NF_NERR_RD(pex, ip)	nb_pci_getl(0, pex, 0, 0x160, ip)
13477532SSean.Ye@Sun.COM #define	UNCERRSEV_RD(pex)	nb_pci_getl(0, pex, 0, 0x10c, 0)
13487532SSean.Ye@Sun.COM #define	CORERRSTS_RD(pex)	nb_pci_getl(0, pex, 0, 0x110, 0)
13497532SSean.Ye@Sun.COM #define	RPERRSTS_RD(pex)	nb_pci_getl(0, pex, 0, 0x130, 0)
13507532SSean.Ye@Sun.COM #define	RPERRSID_RD(pex)	nb_pci_getl(0, pex, 0, 0x134, 0)
13517532SSean.Ye@Sun.COM #define	AERRCAPCTRL_RD(pex)	nb_pci_getl(0, pex, 0, 0x118, 0)
13527532SSean.Ye@Sun.COM #define	PEXDEVSTS_RD(pex)	nb_pci_getw(0, pex, 0, 0x76, 0)
13537532SSean.Ye@Sun.COM #define	PEXROOTCTL_RD(pex)	nb_pci_getw(0, pex, 0, 0x88, 0)
13547532SSean.Ye@Sun.COM 
13557532SSean.Ye@Sun.COM #define	PEX_FAT_FERR_WR(pex, val) nb_pci_putl(0, pex, 0, 0x154, val)
13567532SSean.Ye@Sun.COM #define	PEX_FAT_NERR_WR(pex, val) nb_pci_putl(0, pex, 0, 0x15c, val)
13577532SSean.Ye@Sun.COM #define	PEX_NF_FERR_WR(pex, val)	nb_pci_putl(0, pex, 0, 0x158, val)
13587532SSean.Ye@Sun.COM #define	PEX_NF_NERR_WR(pex, val)	nb_pci_putl(0, pex, 0, 0x160, val)
13597532SSean.Ye@Sun.COM #define	CORERRSTS_WR(pex, val)	nb_pci_putl(0, pex, 0, 0x110, val)
13607532SSean.Ye@Sun.COM #define	UNCERRSEV_WR(pex, val)	nb_pci_putl(0, pex, 0, 0x10c, val)
13617532SSean.Ye@Sun.COM #define	RPERRSTS_WR(pex, val)	nb_pci_putl(0, pex, 0, 0x130, val)
13627532SSean.Ye@Sun.COM #define	PEXDEVSTS_WR(pex, val)	nb_pci_putl(0, pex, 0, 0x76, val)
13637532SSean.Ye@Sun.COM #define	PEXROOTCTL_WR(pex, val)	nb_pci_putw(0, pex, 0, 0x88, val)
13647532SSean.Ye@Sun.COM 
13657532SSean.Ye@Sun.COM #define	PCISTS_RD(ip)		nb_pci_getw(0, 8, 0, 0x6, ip)
13667532SSean.Ye@Sun.COM #define	PCIDEVSTS_RD()		nb_pci_getw(0, 8, 0, 0x76, 0)
13677532SSean.Ye@Sun.COM #define	PCISTS_WR(val)		nb_pci_putw(0, 8, 0, 0x6, val)
13687532SSean.Ye@Sun.COM #define	PCIDEVSTS_WR(val)	nb_pci_putw(0, 8, 0, 0x76, val)
13697532SSean.Ye@Sun.COM 
13707532SSean.Ye@Sun.COM #define	RANK_MASK	(nb_chipset != INTEL_NB_7300 ? 7 : 0xf)
13717532SSean.Ye@Sun.COM #define	CAS_MASK	(nb_chipset == INTEL_NB_5000P || \
13727532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000X || nb_chipset == INTEL_NB_5000V || \
13737532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000Z ? 0xfff : 0x1fff)
13747532SSean.Ye@Sun.COM #define	RAS_MASK	(nb_chipset == INTEL_NB_5000P || \
13757532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000X || nb_chipset == INTEL_NB_5000V || \
13767532SSean.Ye@Sun.COM 	nb_chipset == INTEL_NB_5000Z ? 0x7fff : 0xffff)
13777532SSean.Ye@Sun.COM #define	BANK_MASK	7
13787532SSean.Ye@Sun.COM 
13797532SSean.Ye@Sun.COM #define	DMIR_RANKS(dmir, rank0, rank1, rank2, rank3) \
13807532SSean.Ye@Sun.COM 	if (nb_chipset == INTEL_NB_5000P || nb_chipset == INTEL_NB_5000X || \
138110650SVuong.Nguyen@Sun.COM 	    nb_chipset == INTEL_NB_5000V || nb_chipset == INTEL_NB_5000Z) { \
138210650SVuong.Nguyen@Sun.COM 		rank0 = (dmir) & 0x7; \
138310650SVuong.Nguyen@Sun.COM 		rank1 = ((dmir) >> 3) & 0x7; \
138410650SVuong.Nguyen@Sun.COM 		rank2 = ((dmir) >> 6) & 0x7; \
138510650SVuong.Nguyen@Sun.COM 		rank3 = ((dmir) >> 9) & 0x7; \
138610650SVuong.Nguyen@Sun.COM 	} else if (nb_chipset == INTEL_NB_5100) { \
138710650SVuong.Nguyen@Sun.COM 		rank0 = (dmir) & 0x7; \
138810650SVuong.Nguyen@Sun.COM 		rank1 = ((dmir) >> 4) & 0x7; \
138910650SVuong.Nguyen@Sun.COM 		rank2 = ((dmir) >> 8) & 0x7; \
139010650SVuong.Nguyen@Sun.COM 		rank3 = ((dmir) >> 12) & 0x7; \
13917532SSean.Ye@Sun.COM 	} else { \
13927532SSean.Ye@Sun.COM 		rank0 = (dmir) & 0xf; \
13937532SSean.Ye@Sun.COM 		rank1 = ((dmir) >> 4) & 0xf; \
13947532SSean.Ye@Sun.COM 		rank2 = ((dmir) >> 8) & 0xf; \
13957532SSean.Ye@Sun.COM 		rank3 = ((dmir) >> 12) & 0xf; \
13967532SSean.Ye@Sun.COM 	}
13977532SSean.Ye@Sun.COM 
13987532SSean.Ye@Sun.COM #define	FERR_FAT_THR_RD(ip)	nb_pci_getb(0, 16, 2, 0xf0, ip)
13997532SSean.Ye@Sun.COM #define	FERR_NF_THR_RD(ip)	nb_pci_getb(0, 16, 2, 0xf1, ip)
14007532SSean.Ye@Sun.COM #define	NERR_FAT_THR_RD(ip)	nb_pci_getb(0, 16, 2, 0xf2, ip)
14017532SSean.Ye@Sun.COM #define	NERR_NF_THR_RD(ip)	nb_pci_getb(0, 16, 2, 0xf3, ip)
14027532SSean.Ye@Sun.COM #define	EMASK_THR_RD(ip)	nb_pci_getw(0, 16, 2, 0xf6, ip)
14037532SSean.Ye@Sun.COM #define	ERR0_THR_RD(ip)		nb_pci_getw(0, 16, 2, 0xf8, ip)
14047532SSean.Ye@Sun.COM #define	ERR1_THR_RD(ip)		nb_pci_getw(0, 16, 2, 0xfa, ip)
14057532SSean.Ye@Sun.COM #define	ERR2_THR_RD(ip)		nb_pci_getw(0, 16, 2, 0xfc, ip)
14067532SSean.Ye@Sun.COM #define	MCERR_THR_RD(ip)	nb_pci_getw(0, 16, 2, 0xfe, ip)
14077532SSean.Ye@Sun.COM #define	CTSTS_RD()		nb_pci_getb(0, 16, 4, 0xee, 0)
14087532SSean.Ye@Sun.COM #define	THRTSTS_RD()		nb_pci_getw(0, 16, 3, 0x68, 0)
14097532SSean.Ye@Sun.COM 
14107532SSean.Ye@Sun.COM #define	FERR_FAT_THR_WR(val)	nb_pci_putb(0, 16, 2, 0xf0, val)
14117532SSean.Ye@Sun.COM #define	FERR_NF_THR_WR(val)	nb_pci_putb(0, 16, 2, 0xf1, val)
14127532SSean.Ye@Sun.COM #define	NERR_FAT_THR_WR(val)	nb_pci_putb(0, 16, 2, 0xf2, val)
14137532SSean.Ye@Sun.COM #define	NERR_NF_THR_WR(val)	nb_pci_putb(0, 16, 2, 0xf3, val)
14147532SSean.Ye@Sun.COM #define	EMASK_THR_WR(val)	nb_pci_putw(0, 16, 2, 0xf6, val)
14157532SSean.Ye@Sun.COM #define	ERR0_THR_WR(val)	nb_pci_putw(0, 16, 2, 0xf8, val)
14167532SSean.Ye@Sun.COM #define	ERR1_THR_WR(val)	nb_pci_putw(0, 16, 2, 0xfa, val)
14177532SSean.Ye@Sun.COM #define	ERR2_THR_WR(val)	nb_pci_putw(0, 16, 2, 0xfc, val)
14187532SSean.Ye@Sun.COM #define	MCERR_THR_WR(val)	nb_pci_putw(0, 16, 2, 0xfe, val)
14197532SSean.Ye@Sun.COM #define	CTSTS_WR(val)		nb_pci_putb(0, 16, 4, 0xee, val)
14207532SSean.Ye@Sun.COM #define	THRTSTS_WR(val)		nb_pci_putw(0, 16, 3, 0x68, val)
14217532SSean.Ye@Sun.COM 
14227532SSean.Ye@Sun.COM #define	ERR_FAT_THR_F2	0x02	/* >tnid thermal event with intelligent */
14237532SSean.Ye@Sun.COM 				/* throttling disabled */
14247532SSean.Ye@Sun.COM #define	ERR_FAT_THR_F1	0x01	/* catastrophic on-die thermal event */
14257532SSean.Ye@Sun.COM 
14267532SSean.Ye@Sun.COM #define	ERR_NF_THR_F5	0x10	/* deadman timeout on cooling update */
14277532SSean.Ye@Sun.COM #define	ERR_NF_THR_F4	0x08	/* TSMAX Updated */
14287532SSean.Ye@Sun.COM #define	ERR_NF_THR_F3	0x04	/* On-die throttling event */
14297532SSean.Ye@Sun.COM 
14307532SSean.Ye@Sun.COM #define	EMASK_THR_FATAL	(ERR_FAT_THR_F2|ERR_FAT_THR_F1)
14317532SSean.Ye@Sun.COM #define	EMASK_THR_NF	(ERR_NF_THR_F5|ERR_NF_THR_F4|ERR_NF_THR_F3)
14327532SSean.Ye@Sun.COM 
14337532SSean.Ye@Sun.COM #define	EMASK_THR_F5	0x0010	/* deadman timeout on cooling update */
14347532SSean.Ye@Sun.COM #define	EMASK_THR_F4	0x0008	/* TSMAX Updated */
14357532SSean.Ye@Sun.COM #define	EMASK_THR_F3	0x0004	/* On-die throttling event */
14367532SSean.Ye@Sun.COM #define	EMASK_THR_F2	0x0002	/* >tnid thermal event with intelligent */
14377532SSean.Ye@Sun.COM 				/* throttling disabled */
14387532SSean.Ye@Sun.COM #define	EMASK_THR_F1	0x0001	/* catastrophic on-die thermal event */
14397532SSean.Ye@Sun.COM 
144010049SVuong.Nguyen@Sun.COM /* dimm type */
144110049SVuong.Nguyen@Sun.COM #define	SPD_MEM_TYPE	2
144210049SVuong.Nguyen@Sun.COM #define	SPD_DDR2	8
144310049SVuong.Nguyen@Sun.COM #define	SPD_FBDIMM	9
144410049SVuong.Nguyen@Sun.COM 
14457532SSean.Ye@Sun.COM #ifdef __cplusplus
14467532SSean.Ye@Sun.COM }
14477532SSean.Ye@Sun.COM #endif
14487532SSean.Ye@Sun.COM 
14497532SSean.Ye@Sun.COM #endif /* _NB5000_H */
1450