xref: /onnv-gate/usr/src/uts/intel/sys/mca_amd.h (revision 1414)
1*1414Scindi /*
2*1414Scindi  * CDDL HEADER START
3*1414Scindi  *
4*1414Scindi  * The contents of this file are subject to the terms of the
5*1414Scindi  * Common Development and Distribution License, Version 1.0 only
6*1414Scindi  * (the "License").  You may not use this file except in compliance
7*1414Scindi  * with the License.
8*1414Scindi  *
9*1414Scindi  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*1414Scindi  * or http://www.opensolaris.org/os/licensing.
11*1414Scindi  * See the License for the specific language governing permissions
12*1414Scindi  * and limitations under the License.
13*1414Scindi  *
14*1414Scindi  * When distributing Covered Code, include this CDDL HEADER in each
15*1414Scindi  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*1414Scindi  * If applicable, add the following below this CDDL HEADER, with the
17*1414Scindi  * fields enclosed by brackets "[]" replaced with your own identifying
18*1414Scindi  * information: Portions Copyright [yyyy] [name of copyright owner]
19*1414Scindi  *
20*1414Scindi  * CDDL HEADER END
21*1414Scindi  */
22*1414Scindi 
23*1414Scindi /*
24*1414Scindi  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
25*1414Scindi  * Use is subject to license terms.
26*1414Scindi  */
27*1414Scindi 
28*1414Scindi #ifndef _SYS_MCA_AMD_H
29*1414Scindi #define	_SYS_MCA_AMD_H
30*1414Scindi 
31*1414Scindi #pragma ident	"%Z%%M%	%I%	%E% SMI"
32*1414Scindi 
33*1414Scindi /*
34*1414Scindi  * Constants the Memory Check Architecture as implemented on AMD CPUs.
35*1414Scindi  */
36*1414Scindi 
37*1414Scindi #ifdef __cplusplus
38*1414Scindi extern "C" {
39*1414Scindi #endif
40*1414Scindi 
41*1414Scindi #define	AMD_MSR_MCG_CAP			0x179
42*1414Scindi #define	AMD_MSR_MCG_STATUS		0x17a
43*1414Scindi #define	AMD_MSR_MCG_CTL			0x17b
44*1414Scindi 
45*1414Scindi #define	AMD_MCA_BANK_DC			0	/* Data Cache */
46*1414Scindi #define	AMD_MCA_BANK_IC			1	/* Instruction Cache */
47*1414Scindi #define	AMD_MCA_BANK_BU			2	/* Bus Unit */
48*1414Scindi #define	AMD_MCA_BANK_LS			3	/* Load/Store Unit */
49*1414Scindi #define	AMD_MCA_BANK_NB			4	/* Northbridge */
50*1414Scindi #define	AMD_MCA_BANK_COUNT		5
51*1414Scindi 
52*1414Scindi #define	AMD_MSR_DC_CTL			0x400
53*1414Scindi #define	AMD_MSR_DC_MASK			0xc0010044
54*1414Scindi #define	AMD_MSR_DC_STATUS		0x401
55*1414Scindi #define	AMD_MSR_DC_ADDR			0x402
56*1414Scindi 
57*1414Scindi #define	AMD_MSR_IC_CTL			0x404
58*1414Scindi #define	AMD_MSR_IC_MASK			0xc0010045
59*1414Scindi #define	AMD_MSR_IC_STATUS		0x405
60*1414Scindi #define	AMD_MSR_IC_ADDR			0x406
61*1414Scindi 
62*1414Scindi #define	AMD_MSR_BU_CTL			0x408
63*1414Scindi #define	AMD_MSR_BU_MASK			0xc0010046
64*1414Scindi #define	AMD_MSR_BU_STATUS		0x409
65*1414Scindi #define	AMD_MSR_BU_ADDR			0x40a
66*1414Scindi 
67*1414Scindi #define	AMD_MSR_LS_CTL			0x40c
68*1414Scindi #define	AMD_MSR_LS_MASK			0xc0010047
69*1414Scindi #define	AMD_MSR_LS_STATUS		0x40d
70*1414Scindi #define	AMD_MSR_LS_ADDR			0x40e
71*1414Scindi 
72*1414Scindi #define	AMD_MSR_NB_CTL			0x410
73*1414Scindi #define	AMD_MSR_NB_MASK			0xc0010048
74*1414Scindi #define	AMD_MSR_NB_STATUS		0x411
75*1414Scindi #define	AMD_MSR_NB_ADDR			0x412
76*1414Scindi 
77*1414Scindi #define	AMD_MCG_EN_DC			0x01
78*1414Scindi #define	AMD_MCG_EN_IC			0x02
79*1414Scindi #define	AMD_MCG_EN_BU			0x04
80*1414Scindi #define	AMD_MCG_EN_LS			0x08
81*1414Scindi #define	AMD_MCG_EN_NB			0x10
82*1414Scindi #define	AMD_MCG_EN_ALL \
83*1414Scindi 	(AMD_MCG_EN_DC | AMD_MCG_EN_IC | AMD_MCG_EN_BU | AMD_MCG_EN_LS | \
84*1414Scindi 	AMD_MCG_EN_NB)
85*1414Scindi 
86*1414Scindi /*
87*1414Scindi  * Data Cache (DC) bank error-detection enabling bits and CTL register
88*1414Scindi  * initializer value.
89*1414Scindi  */
90*1414Scindi 
91*1414Scindi #define	AMD_DC_EN_ECCI			0x00000001ULL
92*1414Scindi #define	AMD_DC_EN_ECCM			0x00000002ULL
93*1414Scindi #define	AMD_DC_EN_DECC			0x00000004ULL
94*1414Scindi #define	AMD_DC_EN_DMTP			0x00000008ULL
95*1414Scindi #define	AMD_DC_EN_DSTP			0x00000010ULL
96*1414Scindi #define	AMD_DC_EN_L1TP			0x00000020ULL
97*1414Scindi #define	AMD_DC_EN_L2TP			0x00000040ULL
98*1414Scindi 
99*1414Scindi #define	AMD_DC_CTL_INIT \
100*1414Scindi 	(AMD_DC_EN_ECCI | AMD_DC_EN_ECCM | AMD_DC_EN_DECC | AMD_DC_EN_DMTP | \
101*1414Scindi 	AMD_DC_EN_DSTP | AMD_DC_EN_L1TP | AMD_DC_EN_L2TP)
102*1414Scindi 
103*1414Scindi /*
104*1414Scindi  * Instruction Cache (IC) bank error-detection enabling bits and CTL register
105*1414Scindi  * initializer value.
106*1414Scindi  *
107*1414Scindi  * The Northbridge will handle Read Data errors.  Our initializer will enable
108*1414Scindi  * all but the RDDE detector.
109*1414Scindi  */
110*1414Scindi 
111*1414Scindi #define	AMD_IC_EN_ECCI			0x00000001ULL
112*1414Scindi #define	AMD_IC_EN_ECCM			0x00000002ULL
113*1414Scindi #define	AMD_IC_EN_IDP			0x00000004ULL
114*1414Scindi #define	AMD_IC_EN_IMTP			0x00000008ULL
115*1414Scindi #define	AMD_IC_EN_ISTP			0x00000010ULL
116*1414Scindi #define	AMD_IC_EN_L1TP			0x00000020ULL
117*1414Scindi #define	AMD_IC_EN_L2TP			0x00000040ULL
118*1414Scindi #define	AMD_IC_EN_RDDE			0x00000200ULL
119*1414Scindi 
120*1414Scindi #define	AMD_IC_CTL_INIT \
121*1414Scindi 	(AMD_IC_EN_ECCI | AMD_IC_EN_ECCM | AMD_IC_EN_IDP | AMD_IC_EN_IMTP | \
122*1414Scindi 	AMD_IC_EN_ISTP | AMD_IC_EN_L1TP | AMD_IC_EN_L2TP)
123*1414Scindi 
124*1414Scindi /*
125*1414Scindi  * Bus Unit (BU) bank error-detection enabling bits and CTL register
126*1414Scindi  * initializer value.
127*1414Scindi  *
128*1414Scindi  * The Northbridge will handle Read Data errors.  Our initializer will enable
129*1414Scindi  * all but the S_RDE_* detectors.
130*1414Scindi  */
131*1414Scindi 
132*1414Scindi #define	AMD_BU_EN_S_RDE_HP		0x00000001ULL
133*1414Scindi #define	AMD_BU_EN_S_RDE_TLB		0x00000002ULL
134*1414Scindi #define	AMD_BU_EN_S_RDE_ALL		0x00000004ULL
135*1414Scindi #define	AMD_BU_EN_S_ECC1_TLB		0x00000008ULL
136*1414Scindi #define	AMD_BU_EN_S_ECC1_HP		0x00000010ULL
137*1414Scindi #define	AMD_BU_EN_S_ECCM_TLB		0x00000020ULL
138*1414Scindi #define	AMD_BU_EN_S_ECCM_HP		0x00000040ULL
139*1414Scindi #define	AMD_BU_EN_L2T_PAR_ICDC		0x00000080ULL
140*1414Scindi #define	AMD_BU_EN_L2T_PAR_TLB		0x00000100ULL
141*1414Scindi #define	AMD_BU_EN_L2T_PAR_SNP		0x00000200ULL
142*1414Scindi #define	AMD_BU_EN_L2T_PAR_CPB		0x00000400ULL
143*1414Scindi #define	AMD_BU_EN_L2T_PAR_SCR		0x00000800ULL
144*1414Scindi #define	AMD_BU_EN_L2D_ECC1_TLB		0x00001000ULL
145*1414Scindi #define	AMD_BU_EN_L2D_ECC1_SNP		0x00002000ULL
146*1414Scindi #define	AMD_BU_EN_L2D_ECC1_CPB		0x00004000ULL
147*1414Scindi #define	AMD_BU_EN_L2D_ECCM_TLB		0x00008000ULL
148*1414Scindi #define	AMD_BU_EN_L2D_ECCM_SNP		0x00010000ULL
149*1414Scindi #define	AMD_BU_EN_L2D_ECCM_CPB		0x00020000ULL
150*1414Scindi #define	AMD_BU_EN_L2T_ECC1_SCR		0x00040000ULL
151*1414Scindi #define	AMD_BU_EN_L2T_ECCM_SCR		0x00080000ULL
152*1414Scindi 
153*1414Scindi #define	AMD_BU_CTL_INIT \
154*1414Scindi 	(AMD_BU_EN_S_ECC1_TLB | AMD_BU_EN_S_ECC1_HP | \
155*1414Scindi 	AMD_BU_EN_S_ECCM_TLB | AMD_BU_EN_S_ECCM_HP | \
156*1414Scindi 	AMD_BU_EN_L2T_PAR_ICDC | AMD_BU_EN_L2T_PAR_TLB | \
157*1414Scindi 	AMD_BU_EN_L2T_PAR_SNP |	AMD_BU_EN_L2T_PAR_CPB | \
158*1414Scindi 	AMD_BU_EN_L2T_PAR_SCR |	AMD_BU_EN_L2D_ECC1_TLB | \
159*1414Scindi 	AMD_BU_EN_L2D_ECC1_SNP | AMD_BU_EN_L2D_ECC1_CPB | \
160*1414Scindi 	AMD_BU_EN_L2D_ECCM_TLB | AMD_BU_EN_L2D_ECCM_SNP | \
161*1414Scindi 	AMD_BU_EN_L2D_ECCM_CPB | AMD_BU_EN_L2T_ECC1_SCR | \
162*1414Scindi 	AMD_BU_EN_L2T_ECCM_SCR)
163*1414Scindi 
164*1414Scindi /*
165*1414Scindi  * Load/Store (LS) bank error-detection enabling bits and CTL register
166*1414Scindi  * initializer value.
167*1414Scindi  *
168*1414Scindi  * The Northbridge will handle Read Data errors.  That's the only type of
169*1414Scindi  * error the LS unit can detect at present, so we won't be enabling any
170*1414Scindi  * LS detectors.
171*1414Scindi  */
172*1414Scindi 
173*1414Scindi #define	AMD_LS_EN_S_RDE_S		0x00000001ULL
174*1414Scindi #define	AMD_LS_EN_S_RDE_L		0x00000002ULL
175*1414Scindi 
176*1414Scindi #define	AMD_LS_CTL_INIT			0ULL
177*1414Scindi 
178*1414Scindi /*
179*1414Scindi  * The Northbridge (NB) is configured using both the standard MCA CTL register
180*1414Scindi  * and a NB-specific configuration register (NB CFG).  The AMD_NB_EN_* macros
181*1414Scindi  * are the detector enabling bits for the NB MCA CTL register.  The
182*1414Scindi  * AMD_NB_CFG_* bits are for the NB CFG register.
183*1414Scindi  *
184*1414Scindi  * The CTL register can be initialized statically, but portions of the NB CFG
185*1414Scindi  * register must be initialized based on the current machine's configuration.
186*1414Scindi  *
187*1414Scindi  * The MCA NB Control Register maps to MC4_CTL[31:0].
188*1414Scindi  *
189*1414Scindi  */
190*1414Scindi #define	AMD_NB_EN_CORRECC		0x00000001
191*1414Scindi #define	AMD_NB_EN_UNCORRECC		0x00000002
192*1414Scindi #define	AMD_NB_EN_CRCERR0		0x00000004
193*1414Scindi #define	AMD_NB_EN_CRCERR1		0x00000008
194*1414Scindi #define	AMD_NB_EN_CRCERR2		0x00000010
195*1414Scindi #define	AMD_NB_EN_SYNCPKT0		0x00000020
196*1414Scindi #define	AMD_NB_EN_SYNCPKT1		0x00000040
197*1414Scindi #define	AMD_NB_EN_SYNCPKT2		0x00000080
198*1414Scindi #define	AMD_NB_EN_MSTRABRT		0x00000100
199*1414Scindi #define	AMD_NB_EN_TGTABRT		0x00000200
200*1414Scindi #define	AMD_NB_EN_GARTTBLWK		0x00000400
201*1414Scindi #define	AMD_NB_EN_ATOMICRMW		0x00000800
202*1414Scindi #define	AMD_NB_EN_WCHDOGTMR		0x00001000
203*1414Scindi 
204*1414Scindi #define	AMD_NB_CTL_INIT /* All but GARTTBLWK */ \
205*1414Scindi 	(AMD_NB_EN_CORRECC | AMD_NB_EN_UNCORRECC | \
206*1414Scindi 	AMD_NB_EN_CRCERR0 | AMD_NB_EN_CRCERR1 | AMD_NB_EN_CRCERR2 | \
207*1414Scindi 	AMD_NB_EN_SYNCPKT0 | AMD_NB_EN_SYNCPKT1 | AMD_NB_EN_SYNCPKT2 | \
208*1414Scindi 	AMD_NB_EN_MSTRABRT | AMD_NB_EN_TGTABRT | \
209*1414Scindi 	AMD_NB_EN_ATOMICRMW | AMD_NB_EN_WCHDOGTMR)
210*1414Scindi 
211*1414Scindi #define	AMD_NB_CFG_CPUECCERREN		0x00000001
212*1414Scindi #define	AMD_NB_CFG_CPURDDATERREN	0x00000002
213*1414Scindi #define	AMD_NB_CFG_SYNCONUCECCEN	0x00000004
214*1414Scindi #define	AMD_NB_CFG_SYNCPKTGENDIS	0x00000008
215*1414Scindi #define	AMD_NB_CFG_SYNCPKTPROPDIS	0x00000010
216*1414Scindi #define	AMD_NB_CFG_IOMSTABORTDIS	0x00000020
217*1414Scindi #define	AMD_NB_CFG_CPUERRDIS		0x00000040
218*1414Scindi #define	AMD_NB_CFG_IOERRDIS		0x00000080
219*1414Scindi #define	AMD_NB_CFG_WDOGTMRDIS		0x00000100
220*1414Scindi #define	AMD_NB_CFG_SYNCONWDOGEN		0x00100000
221*1414Scindi #define	AMD_NB_CFG_SYNCONANYERREN	0x00200000
222*1414Scindi #define	AMD_NB_CFG_ECCEN		0x00400000
223*1414Scindi #define	AMD_NB_CFG_CHIPKILLECCEN	0x00800000
224*1414Scindi #define	AMD_NB_CFG_IORDDATERREN		0x01000000
225*1414Scindi #define	AMD_NB_CFG_DISPCICFGCPUERRRSP	0x02000000
226*1414Scindi #define	AMD_NB_CFG_NBMCATOMSTCPUEN	0x08000000
227*1414Scindi 
228*1414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_4095	0x00000000
229*1414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_2047	0x00000200
230*1414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_1023	0x00000400
231*1414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_511	0x00000600
232*1414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_255	0x00000800
233*1414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_127	0x00000a00
234*1414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_63	0x00000c00
235*1414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_31	0x00000e00
236*1414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_MASK	0x00000e00
237*1414Scindi #define	AMD_NB_CFG_WDOGTMRCNTSEL_SHIFT	9
238*1414Scindi 
239*1414Scindi #define	AMD_NB_CFG_WDOGTMRBASESEL_1MS	0x00000000
240*1414Scindi #define	AMD_NB_CFG_WDOGTMRBASESEL_1US	0x00001000
241*1414Scindi #define	AMD_NB_CFG_WDOGTMRBASESEL_5NS	0x00002000
242*1414Scindi #define	AMD_NB_CFG_WDOGTMRBASESEL_MASK	0x00003000
243*1414Scindi #define	AMD_NB_CFG_WDOGTMRBASESEL_SHIFT	12
244*1414Scindi 
245*1414Scindi #define	AMD_NB_CFG_LDTLINKSEL_MASK	0x0000c000
246*1414Scindi #define	AMD_NB_CFG_LDTLINKSEL_SHIFT	14
247*1414Scindi 
248*1414Scindi #define	AMD_NB_CFG_GENCRCERRBYTE0	0x00010000
249*1414Scindi #define	AMD_NB_CFG_GENCRCERRBYTE1	0x00020000
250*1414Scindi 
251*1414Scindi /* Generic bank status register bits */
252*1414Scindi #define	AMD_BANK_STAT_VALID		0x8000000000000000
253*1414Scindi #define	AMD_BANK_STAT_OVER		0x4000000000000000
254*1414Scindi #define	AMD_BANK_STAT_UC		0x2000000000000000
255*1414Scindi #define	AMD_BANK_STAT_EN		0x1000000000000000
256*1414Scindi #define	AMD_BANK_STAT_MISCV		0x0800000000000000
257*1414Scindi #define	AMD_BANK_STAT_ADDRV		0x0400000000000000
258*1414Scindi #define	AMD_BANK_STAT_PCC		0x0200000000000000
259*1414Scindi 
260*1414Scindi #define	AMD_BANK_STAT_CECC		0x0000400000000000
261*1414Scindi #define	AMD_BANK_STAT_UECC		0x0000200000000000
262*1414Scindi #define	AMD_BANK_STAT_SCRUB		0x0000010000000000
263*1414Scindi 
264*1414Scindi #define	AMD_BANK_STAT_SYND_MASK		0x007f800000000000 /* syndrome[7:0] */
265*1414Scindi #define	AMD_BANK_STAT_SYND_SHIFT	47
266*1414Scindi 
267*1414Scindi #define	AMD_BANK_SYND(stat) \
268*1414Scindi 	(((stat) & AMD_BANK_STAT_SYND_MASK) >> AMD_BANK_STAT_SYND_SHIFT)
269*1414Scindi #define	AMD_BANK_MKSYND(synd) \
270*1414Scindi 	(((uint64_t)(synd) << AMD_BANK_STAT_SYND_SHIFT) & \
271*1414Scindi 	AMD_BANK_STAT_SYND_MASK)
272*1414Scindi 
273*1414Scindi /* northbridge (NB) status registers */
274*1414Scindi 
275*1414Scindi #define	AMD_NB_FUNC			3
276*1414Scindi #define	AMD_NB_REG_CFG			0x44
277*1414Scindi #define	AMD_NB_REG_STLO			0x48	/* alias: NB_STATUS[0:31] */
278*1414Scindi #define	AMD_NB_REG_STHI			0x4c	/* alias: NB_STATUS[32:63] */
279*1414Scindi #define	AMD_NB_REG_ADDRLO		0x50	/* alias: NB_ADDR[0:31] */
280*1414Scindi #define	AMD_NB_REG_ADDRHI		0x54	/* alias: NB_ADDR[32:63] */
281*1414Scindi 
282*1414Scindi #define	AMD_NB_REG_SCRUBCTL		0x58
283*1414Scindi #define	AMD_NB_REG_SCRUBADDR_LO		0x5c
284*1414Scindi #define	AMD_NB_REG_SCRUBADDR_HI		0x60
285*1414Scindi 
286*1414Scindi #define	AMD_NB_STAT_LDTLINK_MASK	0x0000007000000000
287*1414Scindi #define	AMD_NB_STAT_LDTLINK_SHIFT	4
288*1414Scindi #define	AMD_NB_STAT_ERRCPU1		0x0000000200000000
289*1414Scindi #define	AMD_NB_STAT_ERRCPU0		0x0000000100000000
290*1414Scindi #define	AMD_NB_STAT_CKSYND_MASK		0x00000000ff000000 /* syndrome[15:8] */
291*1414Scindi #define	AMD_NB_STAT_CKSYND_SHIFT	(24 - 8) /* shift [31:24] to [15:8] */
292*1414Scindi 
293*1414Scindi #define	AMD_NB_STAT_CKSYND(stat) \
294*1414Scindi 	((((stat) & AMD_NB_STAT_CKSYND_MASK) >> AMD_NB_STAT_CKSYND_SHIFT) | \
295*1414Scindi 	AMD_BANK_SYND((stat)))
296*1414Scindi 
297*1414Scindi #define	AMD_NB_STAT_MKCKSYND(synd) \
298*1414Scindi 	((((uint64_t)(synd) << AMD_NB_STAT_CKSYND_SHIFT) & \
299*1414Scindi 	AMD_NB_STAT_CKSYND_MASK) | AMD_BANK_MKSYND(synd))
300*1414Scindi 
301*1414Scindi #define	AMD_ERRCODE_MASK		0x000000000000ffff
302*1414Scindi #define	AMD_ERREXT_MASK			0x00000000000f0000
303*1414Scindi #define	AMD_ERREXT_SHIFT		16
304*1414Scindi 
305*1414Scindi #define	AMD_ERRCODE_TT_MASK		0x000c
306*1414Scindi #define	AMD_ERRCODE_TT_SHIFT		2
307*1414Scindi #define	AMD_ERRCODE_TT_INSTR		0x0
308*1414Scindi #define	AMD_ERRCODE_TT_DATA		0x1
309*1414Scindi #define	AMD_ERRCODE_TT_GEN		0x2
310*1414Scindi 
311*1414Scindi #define	AMD_ERRCODE_LL_MASK		0x0003
312*1414Scindi #define	AMD_ERRCODE_LL_L0		0x0
313*1414Scindi #define	AMD_ERRCODE_LL_L1		0x1
314*1414Scindi #define	AMD_ERRCODE_LL_L2		0x2
315*1414Scindi #define	AMD_ERRCODE_LL_LG		0x3
316*1414Scindi 
317*1414Scindi #define	AMD_ERRCODE_R4_MASK		0x00f0
318*1414Scindi #define	AMD_ERRCODE_R4_SHIFT		4
319*1414Scindi #define	AMD_ERRCODE_R4_GEN		0x0
320*1414Scindi #define	AMD_ERRCODE_R4_RD		0x1
321*1414Scindi #define	AMD_ERRCODE_R4_WR		0x2
322*1414Scindi #define	AMD_ERRCODE_R4_DRD		0x3
323*1414Scindi #define	AMD_ERRCODE_R4_DWR		0x4
324*1414Scindi #define	AMD_ERRCODE_R4_IRD		0x5
325*1414Scindi #define	AMD_ERRCODE_R4_PREFETCH		0x6
326*1414Scindi #define	AMD_ERRCODE_R4_EVICT		0x7
327*1414Scindi #define	AMD_ERRCODE_R4_SNOOP		0x8
328*1414Scindi 
329*1414Scindi #define	AMD_ERRCODE_PP_MASK		0x0600
330*1414Scindi #define	AMD_ERRCODE_PP_SHIFT		9
331*1414Scindi #define	AMD_ERRCODE_PP_SRC		0x0
332*1414Scindi #define	AMD_ERRCODE_PP_RSP		0x1
333*1414Scindi #define	AMD_ERRCODE_PP_OBS		0x2
334*1414Scindi #define	AMD_ERRCODE_PP_GEN		0x3
335*1414Scindi 
336*1414Scindi #define	AMD_ERRCODE_T_MASK		0x0100
337*1414Scindi #define	AMD_ERRCODE_T_SHIFT		8
338*1414Scindi #define	AMD_ERRCODE_T_NONE		0x0
339*1414Scindi #define	AMD_ERRCODE_T_TIMEOUT		0x1
340*1414Scindi 
341*1414Scindi #define	AMD_ERRCODE_II_MASK		0x000c
342*1414Scindi #define	AMD_ERRCODE_II_SHIFT		2
343*1414Scindi #define	AMD_ERRCODE_II_MEM		0x0
344*1414Scindi #define	AMD_ERRCODE_II_IO		0x2
345*1414Scindi #define	AMD_ERRCODE_II_GEN		0x3
346*1414Scindi 
347*1414Scindi #define	AMD_ERRCODE_TLB_BIT		4
348*1414Scindi #define	AMD_ERRCODE_MEM_BIT		8
349*1414Scindi #define	AMD_ERRCODE_BUS_BIT		11
350*1414Scindi 
351*1414Scindi #define	AMD_ERRCODE_TLB_MASK		0xfff0
352*1414Scindi #define	AMD_ERRCODE_TLB_VAL		0x0010
353*1414Scindi #define	AMD_ERRCODE_MEM_MASK		0xff00
354*1414Scindi #define	AMD_ERRCODE_MEM_VAL		0x0100
355*1414Scindi #define	AMD_ERRCODE_BUS_MASK		0xf800
356*1414Scindi #define	AMD_ERRCODE_BUS_VAL		0x0800
357*1414Scindi 
358*1414Scindi #define	AMD_ERRCODE_MKTLB(tt, ll) \
359*1414Scindi 	(AMD_ERRCODE_TLB_VAL | \
360*1414Scindi 	(((tt) << AMD_ERRCODE_TT_SHIFT) & AMD_ERRCODE_TT_MASK) | \
361*1414Scindi 	((ll) & AMD_ERRCODE_LL_MASK))
362*1414Scindi #define	AMD_ERRCODE_ISTLB(code) \
363*1414Scindi 	(((code) & AMD_ERRCODE_TLB_MASK) == AMD_ERRCODE_TLB_VAL)
364*1414Scindi 
365*1414Scindi #define	AMD_ERRCODE_MKMEM(r4, tt, ll) \
366*1414Scindi 	(AMD_ERRCODE_MEM_VAL | \
367*1414Scindi 	(((r4) << AMD_ERRCODE_R4_SHIFT) & AMD_ERRCODE_R4_MASK) | \
368*1414Scindi 	(((tt) << AMD_ERRCODE_TT_SHIFT) & AMD_ERRCODE_TT_MASK) | \
369*1414Scindi 	((ll) & AMD_ERRCODE_LL_MASK))
370*1414Scindi #define	AMD_ERRCODE_ISMEM(code) \
371*1414Scindi 	(((code) & AMD_ERRCODE_MEM_MASK) == AMD_ERRCODE_MEM_VAL)
372*1414Scindi 
373*1414Scindi #define	AMD_ERRCODE_MKBUS(pp, t, r4, ii, ll) \
374*1414Scindi 	(AMD_ERRCODE_BUS_VAL | \
375*1414Scindi 	(((pp) << AMD_ERRCODE_PP_SHIFT) & AMD_ERRCODE_PP_MASK) | \
376*1414Scindi 	(((t) << AMD_ERRCODE_T_SHIFT) & AMD_ERRCODE_T_MASK) | \
377*1414Scindi 	(((r4) << AMD_ERRCODE_R4_SHIFT) & AMD_ERRCODE_R4_MASK) | \
378*1414Scindi 	(((ii) << AMD_ERRCODE_II_SHIFT) & AMD_ERRCODE_II_MASK) | \
379*1414Scindi 	((ll) & AMD_ERRCODE_LL_MASK))
380*1414Scindi #define	AMD_ERRCODE_ISBUS(code) \
381*1414Scindi 	(((code) & AMD_ERRCODE_BUS_MASK) == AMD_ERRCODE_BUS_VAL)
382*1414Scindi 
383*1414Scindi #define	AMD_NB_ADDRLO_MASK		0xfffffff8
384*1414Scindi #define	AMD_NB_ADDRHI_MASK		0x000000ff
385*1414Scindi 
386*1414Scindi #define	AMD_SYNDTYPE_ECC		0
387*1414Scindi #define	AMD_SYNDTYPE_CHIPKILL		1
388*1414Scindi 
389*1414Scindi #define	AMD_NB_SCRUBCTL_DRAM_MASK	0x0000001f
390*1414Scindi #define	AMD_NB_SCRUBCTL_DRAM_SHIFT	0
391*1414Scindi #define	AMD_NB_SCRUBCTL_L2_MASK		0x00001f00
392*1414Scindi #define	AMD_NB_SCRUBCTL_L2_SHIFT	8
393*1414Scindi #define	AMD_NB_SCRUBCTL_DC_MASK		0x001f0000
394*1414Scindi #define	AMD_NB_SCRUBCTL_DC_SHIFT	16
395*1414Scindi 
396*1414Scindi #define	AMD_NB_SCRUBCTL_RATE_NONE	0
397*1414Scindi #define	AMD_NB_SCRUBCTL_RATE_MAX	0x16
398*1414Scindi 
399*1414Scindi #define	AMD_NB_SCRUBADDR_LO_MASK	0xffffffc0
400*1414Scindi #define	AMD_NB_SCRUBADDR_LO_SCRUBREDIREN 0x1
401*1414Scindi #define	AMD_NB_SCRUBADDR_HI_MASK	0x000000ff
402*1414Scindi 
403*1414Scindi #define	AMD_NB_SCRUBADDR_MKLO(addr) \
404*1414Scindi 	((addr) & AMD_NB_SCRUBADDR_LO_MASK)
405*1414Scindi 
406*1414Scindi #define	AMD_NB_SCRUBADDR_MKHI(addr) \
407*1414Scindi 	(((addr) >> 32) & AMD_NB_SCRUBADDR_HI_MASK)
408*1414Scindi 
409*1414Scindi #define	AMD_NB_MKSCRUBCTL(dc, l2, dr) ( \
410*1414Scindi 	(((dc) << AMD_NB_SCRUBCTL_DC_SHIFT) & AMD_NB_SCRUBCTL_DC_MASK) | \
411*1414Scindi 	(((l2) << AMD_NB_SCRUBCTL_L2_SHIFT) & AMD_NB_SCRUBCTL_L2_MASK) | \
412*1414Scindi 	(((dr) << AMD_NB_SCRUBCTL_DRAM_SHIFT) & AMD_NB_SCRUBCTL_DRAM_MASK))
413*1414Scindi 
414*1414Scindi #ifdef __cplusplus
415*1414Scindi }
416*1414Scindi #endif
417*1414Scindi 
418*1414Scindi #endif /* _SYS_MCA_AMD_H */
419