xref: /onnv-gate/usr/src/uts/intel/sys/mca_amd.h (revision 1717:ef845d4a1074)
11414Scindi /*
21414Scindi  * CDDL HEADER START
31414Scindi  *
41414Scindi  * The contents of this file are subject to the terms of the
5*1717Swesolows  * Common Development and Distribution License (the "License").
6*1717Swesolows  * 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 /*
231414Scindi  * Copyright 2006 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 
321414Scindi /*
331414Scindi  * Constants the Memory Check Architecture as implemented on AMD CPUs.
341414Scindi  */
351414Scindi 
361414Scindi #ifdef __cplusplus
371414Scindi extern "C" {
381414Scindi #endif
391414Scindi 
401414Scindi #define	AMD_MSR_MCG_CAP			0x179
411414Scindi #define	AMD_MSR_MCG_STATUS		0x17a
421414Scindi #define	AMD_MSR_MCG_CTL			0x17b
431414Scindi 
441414Scindi #define	AMD_MCA_BANK_DC			0	/* Data Cache */
451414Scindi #define	AMD_MCA_BANK_IC			1	/* Instruction Cache */
461414Scindi #define	AMD_MCA_BANK_BU			2	/* Bus Unit */
471414Scindi #define	AMD_MCA_BANK_LS			3	/* Load/Store Unit */
481414Scindi #define	AMD_MCA_BANK_NB			4	/* Northbridge */
491414Scindi #define	AMD_MCA_BANK_COUNT		5
501414Scindi 
511414Scindi #define	AMD_MSR_DC_CTL			0x400
521414Scindi #define	AMD_MSR_DC_MASK			0xc0010044
531414Scindi #define	AMD_MSR_DC_STATUS		0x401
541414Scindi #define	AMD_MSR_DC_ADDR			0x402
551414Scindi 
561414Scindi #define	AMD_MSR_IC_CTL			0x404
571414Scindi #define	AMD_MSR_IC_MASK			0xc0010045
581414Scindi #define	AMD_MSR_IC_STATUS		0x405
591414Scindi #define	AMD_MSR_IC_ADDR			0x406
601414Scindi 
611414Scindi #define	AMD_MSR_BU_CTL			0x408
621414Scindi #define	AMD_MSR_BU_MASK			0xc0010046
631414Scindi #define	AMD_MSR_BU_STATUS		0x409
641414Scindi #define	AMD_MSR_BU_ADDR			0x40a
651414Scindi 
661414Scindi #define	AMD_MSR_LS_CTL			0x40c
671414Scindi #define	AMD_MSR_LS_MASK			0xc0010047
681414Scindi #define	AMD_MSR_LS_STATUS		0x40d
691414Scindi #define	AMD_MSR_LS_ADDR			0x40e
701414Scindi 
711414Scindi #define	AMD_MSR_NB_CTL			0x410
721414Scindi #define	AMD_MSR_NB_MASK			0xc0010048
731414Scindi #define	AMD_MSR_NB_STATUS		0x411
741414Scindi #define	AMD_MSR_NB_ADDR			0x412
751414Scindi 
761414Scindi #define	AMD_MCG_EN_DC			0x01
771414Scindi #define	AMD_MCG_EN_IC			0x02
781414Scindi #define	AMD_MCG_EN_BU			0x04
791414Scindi #define	AMD_MCG_EN_LS			0x08
801414Scindi #define	AMD_MCG_EN_NB			0x10
811414Scindi #define	AMD_MCG_EN_ALL \
821414Scindi 	(AMD_MCG_EN_DC | AMD_MCG_EN_IC | AMD_MCG_EN_BU | AMD_MCG_EN_LS | \
831414Scindi 	AMD_MCG_EN_NB)
841414Scindi 
851414Scindi /*
861414Scindi  * Data Cache (DC) bank error-detection enabling bits and CTL register
871414Scindi  * initializer value.
881414Scindi  */
891414Scindi 
901414Scindi #define	AMD_DC_EN_ECCI			0x00000001ULL
911414Scindi #define	AMD_DC_EN_ECCM			0x00000002ULL
921414Scindi #define	AMD_DC_EN_DECC			0x00000004ULL
931414Scindi #define	AMD_DC_EN_DMTP			0x00000008ULL
941414Scindi #define	AMD_DC_EN_DSTP			0x00000010ULL
951414Scindi #define	AMD_DC_EN_L1TP			0x00000020ULL
961414Scindi #define	AMD_DC_EN_L2TP			0x00000040ULL
971414Scindi 
981414Scindi #define	AMD_DC_CTL_INIT \
991414Scindi 	(AMD_DC_EN_ECCI | AMD_DC_EN_ECCM | AMD_DC_EN_DECC | AMD_DC_EN_DMTP | \
1001414Scindi 	AMD_DC_EN_DSTP | AMD_DC_EN_L1TP | AMD_DC_EN_L2TP)
1011414Scindi 
1021414Scindi /*
1031414Scindi  * Instruction Cache (IC) bank error-detection enabling bits and CTL register
1041414Scindi  * initializer value.
1051414Scindi  *
1061414Scindi  * The Northbridge will handle Read Data errors.  Our initializer will enable
1071414Scindi  * all but the RDDE detector.
1081414Scindi  */
1091414Scindi 
1101414Scindi #define	AMD_IC_EN_ECCI			0x00000001ULL
1111414Scindi #define	AMD_IC_EN_ECCM			0x00000002ULL
1121414Scindi #define	AMD_IC_EN_IDP			0x00000004ULL
1131414Scindi #define	AMD_IC_EN_IMTP			0x00000008ULL
1141414Scindi #define	AMD_IC_EN_ISTP			0x00000010ULL
1151414Scindi #define	AMD_IC_EN_L1TP			0x00000020ULL
1161414Scindi #define	AMD_IC_EN_L2TP			0x00000040ULL
1171414Scindi #define	AMD_IC_EN_RDDE			0x00000200ULL
1181414Scindi 
1191414Scindi #define	AMD_IC_CTL_INIT \
1201414Scindi 	(AMD_IC_EN_ECCI | AMD_IC_EN_ECCM | AMD_IC_EN_IDP | AMD_IC_EN_IMTP | \
1211414Scindi 	AMD_IC_EN_ISTP | AMD_IC_EN_L1TP | AMD_IC_EN_L2TP)
1221414Scindi 
1231414Scindi /*
1241414Scindi  * Bus Unit (BU) bank error-detection enabling bits and CTL register
1251414Scindi  * initializer value.
1261414Scindi  *
1271414Scindi  * The Northbridge will handle Read Data errors.  Our initializer will enable
1281414Scindi  * all but the S_RDE_* detectors.
1291414Scindi  */
1301414Scindi 
1311414Scindi #define	AMD_BU_EN_S_RDE_HP		0x00000001ULL
1321414Scindi #define	AMD_BU_EN_S_RDE_TLB		0x00000002ULL
1331414Scindi #define	AMD_BU_EN_S_RDE_ALL		0x00000004ULL
1341414Scindi #define	AMD_BU_EN_S_ECC1_TLB		0x00000008ULL
1351414Scindi #define	AMD_BU_EN_S_ECC1_HP		0x00000010ULL
1361414Scindi #define	AMD_BU_EN_S_ECCM_TLB		0x00000020ULL
1371414Scindi #define	AMD_BU_EN_S_ECCM_HP		0x00000040ULL
1381414Scindi #define	AMD_BU_EN_L2T_PAR_ICDC		0x00000080ULL
1391414Scindi #define	AMD_BU_EN_L2T_PAR_TLB		0x00000100ULL
1401414Scindi #define	AMD_BU_EN_L2T_PAR_SNP		0x00000200ULL
1411414Scindi #define	AMD_BU_EN_L2T_PAR_CPB		0x00000400ULL
1421414Scindi #define	AMD_BU_EN_L2T_PAR_SCR		0x00000800ULL
1431414Scindi #define	AMD_BU_EN_L2D_ECC1_TLB		0x00001000ULL
1441414Scindi #define	AMD_BU_EN_L2D_ECC1_SNP		0x00002000ULL
1451414Scindi #define	AMD_BU_EN_L2D_ECC1_CPB		0x00004000ULL
1461414Scindi #define	AMD_BU_EN_L2D_ECCM_TLB		0x00008000ULL
1471414Scindi #define	AMD_BU_EN_L2D_ECCM_SNP		0x00010000ULL
1481414Scindi #define	AMD_BU_EN_L2D_ECCM_CPB		0x00020000ULL
1491414Scindi #define	AMD_BU_EN_L2T_ECC1_SCR		0x00040000ULL
1501414Scindi #define	AMD_BU_EN_L2T_ECCM_SCR		0x00080000ULL
1511414Scindi 
1521414Scindi #define	AMD_BU_CTL_INIT \
1531414Scindi 	(AMD_BU_EN_S_ECC1_TLB | AMD_BU_EN_S_ECC1_HP | \
1541414Scindi 	AMD_BU_EN_S_ECCM_TLB | AMD_BU_EN_S_ECCM_HP | \
1551414Scindi 	AMD_BU_EN_L2T_PAR_ICDC | AMD_BU_EN_L2T_PAR_TLB | \
1561414Scindi 	AMD_BU_EN_L2T_PAR_SNP |	AMD_BU_EN_L2T_PAR_CPB | \
1571414Scindi 	AMD_BU_EN_L2T_PAR_SCR |	AMD_BU_EN_L2D_ECC1_TLB | \
1581414Scindi 	AMD_BU_EN_L2D_ECC1_SNP | AMD_BU_EN_L2D_ECC1_CPB | \
1591414Scindi 	AMD_BU_EN_L2D_ECCM_TLB | AMD_BU_EN_L2D_ECCM_SNP | \
1601414Scindi 	AMD_BU_EN_L2D_ECCM_CPB | AMD_BU_EN_L2T_ECC1_SCR | \
1611414Scindi 	AMD_BU_EN_L2T_ECCM_SCR)
1621414Scindi 
1631414Scindi /*
1641414Scindi  * Load/Store (LS) bank error-detection enabling bits and CTL register
1651414Scindi  * initializer value.
1661414Scindi  *
1671414Scindi  * The Northbridge will handle Read Data errors.  That's the only type of
1681414Scindi  * error the LS unit can detect at present, so we won't be enabling any
1691414Scindi  * LS detectors.
1701414Scindi  */
1711414Scindi 
1721414Scindi #define	AMD_LS_EN_S_RDE_S		0x00000001ULL
1731414Scindi #define	AMD_LS_EN_S_RDE_L		0x00000002ULL
1741414Scindi 
1751414Scindi #define	AMD_LS_CTL_INIT			0ULL
1761414Scindi 
1771414Scindi /*
1781414Scindi  * The Northbridge (NB) is configured using both the standard MCA CTL register
1791414Scindi  * and a NB-specific configuration register (NB CFG).  The AMD_NB_EN_* macros
1801414Scindi  * are the detector enabling bits for the NB MCA CTL register.  The
1811414Scindi  * AMD_NB_CFG_* bits are for the NB CFG register.
1821414Scindi  *
1831414Scindi  * The CTL register can be initialized statically, but portions of the NB CFG
1841414Scindi  * register must be initialized based on the current machine's configuration.
1851414Scindi  *
1861414Scindi  * The MCA NB Control Register maps to MC4_CTL[31:0].
1871414Scindi  *
1881414Scindi  */
1891414Scindi #define	AMD_NB_EN_CORRECC		0x00000001
1901414Scindi #define	AMD_NB_EN_UNCORRECC		0x00000002
1911414Scindi #define	AMD_NB_EN_CRCERR0		0x00000004
1921414Scindi #define	AMD_NB_EN_CRCERR1		0x00000008
1931414Scindi #define	AMD_NB_EN_CRCERR2		0x00000010
1941414Scindi #define	AMD_NB_EN_SYNCPKT0		0x00000020
1951414Scindi #define	AMD_NB_EN_SYNCPKT1		0x00000040
1961414Scindi #define	AMD_NB_EN_SYNCPKT2		0x00000080
1971414Scindi #define	AMD_NB_EN_MSTRABRT		0x00000100
1981414Scindi #define	AMD_NB_EN_TGTABRT		0x00000200
1991414Scindi #define	AMD_NB_EN_GARTTBLWK		0x00000400
2001414Scindi #define	AMD_NB_EN_ATOMICRMW		0x00000800
2011414Scindi #define	AMD_NB_EN_WCHDOGTMR		0x00001000
2021414Scindi 
2031414Scindi #define	AMD_NB_CTL_INIT /* All but GARTTBLWK */ \
2041414Scindi 	(AMD_NB_EN_CORRECC | AMD_NB_EN_UNCORRECC | \
2051414Scindi 	AMD_NB_EN_CRCERR0 | AMD_NB_EN_CRCERR1 | AMD_NB_EN_CRCERR2 | \
2061414Scindi 	AMD_NB_EN_SYNCPKT0 | AMD_NB_EN_SYNCPKT1 | AMD_NB_EN_SYNCPKT2 | \
2071414Scindi 	AMD_NB_EN_MSTRABRT | AMD_NB_EN_TGTABRT | \
2081414Scindi 	AMD_NB_EN_ATOMICRMW | AMD_NB_EN_WCHDOGTMR)
2091414Scindi 
2101414Scindi #define	AMD_NB_CFG_CPUECCERREN		0x00000001
2111414Scindi #define	AMD_NB_CFG_CPURDDATERREN	0x00000002
2121414Scindi #define	AMD_NB_CFG_SYNCONUCECCEN	0x00000004
2131414Scindi #define	AMD_NB_CFG_SYNCPKTGENDIS	0x00000008
2141414Scindi #define	AMD_NB_CFG_SYNCPKTPROPDIS	0x00000010
2151414Scindi #define	AMD_NB_CFG_IOMSTABORTDIS	0x00000020
2161414Scindi #define	AMD_NB_CFG_CPUERRDIS		0x00000040
2171414Scindi #define	AMD_NB_CFG_IOERRDIS		0x00000080
2181414Scindi #define	AMD_NB_CFG_WDOGTMRDIS		0x00000100
2191414Scindi #define	AMD_NB_CFG_SYNCONWDOGEN		0x00100000
2201414Scindi #define	AMD_NB_CFG_SYNCONANYERREN	0x00200000
2211414Scindi #define	AMD_NB_CFG_ECCEN		0x00400000
2221414Scindi #define	AMD_NB_CFG_CHIPKILLECCEN	0x00800000
2231414Scindi #define	AMD_NB_CFG_IORDDATERREN		0x01000000
2241414Scindi #define	AMD_NB_CFG_DISPCICFGCPUERRRSP	0x02000000
2251414Scindi #define	AMD_NB_CFG_NBMCATOMSTCPUEN	0x08000000
2261414Scindi 
2271414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_4095	0x00000000
2281414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_2047	0x00000200
2291414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_1023	0x00000400
2301414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_511	0x00000600
2311414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_255	0x00000800
2321414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_127	0x00000a00
2331414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_63	0x00000c00
2341414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_31	0x00000e00
2351414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_MASK	0x00000e00
2361414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_SHIFT	9
2371414Scindi 
2381414Scindi #define	AMD_NB_CFG_WDOGTMRBASESEL_1MS	0x00000000
2391414Scindi #define	AMD_NB_CFG_WDOGTMRBASESEL_1US	0x00001000
2401414Scindi #define	AMD_NB_CFG_WDOGTMRBASESEL_5NS	0x00002000
2411414Scindi #define	AMD_NB_CFG_WDOGTMRBASESEL_MASK	0x00003000
2421414Scindi #define	AMD_NB_CFG_WDOGTMRBASESEL_SHIFT	12
2431414Scindi 
2441414Scindi #define	AMD_NB_CFG_LDTLINKSEL_MASK	0x0000c000
2451414Scindi #define	AMD_NB_CFG_LDTLINKSEL_SHIFT	14
2461414Scindi 
2471414Scindi #define	AMD_NB_CFG_GENCRCERRBYTE0	0x00010000
2481414Scindi #define	AMD_NB_CFG_GENCRCERRBYTE1	0x00020000
2491414Scindi 
2501414Scindi /* Generic bank status register bits */
251*1717Swesolows #define	AMD_BANK_STAT_VALID		0x8000000000000000ULL
252*1717Swesolows #define	AMD_BANK_STAT_OVER		0x4000000000000000ULL
253*1717Swesolows #define	AMD_BANK_STAT_UC		0x2000000000000000ULL
254*1717Swesolows #define	AMD_BANK_STAT_EN		0x1000000000000000ULL
255*1717Swesolows #define	AMD_BANK_STAT_MISCV		0x0800000000000000ULL
256*1717Swesolows #define	AMD_BANK_STAT_ADDRV		0x0400000000000000ULL
257*1717Swesolows #define	AMD_BANK_STAT_PCC		0x0200000000000000ULL
2581414Scindi 
259*1717Swesolows #define	AMD_BANK_STAT_CECC		0x0000400000000000ULL
260*1717Swesolows #define	AMD_BANK_STAT_UECC		0x0000200000000000ULL
261*1717Swesolows #define	AMD_BANK_STAT_SCRUB		0x0000010000000000ULL
2621414Scindi 
263*1717Swesolows 	/* syndrome[7:0] */
264*1717Swesolows #define	AMD_BANK_STAT_SYND_MASK		0x007f800000000000ULL
2651414Scindi #define	AMD_BANK_STAT_SYND_SHIFT	47
2661414Scindi 
2671414Scindi #define	AMD_BANK_SYND(stat) \
2681414Scindi 	(((stat) & AMD_BANK_STAT_SYND_MASK) >> AMD_BANK_STAT_SYND_SHIFT)
2691414Scindi #define	AMD_BANK_MKSYND(synd) \
2701414Scindi 	(((uint64_t)(synd) << AMD_BANK_STAT_SYND_SHIFT) & \
2711414Scindi 	AMD_BANK_STAT_SYND_MASK)
2721414Scindi 
2731414Scindi /* northbridge (NB) status registers */
2741414Scindi 
2751414Scindi #define	AMD_NB_FUNC			3
2761414Scindi #define	AMD_NB_REG_CFG			0x44
2771414Scindi #define	AMD_NB_REG_STLO			0x48	/* alias: NB_STATUS[0:31] */
2781414Scindi #define	AMD_NB_REG_STHI			0x4c	/* alias: NB_STATUS[32:63] */
2791414Scindi #define	AMD_NB_REG_ADDRLO		0x50	/* alias: NB_ADDR[0:31] */
2801414Scindi #define	AMD_NB_REG_ADDRHI		0x54	/* alias: NB_ADDR[32:63] */
2811414Scindi 
2821414Scindi #define	AMD_NB_REG_SCRUBCTL		0x58
2831414Scindi #define	AMD_NB_REG_SCRUBADDR_LO		0x5c
2841414Scindi #define	AMD_NB_REG_SCRUBADDR_HI		0x60
2851414Scindi 
2861414Scindi #define	AMD_NB_STAT_LDTLINK_MASK	0x0000007000000000
2871414Scindi #define	AMD_NB_STAT_LDTLINK_SHIFT	4
2881414Scindi #define	AMD_NB_STAT_ERRCPU1		0x0000000200000000
2891414Scindi #define	AMD_NB_STAT_ERRCPU0		0x0000000100000000
2901414Scindi #define	AMD_NB_STAT_CKSYND_MASK		0x00000000ff000000 /* syndrome[15:8] */
2911414Scindi #define	AMD_NB_STAT_CKSYND_SHIFT	(24 - 8) /* shift [31:24] to [15:8] */
2921414Scindi 
2931414Scindi #define	AMD_NB_STAT_CKSYND(stat) \
2941414Scindi 	((((stat) & AMD_NB_STAT_CKSYND_MASK) >> AMD_NB_STAT_CKSYND_SHIFT) | \
2951414Scindi 	AMD_BANK_SYND((stat)))
2961414Scindi 
2971414Scindi #define	AMD_NB_STAT_MKCKSYND(synd) \
2981414Scindi 	((((uint64_t)(synd) << AMD_NB_STAT_CKSYND_SHIFT) & \
2991414Scindi 	AMD_NB_STAT_CKSYND_MASK) | AMD_BANK_MKSYND(synd))
3001414Scindi 
3011414Scindi #define	AMD_ERRCODE_MASK		0x000000000000ffff
3021414Scindi #define	AMD_ERREXT_MASK			0x00000000000f0000
3031414Scindi #define	AMD_ERREXT_SHIFT		16
3041414Scindi 
3051414Scindi #define	AMD_ERRCODE_TT_MASK		0x000c
3061414Scindi #define	AMD_ERRCODE_TT_SHIFT		2
3071414Scindi #define	AMD_ERRCODE_TT_INSTR		0x0
3081414Scindi #define	AMD_ERRCODE_TT_DATA		0x1
3091414Scindi #define	AMD_ERRCODE_TT_GEN		0x2
3101414Scindi 
3111414Scindi #define	AMD_ERRCODE_LL_MASK		0x0003
3121414Scindi #define	AMD_ERRCODE_LL_L0		0x0
3131414Scindi #define	AMD_ERRCODE_LL_L1		0x1
3141414Scindi #define	AMD_ERRCODE_LL_L2		0x2
3151414Scindi #define	AMD_ERRCODE_LL_LG		0x3
3161414Scindi 
3171414Scindi #define	AMD_ERRCODE_R4_MASK		0x00f0
3181414Scindi #define	AMD_ERRCODE_R4_SHIFT		4
3191414Scindi #define	AMD_ERRCODE_R4_GEN		0x0
3201414Scindi #define	AMD_ERRCODE_R4_RD		0x1
3211414Scindi #define	AMD_ERRCODE_R4_WR		0x2
3221414Scindi #define	AMD_ERRCODE_R4_DRD		0x3
3231414Scindi #define	AMD_ERRCODE_R4_DWR		0x4
3241414Scindi #define	AMD_ERRCODE_R4_IRD		0x5
3251414Scindi #define	AMD_ERRCODE_R4_PREFETCH		0x6
3261414Scindi #define	AMD_ERRCODE_R4_EVICT		0x7
3271414Scindi #define	AMD_ERRCODE_R4_SNOOP		0x8
3281414Scindi 
3291414Scindi #define	AMD_ERRCODE_PP_MASK		0x0600
3301414Scindi #define	AMD_ERRCODE_PP_SHIFT		9
3311414Scindi #define	AMD_ERRCODE_PP_SRC		0x0
3321414Scindi #define	AMD_ERRCODE_PP_RSP		0x1
3331414Scindi #define	AMD_ERRCODE_PP_OBS		0x2
3341414Scindi #define	AMD_ERRCODE_PP_GEN		0x3
3351414Scindi 
3361414Scindi #define	AMD_ERRCODE_T_MASK		0x0100
3371414Scindi #define	AMD_ERRCODE_T_SHIFT		8
3381414Scindi #define	AMD_ERRCODE_T_NONE		0x0
3391414Scindi #define	AMD_ERRCODE_T_TIMEOUT		0x1
3401414Scindi 
3411414Scindi #define	AMD_ERRCODE_II_MASK		0x000c
3421414Scindi #define	AMD_ERRCODE_II_SHIFT		2
3431414Scindi #define	AMD_ERRCODE_II_MEM		0x0
3441414Scindi #define	AMD_ERRCODE_II_IO		0x2
3451414Scindi #define	AMD_ERRCODE_II_GEN		0x3
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_TLB_VAL		0x0010
3531414Scindi #define	AMD_ERRCODE_MEM_MASK		0xff00
3541414Scindi #define	AMD_ERRCODE_MEM_VAL		0x0100
3551414Scindi #define	AMD_ERRCODE_BUS_MASK		0xf800
3561414Scindi #define	AMD_ERRCODE_BUS_VAL		0x0800
3571414Scindi 
3581414Scindi #define	AMD_ERRCODE_MKTLB(tt, ll) \
3591414Scindi 	(AMD_ERRCODE_TLB_VAL | \
3601414Scindi 	(((tt) << AMD_ERRCODE_TT_SHIFT) & AMD_ERRCODE_TT_MASK) | \
3611414Scindi 	((ll) & AMD_ERRCODE_LL_MASK))
3621414Scindi #define	AMD_ERRCODE_ISTLB(code) \
3631414Scindi 	(((code) & AMD_ERRCODE_TLB_MASK) == AMD_ERRCODE_TLB_VAL)
3641414Scindi 
3651414Scindi #define	AMD_ERRCODE_MKMEM(r4, tt, ll) \
3661414Scindi 	(AMD_ERRCODE_MEM_VAL | \
3671414Scindi 	(((r4) << AMD_ERRCODE_R4_SHIFT) & AMD_ERRCODE_R4_MASK) | \
3681414Scindi 	(((tt) << AMD_ERRCODE_TT_SHIFT) & AMD_ERRCODE_TT_MASK) | \
3691414Scindi 	((ll) & AMD_ERRCODE_LL_MASK))
3701414Scindi #define	AMD_ERRCODE_ISMEM(code) \
3711414Scindi 	(((code) & AMD_ERRCODE_MEM_MASK) == AMD_ERRCODE_MEM_VAL)
3721414Scindi 
3731414Scindi #define	AMD_ERRCODE_MKBUS(pp, t, r4, ii, ll) \
3741414Scindi 	(AMD_ERRCODE_BUS_VAL | \
3751414Scindi 	(((pp) << AMD_ERRCODE_PP_SHIFT) & AMD_ERRCODE_PP_MASK) | \
3761414Scindi 	(((t) << AMD_ERRCODE_T_SHIFT) & AMD_ERRCODE_T_MASK) | \
3771414Scindi 	(((r4) << AMD_ERRCODE_R4_SHIFT) & AMD_ERRCODE_R4_MASK) | \
3781414Scindi 	(((ii) << AMD_ERRCODE_II_SHIFT) & AMD_ERRCODE_II_MASK) | \
3791414Scindi 	((ll) & AMD_ERRCODE_LL_MASK))
3801414Scindi #define	AMD_ERRCODE_ISBUS(code) \
3811414Scindi 	(((code) & AMD_ERRCODE_BUS_MASK) == AMD_ERRCODE_BUS_VAL)
3821414Scindi 
3831414Scindi #define	AMD_NB_ADDRLO_MASK		0xfffffff8
3841414Scindi #define	AMD_NB_ADDRHI_MASK		0x000000ff
3851414Scindi 
3861414Scindi #define	AMD_SYNDTYPE_ECC		0
3871414Scindi #define	AMD_SYNDTYPE_CHIPKILL		1
3881414Scindi 
3891414Scindi #define	AMD_NB_SCRUBCTL_DRAM_MASK	0x0000001f
3901414Scindi #define	AMD_NB_SCRUBCTL_DRAM_SHIFT	0
3911414Scindi #define	AMD_NB_SCRUBCTL_L2_MASK		0x00001f00
3921414Scindi #define	AMD_NB_SCRUBCTL_L2_SHIFT	8
3931414Scindi #define	AMD_NB_SCRUBCTL_DC_MASK		0x001f0000
3941414Scindi #define	AMD_NB_SCRUBCTL_DC_SHIFT	16
3951414Scindi 
3961414Scindi #define	AMD_NB_SCRUBCTL_RATE_NONE	0
3971414Scindi #define	AMD_NB_SCRUBCTL_RATE_MAX	0x16
3981414Scindi 
3991414Scindi #define	AMD_NB_SCRUBADDR_LO_MASK	0xffffffc0
4001414Scindi #define	AMD_NB_SCRUBADDR_LO_SCRUBREDIREN 0x1
4011414Scindi #define	AMD_NB_SCRUBADDR_HI_MASK	0x000000ff
4021414Scindi 
4031414Scindi #define	AMD_NB_SCRUBADDR_MKLO(addr) \
4041414Scindi 	((addr) & AMD_NB_SCRUBADDR_LO_MASK)
4051414Scindi 
4061414Scindi #define	AMD_NB_SCRUBADDR_MKHI(addr) \
4071414Scindi 	(((addr) >> 32) & AMD_NB_SCRUBADDR_HI_MASK)
4081414Scindi 
4091414Scindi #define	AMD_NB_MKSCRUBCTL(dc, l2, dr) ( \
4101414Scindi 	(((dc) << AMD_NB_SCRUBCTL_DC_SHIFT) & AMD_NB_SCRUBCTL_DC_MASK) | \
4111414Scindi 	(((l2) << AMD_NB_SCRUBCTL_L2_SHIFT) & AMD_NB_SCRUBCTL_L2_MASK) | \
4121414Scindi 	(((dr) << AMD_NB_SCRUBCTL_DRAM_SHIFT) & AMD_NB_SCRUBCTL_DRAM_MASK))
4131414Scindi 
4141414Scindi #ifdef __cplusplus
4151414Scindi }
4161414Scindi #endif
4171414Scindi 
4181414Scindi #endif /* _SYS_MCA_AMD_H */
419