xref: /onnv-gate/usr/src/uts/intel/sys/mca_amd.h (revision 5327:7341f36188f5)
11414Scindi /*
21414Scindi  * CDDL HEADER START
31414Scindi  *
41414Scindi  * The contents of this file are subject to the terms of the
51717Swesolows  * Common Development and Distribution License (the "License").
61717Swesolows  * You may not use this file except in compliance with the License.
71414Scindi  *
81414Scindi  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
91414Scindi  * or http://www.opensolaris.org/os/licensing.
101414Scindi  * See the License for the specific language governing permissions
111414Scindi  * and limitations under the License.
121414Scindi  *
131414Scindi  * When distributing Covered Code, include this CDDL HEADER in each
141414Scindi  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
151414Scindi  * If applicable, add the following below this CDDL HEADER, with the
161414Scindi  * fields enclosed by brackets "[]" replaced with your own identifying
171414Scindi  * information: Portions Copyright [yyyy] [name of copyright owner]
181414Scindi  *
191414Scindi  * CDDL HEADER END
201414Scindi  */
211414Scindi 
221414Scindi /*
233766Sgavinm  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
241414Scindi  * Use is subject to license terms.
251414Scindi  */
261414Scindi 
271414Scindi #ifndef _SYS_MCA_AMD_H
281414Scindi #define	_SYS_MCA_AMD_H
291414Scindi 
301414Scindi #pragma ident	"%Z%%M%	%I%	%E% SMI"
311414Scindi 
325254Sgavinm #include <sys/mca_x86.h>
335254Sgavinm 
341414Scindi /*
355254Sgavinm  * Constants for the Machine Check Architecture as implemented on AMD CPUs.
361414Scindi  */
371414Scindi 
381414Scindi #ifdef __cplusplus
391414Scindi extern "C" {
401414Scindi #endif
411414Scindi 
421414Scindi #define	AMD_MSR_MCG_CAP			0x179
431414Scindi #define	AMD_MSR_MCG_STATUS		0x17a
441414Scindi #define	AMD_MSR_MCG_CTL			0x17b
451414Scindi 
461414Scindi #define	AMD_MCA_BANK_DC			0	/* Data Cache */
471414Scindi #define	AMD_MCA_BANK_IC			1	/* Instruction Cache */
481414Scindi #define	AMD_MCA_BANK_BU			2	/* Bus Unit */
491414Scindi #define	AMD_MCA_BANK_LS			3	/* Load/Store Unit */
501414Scindi #define	AMD_MCA_BANK_NB			4	/* Northbridge */
511414Scindi #define	AMD_MCA_BANK_COUNT		5
521414Scindi 
531414Scindi #define	AMD_MSR_DC_CTL			0x400
541414Scindi #define	AMD_MSR_DC_MASK			0xc0010044
551414Scindi #define	AMD_MSR_DC_STATUS		0x401
561414Scindi #define	AMD_MSR_DC_ADDR			0x402
572869Sgavinm #define	AMD_MSR_DC_MISC			0x403
581414Scindi 
591414Scindi #define	AMD_MSR_IC_CTL			0x404
601414Scindi #define	AMD_MSR_IC_MASK			0xc0010045
611414Scindi #define	AMD_MSR_IC_STATUS		0x405
621414Scindi #define	AMD_MSR_IC_ADDR			0x406
632869Sgavinm #define	AMD_MSR_IC_MISC			0x407
641414Scindi 
651414Scindi #define	AMD_MSR_BU_CTL			0x408
661414Scindi #define	AMD_MSR_BU_MASK			0xc0010046
671414Scindi #define	AMD_MSR_BU_STATUS		0x409
681414Scindi #define	AMD_MSR_BU_ADDR			0x40a
692869Sgavinm #define	AMD_MSR_BU_MISC			0x40b
701414Scindi 
711414Scindi #define	AMD_MSR_LS_CTL			0x40c
721414Scindi #define	AMD_MSR_LS_MASK			0xc0010047
731414Scindi #define	AMD_MSR_LS_STATUS		0x40d
741414Scindi #define	AMD_MSR_LS_ADDR			0x40e
752869Sgavinm #define	AMD_MSR_LS_MISC			0x40f
761414Scindi 
771414Scindi #define	AMD_MSR_NB_CTL			0x410
781414Scindi #define	AMD_MSR_NB_MASK			0xc0010048
791414Scindi #define	AMD_MSR_NB_STATUS		0x411
801414Scindi #define	AMD_MSR_NB_ADDR			0x412
812869Sgavinm #define	AMD_MSR_NB_MISC			0x413
821414Scindi 
831414Scindi #define	AMD_MCG_EN_DC			0x01
841414Scindi #define	AMD_MCG_EN_IC			0x02
851414Scindi #define	AMD_MCG_EN_BU			0x04
861414Scindi #define	AMD_MCG_EN_LS			0x08
871414Scindi #define	AMD_MCG_EN_NB			0x10
881414Scindi 
891414Scindi /*
901414Scindi  * Data Cache (DC) bank error-detection enabling bits and CTL register
911414Scindi  * initializer value.
921414Scindi  */
931414Scindi 
941414Scindi #define	AMD_DC_EN_ECCI			0x00000001ULL
951414Scindi #define	AMD_DC_EN_ECCM			0x00000002ULL
961414Scindi #define	AMD_DC_EN_DECC			0x00000004ULL
971414Scindi #define	AMD_DC_EN_DMTP			0x00000008ULL
981414Scindi #define	AMD_DC_EN_DSTP			0x00000010ULL
991414Scindi #define	AMD_DC_EN_L1TP			0x00000020ULL
1001414Scindi #define	AMD_DC_EN_L2TP			0x00000040ULL
1011414Scindi 
1022869Sgavinm #define	AMD_DC_CTL_INIT_CMN \
1031414Scindi 	(AMD_DC_EN_ECCI | AMD_DC_EN_ECCM | AMD_DC_EN_DECC | AMD_DC_EN_DMTP | \
1041414Scindi 	AMD_DC_EN_DSTP | AMD_DC_EN_L1TP | AMD_DC_EN_L2TP)
1051414Scindi 
1061414Scindi /*
1071414Scindi  * Instruction Cache (IC) bank error-detection enabling bits and CTL register
1081414Scindi  * initializer value.
1091414Scindi  *
1101414Scindi  * The Northbridge will handle Read Data errors.  Our initializer will enable
1111414Scindi  * all but the RDDE detector.
1121414Scindi  */
1131414Scindi 
1141414Scindi #define	AMD_IC_EN_ECCI			0x00000001ULL
1151414Scindi #define	AMD_IC_EN_ECCM			0x00000002ULL
1161414Scindi #define	AMD_IC_EN_IDP			0x00000004ULL
1171414Scindi #define	AMD_IC_EN_IMTP			0x00000008ULL
1181414Scindi #define	AMD_IC_EN_ISTP			0x00000010ULL
1191414Scindi #define	AMD_IC_EN_L1TP			0x00000020ULL
1201414Scindi #define	AMD_IC_EN_L2TP			0x00000040ULL
1211414Scindi #define	AMD_IC_EN_RDDE			0x00000200ULL
1221414Scindi 
1232869Sgavinm #define	AMD_IC_CTL_INIT_CMN \
1241414Scindi 	(AMD_IC_EN_ECCI | AMD_IC_EN_ECCM | AMD_IC_EN_IDP | AMD_IC_EN_IMTP | \
1251414Scindi 	AMD_IC_EN_ISTP | AMD_IC_EN_L1TP | AMD_IC_EN_L2TP)
1261414Scindi 
1271414Scindi /*
1281414Scindi  * Bus Unit (BU) bank error-detection enabling bits and CTL register
1291414Scindi  * initializer value.
1301414Scindi  *
1311414Scindi  * The Northbridge will handle Read Data errors.  Our initializer will enable
1321414Scindi  * all but the S_RDE_* detectors.
1331414Scindi  */
1341414Scindi 
1351414Scindi #define	AMD_BU_EN_S_RDE_HP		0x00000001ULL
1361414Scindi #define	AMD_BU_EN_S_RDE_TLB		0x00000002ULL
1371414Scindi #define	AMD_BU_EN_S_RDE_ALL		0x00000004ULL
1381414Scindi #define	AMD_BU_EN_S_ECC1_TLB		0x00000008ULL
1391414Scindi #define	AMD_BU_EN_S_ECC1_HP		0x00000010ULL
1401414Scindi #define	AMD_BU_EN_S_ECCM_TLB		0x00000020ULL
1411414Scindi #define	AMD_BU_EN_S_ECCM_HP		0x00000040ULL
1421414Scindi #define	AMD_BU_EN_L2T_PAR_ICDC		0x00000080ULL
1431414Scindi #define	AMD_BU_EN_L2T_PAR_TLB		0x00000100ULL
1441414Scindi #define	AMD_BU_EN_L2T_PAR_SNP		0x00000200ULL
1451414Scindi #define	AMD_BU_EN_L2T_PAR_CPB		0x00000400ULL
1461414Scindi #define	AMD_BU_EN_L2T_PAR_SCR		0x00000800ULL
1471414Scindi #define	AMD_BU_EN_L2D_ECC1_TLB		0x00001000ULL
1481414Scindi #define	AMD_BU_EN_L2D_ECC1_SNP		0x00002000ULL
1491414Scindi #define	AMD_BU_EN_L2D_ECC1_CPB		0x00004000ULL
1501414Scindi #define	AMD_BU_EN_L2D_ECCM_TLB		0x00008000ULL
1511414Scindi #define	AMD_BU_EN_L2D_ECCM_SNP		0x00010000ULL
1521414Scindi #define	AMD_BU_EN_L2D_ECCM_CPB		0x00020000ULL
1531414Scindi #define	AMD_BU_EN_L2T_ECC1_SCR		0x00040000ULL
1541414Scindi #define	AMD_BU_EN_L2T_ECCM_SCR		0x00080000ULL
1551414Scindi 
1562869Sgavinm #define	AMD_BU_CTL_INIT_CMN \
1571414Scindi 	(AMD_BU_EN_S_ECC1_TLB | AMD_BU_EN_S_ECC1_HP | \
1581414Scindi 	AMD_BU_EN_S_ECCM_TLB | AMD_BU_EN_S_ECCM_HP | \
1591414Scindi 	AMD_BU_EN_L2T_PAR_ICDC | AMD_BU_EN_L2T_PAR_TLB | \
1601414Scindi 	AMD_BU_EN_L2T_PAR_SNP |	AMD_BU_EN_L2T_PAR_CPB | \
1611414Scindi 	AMD_BU_EN_L2T_PAR_SCR |	AMD_BU_EN_L2D_ECC1_TLB | \
1621414Scindi 	AMD_BU_EN_L2D_ECC1_SNP | AMD_BU_EN_L2D_ECC1_CPB | \
1631414Scindi 	AMD_BU_EN_L2D_ECCM_TLB | AMD_BU_EN_L2D_ECCM_SNP | \
1641414Scindi 	AMD_BU_EN_L2D_ECCM_CPB | AMD_BU_EN_L2T_ECC1_SCR | \
1651414Scindi 	AMD_BU_EN_L2T_ECCM_SCR)
1661414Scindi 
1671414Scindi /*
1681414Scindi  * Load/Store (LS) bank error-detection enabling bits and CTL register
1691414Scindi  * initializer value.
1701414Scindi  *
1711414Scindi  * The Northbridge will handle Read Data errors.  That's the only type of
1721414Scindi  * error the LS unit can detect at present, so we won't be enabling any
1731414Scindi  * LS detectors.
1741414Scindi  */
1751414Scindi 
1761414Scindi #define	AMD_LS_EN_S_RDE_S		0x00000001ULL
1771414Scindi #define	AMD_LS_EN_S_RDE_L		0x00000002ULL
1781414Scindi 
1792869Sgavinm #define	AMD_LS_CTL_INIT_CMN			0ULL
1802869Sgavinm 
1812869Sgavinm /*
1822869Sgavinm  * NorthBridge (NB) MCi_MISC - DRAM Errors Threshold Register.
1832869Sgavinm  */
1842869Sgavinm #define	AMD_NB_MISC_VALID		(0x1ULL << 63)
1852869Sgavinm #define	AMD_NB_MISC_CTRP		(0x1ULL << 62)
1862869Sgavinm #define	AMD_NB_MISC_LOCKED		(0x1ULL << 61)
1872869Sgavinm #define	AMD_NB_MISC_CNTEN		(0x1ULL << 51)
1882869Sgavinm #define	AMD_NB_MISC_INTTYPE		(0x1ULL << 49)
1892869Sgavinm #define	AMD_NB_MISC_INTTYPE_MASK	(0x3ULL << 49)
1902869Sgavinm #define	AMD_NB_MISC_OVRFLW		(0x1ULL << 48)
1912869Sgavinm #define	AMD_NB_MISC_ERRCOUNT_MASK	(0xfffULL << 32)
1921414Scindi 
1931414Scindi /*
1941414Scindi  * The Northbridge (NB) is configured using both the standard MCA CTL register
1951414Scindi  * and a NB-specific configuration register (NB CFG).  The AMD_NB_EN_* macros
1961414Scindi  * are the detector enabling bits for the NB MCA CTL register.  The
1971414Scindi  * AMD_NB_CFG_* bits are for the NB CFG register.
1981414Scindi  *
1991414Scindi  * The CTL register can be initialized statically, but portions of the NB CFG
2001414Scindi  * register must be initialized based on the current machine's configuration.
2011414Scindi  *
2022869Sgavinm  * The MCA NB Control Register maps to MC4_CTL[31:0], but we initialize it
2032869Sgavinm  * via and MSR write of 64 bits so define all as ULL.
2041414Scindi  *
2051414Scindi  */
2062869Sgavinm #define	AMD_NB_EN_CORRECC		0x00000001ULL
2072869Sgavinm #define	AMD_NB_EN_UNCORRECC		0x00000002ULL
2082869Sgavinm #define	AMD_NB_EN_CRCERR0		0x00000004ULL
2092869Sgavinm #define	AMD_NB_EN_CRCERR1		0x00000008ULL
2102869Sgavinm #define	AMD_NB_EN_CRCERR2		0x00000010ULL
2112869Sgavinm #define	AMD_NB_EN_SYNCPKT0		0x00000020ULL
2122869Sgavinm #define	AMD_NB_EN_SYNCPKT1		0x00000040ULL
2132869Sgavinm #define	AMD_NB_EN_SYNCPKT2		0x00000080ULL
2142869Sgavinm #define	AMD_NB_EN_MSTRABRT		0x00000100ULL
2152869Sgavinm #define	AMD_NB_EN_TGTABRT		0x00000200ULL
2162869Sgavinm #define	AMD_NB_EN_GARTTBLWK		0x00000400ULL
2172869Sgavinm #define	AMD_NB_EN_ATOMICRMW		0x00000800ULL
2182869Sgavinm #define	AMD_NB_EN_WCHDOGTMR		0x00001000ULL
2192869Sgavinm #define	AMD_NB_EN_DRAMPAR		0x00040000ULL	/* revs F and G */
2201414Scindi 
2212869Sgavinm #define	AMD_NB_CTL_INIT_CMN /* Revs B to G; All but GARTTBLWK */ \
2221414Scindi 	(AMD_NB_EN_CORRECC | AMD_NB_EN_UNCORRECC | \
2231414Scindi 	AMD_NB_EN_CRCERR0 | AMD_NB_EN_CRCERR1 | AMD_NB_EN_CRCERR2 | \
2241414Scindi 	AMD_NB_EN_SYNCPKT0 | AMD_NB_EN_SYNCPKT1 | AMD_NB_EN_SYNCPKT2 | \
2251414Scindi 	AMD_NB_EN_MSTRABRT | AMD_NB_EN_TGTABRT | \
2261414Scindi 	AMD_NB_EN_ATOMICRMW | AMD_NB_EN_WCHDOGTMR)
2271414Scindi 
2282869Sgavinm #define	AMD_NB_CTL_INIT_REV_FG /* Additional bits for revs F and G */ \
2292869Sgavinm 	AMD_NB_EN_DRAMPAR
2302869Sgavinm 
2312869Sgavinm /*
2322869Sgavinm  * NB MCA Configuration register
2332869Sgavinm  */
2342869Sgavinm #define	AMD_NB_CFG_CPUECCERREN			0x00000001
2352869Sgavinm #define	AMD_NB_CFG_CPURDDATERREN		0x00000002
2362869Sgavinm #define	AMD_NB_CFG_SYNCONUCECCEN		0x00000004
2372869Sgavinm #define	AMD_NB_CFG_SYNCPKTGENDIS		0x00000008
2382869Sgavinm #define	AMD_NB_CFG_SYNCPKTPROPDIS		0x00000010
2392869Sgavinm #define	AMD_NB_CFG_IOMSTABORTDIS		0x00000020
2402869Sgavinm #define	AMD_NB_CFG_CPUERRDIS			0x00000040
2412869Sgavinm #define	AMD_NB_CFG_IOERRDIS			0x00000080
2422869Sgavinm #define	AMD_NB_CFG_WDOGTMRDIS			0x00000100
2432869Sgavinm #define	AMD_NB_CFG_SYNCONWDOGEN			0x00100000
2442869Sgavinm #define	AMD_NB_CFG_SYNCONANYERREN		0x00200000
2452869Sgavinm #define	AMD_NB_CFG_ECCEN			0x00400000
2462869Sgavinm #define	AMD_NB_CFG_CHIPKILLECCEN		0x00800000
2472869Sgavinm #define	AMD_NB_CFG_IORDDATERREN			0x01000000
2482869Sgavinm #define	AMD_NB_CFG_DISPCICFGCPUERRRSP		0x02000000
2492869Sgavinm #define	AMD_NB_CFG_NBMCATOMSTCPUEN		0x08000000
2502869Sgavinm #define	AMD_NB_CFG_DISTGTABTCPUERRRSP		0x10000000
2512869Sgavinm #define	AMD_NB_CFG_DISMSTABTCPUERRRSP		0x20000000
2522869Sgavinm #define	AMD_NB_CFG_SYNCONDRAMADRPARERREN	0x40000000 /* Revs F & G */
2532869Sgavinm 
2542869Sgavinm /*
2552869Sgavinm  * We do not initialize the NB config with an absolute value; instead we
2562869Sgavinm  * selectively add some bits and remove others.  Note that
2572869Sgavinm  * AMD_NB_CFG_{ADD,REMOVE}_{CMN,REV_FG} below are not the whole
2582869Sgavinm  * story here - additional config is performed regarding the watchdog (see
2592869Sgavinm  * ao_mca.c for details).
2602869Sgavinm  */
2612869Sgavinm #define	AMD_NB_CFG_ADD_CMN		/* Revs B to G */ \
2622869Sgavinm 	(AMD_NB_CFG_DISPCICFGCPUERRRSP | AMD_NB_CFG_SYNCONUCECCEN | \
2632869Sgavinm 	AMD_NB_CFG_CPUECCERREN)
2642869Sgavinm 
2652869Sgavinm #define	AMD_NB_CFG_REMOVE_CMN		/* Revs B to G */ \
2662869Sgavinm 	(AMD_NB_CFG_NBMCATOMSTCPUEN | \
2672869Sgavinm 	AMD_NB_CFG_IORDDATERREN | AMD_NB_CFG_SYNCONANYERREN | \
2682869Sgavinm 	AMD_NB_CFG_SYNCONWDOGEN | AMD_NB_CFG_IOERRDIS | \
2692869Sgavinm 	AMD_NB_CFG_IOMSTABORTDIS | AMD_NB_CFG_SYNCPKTPROPDIS | \
2702869Sgavinm 	AMD_NB_CFG_SYNCPKTGENDIS)
2712869Sgavinm 
2722869Sgavinm #define	AMD_NB_CFG_ADD_REV_FG		/* Revs F and G */ \
2732869Sgavinm 	AMD_NB_CFG_SYNCONDRAMADRPARERREN
2742869Sgavinm 
2752869Sgavinm #define	AMD_NB_CFG_REMOVE_REV_FG 0x0	/* Revs F and G */
2761414Scindi 
2771414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_4095	0x00000000
2781414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_2047	0x00000200
2791414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_1023	0x00000400
2801414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_511	0x00000600
2811414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_255	0x00000800
2821414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_127	0x00000a00
2831414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_63	0x00000c00
2841414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_31	0x00000e00
2851414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_MASK	0x00000e00
2861414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_SHIFT	9
2871414Scindi 
2881414Scindi #define	AMD_NB_CFG_WDOGTMRBASESEL_1MS	0x00000000
2891414Scindi #define	AMD_NB_CFG_WDOGTMRBASESEL_1US	0x00001000
2901414Scindi #define	AMD_NB_CFG_WDOGTMRBASESEL_5NS	0x00002000
2911414Scindi #define	AMD_NB_CFG_WDOGTMRBASESEL_MASK	0x00003000
2921414Scindi #define	AMD_NB_CFG_WDOGTMRBASESEL_SHIFT	12
2931414Scindi 
2941414Scindi #define	AMD_NB_CFG_LDTLINKSEL_MASK	0x0000c000
2951414Scindi #define	AMD_NB_CFG_LDTLINKSEL_SHIFT	14
2961414Scindi 
2971414Scindi #define	AMD_NB_CFG_GENCRCERRBYTE0	0x00010000
2981414Scindi #define	AMD_NB_CFG_GENCRCERRBYTE1	0x00020000
2991414Scindi 
3005254Sgavinm /*
3015254Sgavinm  * The AMD extended error code is just one nibble of the upper 16 bits
3025254Sgavinm  * of the bank status (the resy being used for syndrome etc).  So we use
3035254Sgavinm  * AMD_EXT_ERRCODE to retrieve that extended error code, not the generic
3045254Sgavinm  * MCAX86_MSERRCODE.
3055254Sgavinm  */
3065254Sgavinm #define	_AMD_ERREXT_MASK		0x00000000000f0000ULL
3075254Sgavinm #define	_AMD_ERREXT_SHIFT		16
3085254Sgavinm #define	AMD_EXT_ERRCODE(stat) \
3095254Sgavinm 	(((stat) & _AMD_ERREXT_MASK) >> _AMD_ERREXT_SHIFT)
3105254Sgavinm #define	AMD_EXT_MKERRCODE(errcode) \
3115254Sgavinm 	(((errcode) << _AMD_ERREXT_SHIFT) & _AMD_ERREXT_MASK)
3121414Scindi 
3131717Swesolows #define	AMD_BANK_STAT_CECC		0x0000400000000000ULL
3141717Swesolows #define	AMD_BANK_STAT_UECC		0x0000200000000000ULL
3151717Swesolows #define	AMD_BANK_STAT_SCRUB		0x0000010000000000ULL
3161414Scindi 
3171717Swesolows 	/* syndrome[7:0] */
3181717Swesolows #define	AMD_BANK_STAT_SYND_MASK		0x007f800000000000ULL
3191414Scindi #define	AMD_BANK_STAT_SYND_SHIFT	47
3201414Scindi 
3211414Scindi #define	AMD_BANK_SYND(stat) \
3221414Scindi 	(((stat) & AMD_BANK_STAT_SYND_MASK) >> AMD_BANK_STAT_SYND_SHIFT)
3231414Scindi #define	AMD_BANK_MKSYND(synd) \
3241414Scindi 	(((uint64_t)(synd) << AMD_BANK_STAT_SYND_SHIFT) & \
3251414Scindi 	AMD_BANK_STAT_SYND_MASK)
3261414Scindi 
3272869Sgavinm #define	AMD_NB_STAT_DRAMCHANNEL		0x0000020000000000ULL
3282869Sgavinm #define	AMD_NB_STAT_LDTLINK_MASK	0x0000007000000000ULL
3291414Scindi #define	AMD_NB_STAT_LDTLINK_SHIFT	4
3302869Sgavinm #define	AMD_NB_STAT_ERRCPU1		0x0000000200000000ULL
3312869Sgavinm #define	AMD_NB_STAT_ERRCPU0		0x0000000100000000ULL
3322869Sgavinm 
3331414Scindi #define	AMD_NB_STAT_CKSYND_MASK		0x00000000ff000000 /* syndrome[15:8] */
3341414Scindi #define	AMD_NB_STAT_CKSYND_SHIFT	(24 - 8) /* shift [31:24] to [15:8] */
3351414Scindi 
3361414Scindi #define	AMD_NB_STAT_CKSYND(stat) \
3371414Scindi 	((((stat) & AMD_NB_STAT_CKSYND_MASK) >> AMD_NB_STAT_CKSYND_SHIFT) | \
3381414Scindi 	AMD_BANK_SYND((stat)))
3391414Scindi 
3401414Scindi #define	AMD_NB_STAT_MKCKSYND(synd) \
3411414Scindi 	((((uint64_t)(synd) << AMD_NB_STAT_CKSYND_SHIFT) & \
3421414Scindi 	AMD_NB_STAT_CKSYND_MASK) | AMD_BANK_MKSYND(synd))
3431414Scindi 
3442869Sgavinm #define	AMD_ERREXT_MASK			0x00000000000f0000ULL
3451414Scindi #define	AMD_ERREXT_SHIFT		16
3461414Scindi 
3471414Scindi #define	AMD_ERRCODE_TLB_BIT		4
3481414Scindi #define	AMD_ERRCODE_MEM_BIT		8
3491414Scindi #define	AMD_ERRCODE_BUS_BIT		11
3501414Scindi 
3511414Scindi #define	AMD_ERRCODE_TLB_MASK		0xfff0
3521414Scindi #define	AMD_ERRCODE_MEM_MASK		0xff00
3531414Scindi #define	AMD_ERRCODE_BUS_MASK		0xf800
3541414Scindi 
3555254Sgavinm #define	AMD_ERRCODE_MKTLB(tt, ll) MCAX86_MKERRCODE_TLB(tt, ll)
3565254Sgavinm #define	AMD_ERRCODE_ISTLB(code) MCAX86_ERRCODE_ISTLB(code)
3571414Scindi 
3585254Sgavinm #define	AMD_ERRCODE_MKMEM(r4, tt, ll) MCAX86_MKERRCODE_MEMHIER(r4, tt, ll)
3595254Sgavinm #define	AMD_ERRCODE_ISMEM(code) MCAX86_ERRCODE_ISMEMHIER(code)
3601414Scindi 
3611414Scindi #define	AMD_ERRCODE_MKBUS(pp, t, r4, ii, ll) \
3625254Sgavinm 	MCAX86_MKERRCODE_BUS_INTERCONNECT(pp, t, r4, ii, ll)
3635254Sgavinm #define	AMD_ERRCODE_ISBUS(code) MCAX86_ERRCODE_ISBUS_INTERCONNECT(code)
3641414Scindi 
3651414Scindi #define	AMD_NB_ADDRLO_MASK		0xfffffff8
3661414Scindi #define	AMD_NB_ADDRHI_MASK		0x000000ff
3671414Scindi 
3681414Scindi #define	AMD_SYNDTYPE_ECC		0
3691414Scindi #define	AMD_SYNDTYPE_CHIPKILL		1
3701414Scindi 
3711414Scindi #define	AMD_NB_SCRUBCTL_DRAM_MASK	0x0000001f
3721414Scindi #define	AMD_NB_SCRUBCTL_DRAM_SHIFT	0
3731414Scindi #define	AMD_NB_SCRUBCTL_L2_MASK		0x00001f00
3741414Scindi #define	AMD_NB_SCRUBCTL_L2_SHIFT	8
3751414Scindi #define	AMD_NB_SCRUBCTL_DC_MASK		0x001f0000
3761414Scindi #define	AMD_NB_SCRUBCTL_DC_SHIFT	16
377*5327Sgavinm #define	AMD_NB_SCRUBCTL_L3_MASK		0x1f000000
378*5327Sgavinm #define	AMD_NB_SCRUBCTL_L3_SHIFT	24
3791414Scindi 
3801414Scindi #define	AMD_NB_SCRUBCTL_RATE_NONE	0
3811414Scindi #define	AMD_NB_SCRUBCTL_RATE_MAX	0x16
3821414Scindi 
3831414Scindi #define	AMD_NB_SCRUBADDR_LO_MASK	0xffffffc0
3845254Sgavinm #define	AMD_NB_SCRUBADDR_LO_SHIFT	6
3851414Scindi #define	AMD_NB_SCRUBADDR_LO_SCRUBREDIREN 0x1
3861414Scindi #define	AMD_NB_SCRUBADDR_HI_MASK	0x000000ff
3871414Scindi 
3881414Scindi #define	AMD_NB_SCRUBADDR_MKLO(addr) \
3895254Sgavinm 	(((addr) & AMD_NB_SCRUBADDR_LO_MASK) >> AMD_NB_SCRUBADDR_LO_SHIFT)
3901414Scindi 
3911414Scindi #define	AMD_NB_SCRUBADDR_MKHI(addr) \
3921414Scindi 	(((addr) >> 32) & AMD_NB_SCRUBADDR_HI_MASK)
3931414Scindi 
394*5327Sgavinm #define	AMD_NB_MKSCRUBCTL(l3, dc, l2, dr) ( \
395*5327Sgavinm 	(((l3) << AMD_NB_SCRUBCTL_L3_SHIFT) & AMD_NB_SCRUBCTL_L3_MASK) | \
3961414Scindi 	(((dc) << AMD_NB_SCRUBCTL_DC_SHIFT) & AMD_NB_SCRUBCTL_DC_MASK) | \
3971414Scindi 	(((l2) << AMD_NB_SCRUBCTL_L2_SHIFT) & AMD_NB_SCRUBCTL_L2_MASK) | \
3981414Scindi 	(((dr) << AMD_NB_SCRUBCTL_DRAM_SHIFT) & AMD_NB_SCRUBCTL_DRAM_MASK))
3991414Scindi 
4001414Scindi #ifdef __cplusplus
4011414Scindi }
4021414Scindi #endif
4031414Scindi 
4041414Scindi #endif /* _SYS_MCA_AMD_H */
405