summaryrefslogtreecommitdiff
path: root/usr/src/uts/intel/sys/mc_intel.h
blob: f0c83b1d8b6b79ce888e08fed3fa068b79c0991c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */

/*
 * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef _MC_INTEL_H
#define	_MC_INTEL_H

#ifdef __cplusplus
extern "C" {
#endif

#define	FM_EREPORT_CPU_INTEL	"intel"

#define	MCINTEL_NVLIST_VERSTR	"mcintel-nvlist-version"
#define	MCINTEL_NVLIST_VERS0	0

#define	MCINTEL_NVLIST_VERS	MCINTEL_NVLIST_VERS0

#define	MCINTEL_NVLIST_MEM	"memory-controller"
#define	MCINTEL_NVLIST_NMEM	"memory-controllers"
#define	MCINTEL_NVLIST_MC	"memory-channels"
#define	MCINTEL_NVLIST_DIMMS	"memory-dimms"
#define	MCINTEL_NVLIST_DIMMSZ	"memory-dimm-size"
#define	MCINTEL_NVLIST_NRANKS	"dimm-max-ranks"
#define	MCINTEL_NVLIST_NDIMMS	"dimm-max-dimms"
#define	MCINTEL_NVLIST_RANKS	"dimm-ranks"
#define	MCINTEL_NVLIST_1ST_RANK	"dimm-start-rank"
#define	MCINTEL_NVLIST_DIMM_NUM	"dimm-number"
#define	MCINTEL_NVLIST_ROWS	"dimm-rows"
#define	MCINTEL_NVLIST_COL	"dimm-column"
#define	MCINTEL_NVLIST_BANK	"dimm-banks"
#define	MCINTEL_NVLIST_WIDTH	"dimm-width"
#define	MCINTEL_NVLIST_MID	"dimm-manufacture-id"
#define	MCINTEL_NVLIST_MLOC	"dimm-manufacture-location"
#define	MCINTEL_NVLIST_MWEEK	"dimm-manufacture-week"
#define	MCINTEL_NVLIST_MYEAR	"dimm-manufacture-year"
#define	MCINTEL_NVLIST_SERIALNO	"dimm-serial-number"
#define	MCINTEL_NVLIST_PARTNO	"dimm-part-number"
#define	MCINTEL_NVLIST_REV	"dimm-part-rev"

#define	FM_EREPORT_PAYLOAD_NAME_FERR_GLOBAL		"ferr_global"
#define	FM_EREPORT_PAYLOAD_NAME_NERR_GLOBAL		"nerr_global"
#define	FM_EREPORT_PAYLOAD_NAME_FSB			"fsb"
#define	FM_EREPORT_PAYLOAD_NAME_FERR_FAT_FSB		"ferr_fat_fsb"
#define	FM_EREPORT_PAYLOAD_NAME_NERR_FAT_FSB		"nerr_fat_fsb"
#define	FM_EREPORT_PAYLOAD_NAME_FERR_NF_FSB		"ferr_nf_fsb"
#define	FM_EREPORT_PAYLOAD_NAME_NERR_NF_FSB		"nerr_nf_fsb"
#define	FM_EREPORT_PAYLOAD_NAME_NRECFSB			"nrecfsb"
#define	FM_EREPORT_PAYLOAD_NAME_NRECFSB_ADDR		"nrecfsb_addr"
#define	FM_EREPORT_PAYLOAD_NAME_RECFSB			"recfsb"
#define	FM_EREPORT_PAYLOAD_NAME_PEX			"pex"
#define	FM_EREPORT_PAYLOAD_NAME_PEX_FAT_FERR		"pex_fat_ferr"
#define	FM_EREPORT_PAYLOAD_NAME_PEX_FAT_NERR		"pex_fat_nerr"
#define	FM_EREPORT_PAYLOAD_NAME_PEX_NF_CORR_FERR	"pex_nf_corr_ferr"
#define	FM_EREPORT_PAYLOAD_NAME_PEX_NF_CORR_NERR	"pex_nf_corr_nerr"
#define	FM_EREPORT_PAYLOAD_NAME_UNCERRSEV		"uncerrsev"
#define	FM_EREPORT_PAYLOAD_NAME_RPERRSTS		"rperrsts"
#define	FM_EREPORT_PAYLOAD_NAME_RPERRSID		"rperrsid"
#define	FM_EREPORT_PAYLOAD_NAME_UNCERRSTS		"uncerrsts"
#define	FM_EREPORT_PAYLOAD_NAME_AERRCAPCTRL		"aerrcapctrl"
#define	FM_EREPORT_PAYLOAD_NAME_CORERRSTS		"corerrsts"
#define	FM_EREPORT_PAYLOAD_NAME_PEXDEVSTS		"pexdevsts"
#define	FM_EREPORT_PAYLOAD_NAME_FERR_FAT_INT		"ferr_fat_int"
#define	FM_EREPORT_PAYLOAD_NAME_FERR_NF_INT		"ferr_nf_int"
#define	FM_EREPORT_PAYLOAD_NAME_NERR_FAT_INT		"nerr_fat_int"
#define	FM_EREPORT_PAYLOAD_NAME_NERR_NF_INT		"nerr_nf_int"
#define	FM_EREPORT_PAYLOAD_NAME_NRECINT			"nrecint"
#define	FM_EREPORT_PAYLOAD_NAME_RECINT			"recint"
#define	FM_EREPORT_PAYLOAD_NAME_NRECSF			"nrecsf"
#define	FM_EREPORT_PAYLOAD_NAME_RECSF			"recsf"
#define	FM_EREPORT_PAYLOAD_NAME_RANK			"rank"
#define	FM_EREPORT_PAYLOAD_NAME_BANK			"bank"
#define	FM_EREPORT_PAYLOAD_NAME_CAS			"cas"
#define	FM_EREPORT_PAYLOAD_NAME_RAS			"ras"
#define	FM_EREPORT_PAYLOAD_NAME_FERR_FAT_FBD		"ferr_fat_fbd"
#define	FM_EREPORT_PAYLOAD_NAME_NERR_FAT_FBD		"nerr_fat_fbd"
#define	FM_EREPORT_PAYLOAD_NAME_VALIDLOG		"validlog"
#define	FM_EREPORT_PAYLOAD_NAME_NRECMEMA		"nrecmema"
#define	FM_EREPORT_PAYLOAD_NAME_NRECMEMB		"nrecmemb"
#define	FM_EREPORT_PAYLOAD_NAME_NRECFGLOG		"nrecfglog"
#define	FM_EREPORT_PAYLOAD_NAME_NRECFBDA		"nrecfbda"
#define	FM_EREPORT_PAYLOAD_NAME_NRECFBDB		"nrecfbdb"
#define	FM_EREPORT_PAYLOAD_NAME_NRECFBDC		"nrecfbdc"
#define	FM_EREPORT_PAYLOAD_NAME_NRECFBDD		"nrecfbdd"
#define	FM_EREPORT_PAYLOAD_NAME_NRECFBDE		"nrecfbde"
#define	FM_EREPORT_PAYLOAD_NAME_NRECFBDF		"nrecfbdf"
#define	FM_EREPORT_PAYLOAD_NAME_SPCPC			"spcpc"
#define	FM_EREPORT_PAYLOAD_NAME_SPCPS			"spcps"
#define	FM_EREPORT_PAYLOAD_NAME_UERRCNT			"uerrcnt"
#define	FM_EREPORT_PAYLOAD_NAME_UERRCNT_LAST		"uerrcnt_last"
#define	FM_EREPORT_PAYLOAD_NAME_BADRAM			"badram"
#define	FM_EREPORT_PAYLOAD_NAME_BADRAMA			"badrama"
#define	FM_EREPORT_PAYLOAD_NAME_BADRAMB			"badramb"
#define	FM_EREPORT_PAYLOAD_NAME_BADCNT			"badcnt"
#define	FM_EREPORT_PAYLOAD_NAME_MC			"mc"
#define	FM_EREPORT_PAYLOAD_NAME_MCA			"mca"
#define	FM_EREPORT_PAYLOAD_NAME_TOLM			"tolm"
#define	FM_EREPORT_PAYLOAD_NAME_MIR			"mir"
#define	FM_EREPORT_PAYLOAD_NAME_MTR			"mtr"
#define	FM_EREPORT_PAYLOAD_NAME_DMIR			"dmir"
#define	FM_EREPORT_PAYLOAD_NAME_FERR_NF_FBD		"ferr_nf_fbd"
#define	FM_EREPORT_PAYLOAD_NAME_NERR_NF_FBD		"nerr_nf_fbd"
#define	FM_EREPORT_PAYLOAD_NAME_FERR_NF_MEM		"ferr_nf_mem"
#define	FM_EREPORT_PAYLOAD_NAME_NERR_NF_MEM		"nerr_nf_mem"
#define	FM_EREPORT_PAYLOAD_NAME_RECMEMA			"recmema"
#define	FM_EREPORT_PAYLOAD_NAME_RECMEMB			"recmemb"
#define	FM_EREPORT_PAYLOAD_NAME_REDMEMA			"redmema"
#define	FM_EREPORT_PAYLOAD_NAME_REDMEMB			"redmemb"
#define	FM_EREPORT_PAYLOAD_NAME_RECFGLOG		"recfglog"
#define	FM_EREPORT_PAYLOAD_NAME_RECFBDA			"recfbda"
#define	FM_EREPORT_PAYLOAD_NAME_RECFBDB			"recfbdb"
#define	FM_EREPORT_PAYLOAD_NAME_RECFBDC			"recfbdc"
#define	FM_EREPORT_PAYLOAD_NAME_RECFBDD			"recfbdd"
#define	FM_EREPORT_PAYLOAD_NAME_RECFBDE			"recfbde"
#define	FM_EREPORT_PAYLOAD_NAME_RECFBDF			"recfbdf"
#define	FM_EREPORT_PAYLOAD_NAME_CERRCNT			"cerrcnt"
#define	FM_EREPORT_PAYLOAD_NAME_CERRCNT_LAST		"cerrcnt_last"
#define	FM_EREPORT_PAYLOAD_NAME_CERRCNT_EXT		"cerrcnt_ext"
#define	FM_EREPORT_PAYLOAD_NAME_CERRCNT_EXT_LAST	"cerrcnt_ext_last"
#define	FM_EREPORT_PAYLOAD_NAME_CERRCNTA		"cerrcnta"
#define	FM_EREPORT_PAYLOAD_NAME_CERRCNTB		"cerrcntb"
#define	FM_EREPORT_PAYLOAD_NAME_CERRCNTC		"cerrcntc"
#define	FM_EREPORT_PAYLOAD_NAME_CERRCNTD		"cerrcntd"
#define	FM_EREPORT_PAYLOAD_NAME_CERRCNTA_LAST		"cerrcnta_last"
#define	FM_EREPORT_PAYLOAD_NAME_CERRCNTB_LAST		"cerrcntb_last"
#define	FM_EREPORT_PAYLOAD_NAME_CERRCNTC_LAST		"cerrcntc_last"
#define	FM_EREPORT_PAYLOAD_NAME_CERRCNTD_LAST		"cerrcntd_last"
#define	FM_EREPORT_PAYLOAD_NAME_PCISTS			"pcists"
#define	FM_EREPORT_PAYLOAD_NAME_PEXDEVSTS		"pexdevsts"
#define	FM_EREPORT_PAYLOAD_NAME_ERROR_NO		"intel-error-list"

#define	FM_EREPORT_PAYLOAD_NAME_CTSTS			"ctsts"
#define	FM_EREPORT_PAYLOAD_NAME_THRTSTS			"thrtsts"
#define	FM_EREPORT_PAYLOAD_NAME_FERR_FAT_THR		"ferr_fat_thr"
#define	FM_EREPORT_PAYLOAD_NAME_NERR_FAT_THR		"nerr_fat_thr"
#define	FM_EREPORT_PAYLOAD_NAME_FERR_NF_THR		"ferr_nf_thr"
#define	FM_EREPORT_PAYLOAD_NAME_NERR_NF_THR		"nerr_nf_thr"

#define	FM_EREPORT_PAYLOAD_NAME_ADDR			"addr"
#define	FM_EREPORT_PAYLOAD_NAME_BANK_NUM		"bank-number"
#define	FM_EREPORT_PAYLOAD_NAME_BANK_MISC		"bank-misc"
#define	FM_EREPORT_PAYLOAD_NAME_BANK_STAT		"bank-status"
#define	FM_EREPORT_PAYLOAD_NAME_BANK_OFFSET		"bank-offset"
#define	FM_EREPORT_PAYLOAD_NAME_MC_TYPE			"mc-type"
#define	FM_EREPORT_PAYLOAD_CPUID			"cpuid"

#define	FM_EREPORT_PAYLOAD_BQR				"Bus-queue-request"
#define	FM_EREPORT_PAYLOAD_BQET				"Bus-queue-error-type"
#define	FM_EREPORT_PAYLOAD_FRC				"FRC-error"
#define	FM_EREPORT_PAYLOAD_BERR				"BERR"
#define	FM_EREPORT_PAYLOAD_INT_BINT			"Internal-BINT"
#define	FM_EREPORT_PAYLOAD_EXT_BINT			"External-BINT"
#define	FM_EREPORT_PAYLOAD_BUS_BINT			"Bus-BINT"
#define	FM_EREPORT_PAYLOAD_TO_BINT			"Timeout-BINT"
#define	FM_EREPORT_PAYLOAD_HARD				"Hard-error"
#define	FM_EREPORT_PAYLOAD_IERR				"IERR"
#define	FM_EREPORT_PAYLOAD_AERR				"AERR"
#define	FM_EREPORT_PAYLOAD_UERR				"UERR"
#define	FM_EREPORT_PAYLOAD_CECC				"CECC"
#define	FM_EREPORT_PAYLOAD_UECC				"UECC"
#define	FM_EREPORT_PAYLOAD_ECC_SYND			"ECC-syndrome"

#define	FM_EREPORT_PAYLOAD_FSB_PARITY			"fsb-address-parity"
#define	FM_EREPORT_PAYLOAD_RESP_HF			"response-hard-fail"
#define	FM_EREPORT_PAYLOAD_RESP_PARITY			"response-parity"
#define	FM_EREPORT_PAYLOAD_DATA_PARITY			"bus-data-parity"
#define	FM_EREPORT_PAYLOAD_INV_PIC			"invalid-pic-request"
#define	FM_EREPORT_PAYLOAD_PAD_SM			"pad-state-machine"
#define	FM_EREPORT_PAYLOAD_PAD_SG			"pad-strobe-glitch"

#define	FM_EREPORT_PAYLOAD_TAG				"tag-error"
#define	FM_EREPORT_PAYLOAD_TAG_CLEAN			"clean"
#define	FM_EREPORT_PAYLOAD_TAG_HIT			"hit"
#define	FM_EREPORT_PAYLOAD_TAG_MISS			"miss"
#define	FM_EREPORT_PAYLOAD_DATA				"data-error"
#define	FM_EREPORT_PAYLOAD_DATA_SINGLE			"single-bit"
#define	FM_EREPORT_PAYLOAD_DATA_DBL_CLEAN		"double-bit-clean"
#define	FM_EREPORT_PAYLOAD_DATA_DBL_MOD			"double-bit-modified"
#define	FM_EREPORT_PAYLOAD_L3				"l3-cache"
#define	FM_EREPORT_PAYLOAD_INV_PIC			"invalid-pic-request"
#define	FM_EREPORT_PAYLOAD_CACHE_NERRORS		"cache-error-count"

#define	FM_EREPORT_PAYLOAD_NAME_RESOURCE		"resource"
#define	FM_EREPORT_PAYLOAD_MEM_ECC_COUNTER_THIS	"mem_cor_ecc_counter"
#define	FM_EREPORT_PAYLOAD_MEM_ECC_COUNTER_LAST	"mem_cor_ecc_counter_last"

#define	INTEL_NB_5000P	0x25d88086
#define	INTEL_NB_5000V	0x25d48086
#define	INTEL_NB_5000X	0x25c08086
#define	INTEL_NB_5000Z	0x25d08086
#define	INTEL_NB_5100	0x65c08086
#define	INTEL_NB_5400	0x40008086
#define	INTEL_NB_5400A	0x40018086
#define	INTEL_NB_5400B	0x40038086
#define	INTEL_NB_7300	0x36008086

#define	INTEL_NHM	0x2c408086
#define	INTEL_QP_IO	0x34008086
#define	INTEL_QP_36D	0x34068086
#define	INTEL_QP_24D	0x34038086
#define	INTEL_QP_WP	0x34058086
#define	INTEL_QP_U1	0x34018086
#define	INTEL_QP_U2	0x34028086
#define	INTEL_QP_U3	0x34048086
#define	INTEL_QP_U4	0x34078086
#define	INTEL_QP_JF	0x37208086
#define	INTEL_QP_JF0	0x37008086
#define	INTEL_QP_JF1	0x37018086
#define	INTEL_QP_JF2	0x37028086
#define	INTEL_QP_JF3	0x37038086
#define	INTEL_QP_JF4	0x37048086
#define	INTEL_QP_JF5	0x37058086
#define	INTEL_QP_JF6	0x37068086
#define	INTEL_QP_JF7	0x37078086
#define	INTEL_QP_JF8	0x37088086
#define	INTEL_QP_JF9	0x37098086
#define	INTEL_QP_JFa	0x370a8086
#define	INTEL_QP_JFb	0x370b8086
#define	INTEL_QP_JFc	0x370c8086
#define	INTEL_QP_JFd	0x370d8086
#define	INTEL_QP_JFe	0x370e8086
#define	INTEL_QP_JFf	0x370f8086

/* Intel QuickPath Bus Interconnect Errors */

