xref: /openbmc/linux/drivers/edac/e752x_edac.c (revision 4f3db074)
1 /*
2  * Intel e752x Memory Controller kernel module
3  * (C) 2004 Linux Networx (http://lnxi.com)
4  * This file may be distributed under the terms of the
5  * GNU General Public License.
6  *
7  * Implement support for the e7520, E7525, e7320 and i3100 memory controllers.
8  *
9  * Datasheets:
10  *	http://www.intel.in/content/www/in/en/chipsets/e7525-memory-controller-hub-datasheet.html
11  *	ftp://download.intel.com/design/intarch/datashts/31345803.pdf
12  *
13  * Written by Tom Zimmerman
14  *
15  * Contributors:
16  * 	Thayne Harbaugh at realmsys.com (?)
17  * 	Wang Zhenyu at intel.com
18  * 	Dave Jiang at mvista.com
19  *
20  */
21 
22 #include <linux/module.h>
23 #include <linux/init.h>
24 #include <linux/pci.h>
25 #include <linux/pci_ids.h>
26 #include <linux/edac.h>
27 #include "edac_core.h"
28 
29 #define E752X_REVISION	" Ver: 2.0.2"
30 #define EDAC_MOD_STR	"e752x_edac"
31 
32 static int report_non_memory_errors;
33 static int force_function_unhide;
34 static int sysbus_parity = -1;
35 
36 static struct edac_pci_ctl_info *e752x_pci;
37 
38 #define e752x_printk(level, fmt, arg...) \
39 	edac_printk(level, "e752x", fmt, ##arg)
40 
41 #define e752x_mc_printk(mci, level, fmt, arg...) \
42 	edac_mc_chipset_printk(mci, level, "e752x", fmt, ##arg)
43 
44 #ifndef PCI_DEVICE_ID_INTEL_7520_0
45 #define PCI_DEVICE_ID_INTEL_7520_0      0x3590
46 #endif				/* PCI_DEVICE_ID_INTEL_7520_0      */
47 
48 #ifndef PCI_DEVICE_ID_INTEL_7520_1_ERR
49 #define PCI_DEVICE_ID_INTEL_7520_1_ERR  0x3591
50 #endif				/* PCI_DEVICE_ID_INTEL_7520_1_ERR  */
51 
52 #ifndef PCI_DEVICE_ID_INTEL_7525_0
53 #define PCI_DEVICE_ID_INTEL_7525_0      0x359E
54 #endif				/* PCI_DEVICE_ID_INTEL_7525_0      */
55 
56 #ifndef PCI_DEVICE_ID_INTEL_7525_1_ERR
57 #define PCI_DEVICE_ID_INTEL_7525_1_ERR  0x3593
58 #endif				/* PCI_DEVICE_ID_INTEL_7525_1_ERR  */
59 
60 #ifndef PCI_DEVICE_ID_INTEL_7320_0
61 #define PCI_DEVICE_ID_INTEL_7320_0	0x3592
62 #endif				/* PCI_DEVICE_ID_INTEL_7320_0 */
63 
64 #ifndef PCI_DEVICE_ID_INTEL_7320_1_ERR
65 #define PCI_DEVICE_ID_INTEL_7320_1_ERR	0x3593
66 #endif				/* PCI_DEVICE_ID_INTEL_7320_1_ERR */
67 
68 #ifndef PCI_DEVICE_ID_INTEL_3100_0
69 #define PCI_DEVICE_ID_INTEL_3100_0	0x35B0
70 #endif				/* PCI_DEVICE_ID_INTEL_3100_0 */
71 
72 #ifndef PCI_DEVICE_ID_INTEL_3100_1_ERR
73 #define PCI_DEVICE_ID_INTEL_3100_1_ERR	0x35B1
74 #endif				/* PCI_DEVICE_ID_INTEL_3100_1_ERR */
75 
76 #define E752X_NR_CSROWS		8	/* number of csrows */
77 
78 /* E752X register addresses - device 0 function 0 */
79 #define E752X_MCHSCRB		0x52	/* Memory Scrub register (16b) */
80 					/*
81 					 * 6:5     Scrub Completion Count
82 					 * 3:2     Scrub Rate (i3100 only)
83 					 *      01=fast 10=normal
84 					 * 1:0     Scrub Mode enable
85 					 *      00=off 10=on
86 					 */
87 #define E752X_DRB		0x60	/* DRAM row boundary register (8b) */
88 #define E752X_DRA		0x70	/* DRAM row attribute register (8b) */
89 					/*
90 					 * 31:30   Device width row 7
91 					 *      01=x8 10=x4 11=x8 DDR2
92 					 * 27:26   Device width row 6
93 					 * 23:22   Device width row 5
94 					 * 19:20   Device width row 4
95 					 * 15:14   Device width row 3
96 					 * 11:10   Device width row 2
97 					 *  7:6    Device width row 1
98 					 *  3:2    Device width row 0
99 					 */
100 #define E752X_DRC		0x7C	/* DRAM controller mode reg (32b) */
101 					/* FIXME:IS THIS RIGHT? */
102 					/*
103 					 * 22    Number channels 0=1,1=2
104 					 * 19:18 DRB Granularity 32/64MB
105 					 */
106 #define E752X_DRM		0x80	/* Dimm mapping register */
107 #define E752X_DDRCSR		0x9A	/* DDR control and status reg (16b) */
108 					/*
109 					 * 14:12 1 single A, 2 single B, 3 dual
110 					 */
111 #define E752X_TOLM		0xC4	/* DRAM top of low memory reg (16b) */
112 #define E752X_REMAPBASE		0xC6	/* DRAM remap base address reg (16b) */
113 #define E752X_REMAPLIMIT	0xC8	/* DRAM remap limit address reg (16b) */
114 #define E752X_REMAPOFFSET	0xCA	/* DRAM remap limit offset reg (16b) */
115 
116 /* E752X register addresses - device 0 function 1 */
117 #define E752X_FERR_GLOBAL	0x40	/* Global first error register (32b) */
118 #define E752X_NERR_GLOBAL	0x44	/* Global next error register (32b) */
119 #define E752X_HI_FERR		0x50	/* Hub interface first error reg (8b) */
120 #define E752X_HI_NERR		0x52	/* Hub interface next error reg (8b) */
121 #define E752X_HI_ERRMASK	0x54	/* Hub interface error mask reg (8b) */
122 #define E752X_HI_SMICMD		0x5A	/* Hub interface SMI command reg (8b) */
123 #define E752X_SYSBUS_FERR	0x60	/* System buss first error reg (16b) */
124 #define E752X_SYSBUS_NERR	0x62	/* System buss next error reg (16b) */
125 #define E752X_SYSBUS_ERRMASK	0x64	/* System buss error mask reg (16b) */
126 #define E752X_SYSBUS_SMICMD	0x6A	/* System buss SMI command reg (16b) */
127 #define E752X_BUF_FERR		0x70	/* Memory buffer first error reg (8b) */
128 #define E752X_BUF_NERR		0x72	/* Memory buffer next error reg (8b) */
129 #define E752X_BUF_ERRMASK	0x74	/* Memory buffer error mask reg (8b) */
130 #define E752X_BUF_SMICMD	0x7A	/* Memory buffer SMI cmd reg (8b) */
131 #define E752X_DRAM_FERR		0x80	/* DRAM first error register (16b) */
132 #define E752X_DRAM_NERR		0x82	/* DRAM next error register (16b) */
133 #define E752X_DRAM_ERRMASK	0x84	/* DRAM error mask register (8b) */
134 #define E752X_DRAM_SMICMD	0x8A	/* DRAM SMI command register (8b) */
135 #define E752X_DRAM_RETR_ADD	0xAC	/* DRAM Retry address register (32b) */
136 #define E752X_DRAM_SEC1_ADD	0xA0	/* DRAM first correctable memory */
137 					/*     error address register (32b) */
138 					/*
139 					 * 31    Reserved
140 					 * 30:2  CE address (64 byte block 34:6
141 					 * 1     Reserved
142 					 * 0     HiLoCS
143 					 */
144 #define E752X_DRAM_SEC2_ADD	0xC8	/* DRAM first correctable memory */
145 					/*     error address register (32b) */
146 					/*
147 					 * 31    Reserved
148 					 * 30:2  CE address (64 byte block 34:6)
149 					 * 1     Reserved
150 					 * 0     HiLoCS
151 					 */
152 #define E752X_DRAM_DED_ADD	0xA4	/* DRAM first uncorrectable memory */
153 					/*     error address register (32b) */
154 					/*
155 					 * 31    Reserved
156 					 * 30:2  CE address (64 byte block 34:6)
157 					 * 1     Reserved
158 					 * 0     HiLoCS
159 					 */
160 #define E752X_DRAM_SCRB_ADD	0xA8	/* DRAM 1st uncorrectable scrub mem */
161 					/*     error address register (32b) */
162 					/*
163 					 * 31    Reserved
164 					 * 30:2  CE address (64 byte block 34:6
165 					 * 1     Reserved
166 					 * 0     HiLoCS
167 					 */
168 #define E752X_DRAM_SEC1_SYNDROME 0xC4	/* DRAM first correctable memory */
169 					/*     error syndrome register (16b) */
170 #define E752X_DRAM_SEC2_SYNDROME 0xC6	/* DRAM second correctable memory */
171 					/*     error syndrome register (16b) */
172 #define E752X_DEVPRES1		0xF4	/* Device Present 1 register (8b) */
173 
174 /* 3100 IMCH specific register addresses - device 0 function 1 */
175 #define I3100_NSI_FERR		0x48	/* NSI first error reg (32b) */
176 #define I3100_NSI_NERR		0x4C	/* NSI next error reg (32b) */
177 #define I3100_NSI_SMICMD	0x54	/* NSI SMI command register (32b) */
178 #define I3100_NSI_EMASK		0x90	/* NSI error mask register (32b) */
179 
180 /* ICH5R register addresses - device 30 function 0 */
181 #define ICH5R_PCI_STAT		0x06	/* PCI status register (16b) */
182 #define ICH5R_PCI_2ND_STAT	0x1E	/* PCI status secondary reg (16b) */
183 #define ICH5R_PCI_BRIDGE_CTL	0x3E	/* PCI bridge control register (16b) */
184 
185 enum e752x_chips {
186 	E7520 = 0,
187 	E7525 = 1,
188 	E7320 = 2,
189 	I3100 = 3
190 };
191 
192 /*
193  * Those chips Support single-rank and dual-rank memories only.
194  *
195  * On e752x chips, the odd rows are present only on dual-rank memories.
196  * Dividing the rank by two will provide the dimm#
197  *
198  * i3100 MC has a different mapping: it supports only 4 ranks.
199  *
200  * The mapping is (from 1 to n):
201  *	slot	   single-ranked	double-ranked
202  *	dimm #1 -> rank #4		NA
203  *	dimm #2 -> rank #3		NA
204  *	dimm #3 -> rank #2		Ranks 2 and 3
205  *	dimm #4 -> rank $1		Ranks 1 and 4
206  *
207  * FIXME: The current mapping for i3100 considers that it supports up to 8
208  *	  ranks/chanel, but datasheet says that the MC supports only 4 ranks.
209  */
210 
211 struct e752x_pvt {
212 	struct pci_dev *dev_d0f0;
213 	struct pci_dev *dev_d0f1;
214 	u32 tolm;
215 	u32 remapbase;
216 	u32 remaplimit;
217 	int mc_symmetric;
218 	u8 map[8];
219 	int map_type;
220 	const struct e752x_dev_info *dev_info;
221 };
222 
223 struct e752x_dev_info {
224 	u16 err_dev;
225 	u16 ctl_dev;
226 	const char *ctl_name;
227 };
228 
229 struct e752x_error_info {
230 	u32 ferr_global;
231 	u32 nerr_global;
232 	u32 nsi_ferr;	/* 3100 only */
233 	u32 nsi_nerr;	/* 3100 only */
234 	u8 hi_ferr;	/* all but 3100 */
235 	u8 hi_nerr;	/* all but 3100 */
236 	u16 sysbus_ferr;
237 	u16 sysbus_nerr;
238 	u8 buf_ferr;
239 	u8 buf_nerr;
240 	u16 dram_ferr;
241 	u16 dram_nerr;
242 	u32 dram_sec1_add;
243 	u32 dram_sec2_add;
244 	u16 dram_sec1_syndrome;
245 	u16 dram_sec2_syndrome;
246 	u32 dram_ded_add;
247 	u32 dram_scrb_add;
248 	u32 dram_retr_add;
249 };
250 
251 static const struct e752x_dev_info e752x_devs[] = {
252 	[E7520] = {
253 		.err_dev = PCI_DEVICE_ID_INTEL_7520_1_ERR,
254 		.ctl_dev = PCI_DEVICE_ID_INTEL_7520_0,
255 		.ctl_name = "E7520"},
256 	[E7525] = {
257 		.err_dev = PCI_DEVICE_ID_INTEL_7525_1_ERR,
258 		.ctl_dev = PCI_DEVICE_ID_INTEL_7525_0,
259 		.ctl_name = "E7525"},
260 	[E7320] = {
261 		.err_dev = PCI_DEVICE_ID_INTEL_7320_1_ERR,
262 		.ctl_dev = PCI_DEVICE_ID_INTEL_7320_0,
263 		.ctl_name = "E7320"},
264 	[I3100] = {
265 		.err_dev = PCI_DEVICE_ID_INTEL_3100_1_ERR,
266 		.ctl_dev = PCI_DEVICE_ID_INTEL_3100_0,
267 		.ctl_name = "3100"},
268 };
269 
270 /* Valid scrub rates for the e752x/3100 hardware memory scrubber. We
271  * map the scrubbing bandwidth to a hardware register value. The 'set'
272  * operation finds the 'matching or higher value'.  Note that scrubbing
273  * on the e752x can only be enabled/disabled.  The 3100 supports
274  * a normal and fast mode.
275  */
276 
277 #define SDRATE_EOT 0xFFFFFFFF
278 
279 struct scrubrate {
280 	u32 bandwidth;	/* bandwidth consumed by scrubbing in bytes/sec */
281 	u16 scrubval;	/* register value for scrub rate */
282 };
283 
284 /* Rate below assumes same performance as i3100 using PC3200 DDR2 in
285  * normal mode.  e752x bridges don't support choosing normal or fast mode,
286  * so the scrubbing bandwidth value isn't all that important - scrubbing is
287  * either on or off.
288  */
289 static const struct scrubrate scrubrates_e752x[] = {
290 	{0,		0x00},	/* Scrubbing Off */
291 	{500000,	0x02},	/* Scrubbing On */
292 	{SDRATE_EOT,	0x00}	/* End of Table */
293 };
294 
295 /* Fast mode: 2 GByte PC3200 DDR2 scrubbed in 33s = 63161283 bytes/s
296  * Normal mode: 125 (32000 / 256) times slower than fast mode.
297  */
298 static const struct scrubrate scrubrates_i3100[] = {
299 	{0,		0x00},	/* Scrubbing Off */
300 	{500000,	0x0a},	/* Normal mode - 32k clocks */
301 	{62500000,	0x06},	/* Fast mode - 256 clocks */
302 	{SDRATE_EOT,	0x00}	/* End of Table */
303 };
304 
305 static unsigned long ctl_page_to_phys(struct mem_ctl_info *mci,
306 				unsigned long page)
307 {
308 	u32 remap;
309 	struct e752x_pvt *pvt = (struct e752x_pvt *)mci->pvt_info;
310 
311 	edac_dbg(3, "\n");
312 
313 	if (page < pvt->tolm)
314 		return page;
315 
316 	if ((page >= 0x100000) && (page < pvt->remapbase))
317 		return page;
318 
319 	remap = (page - pvt->tolm) + pvt->remapbase;
320 
321 	if (remap < pvt->remaplimit)
322 		return remap;
323 
324 	e752x_printk(KERN_ERR, "Invalid page %lx - out of range\n", page);
325 	return pvt->tolm - 1;
326 }
327 
328 static void do_process_ce(struct mem_ctl_info *mci, u16 error_one,
329 			u32 sec1_add, u16 sec1_syndrome)
330 {
331 	u32 page;
332 	int row;
333 	int channel;
334 	int i;
335 	struct e752x_pvt *pvt = (struct e752x_pvt *)mci->pvt_info;
336 
337 	edac_dbg(3, "\n");
338 
339 	/* convert the addr to 4k page */
340 	page = sec1_add >> (PAGE_SHIFT - 4);
341 
342 	/* FIXME - check for -1 */
343 	if (pvt->mc_symmetric) {
344 		/* chip select are bits 14 & 13 */
345 		row = ((page >> 1) & 3);
346 		e752x_printk(KERN_WARNING,
347 			"Test row %d Table %d %d %d %d %d %d %d %d\n", row,
348 			pvt->map[0], pvt->map[1], pvt->map[2], pvt->map[3],
349 			pvt->map[4], pvt->map[5], pvt->map[6],
350 			pvt->map[7]);
351 
352 		/* test for channel remapping */
353 		for (i = 0; i < 8; i++) {
354 			if (pvt->map[i] == row)
355 				break;
356 		}
357 
358 		e752x_printk(KERN_WARNING, "Test computed row %d\n", i);
359 
360 		if (i < 8)
361 			row = i;
362 		else
363 			e752x_mc_printk(mci, KERN_WARNING,
364 					"row %d not found in remap table\n",
365 					row);
366 	} else
367 		row = edac_mc_find_csrow_by_page(mci, page);
368 
369 	/* 0 = channel A, 1 = channel B */
370 	channel = !(error_one & 1);
371 
372 	/* e752x mc reads 34:6 of the DRAM linear address */
373 	edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, 1,
374 			     page, offset_in_page(sec1_add << 4), sec1_syndrome,
375 			     row, channel, -1,
376 			     "e752x CE", "");
377 }
378 
379 static inline void process_ce(struct mem_ctl_info *mci, u16 error_one,
380 			u32 sec1_add, u16 sec1_syndrome, int *error_found,
381 			int handle_error)
382 {
383 	*error_found = 1;
384 
385 	if (handle_error)
386 		do_process_ce(mci, error_one, sec1_add, sec1_syndrome);
387 }
388 
389 static void do_process_ue(struct mem_ctl_info *mci, u16 error_one,
390 			u32 ded_add, u32 scrb_add)
391 {
392 	u32 error_2b, block_page;
393 	int row;
394 	struct e752x_pvt *pvt = (struct e752x_pvt *)mci->pvt_info;
395 
396 	edac_dbg(3, "\n");
397 
398 	if (error_one & 0x0202) {
399 		error_2b = ded_add;
400 
401 		/* convert to 4k address */
402 		block_page = error_2b >> (PAGE_SHIFT - 4);
403 
404 		row = pvt->mc_symmetric ?
405 		/* chip select are bits 14 & 13 */
406 			((block_page >> 1) & 3) :
407 			edac_mc_find_csrow_by_page(mci, block_page);
408 
409 		/* e752x mc reads 34:6 of the DRAM linear address */
410 		edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1,
411 					block_page,
412 					offset_in_page(error_2b << 4), 0,
413 					 row, -1, -1,
414 					"e752x UE from Read", "");
415 
416 	}
417 	if (error_one & 0x0404) {
418 		error_2b = scrb_add;
419 
420 		/* convert to 4k address */
421 		block_page = error_2b >> (PAGE_SHIFT - 4);
422 
423 		row = pvt->mc_symmetric ?
424 		/* chip select are bits 14 & 13 */
425 			((block_page >> 1) & 3) :
426 			edac_mc_find_csrow_by_page(mci, block_page);
427 
428 		/* e752x mc reads 34:6 of the DRAM linear address */
429 		edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1,
430 					block_page,
431 					offset_in_page(error_2b << 4), 0,
432 					row, -1, -1,
433 					"e752x UE from Scruber", "");
434 	}
435 }
436 
437 static inline void process_ue(struct mem_ctl_info *mci, u16 error_one,
438 			u32 ded_add, u32 scrb_add, int *error_found,
439 			int handle_error)
440 {
441 	*error_found = 1;
442 
443 	if (handle_error)
444 		do_process_ue(mci, error_one, ded_add, scrb_add);
445 }
446 
447 static inline void process_ue_no_info_wr(struct mem_ctl_info *mci,
448 					 int *error_found, int handle_error)
449 {
450 	*error_found = 1;
451 
452 	if (!handle_error)
453 		return;
454 
455 	edac_dbg(3, "\n");
456 	edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 1, 0, 0, 0,
457 			     -1, -1, -1,
458 			     "e752x UE log memory write", "");
459 }
460 
461 static void do_process_ded_retry(struct mem_ctl_info *mci, u16 error,
462 				 u32 retry_add)
463 {
464 	u32 error_1b, page;
465 	int row;
466 	struct e752x_pvt *pvt = (struct e752x_pvt *)mci->pvt_info;
467 
468 	error_1b = retry_add;
469 	page = error_1b >> (PAGE_SHIFT - 4);  /* convert the addr to 4k page */
470 
471 	/* chip select are bits 14 & 13 */
472 	row = pvt->mc_symmetric ? ((page >> 1) & 3) :
473 		edac_mc_find_csrow_by_page(mci, page);
474 
475 	e752x_mc_printk(mci, KERN_WARNING,
476 			"CE page 0x%lx, row %d : Memory read retry\n",
477 			(long unsigned int)page, row);
478 }
479 
480 static inline void process_ded_retry(struct mem_ctl_info *mci, u16 error,
481 				u32 retry_add, int *error_found,
482 				int handle_error)
483 {
484 	*error_found = 1;
485 
486 	if (handle_error)
487 		do_process_ded_retry(mci, error, retry_add);
488 }
489 
490 static inline void process_threshold_ce(struct mem_ctl_info *mci, u16 error,
491 					int *error_found, int handle_error)
492 {
493 	*error_found = 1;
494 
495 	if (handle_error)
496 		e752x_mc_printk(mci, KERN_WARNING, "Memory threshold CE\n");
497 }
498 
499 static char *global_message[11] = {
500 	"PCI Express C1",
501 	"PCI Express C",
502 	"PCI Express B1",
503 	"PCI Express B",
504 	"PCI Express A1",
505 	"PCI Express A",
506 	"DMA Controller",
507 	"HUB or NS Interface",
508 	"System Bus",
509 	"DRAM Controller",  /* 9th entry */
510 	"Internal Buffer"
511 };
512 
513 #define DRAM_ENTRY	9
514 
515 static char *fatal_message[2] = { "Non-Fatal ", "Fatal " };
516 
517 static void do_global_error(int fatal, u32 errors)
518 {
519 	int i;
520 
521 	for (i = 0; i < 11; i++) {
522 		if (errors & (1 << i)) {
523 			/* If the error is from DRAM Controller OR
524 			 * we are to report ALL errors, then
525 			 * report the error
526 			 */
527 			if ((i == DRAM_ENTRY) || report_non_memory_errors)
528 				e752x_printk(KERN_WARNING, "%sError %s\n",
529 					fatal_message[fatal],
530 					global_message[i]);
531 		}
532 	}
533 }
534 
535 static inline void global_error(int fatal, u32 errors, int *error_found,
536 				int handle_error)
537 {
538 	*error_found = 1;
539 
540 	if (handle_error)
541 		do_global_error(fatal, errors);
542 }
543 
544 static char *hub_message[7] = {
545 	"HI Address or Command Parity", "HI Illegal Access",
546 	"HI Internal Parity", "Out of Range Access",
547 	"HI Data Parity", "Enhanced Config Access",
548 	"Hub Interface Target Abort"
549 };
550 
551 static void do_hub_error(int fatal, u8 errors)
552 {
553 	int i;
554 
555 	for (i = 0; i < 7; i++) {
556 		if (errors & (1 << i))
557 			e752x_printk(KERN_WARNING, "%sError %s\n",
558 				fatal_message[fatal], hub_message[i]);
559 	}
560 }
561 
562 static inline void hub_error(int fatal, u8 errors, int *error_found,
563 			int handle_error)
564 {
565 	*error_found = 1;
566 
567 	if (handle_error)
568 		do_hub_error(fatal, errors);
569 }
570 
571 #define NSI_FATAL_MASK		0x0c080081
572 #define NSI_NON_FATAL_MASK	0x23a0ba64
573 #define NSI_ERR_MASK		(NSI_FATAL_MASK | NSI_NON_FATAL_MASK)
574 
575 static char *nsi_message[30] = {
576 	"NSI Link Down",	/* NSI_FERR/NSI_NERR bit 0, fatal error */
577 	"",						/* reserved */
578 	"NSI Parity Error",				/* bit 2, non-fatal */
579 	"",						/* reserved */
580 	"",						/* reserved */
581 	"Correctable Error Message",			/* bit 5, non-fatal */
582 	"Non-Fatal Error Message",			/* bit 6, non-fatal */
583 	"Fatal Error Message",				/* bit 7, fatal */
584 	"",						/* reserved */
585 	"Receiver Error",				/* bit 9, non-fatal */
586 	"",						/* reserved */
587 	"Bad TLP",					/* bit 11, non-fatal */
588 	"Bad DLLP",					/* bit 12, non-fatal */
589 	"REPLAY_NUM Rollover",				/* bit 13, non-fatal */
590 	"",						/* reserved */
591 	"Replay Timer Timeout",				/* bit 15, non-fatal */
592 	"",						/* reserved */
593 	"",						/* reserved */
594 	"",						/* reserved */
595 	"Data Link Protocol Error",			/* bit 19, fatal */
596 	"",						/* reserved */
597 	"Poisoned TLP",					/* bit 21, non-fatal */
598 	"",						/* reserved */
599 	"Completion Timeout",				/* bit 23, non-fatal */
600 	"Completer Abort",				/* bit 24, non-fatal */
601 	"Unexpected Completion",			/* bit 25, non-fatal */
602 	"Receiver Overflow",				/* bit 26, fatal */
603 	"Malformed TLP",				/* bit 27, fatal */
604 	"",						/* reserved */
605 	"Unsupported Request"				/* bit 29, non-fatal */
606 };
607 
608 static void do_nsi_error(int fatal, u32 errors)
609 {
610 	int i;
611 
612 	for (i = 0; i < 30; i++) {
613 		if (errors & (1 << i))
614 			printk(KERN_WARNING "%sError %s\n",
615 			       fatal_message[fatal], nsi_message[i]);
616 	}
617 }
618 
619 static inline void nsi_error(int fatal, u32 errors, int *error_found,
620 		int handle_error)
621 {
622 	*error_found = 1;
623 
624 	if (handle_error)
625 		do_nsi_error(fatal, errors);
626 }
627 
628 static char *membuf_message[4] = {
629 	"Internal PMWB to DRAM parity",
630 	"Internal PMWB to System Bus Parity",
631 	"Internal System Bus or IO to PMWB Parity",
632 	"Internal DRAM to PMWB Parity"
633 };
634 
635 static void do_membuf_error(u8 errors)
636 {
637 	int i;
638 
639 	for (i = 0; i < 4; i++) {
640 		if (errors & (1 << i))
641 			e752x_printk(KERN_WARNING, "Non-Fatal Error %s\n",
642 				membuf_message[i]);
643 	}
644 }
645 
646 static inline void membuf_error(u8 errors, int *error_found, int handle_error)
647 {
648 	*error_found = 1;
649 
650 	if (handle_error)
651 		do_membuf_error(errors);
652 }
653 
654 static char *sysbus_message[10] = {
655 	"Addr or Request Parity",
656 	"Data Strobe Glitch",
657 	"Addr Strobe Glitch",
658 	"Data Parity",
659 	"Addr Above TOM",
660 	"Non DRAM Lock Error",
661 	"MCERR", "BINIT",
662 	"Memory Parity",
663 	"IO Subsystem Parity"
664 };
665 
666 static void do_sysbus_error(int fatal, u32 errors)
667 {
668 	int i;
669 
670 	for (i = 0; i < 10; i++) {
671 		if (errors & (1 << i))
672 			e752x_printk(KERN_WARNING, "%sError System Bus %s\n",
673 				fatal_message[fatal], sysbus_message[i]);
674 	}
675 }
676 
677 static inline void sysbus_error(int fatal, u32 errors, int *error_found,
678 				int handle_error)
679 {
680 	*error_found = 1;
681 
682 	if (handle_error)
683 		do_sysbus_error(fatal, errors);
684 }
685 
686 static void e752x_check_hub_interface(struct e752x_error_info *info,
687 				int *error_found, int handle_error)
688 {
689 	u8 stat8;
690 
691 	//pci_read_config_byte(dev,E752X_HI_FERR,&stat8);
692 
693 	stat8 = info->hi_ferr;
694 
695 	if (stat8 & 0x7f) {	/* Error, so process */
696 		stat8 &= 0x7f;
697 
698 		if (stat8 & 0x2b)
699 			hub_error(1, stat8 & 0x2b, error_found, handle_error);
700 
701 		if (stat8 & 0x54)
702 			hub_error(0, stat8 & 0x54, error_found, handle_error);
703 	}
704 	//pci_read_config_byte(dev,E752X_HI_NERR,&stat8);
705 
706 	stat8 = info->hi_nerr;
707 
708 	if (stat8 & 0x7f) {	/* Error, so process */
709 		stat8 &= 0x7f;
710 
711 		if (stat8 & 0x2b)
712 			hub_error(1, stat8 & 0x2b, error_found, handle_error);
713 
714 		if (stat8 & 0x54)
715 			hub_error(0, stat8 & 0x54, error_found, handle_error);
716 	}
717 }
718 
719 static void e752x_check_ns_interface(struct e752x_error_info *info,
720 				int *error_found, int handle_error)
721 {
722 	u32 stat32;
723 
724 	stat32 = info->nsi_ferr;
725 	if (stat32 & NSI_ERR_MASK) { /* Error, so process */
726 		if (stat32 & NSI_FATAL_MASK)	/* check for fatal errors */
727 			nsi_error(1, stat32 & NSI_FATAL_MASK, error_found,
728 				  handle_error);
729 		if (stat32 & NSI_NON_FATAL_MASK) /* check for non-fatal ones */
730 			nsi_error(0, stat32 & NSI_NON_FATAL_MASK, error_found,
731 				  handle_error);
732 	}
733 	stat32 = info->nsi_nerr;
734 	if (stat32 & NSI_ERR_MASK) {
735 		if (stat32 & NSI_FATAL_MASK)
736 			nsi_error(1, stat32 & NSI_FATAL_MASK, error_found,
737 				  handle_error);
738 		if (stat32 & NSI_NON_FATAL_MASK)
739 			nsi_error(0, stat32 & NSI_NON_FATAL_MASK, error_found,
740 				  handle_error);
741 	}
742 }
743 
744 static void e752x_check_sysbus(struct e752x_error_info *info,
745 			int *error_found, int handle_error)
746 {
747 	u32 stat32, error32;
748 
749 	//pci_read_config_dword(dev,E752X_SYSBUS_FERR,&stat32);
750 	stat32 = info->sysbus_ferr + (info->sysbus_nerr << 16);
751 
752 	if (stat32 == 0)
753 		return;		/* no errors */
754 
755 	error32 = (stat32 >> 16) & 0x3ff;
756 	stat32 = stat32 & 0x3ff;
757 
758 	if (stat32 & 0x087)
759 		sysbus_error(1, stat32 & 0x087, error_found, handle_error);
760 
761 	if (stat32 & 0x378)
762 		sysbus_error(0, stat32 & 0x378, error_found, handle_error);
763 
764 	if (error32 & 0x087)
765 		sysbus_error(1, error32 & 0x087, error_found, handle_error);
766 
767 	if (error32 & 0x378)
768 		sysbus_error(0, error32 & 0x378, error_found, handle_error);
769 }
770 
771 static void e752x_check_membuf(struct e752x_error_info *info,
772 			int *error_found, int handle_error)
773 {
774 	u8 stat8;
775 
776 	stat8 = info->buf_ferr;
777 
778 	if (stat8 & 0x0f) {	/* Error, so process */
779 		stat8 &= 0x0f;
780 		membuf_error(stat8, error_found, handle_error);
781 	}
782 
783 	stat8 = info->buf_nerr;
784 
785 	if (stat8 & 0x0f) {	/* Error, so process */
786 		stat8 &= 0x0f;
787 		membuf_error(stat8, error_found, handle_error);
788 	}
789 }
790 
791 static void e752x_check_dram(struct mem_ctl_info *mci,
792 			struct e752x_error_info *info, int *error_found,
793 			int handle_error)
794 {
795 	u16 error_one, error_next;
796 
797 	error_one = info->dram_ferr;
798 	error_next = info->dram_nerr;
799 
800 	/* decode and report errors */
801 	if (error_one & 0x0101)	/* check first error correctable */
802 		process_ce(mci, error_one, info->dram_sec1_add,
803 			info->dram_sec1_syndrome, error_found, handle_error);
804 
805 	if (error_next & 0x0101)	/* check next error correctable */
806 		process_ce(mci, error_next, info->dram_sec2_add,
807 			info->dram_sec2_syndrome, error_found, handle_error);
808 
809 	if (error_one & 0x4040)
810 		process_ue_no_info_wr(mci, error_found, handle_error);
811 
812 	if (error_next & 0x4040)
813 		process_ue_no_info_wr(mci, error_found, handle_error);
814 
815 	if (error_one & 0x2020)
816 		process_ded_retry(mci, error_one, info->dram_retr_add,
817 				error_found, handle_error);
818 
819 	if (error_next & 0x2020)
820 		process_ded_retry(mci, error_next, info->dram_retr_add,
821 				error_found, handle_error);
822 
823 	if (error_one & 0x0808)
824 		process_threshold_ce(mci, error_one, error_found, handle_error);
825 
826 	if (error_next & 0x0808)
827 		process_threshold_ce(mci, error_next, error_found,
828 				handle_error);
829 
830 	if (error_one & 0x0606)
831 		process_ue(mci, error_one, info->dram_ded_add,
832 			info->dram_scrb_add, error_found, handle_error);
833 
834 	if (error_next & 0x0606)
835 		process_ue(mci, error_next, info->dram_ded_add,
836 			info->dram_scrb_add, error_found, handle_error);
837 }
838 
839 static void e752x_get_error_info(struct mem_ctl_info *mci,
840 				 struct e752x_error_info *info)
841 {
842 	struct pci_dev *dev;
843 	struct e752x_pvt *pvt;
844 
845 	memset(info, 0, sizeof(*info));
846 	pvt = (struct e752x_pvt *)mci->pvt_info;
847 	dev = pvt->dev_d0f1;
848 	pci_read_config_dword(dev, E752X_FERR_GLOBAL, &info->ferr_global);
849 
850 	if (info->ferr_global) {
851 		if (pvt->dev_info->err_dev == PCI_DEVICE_ID_INTEL_3100_1_ERR) {
852 			pci_read_config_dword(dev, I3100_NSI_FERR,
853 					     &info->nsi_ferr);
854 			info->hi_ferr = 0;
855 		} else {
856 			pci_read_config_byte(dev, E752X_HI_FERR,
857 					     &info->hi_ferr);
858 			info->nsi_ferr = 0;
859 		}
860 		pci_read_config_word(dev, E752X_SYSBUS_FERR,
861 				&info->sysbus_ferr);
862 		pci_read_config_byte(dev, E752X_BUF_FERR, &info->buf_ferr);
863 		pci_read_config_word(dev, E752X_DRAM_FERR, &info->dram_ferr);
864 		pci_read_config_dword(dev, E752X_DRAM_SEC1_ADD,
865 				&info->dram_sec1_add);
866 		pci_read_config_word(dev, E752X_DRAM_SEC1_SYNDROME,
867 				&info->dram_sec1_syndrome);
868 		pci_read_config_dword(dev, E752X_DRAM_DED_ADD,
869 				&info->dram_ded_add);
870 		pci_read_config_dword(dev, E752X_DRAM_SCRB_ADD,
871 				&info->dram_scrb_add);
872 		pci_read_config_dword(dev, E752X_DRAM_RETR_ADD,
873 				&info->dram_retr_add);
874 
875 		/* ignore the reserved bits just in case */
876 		if (info->hi_ferr & 0x7f)
877 			pci_write_config_byte(dev, E752X_HI_FERR,
878 					info->hi_ferr);
879 
880 		if (info->nsi_ferr & NSI_ERR_MASK)
881 			pci_write_config_dword(dev, I3100_NSI_FERR,
882 					info->nsi_ferr);
883 
884 		if (info->sysbus_ferr)
885 			pci_write_config_word(dev, E752X_SYSBUS_FERR,
886 					info->sysbus_ferr);
887 
888 		if (info->buf_ferr & 0x0f)
889 			pci_write_config_byte(dev, E752X_BUF_FERR,
890 					info->buf_ferr);
891 
892 		if (info->dram_ferr)
893 			pci_write_bits16(pvt->dev_d0f1, E752X_DRAM_FERR,
894 					 info->dram_ferr, info->dram_ferr);
895 
896 		pci_write_config_dword(dev, E752X_FERR_GLOBAL,
897 				info->ferr_global);
898 	}
899 
900 	pci_read_config_dword(dev, E752X_NERR_GLOBAL, &info->nerr_global);
901 
902 	if (info->nerr_global) {
903 		if (pvt->dev_info->err_dev == PCI_DEVICE_ID_INTEL_3100_1_ERR) {
904 			pci_read_config_dword(dev, I3100_NSI_NERR,
905 					     &info->nsi_nerr);
906 			info->hi_nerr = 0;
907 		} else {
908 			pci_read_config_byte(dev, E752X_HI_NERR,
909 					     &info->hi_nerr);
910 			info->nsi_nerr = 0;
911 		}
912 		pci_read_config_word(dev, E752X_SYSBUS_NERR,
913 				&info->sysbus_nerr);
914 		pci_read_config_byte(dev, E752X_BUF_NERR, &info->buf_nerr);
915 		pci_read_config_word(dev, E752X_DRAM_NERR, &info->dram_nerr);
916 		pci_read_config_dword(dev, E752X_DRAM_SEC2_ADD,
917 				&info->dram_sec2_add);
918 		pci_read_config_word(dev, E752X_DRAM_SEC2_SYNDROME,
919 				&info->dram_sec2_syndrome);
920 
921 		if (info->hi_nerr & 0x7f)
922 			pci_write_config_byte(dev, E752X_HI_NERR,
923 					info->hi_nerr);
924 
925 		if (info->nsi_nerr & NSI_ERR_MASK)
926 			pci_write_config_dword(dev, I3100_NSI_NERR,
927 					info->nsi_nerr);
928 
929 		if (info->sysbus_nerr)
930 			pci_write_config_word(dev, E752X_SYSBUS_NERR,
931 					info->sysbus_nerr);
932 
933 		if (info->buf_nerr & 0x0f)
934 			pci_write_config_byte(dev, E752X_BUF_NERR,
935 					info->buf_nerr);
936 
937 		if (info->dram_nerr)
938 			pci_write_bits16(pvt->dev_d0f1, E752X_DRAM_NERR,
939 					 info->dram_nerr, info->dram_nerr);
940 
941 		pci_write_config_dword(dev, E752X_NERR_GLOBAL,
942 				info->nerr_global);
943 	}
944 }
945 
946 static int e752x_process_error_info(struct mem_ctl_info *mci,
947 				struct e752x_error_info *info,
948 				int handle_errors)
949 {
950 	u32 error32, stat32;
951 	int error_found;
952 
953 	error_found = 0;
954 	error32 = (info->ferr_global >> 18) & 0x3ff;
955 	stat32 = (info->ferr_global >> 4) & 0x7ff;
956 
957 	if (error32)
958 		global_error(1, error32, &error_found, handle_errors);
959 
960 	if (stat32)
961 		global_error(0, stat32, &error_found, handle_errors);
962 
963 	error32 = (info->nerr_global >> 18) & 0x3ff;
964 	stat32 = (info->nerr_global >> 4) & 0x7ff;
965 
966 	if (error32)
967 		global_error(1, error32, &error_found, handle_errors);
968 
969 	if (stat32)
970 		global_error(0, stat32, &error_found, handle_errors);
971 
972 	e752x_check_hub_interface(info, &error_found, handle_errors);
973 	e752x_check_ns_interface(info, &error_found, handle_errors);
974 	e752x_check_sysbus(info, &error_found, handle_errors);
975 	e752x_check_membuf(info, &error_found, handle_errors);
976 	e752x_check_dram(mci, info, &error_found, handle_errors);
977 	return error_found;
978 }
979 
980 static void e752x_check(struct mem_ctl_info *mci)
981 {
982 	struct e752x_error_info info;
983 
984 	edac_dbg(3, "\n");
985 	e752x_get_error_info(mci, &info);
986 	e752x_process_error_info(mci, &info, 1);
987 }
988 
989 /* Program byte/sec bandwidth scrub rate to hardware */
990 static int set_sdram_scrub_rate(struct mem_ctl_info *mci, u32 new_bw)
991 {
992 	const struct scrubrate *scrubrates;
993 	struct e752x_pvt *pvt = (struct e752x_pvt *) mci->pvt_info;
994 	struct pci_dev *pdev = pvt->dev_d0f0;
995 	int i;
996 
997 	if (pvt->dev_info->ctl_dev == PCI_DEVICE_ID_INTEL_3100_0)
998 		scrubrates = scrubrates_i3100;
999 	else
1000 		scrubrates = scrubrates_e752x;
1001 
1002 	/* Translate the desired scrub rate to a e752x/3100 register value.
1003 	 * Search for the bandwidth that is equal or greater than the
1004 	 * desired rate and program the cooresponding register value.
1005 	 */
1006 	for (i = 0; scrubrates[i].bandwidth != SDRATE_EOT; i++)
1007 		if (scrubrates[i].bandwidth >= new_bw)
1008 			break;
1009 
1010 	if (scrubrates[i].bandwidth == SDRATE_EOT)
1011 		return -1;
1012 
1013 	pci_write_config_word(pdev, E752X_MCHSCRB, scrubrates[i].scrubval);
1014 
1015 	return scrubrates[i].bandwidth;
1016 }
1017 
1018 /* Convert current scrub rate value into byte/sec bandwidth */
1019 static int get_sdram_scrub_rate(struct mem_ctl_info *mci)
1020 {
1021 	const struct scrubrate *scrubrates;
1022 	struct e752x_pvt *pvt = (struct e752x_pvt *) mci->pvt_info;
1023 	struct pci_dev *pdev = pvt->dev_d0f0;
1024 	u16 scrubval;
1025 	int i;
1026 
1027 	if (pvt->dev_info->ctl_dev == PCI_DEVICE_ID_INTEL_3100_0)
1028 		scrubrates = scrubrates_i3100;
1029 	else
1030 		scrubrates = scrubrates_e752x;
1031 
1032 	/* Find the bandwidth matching the memory scrubber configuration */
1033 	pci_read_config_word(pdev, E752X_MCHSCRB, &scrubval);
1034 	scrubval = scrubval & 0x0f;
1035 
1036 	for (i = 0; scrubrates[i].bandwidth != SDRATE_EOT; i++)
1037 		if (scrubrates[i].scrubval == scrubval)
1038 			break;
1039 
1040 	if (scrubrates[i].bandwidth == SDRATE_EOT) {
1041 		e752x_printk(KERN_WARNING,
1042 			"Invalid sdram scrub control value: 0x%x\n", scrubval);
1043 		return -1;
1044 	}
1045 	return scrubrates[i].bandwidth;
1046 
1047 }
1048 
1049 /* Return 1 if dual channel mode is active.  Else return 0. */
1050 static inline int dual_channel_active(u16 ddrcsr)
1051 {
1052 	return (((ddrcsr >> 12) & 3) == 3);
1053 }
1054 
1055 /* Remap csrow index numbers if map_type is "reverse"
1056  */
1057 static inline int remap_csrow_index(struct mem_ctl_info *mci, int index)
1058 {
1059 	struct e752x_pvt *pvt = mci->pvt_info;
1060 
1061 	if (!pvt->map_type)
1062 		return (7 - index);
1063 
1064 	return (index);
1065 }
1066 
1067 static void e752x_init_csrows(struct mem_ctl_info *mci, struct pci_dev *pdev,
1068 			u16 ddrcsr)
1069 {
1070 	struct csrow_info *csrow;
1071 	enum edac_type edac_mode;
1072 	unsigned long last_cumul_size;
1073 	int index, mem_dev, drc_chan;
1074 	int drc_drbg;		/* DRB granularity 0=64mb, 1=128mb */
1075 	int drc_ddim;		/* DRAM Data Integrity Mode 0=none, 2=edac */
1076 	u8 value;
1077 	u32 dra, drc, cumul_size, i, nr_pages;
1078 
1079 	dra = 0;
1080 	for (index = 0; index < 4; index++) {
1081 		u8 dra_reg;
1082 		pci_read_config_byte(pdev, E752X_DRA + index, &dra_reg);
1083 		dra |= dra_reg << (index * 8);
1084 	}
1085 	pci_read_config_dword(pdev, E752X_DRC, &drc);
1086 	drc_chan = dual_channel_active(ddrcsr) ? 1 : 0;
1087 	drc_drbg = drc_chan + 1;	/* 128 in dual mode, 64 in single */
1088 	drc_ddim = (drc >> 20) & 0x3;
1089 
1090 	/* The dram row boundary (DRB) reg values are boundary address for
1091 	 * each DRAM row with a granularity of 64 or 128MB (single/dual
1092 	 * channel operation).  DRB regs are cumulative; therefore DRB7 will
1093 	 * contain the total memory contained in all eight rows.
1094 	 */
1095 	for (last_cumul_size = index = 0; index < mci->nr_csrows; index++) {
1096 		/* mem_dev 0=x8, 1=x4 */
1097 		mem_dev = (dra >> (index * 4 + 2)) & 0x3;
1098 		csrow = mci->csrows[remap_csrow_index(mci, index)];
1099 
1100 		mem_dev = (mem_dev == 2);
1101 		pci_read_config_byte(pdev, E752X_DRB + index, &value);
1102 		/* convert a 128 or 64 MiB DRB to a page size. */
1103 		cumul_size = value << (25 + drc_drbg - PAGE_SHIFT);
1104 		edac_dbg(3, "(%d) cumul_size 0x%x\n", index, cumul_size);
1105 		if (cumul_size == last_cumul_size)
1106 			continue;	/* not populated */
1107 
1108 		csrow->first_page = last_cumul_size;
1109 		csrow->last_page = cumul_size - 1;
1110 		nr_pages = cumul_size - last_cumul_size;
1111 		last_cumul_size = cumul_size;
1112 
1113 		/*
1114 		* if single channel or x8 devices then SECDED
1115 		* if dual channel and x4 then S4ECD4ED
1116 		*/
1117 		if (drc_ddim) {
1118 			if (drc_chan && mem_dev) {
1119 				edac_mode = EDAC_S4ECD4ED;
1120 				mci->edac_cap |= EDAC_FLAG_S4ECD4ED;
1121 			} else {
1122 				edac_mode = EDAC_SECDED;
1123 				mci->edac_cap |= EDAC_FLAG_SECDED;
1124 			}
1125 		} else
1126 			edac_mode = EDAC_NONE;
1127 		for (i = 0; i < csrow->nr_channels; i++) {
1128 			struct dimm_info *dimm = csrow->channels[i]->dimm;
1129 
1130 			edac_dbg(3, "Initializing rank at (%i,%i)\n", index, i);
1131 			dimm->nr_pages = nr_pages / csrow->nr_channels;
1132 			dimm->grain = 1 << 12;	/* 4KiB - resolution of CELOG */
1133 			dimm->mtype = MEM_RDDR;	/* only one type supported */
1134 			dimm->dtype = mem_dev ? DEV_X4 : DEV_X8;
1135 			dimm->edac_mode = edac_mode;
1136 		}
1137 	}
1138 }
1139 
1140 static void e752x_init_mem_map_table(struct pci_dev *pdev,
1141 				struct e752x_pvt *pvt)
1142 {
1143 	int index;
1144 	u8 value, last, row;
1145 
1146 	last = 0;
1147 	row = 0;
1148 
1149 	for (index = 0; index < 8; index += 2) {
1150 		pci_read_config_byte(pdev, E752X_DRB + index, &value);
1151 		/* test if there is a dimm in this slot */
1152 		if (value == last) {
1153 			/* no dimm in the slot, so flag it as empty */
1154 			pvt->map[index] = 0xff;
1155 			pvt->map[index + 1] = 0xff;
1156 		} else {	/* there is a dimm in the slot */
1157 			pvt->map[index] = row;
1158 			row++;
1159 			last = value;
1160 			/* test the next value to see if the dimm is double
1161 			 * sided
1162 			 */
1163 			pci_read_config_byte(pdev, E752X_DRB + index + 1,
1164 					&value);
1165 
1166 			/* the dimm is single sided, so flag as empty */
1167 			/* this is a double sided dimm to save the next row #*/
1168 			pvt->map[index + 1] = (value == last) ? 0xff :	row;
1169 			row++;
1170 			last = value;
1171 		}
1172 	}
1173 }
1174 
1175 /* Return 0 on success or 1 on failure. */
1176 static int e752x_get_devs(struct pci_dev *pdev, int dev_idx,
1177 			struct e752x_pvt *pvt)
1178 {
1179 	pvt->dev_d0f1 = pci_get_device(PCI_VENDOR_ID_INTEL,
1180 				pvt->dev_info->err_dev, NULL);
1181 
1182 	if (pvt->dev_d0f1 == NULL) {
1183 		pvt->dev_d0f1 = pci_scan_single_device(pdev->bus,
1184 							PCI_DEVFN(0, 1));
1185 		pci_dev_get(pvt->dev_d0f1);
1186 	}
1187 
1188 	if (pvt->dev_d0f1 == NULL) {
1189 		e752x_printk(KERN_ERR, "error reporting device not found:"
1190 			"vendor %x device 0x%x (broken BIOS?)\n",
1191 			PCI_VENDOR_ID_INTEL, e752x_devs[dev_idx].err_dev);
1192 		return 1;
1193 	}
1194 
1195 	pvt->dev_d0f0 = pci_get_device(PCI_VENDOR_ID_INTEL,
1196 				e752x_devs[dev_idx].ctl_dev,
1197 				NULL);
1198 
1199 	if (pvt->dev_d0f0 == NULL)
1200 		goto fail;
1201 
1202 	return 0;
1203 
1204 fail:
1205 	pci_dev_put(pvt->dev_d0f1);
1206 	return 1;
1207 }
1208 
1209 /* Setup system bus parity mask register.
1210  * Sysbus parity supported on:
1211  * e7320/e7520/e7525 + Xeon
1212  */
1213 static void e752x_init_sysbus_parity_mask(struct e752x_pvt *pvt)
1214 {
1215 	char *cpu_id = cpu_data(0).x86_model_id;
1216 	struct pci_dev *dev = pvt->dev_d0f1;
1217 	int enable = 1;
1218 
1219 	/* Allow module parameter override, else see if CPU supports parity */
1220 	if (sysbus_parity != -1) {
1221 		enable = sysbus_parity;
1222 	} else if (cpu_id[0] && !strstr(cpu_id, "Xeon")) {
1223 		e752x_printk(KERN_INFO, "System Bus Parity not "
1224 			     "supported by CPU, disabling\n");
1225 		enable = 0;
1226 	}
1227 
1228 	if (enable)
1229 		pci_write_config_word(dev, E752X_SYSBUS_ERRMASK, 0x0000);
1230 	else
1231 		pci_write_config_word(dev, E752X_SYSBUS_ERRMASK, 0x0309);
1232 }
1233 
1234 static void e752x_init_error_reporting_regs(struct e752x_pvt *pvt)
1235 {
1236 	struct pci_dev *dev;
1237 
1238 	dev = pvt->dev_d0f1;
1239 	/* Turn off error disable & SMI in case the BIOS turned it on */
1240 	if (pvt->dev_info->err_dev == PCI_DEVICE_ID_INTEL_3100_1_ERR) {
1241 		pci_write_config_dword(dev, I3100_NSI_EMASK, 0);
1242 		pci_write_config_dword(dev, I3100_NSI_SMICMD, 0);
1243 	} else {
1244 		pci_write_config_byte(dev, E752X_HI_ERRMASK, 0x00);
1245 		pci_write_config_byte(dev, E752X_HI_SMICMD, 0x00);
1246 	}
1247 
1248 	e752x_init_sysbus_parity_mask(pvt);
1249 
1250 	pci_write_config_word(dev, E752X_SYSBUS_SMICMD, 0x00);
1251 	pci_write_config_byte(dev, E752X_BUF_ERRMASK, 0x00);
1252 	pci_write_config_byte(dev, E752X_BUF_SMICMD, 0x00);
1253 	pci_write_config_byte(dev, E752X_DRAM_ERRMASK, 0x00);
1254 	pci_write_config_byte(dev, E752X_DRAM_SMICMD, 0x00);
1255 }
1256 
1257 static int e752x_probe1(struct pci_dev *pdev, int dev_idx)
1258 {
1259 	u16 pci_data;
1260 	u8 stat8;
1261 	struct mem_ctl_info *mci;
1262 	struct edac_mc_layer layers[2];
1263 	struct e752x_pvt *pvt;
1264 	u16 ddrcsr;
1265 	int drc_chan;		/* Number of channels 0=1chan,1=2chan */
1266 	struct e752x_error_info discard;
1267 
1268 	edac_dbg(0, "mci\n");
1269 	edac_dbg(0, "Starting Probe1\n");
1270 
1271 	/* check to see if device 0 function 1 is enabled; if it isn't, we
1272 	 * assume the BIOS has reserved it for a reason and is expecting
1273 	 * exclusive access, we take care not to violate that assumption and
1274 	 * fail the probe. */
1275 	pci_read_config_byte(pdev, E752X_DEVPRES1, &stat8);
1276 	if (!force_function_unhide && !(stat8 & (1 << 5))) {
1277 		printk(KERN_INFO "Contact your BIOS vendor to see if the "
1278 			"E752x error registers can be safely un-hidden\n");
1279 		return -ENODEV;
1280 	}
1281 	stat8 |= (1 << 5);
1282 	pci_write_config_byte(pdev, E752X_DEVPRES1, stat8);
1283 
1284 	pci_read_config_word(pdev, E752X_DDRCSR, &ddrcsr);
1285 	/* FIXME: should check >>12 or 0xf, true for all? */
1286 	/* Dual channel = 1, Single channel = 0 */
1287 	drc_chan = dual_channel_active(ddrcsr);
1288 
1289 	layers[0].type = EDAC_MC_LAYER_CHIP_SELECT;
1290 	layers[0].size = E752X_NR_CSROWS;
1291 	layers[0].is_virt_csrow = true;
1292 	layers[1].type = EDAC_MC_LAYER_CHANNEL;
1293 	layers[1].size = drc_chan + 1;
1294 	layers[1].is_virt_csrow = false;
1295 	mci = edac_mc_alloc(0, ARRAY_SIZE(layers), layers, sizeof(*pvt));
1296 	if (mci == NULL)
1297 		return -ENOMEM;
1298 
1299 	edac_dbg(3, "init mci\n");
1300 	mci->mtype_cap = MEM_FLAG_RDDR;
1301 	/* 3100 IMCH supports SECDEC only */
1302 	mci->edac_ctl_cap = (dev_idx == I3100) ? EDAC_FLAG_SECDED :
1303 		(EDAC_FLAG_NONE | EDAC_FLAG_SECDED | EDAC_FLAG_S4ECD4ED);
1304 	/* FIXME - what if different memory types are in different csrows? */
1305 	mci->mod_name = EDAC_MOD_STR;
1306 	mci->mod_ver = E752X_REVISION;
1307 	mci->pdev = &pdev->dev;
1308 
1309 	edac_dbg(3, "init pvt\n");
1310 	pvt = (struct e752x_pvt *)mci->pvt_info;
1311 	pvt->dev_info = &e752x_devs[dev_idx];
1312 	pvt->mc_symmetric = ((ddrcsr & 0x10) != 0);
1313 
1314 	if (e752x_get_devs(pdev, dev_idx, pvt)) {
1315 		edac_mc_free(mci);
1316 		return -ENODEV;
1317 	}
1318 
1319 	edac_dbg(3, "more mci init\n");
1320 	mci->ctl_name = pvt->dev_info->ctl_name;
1321 	mci->dev_name = pci_name(pdev);
1322 	mci->edac_check = e752x_check;
1323 	mci->ctl_page_to_phys = ctl_page_to_phys;
1324 	mci->set_sdram_scrub_rate = set_sdram_scrub_rate;
1325 	mci->get_sdram_scrub_rate = get_sdram_scrub_rate;
1326 
1327 	/* set the map type.  1 = normal, 0 = reversed
1328 	 * Must be set before e752x_init_csrows in case csrow mapping
1329 	 * is reversed.
1330 	 */
1331 	pci_read_config_byte(pdev, E752X_DRM, &stat8);
1332 	pvt->map_type = ((stat8 & 0x0f) > ((stat8 >> 4) & 0x0f));
1333 
1334 	e752x_init_csrows(mci, pdev, ddrcsr);
1335 	e752x_init_mem_map_table(pdev, pvt);
1336 
1337 	if (dev_idx == I3100)
1338 		mci->edac_cap = EDAC_FLAG_SECDED; /* the only mode supported */
1339 	else
1340 		mci->edac_cap |= EDAC_FLAG_NONE;
1341 	edac_dbg(3, "tolm, remapbase, remaplimit\n");
1342 
1343 	/* load the top of low memory, remap base, and remap limit vars */
1344 	pci_read_config_word(pdev, E752X_TOLM, &pci_data);
1345 	pvt->tolm = ((u32) pci_data) << 4;
1346 	pci_read_config_word(pdev, E752X_REMAPBASE, &pci_data);
1347 	pvt->remapbase = ((u32) pci_data) << 14;
1348 	pci_read_config_word(pdev, E752X_REMAPLIMIT, &pci_data);
1349 	pvt->remaplimit = ((u32) pci_data) << 14;
1350 	e752x_printk(KERN_INFO,
1351 			"tolm = %x, remapbase = %x, remaplimit = %x\n",
1352 			pvt->tolm, pvt->remapbase, pvt->remaplimit);
1353 
1354 	/* Here we assume that we will never see multiple instances of this
1355 	 * type of memory controller.  The ID is therefore hardcoded to 0.
1356 	 */
1357 	if (edac_mc_add_mc(mci)) {
1358 		edac_dbg(3, "failed edac_mc_add_mc()\n");
1359 		goto fail;
1360 	}
1361 
1362 	e752x_init_error_reporting_regs(pvt);
1363 	e752x_get_error_info(mci, &discard);	/* clear other MCH errors */
1364 
1365 	/* allocating generic PCI control info */
1366 	e752x_pci = edac_pci_create_generic_ctl(&pdev->dev, EDAC_MOD_STR);
1367 	if (!e752x_pci) {
1368 		printk(KERN_WARNING
1369 			"%s(): Unable to create PCI control\n", __func__);
1370 		printk(KERN_WARNING
1371 			"%s(): PCI error report via EDAC not setup\n",
1372 			__func__);
1373 	}
1374 
1375 	/* get this far and it's successful */
1376 	edac_dbg(3, "success\n");
1377 	return 0;
1378 
1379 fail:
1380 	pci_dev_put(pvt->dev_d0f0);
1381 	pci_dev_put(pvt->dev_d0f1);
1382 	edac_mc_free(mci);
1383 
1384 	return -ENODEV;
1385 }
1386 
1387 /* returns count (>= 0), or negative on error */
1388 static int e752x_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1389 {
1390 	edac_dbg(0, "\n");
1391 
1392 	/* wake up and enable device */
1393 	if (pci_enable_device(pdev) < 0)
1394 		return -EIO;
1395 
1396 	return e752x_probe1(pdev, ent->driver_data);
1397 }
1398 
1399 static void e752x_remove_one(struct pci_dev *pdev)
1400 {
1401 	struct mem_ctl_info *mci;
1402 	struct e752x_pvt *pvt;
1403 
1404 	edac_dbg(0, "\n");
1405 
1406 	if (e752x_pci)
1407 		edac_pci_release_generic_ctl(e752x_pci);
1408 
1409 	if ((mci = edac_mc_del_mc(&pdev->dev)) == NULL)
1410 		return;
1411 
1412 	pvt = (struct e752x_pvt *)mci->pvt_info;
1413 	pci_dev_put(pvt->dev_d0f0);
1414 	pci_dev_put(pvt->dev_d0f1);
1415 	edac_mc_free(mci);
1416 }
1417 
1418 static const struct pci_device_id e752x_pci_tbl[] = {
1419 	{
1420 	 PCI_VEND_DEV(INTEL, 7520_0), PCI_ANY_ID, PCI_ANY_ID, 0, 0,
1421 	 E7520},
1422 	{
1423 	 PCI_VEND_DEV(INTEL, 7525_0), PCI_ANY_ID, PCI_ANY_ID, 0, 0,
1424 	 E7525},
1425 	{
1426 	 PCI_VEND_DEV(INTEL, 7320_0), PCI_ANY_ID, PCI_ANY_ID, 0, 0,
1427 	 E7320},
1428 	{
1429 	 PCI_VEND_DEV(INTEL, 3100_0), PCI_ANY_ID, PCI_ANY_ID, 0, 0,
1430 	 I3100},
1431 	{
1432 	 0,
1433 	 }			/* 0 terminated list. */
1434 };
1435 
1436 MODULE_DEVICE_TABLE(pci, e752x_pci_tbl);
1437 
1438 static struct pci_driver e752x_driver = {
1439 	.name = EDAC_MOD_STR,
1440 	.probe = e752x_init_one,
1441 	.remove = e752x_remove_one,
1442 	.id_table = e752x_pci_tbl,
1443 };
1444 
1445 static int __init e752x_init(void)
1446 {
1447 	int pci_rc;
1448 
1449 	edac_dbg(3, "\n");
1450 
1451        /* Ensure that the OPSTATE is set correctly for POLL or NMI */
1452        opstate_init();
1453 
1454 	pci_rc = pci_register_driver(&e752x_driver);
1455 	return (pci_rc < 0) ? pci_rc : 0;
1456 }
1457 
1458 static void __exit e752x_exit(void)
1459 {
1460 	edac_dbg(3, "\n");
1461 	pci_unregister_driver(&e752x_driver);
1462 }
1463 
1464 module_init(e752x_init);
1465 module_exit(e752x_exit);
1466 
1467 MODULE_LICENSE("GPL");
1468 MODULE_AUTHOR("Linux Networx (http://lnxi.com) Tom Zimmerman\n");
1469 MODULE_DESCRIPTION("MC support for Intel e752x/3100 memory controllers");
1470 
1471 module_param(force_function_unhide, int, 0444);
1472 MODULE_PARM_DESC(force_function_unhide, "if BIOS sets Dev0:Fun1 up as hidden:"
1473 		 " 1=force unhide and hope BIOS doesn't fight driver for "
1474 		"Dev0:Fun1 access");
1475 
1476 module_param(edac_op_state, int, 0444);
1477 MODULE_PARM_DESC(edac_op_state, "EDAC Error Reporting state: 0=Poll,1=NMI");
1478 
1479 module_param(sysbus_parity, int, 0444);
1480 MODULE_PARM_DESC(sysbus_parity, "0=disable system bus parity checking,"
1481 		" 1=enable system bus parity checking, default=auto-detect");
1482 module_param(report_non_memory_errors, int, 0644);
1483 MODULE_PARM_DESC(report_non_memory_errors, "0=disable non-memory error "
1484 		"reporting, 1=enable non-memory error reporting");
1485