#define	MSR_MC_STATUS_QP_HEADER_PARITY		(1 << 16)
#define	MSR_MC_STATUS_QP_DATA_PARITY		(1 << 17)
#define	MSR_MC_STATUS_QP_RETRIES_EXCEEDED	(1 << 18)
#define	MSR_MC_STATUS_QP_POISON		(1 << 19)

#define	MSR_MC_STATUS_QP_UNSUPPORTED_MSG	(1 << 22)
#define	MSR_MC_STATUS_QP_UNSUPPORTED_CREDIT	(1 << 23)
#define	MSR_MC_STATUS_QP_FLIT_BUF_OVER		(1 << 24)
#define	MSR_MC_STATUS_QP_FAILED_RESPONSE	(1 << 25)
#define	MSR_MC_STATUS_QP_CLOCK_JITTER		(1 << 26)

#define	MSR_MC_MISC_QP_CLASS		0x000000ff
#define	MSR_MC_MISC_QP_RTID		0x00003f00
#define	MSR_MC_MISC_QP_RHNID		0x00070000
#define	MSR_MC_MISC_QP_IIB		0x01000000

/* Intel QuickPath Memory Errors */

#define	MCAX86_COMPOUND_BUS_MEMORY		0x0080
#define	MCAX86_COMPOUND_BUS_MEMORY_MASK		0xff80
#define	MCAX86_COMPOUND_BUS_MEMORY_TRANSACTION	0x0070
#define	MCAX86_COMPOUND_BUS_MEMORY_READ		0x0010
#define	MCAX86_COMPOUND_BUS_MEMORY_WRITE	0x0020
#define	MCAX86_COMPOUND_BUS_MEMORY_CMD		0x0030
#define	MCAX86_COMPOUND_BUS_MEMORY_CHANNEL	0x000f

#define	MSR_MC_STATUS_MEM_ECC_READ	(1 << 16)
#define	MSR_MC_STATUS_MEM_ECC_SCRUB	(1 << 17)
#define	MSR_MC_STATUS_MEM_PARITY	(1 << 18)
#define	MSR_MC_STATUS_MEM_REDUNDANT_MEM	(1 << 19)
#define	MSR_MC_STATUS_MEM_SPARE_MEM	(1 << 20)
#define	MSR_MC_STATUS_MEM_ILLEGAL_ADDR	(1 << 21)
#define	MSR_MC_STATUS_MEM_BAD_ID	(1 << 22)
#define	MSR_MC_STATUS_MEM_ADDR_PARITY	(1 << 23)
#define	MSR_MC_STATUS_MEM_BYTE_PARITY	(1 << 24)

#define	MSR_MC_MISC_MEM_RTID		0x00000000000000ffULL
#define	MSR_MC_MISC_MEM_DIMM		0x0000000000030000ULL
#define	MSR_MC_MISC_MEM_DIMM_SHIFT	16
#define	MSR_MC_MISC_MEM_CHANNEL		0x00000000000c0000ULL
#define	MSR_MC_MISC_MEM_CHANNEL_SHIFT	18
#define	MSR_MC_MISC_MEM_SYNDROME	0xffffffff00000000ULL
#define	MSR_MC_MISC_MEM_SYNDROME_SHIFT	32

#define	OFFSET_ROW_BANK_COL	0x8000000000000000ULL
#define	OFFSET_RANK_SHIFT	52
#define	OFFSET_RAS_SHIFT	32
#define	OFFSET_BANK_SHIFT	24
#define	TCODE_OFFSET(rank, bank, ras, cas) (OFFSET_ROW_BANK_COL | \
	((uint64_t)(rank) << OFFSET_RANK_SHIFT) | \
	((uint64_t)(ras) << OFFSET_RAS_SHIFT) | \
	((uint64_t)(bank) << OFFSET_BANK_SHIFT) | (cas))

#define	MAX_CAS_MASK	0xFFFFFF
#define	MAX_BANK_MASK	0xFF
#define	MAX_RAS_MASK	0xFFFFF
#define	MAX_RANK_MASK	0x7FF
#define	TCODE_OFFSET_RANK(tcode) \
	(((tcode) >> OFFSET_RANK_SHIFT) & MAX_RANK_MASK)
#define	TCODE_OFFSET_RAS(tcode) (((tcode) >> OFFSET_RAS_SHIFT) & MAX_RAS_MASK)
#define	TCODE_OFFSET_BANK(tcode) \
	(((tcode) >> OFFSET_BANK_SHIFT) & MAX_BANK_MASK)
#define	TCODE_OFFSET_CAS(tcode) ((tcode) & MAX_CAS_MASK)

#ifdef __cplusplus
}
#endif

#endif /* _MC_INTEL_H */