xref: /openbmc/linux/drivers/edac/amd64_edac.c (revision 79f08d9e)
1 #include "amd64_edac.h"
2 #include <asm/amd_nb.h>
3 
4 static struct edac_pci_ctl_info *amd64_ctl_pci;
5 
6 static int report_gart_errors;
7 module_param(report_gart_errors, int, 0644);
8 
9 /*
10  * Set by command line parameter. If BIOS has enabled the ECC, this override is
11  * cleared to prevent re-enabling the hardware by this driver.
12  */
13 static int ecc_enable_override;
14 module_param(ecc_enable_override, int, 0644);
15 
16 static struct msr __percpu *msrs;
17 
18 /*
19  * count successfully initialized driver instances for setup_pci_device()
20  */
21 static atomic_t drv_instances = ATOMIC_INIT(0);
22 
23 /* Per-node driver instances */
24 static struct mem_ctl_info **mcis;
25 static struct ecc_settings **ecc_stngs;
26 
27 /*
28  * Valid scrub rates for the K8 hardware memory scrubber. We map the scrubbing
29  * bandwidth to a valid bit pattern. The 'set' operation finds the 'matching-
30  * or higher value'.
31  *
32  *FIXME: Produce a better mapping/linearisation.
33  */
34 static const struct scrubrate {
35        u32 scrubval;           /* bit pattern for scrub rate */
36        u32 bandwidth;          /* bandwidth consumed (bytes/sec) */
37 } scrubrates[] = {
38 	{ 0x01, 1600000000UL},
39 	{ 0x02, 800000000UL},
40 	{ 0x03, 400000000UL},
41 	{ 0x04, 200000000UL},
42 	{ 0x05, 100000000UL},
43 	{ 0x06, 50000000UL},
44 	{ 0x07, 25000000UL},
45 	{ 0x08, 12284069UL},
46 	{ 0x09, 6274509UL},
47 	{ 0x0A, 3121951UL},
48 	{ 0x0B, 1560975UL},
49 	{ 0x0C, 781440UL},
50 	{ 0x0D, 390720UL},
51 	{ 0x0E, 195300UL},
52 	{ 0x0F, 97650UL},
53 	{ 0x10, 48854UL},
54 	{ 0x11, 24427UL},
55 	{ 0x12, 12213UL},
56 	{ 0x13, 6101UL},
57 	{ 0x14, 3051UL},
58 	{ 0x15, 1523UL},
59 	{ 0x16, 761UL},
60 	{ 0x00, 0UL},        /* scrubbing off */
61 };
62 
63 int __amd64_read_pci_cfg_dword(struct pci_dev *pdev, int offset,
64 			       u32 *val, const char *func)
65 {
66 	int err = 0;
67 
68 	err = pci_read_config_dword(pdev, offset, val);
69 	if (err)
70 		amd64_warn("%s: error reading F%dx%03x.\n",
71 			   func, PCI_FUNC(pdev->devfn), offset);
72 
73 	return err;
74 }
75 
76 int __amd64_write_pci_cfg_dword(struct pci_dev *pdev, int offset,
77 				u32 val, const char *func)
78 {
79 	int err = 0;
80 
81 	err = pci_write_config_dword(pdev, offset, val);
82 	if (err)
83 		amd64_warn("%s: error writing to F%dx%03x.\n",
84 			   func, PCI_FUNC(pdev->devfn), offset);
85 
86 	return err;
87 }
88 
89 /*
90  *
91  * Depending on the family, F2 DCT reads need special handling:
92  *
93  * K8: has a single DCT only
94  *
95  * F10h: each DCT has its own set of regs
96  *	DCT0 -> F2x040..
97  *	DCT1 -> F2x140..
98  *
99  * F15h: we select which DCT we access using F1x10C[DctCfgSel]
100  *
101  * F16h: has only 1 DCT
102  */
103 static int k8_read_dct_pci_cfg(struct amd64_pvt *pvt, int addr, u32 *val,
104 			       const char *func)
105 {
106 	if (addr >= 0x100)
107 		return -EINVAL;
108 
109 	return __amd64_read_pci_cfg_dword(pvt->F2, addr, val, func);
110 }
111 
112 static int f10_read_dct_pci_cfg(struct amd64_pvt *pvt, int addr, u32 *val,
113 				 const char *func)
114 {
115 	return __amd64_read_pci_cfg_dword(pvt->F2, addr, val, func);
116 }
117 
118 /*
119  * Select DCT to which PCI cfg accesses are routed
120  */
121 static void f15h_select_dct(struct amd64_pvt *pvt, u8 dct)
122 {
123 	u32 reg = 0;
124 
125 	amd64_read_pci_cfg(pvt->F1, DCT_CFG_SEL, &reg);
126 	reg &= (pvt->model >= 0x30) ? ~3 : ~1;
127 	reg |= dct;
128 	amd64_write_pci_cfg(pvt->F1, DCT_CFG_SEL, reg);
129 }
130 
131 static int f15_read_dct_pci_cfg(struct amd64_pvt *pvt, int addr, u32 *val,
132 				 const char *func)
133 {
134 	u8 dct  = 0;
135 
136 	/* For F15 M30h, the second dct is DCT 3, refer to BKDG Section 2.10 */
137 	if (addr >= 0x140 && addr <= 0x1a0) {
138 		dct   = (pvt->model >= 0x30) ? 3 : 1;
139 		addr -= 0x100;
140 	}
141 
142 	f15h_select_dct(pvt, dct);
143 
144 	return __amd64_read_pci_cfg_dword(pvt->F2, addr, val, func);
145 }
146 
147 /*
148  * Memory scrubber control interface. For K8, memory scrubbing is handled by
149  * hardware and can involve L2 cache, dcache as well as the main memory. With
150  * F10, this is extended to L3 cache scrubbing on CPU models sporting that
151  * functionality.
152  *
153  * This causes the "units" for the scrubbing speed to vary from 64 byte blocks
154  * (dram) over to cache lines. This is nasty, so we will use bandwidth in
155  * bytes/sec for the setting.
156  *
157  * Currently, we only do dram scrubbing. If the scrubbing is done in software on
158  * other archs, we might not have access to the caches directly.
159  */
160 
161 /*
162  * scan the scrub rate mapping table for a close or matching bandwidth value to
163  * issue. If requested is too big, then use last maximum value found.
164  */
165 static int __amd64_set_scrub_rate(struct pci_dev *ctl, u32 new_bw, u32 min_rate)
166 {
167 	u32 scrubval;
168 	int i;
169 
170 	/*
171 	 * map the configured rate (new_bw) to a value specific to the AMD64
172 	 * memory controller and apply to register. Search for the first
173 	 * bandwidth entry that is greater or equal than the setting requested
174 	 * and program that. If at last entry, turn off DRAM scrubbing.
175 	 *
176 	 * If no suitable bandwidth is found, turn off DRAM scrubbing entirely
177 	 * by falling back to the last element in scrubrates[].
178 	 */
179 	for (i = 0; i < ARRAY_SIZE(scrubrates) - 1; i++) {
180 		/*
181 		 * skip scrub rates which aren't recommended
182 		 * (see F10 BKDG, F3x58)
183 		 */
184 		if (scrubrates[i].scrubval < min_rate)
185 			continue;
186 
187 		if (scrubrates[i].bandwidth <= new_bw)
188 			break;
189 	}
190 
191 	scrubval = scrubrates[i].scrubval;
192 
193 	pci_write_bits32(ctl, SCRCTRL, scrubval, 0x001F);
194 
195 	if (scrubval)
196 		return scrubrates[i].bandwidth;
197 
198 	return 0;
199 }
200 
201 static int amd64_set_scrub_rate(struct mem_ctl_info *mci, u32 bw)
202 {
203 	struct amd64_pvt *pvt = mci->pvt_info;
204 	u32 min_scrubrate = 0x5;
205 
206 	if (pvt->fam == 0xf)
207 		min_scrubrate = 0x0;
208 
209 	/* Erratum #505 */
210 	if (pvt->fam == 0x15 && pvt->model < 0x10)
211 		f15h_select_dct(pvt, 0);
212 
213 	return __amd64_set_scrub_rate(pvt->F3, bw, min_scrubrate);
214 }
215 
216 static int amd64_get_scrub_rate(struct mem_ctl_info *mci)
217 {
218 	struct amd64_pvt *pvt = mci->pvt_info;
219 	u32 scrubval = 0;
220 	int i, retval = -EINVAL;
221 
222 	/* Erratum #505 */
223 	if (pvt->fam == 0x15 && pvt->model < 0x10)
224 		f15h_select_dct(pvt, 0);
225 
226 	amd64_read_pci_cfg(pvt->F3, SCRCTRL, &scrubval);
227 
228 	scrubval = scrubval & 0x001F;
229 
230 	for (i = 0; i < ARRAY_SIZE(scrubrates); i++) {
231 		if (scrubrates[i].scrubval == scrubval) {
232 			retval = scrubrates[i].bandwidth;
233 			break;
234 		}
235 	}
236 	return retval;
237 }
238 
239 /*
240  * returns true if the SysAddr given by sys_addr matches the
241  * DRAM base/limit associated with node_id
242  */
243 static bool amd64_base_limit_match(struct amd64_pvt *pvt, u64 sys_addr,
244 				   u8 nid)
245 {
246 	u64 addr;
247 
248 	/* The K8 treats this as a 40-bit value.  However, bits 63-40 will be
249 	 * all ones if the most significant implemented address bit is 1.
250 	 * Here we discard bits 63-40.  See section 3.4.2 of AMD publication
251 	 * 24592: AMD x86-64 Architecture Programmer's Manual Volume 1
252 	 * Application Programming.
253 	 */
254 	addr = sys_addr & 0x000000ffffffffffull;
255 
256 	return ((addr >= get_dram_base(pvt, nid)) &&
257 		(addr <= get_dram_limit(pvt, nid)));
258 }
259 
260 /*
261  * Attempt to map a SysAddr to a node. On success, return a pointer to the
262  * mem_ctl_info structure for the node that the SysAddr maps to.
263  *
264  * On failure, return NULL.
265  */
266 static struct mem_ctl_info *find_mc_by_sys_addr(struct mem_ctl_info *mci,
267 						u64 sys_addr)
268 {
269 	struct amd64_pvt *pvt;
270 	u8 node_id;
271 	u32 intlv_en, bits;
272 
273 	/*
274 	 * Here we use the DRAM Base (section 3.4.4.1) and DRAM Limit (section
275 	 * 3.4.4.2) registers to map the SysAddr to a node ID.
276 	 */
277 	pvt = mci->pvt_info;
278 
279 	/*
280 	 * The value of this field should be the same for all DRAM Base
281 	 * registers.  Therefore we arbitrarily choose to read it from the
282 	 * register for node 0.
283 	 */
284 	intlv_en = dram_intlv_en(pvt, 0);
285 
286 	if (intlv_en == 0) {
287 		for (node_id = 0; node_id < DRAM_RANGES; node_id++) {
288 			if (amd64_base_limit_match(pvt, sys_addr, node_id))
289 				goto found;
290 		}
291 		goto err_no_match;
292 	}
293 
294 	if (unlikely((intlv_en != 0x01) &&
295 		     (intlv_en != 0x03) &&
296 		     (intlv_en != 0x07))) {
297 		amd64_warn("DRAM Base[IntlvEn] junk value: 0x%x, BIOS bug?\n", intlv_en);
298 		return NULL;
299 	}
300 
301 	bits = (((u32) sys_addr) >> 12) & intlv_en;
302 
303 	for (node_id = 0; ; ) {
304 		if ((dram_intlv_sel(pvt, node_id) & intlv_en) == bits)
305 			break;	/* intlv_sel field matches */
306 
307 		if (++node_id >= DRAM_RANGES)
308 			goto err_no_match;
309 	}
310 
311 	/* sanity test for sys_addr */
312 	if (unlikely(!amd64_base_limit_match(pvt, sys_addr, node_id))) {
313 		amd64_warn("%s: sys_addr 0x%llx falls outside base/limit address"
314 			   "range for node %d with node interleaving enabled.\n",
315 			   __func__, sys_addr, node_id);
316 		return NULL;
317 	}
318 
319 found:
320 	return edac_mc_find((int)node_id);
321 
322 err_no_match:
323 	edac_dbg(2, "sys_addr 0x%lx doesn't match any node\n",
324 		 (unsigned long)sys_addr);
325 
326 	return NULL;
327 }
328 
329 /*
330  * compute the CS base address of the @csrow on the DRAM controller @dct.
331  * For details see F2x[5C:40] in the processor's BKDG
332  */
333 static void get_cs_base_and_mask(struct amd64_pvt *pvt, int csrow, u8 dct,
334 				 u64 *base, u64 *mask)
335 {
336 	u64 csbase, csmask, base_bits, mask_bits;
337 	u8 addr_shift;
338 
339 	if (pvt->fam == 0xf && pvt->ext_model < K8_REV_F) {
340 		csbase		= pvt->csels[dct].csbases[csrow];
341 		csmask		= pvt->csels[dct].csmasks[csrow];
342 		base_bits	= GENMASK_ULL(31, 21) | GENMASK_ULL(15, 9);
343 		mask_bits	= GENMASK_ULL(29, 21) | GENMASK_ULL(15, 9);
344 		addr_shift	= 4;
345 
346 	/*
347 	 * F16h and F15h, models 30h and later need two addr_shift values:
348 	 * 8 for high and 6 for low (cf. F16h BKDG).
349 	 */
350 	} else if (pvt->fam == 0x16 ||
351 		  (pvt->fam == 0x15 && pvt->model >= 0x30)) {
352 		csbase          = pvt->csels[dct].csbases[csrow];
353 		csmask          = pvt->csels[dct].csmasks[csrow >> 1];
354 
355 		*base  = (csbase & GENMASK_ULL(15,  5)) << 6;
356 		*base |= (csbase & GENMASK_ULL(30, 19)) << 8;
357 
358 		*mask = ~0ULL;
359 		/* poke holes for the csmask */
360 		*mask &= ~((GENMASK_ULL(15, 5)  << 6) |
361 			   (GENMASK_ULL(30, 19) << 8));
362 
363 		*mask |= (csmask & GENMASK_ULL(15, 5))  << 6;
364 		*mask |= (csmask & GENMASK_ULL(30, 19)) << 8;
365 
366 		return;
367 	} else {
368 		csbase		= pvt->csels[dct].csbases[csrow];
369 		csmask		= pvt->csels[dct].csmasks[csrow >> 1];
370 		addr_shift	= 8;
371 
372 		if (pvt->fam == 0x15)
373 			base_bits = mask_bits =
374 				GENMASK_ULL(30,19) | GENMASK_ULL(13,5);
375 		else
376 			base_bits = mask_bits =
377 				GENMASK_ULL(28,19) | GENMASK_ULL(13,5);
378 	}
379 
380 	*base  = (csbase & base_bits) << addr_shift;
381 
382 	*mask  = ~0ULL;
383 	/* poke holes for the csmask */
384 	*mask &= ~(mask_bits << addr_shift);
385 	/* OR them in */
386 	*mask |= (csmask & mask_bits) << addr_shift;
387 }
388 
389 #define for_each_chip_select(i, dct, pvt) \
390 	for (i = 0; i < pvt->csels[dct].b_cnt; i++)
391 
392 #define chip_select_base(i, dct, pvt) \
393 	pvt->csels[dct].csbases[i]
394 
395 #define for_each_chip_select_mask(i, dct, pvt) \
396 	for (i = 0; i < pvt->csels[dct].m_cnt; i++)
397 
398 /*
399  * @input_addr is an InputAddr associated with the node given by mci. Return the
400  * csrow that input_addr maps to, or -1 on failure (no csrow claims input_addr).
401  */
402 static int input_addr_to_csrow(struct mem_ctl_info *mci, u64 input_addr)
403 {
404 	struct amd64_pvt *pvt;
405 	int csrow;
406 	u64 base, mask;
407 
408 	pvt = mci->pvt_info;
409 
410 	for_each_chip_select(csrow, 0, pvt) {
411 		if (!csrow_enabled(csrow, 0, pvt))
412 			continue;
413 
414 		get_cs_base_and_mask(pvt, csrow, 0, &base, &mask);
415 
416 		mask = ~mask;
417 
418 		if ((input_addr & mask) == (base & mask)) {
419 			edac_dbg(2, "InputAddr 0x%lx matches csrow %d (node %d)\n",
420 				 (unsigned long)input_addr, csrow,
421 				 pvt->mc_node_id);
422 
423 			return csrow;
424 		}
425 	}
426 	edac_dbg(2, "no matching csrow for InputAddr 0x%lx (MC node %d)\n",
427 		 (unsigned long)input_addr, pvt->mc_node_id);
428 
429 	return -1;
430 }
431 
432 /*
433  * Obtain info from the DRAM Hole Address Register (section 3.4.8, pub #26094)
434  * for the node represented by mci. Info is passed back in *hole_base,
435  * *hole_offset, and *hole_size.  Function returns 0 if info is valid or 1 if
436  * info is invalid. Info may be invalid for either of the following reasons:
437  *
438  * - The revision of the node is not E or greater.  In this case, the DRAM Hole
439  *   Address Register does not exist.
440  *
441  * - The DramHoleValid bit is cleared in the DRAM Hole Address Register,
442  *   indicating that its contents are not valid.
443  *
444  * The values passed back in *hole_base, *hole_offset, and *hole_size are
445  * complete 32-bit values despite the fact that the bitfields in the DHAR
446  * only represent bits 31-24 of the base and offset values.
447  */
448 int amd64_get_dram_hole_info(struct mem_ctl_info *mci, u64 *hole_base,
449 			     u64 *hole_offset, u64 *hole_size)
450 {
451 	struct amd64_pvt *pvt = mci->pvt_info;
452 
453 	/* only revE and later have the DRAM Hole Address Register */
454 	if (pvt->fam == 0xf && pvt->ext_model < K8_REV_E) {
455 		edac_dbg(1, "  revision %d for node %d does not support DHAR\n",
456 			 pvt->ext_model, pvt->mc_node_id);
457 		return 1;
458 	}
459 
460 	/* valid for Fam10h and above */
461 	if (pvt->fam >= 0x10 && !dhar_mem_hoist_valid(pvt)) {
462 		edac_dbg(1, "  Dram Memory Hoisting is DISABLED on this system\n");
463 		return 1;
464 	}
465 
466 	if (!dhar_valid(pvt)) {
467 		edac_dbg(1, "  Dram Memory Hoisting is DISABLED on this node %d\n",
468 			 pvt->mc_node_id);
469 		return 1;
470 	}
471 
472 	/* This node has Memory Hoisting */
473 
474 	/* +------------------+--------------------+--------------------+-----
475 	 * | memory           | DRAM hole          | relocated          |
476 	 * | [0, (x - 1)]     | [x, 0xffffffff]    | addresses from     |
477 	 * |                  |                    | DRAM hole          |
478 	 * |                  |                    | [0x100000000,      |
479 	 * |                  |                    |  (0x100000000+     |
480 	 * |                  |                    |   (0xffffffff-x))] |
481 	 * +------------------+--------------------+--------------------+-----
482 	 *
483 	 * Above is a diagram of physical memory showing the DRAM hole and the
484 	 * relocated addresses from the DRAM hole.  As shown, the DRAM hole
485 	 * starts at address x (the base address) and extends through address
486 	 * 0xffffffff.  The DRAM Hole Address Register (DHAR) relocates the
487 	 * addresses in the hole so that they start at 0x100000000.
488 	 */
489 
490 	*hole_base = dhar_base(pvt);
491 	*hole_size = (1ULL << 32) - *hole_base;
492 
493 	*hole_offset = (pvt->fam > 0xf) ? f10_dhar_offset(pvt)
494 					: k8_dhar_offset(pvt);
495 
496 	edac_dbg(1, "  DHAR info for node %d base 0x%lx offset 0x%lx size 0x%lx\n",
497 		 pvt->mc_node_id, (unsigned long)*hole_base,
498 		 (unsigned long)*hole_offset, (unsigned long)*hole_size);
499 
500 	return 0;
501 }
502 EXPORT_SYMBOL_GPL(amd64_get_dram_hole_info);
503 
504 /*
505  * Return the DramAddr that the SysAddr given by @sys_addr maps to.  It is
506  * assumed that sys_addr maps to the node given by mci.
507  *
508  * The first part of section 3.4.4 (p. 70) shows how the DRAM Base (section
509  * 3.4.4.1) and DRAM Limit (section 3.4.4.2) registers are used to translate a
510  * SysAddr to a DramAddr. If the DRAM Hole Address Register (DHAR) is enabled,
511  * then it is also involved in translating a SysAddr to a DramAddr. Sections
512  * 3.4.8 and 3.5.8.2 describe the DHAR and how it is used for memory hoisting.
513  * These parts of the documentation are unclear. I interpret them as follows:
514  *
515  * When node n receives a SysAddr, it processes the SysAddr as follows:
516  *
517  * 1. It extracts the DRAMBase and DRAMLimit values from the DRAM Base and DRAM
518  *    Limit registers for node n. If the SysAddr is not within the range
519  *    specified by the base and limit values, then node n ignores the Sysaddr
520  *    (since it does not map to node n). Otherwise continue to step 2 below.
521  *
522  * 2. If the DramHoleValid bit of the DHAR for node n is clear, the DHAR is
523  *    disabled so skip to step 3 below. Otherwise see if the SysAddr is within
524  *    the range of relocated addresses (starting at 0x100000000) from the DRAM
525  *    hole. If not, skip to step 3 below. Else get the value of the
526  *    DramHoleOffset field from the DHAR. To obtain the DramAddr, subtract the
527  *    offset defined by this value from the SysAddr.
528  *
529  * 3. Obtain the base address for node n from the DRAMBase field of the DRAM
530  *    Base register for node n. To obtain the DramAddr, subtract the base
531  *    address from the SysAddr, as shown near the start of section 3.4.4 (p.70).
532  */
533 static u64 sys_addr_to_dram_addr(struct mem_ctl_info *mci, u64 sys_addr)
534 {
535 	struct amd64_pvt *pvt = mci->pvt_info;
536 	u64 dram_base, hole_base, hole_offset, hole_size, dram_addr;
537 	int ret;
538 
539 	dram_base = get_dram_base(pvt, pvt->mc_node_id);
540 
541 	ret = amd64_get_dram_hole_info(mci, &hole_base, &hole_offset,
542 				      &hole_size);
543 	if (!ret) {
544 		if ((sys_addr >= (1ULL << 32)) &&
545 		    (sys_addr < ((1ULL << 32) + hole_size))) {
546 			/* use DHAR to translate SysAddr to DramAddr */
547 			dram_addr = sys_addr - hole_offset;
548 
549 			edac_dbg(2, "using DHAR to translate SysAddr 0x%lx to DramAddr 0x%lx\n",
550 				 (unsigned long)sys_addr,
551 				 (unsigned long)dram_addr);
552 
553 			return dram_addr;
554 		}
555 	}
556 
557 	/*
558 	 * Translate the SysAddr to a DramAddr as shown near the start of
559 	 * section 3.4.4 (p. 70).  Although sys_addr is a 64-bit value, the k8
560 	 * only deals with 40-bit values.  Therefore we discard bits 63-40 of
561 	 * sys_addr below.  If bit 39 of sys_addr is 1 then the bits we
562 	 * discard are all 1s.  Otherwise the bits we discard are all 0s.  See
563 	 * section 3.4.2 of AMD publication 24592: AMD x86-64 Architecture
564 	 * Programmer's Manual Volume 1 Application Programming.
565 	 */
566 	dram_addr = (sys_addr & GENMASK_ULL(39, 0)) - dram_base;
567 
568 	edac_dbg(2, "using DRAM Base register to translate SysAddr 0x%lx to DramAddr 0x%lx\n",
569 		 (unsigned long)sys_addr, (unsigned long)dram_addr);
570 	return dram_addr;
571 }
572 
573 /*
574  * @intlv_en is the value of the IntlvEn field from a DRAM Base register
575  * (section 3.4.4.1).  Return the number of bits from a SysAddr that are used
576  * for node interleaving.
577  */
578 static int num_node_interleave_bits(unsigned intlv_en)
579 {
580 	static const int intlv_shift_table[] = { 0, 1, 0, 2, 0, 0, 0, 3 };
581 	int n;
582 
583 	BUG_ON(intlv_en > 7);
584 	n = intlv_shift_table[intlv_en];
585 	return n;
586 }
587 
588 /* Translate the DramAddr given by @dram_addr to an InputAddr. */
589 static u64 dram_addr_to_input_addr(struct mem_ctl_info *mci, u64 dram_addr)
590 {
591 	struct amd64_pvt *pvt;
592 	int intlv_shift;
593 	u64 input_addr;
594 
595 	pvt = mci->pvt_info;
596 
597 	/*
598 	 * See the start of section 3.4.4 (p. 70, BKDG #26094, K8, revA-E)
599 	 * concerning translating a DramAddr to an InputAddr.
600 	 */
601 	intlv_shift = num_node_interleave_bits(dram_intlv_en(pvt, 0));
602 	input_addr = ((dram_addr >> intlv_shift) & GENMASK_ULL(35, 12)) +
603 		      (dram_addr & 0xfff);
604 
605 	edac_dbg(2, "  Intlv Shift=%d DramAddr=0x%lx maps to InputAddr=0x%lx\n",
606 		 intlv_shift, (unsigned long)dram_addr,
607 		 (unsigned long)input_addr);
608 
609 	return input_addr;
610 }
611 
612 /*
613  * Translate the SysAddr represented by @sys_addr to an InputAddr.  It is
614  * assumed that @sys_addr maps to the node given by mci.
615  */
616 static u64 sys_addr_to_input_addr(struct mem_ctl_info *mci, u64 sys_addr)
617 {
618 	u64 input_addr;
619 
620 	input_addr =
621 	    dram_addr_to_input_addr(mci, sys_addr_to_dram_addr(mci, sys_addr));
622 
623 	edac_dbg(2, "SysAdddr 0x%lx translates to InputAddr 0x%lx\n",
624 		 (unsigned long)sys_addr, (unsigned long)input_addr);
625 
626 	return input_addr;
627 }
628 
629 /* Map the Error address to a PAGE and PAGE OFFSET. */
630 static inline void error_address_to_page_and_offset(u64 error_address,
631 						    struct err_info *err)
632 {
633 	err->page = (u32) (error_address >> PAGE_SHIFT);
634 	err->offset = ((u32) error_address) & ~PAGE_MASK;
635 }
636 
637 /*
638  * @sys_addr is an error address (a SysAddr) extracted from the MCA NB Address
639  * Low (section 3.6.4.5) and MCA NB Address High (section 3.6.4.6) registers
640  * of a node that detected an ECC memory error.  mci represents the node that
641  * the error address maps to (possibly different from the node that detected
642  * the error).  Return the number of the csrow that sys_addr maps to, or -1 on
643  * error.
644  */
645 static int sys_addr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr)
646 {
647 	int csrow;
648 
649 	csrow = input_addr_to_csrow(mci, sys_addr_to_input_addr(mci, sys_addr));
650 
651 	if (csrow == -1)
652 		amd64_mc_err(mci, "Failed to translate InputAddr to csrow for "
653 				  "address 0x%lx\n", (unsigned long)sys_addr);
654 	return csrow;
655 }
656 
657 static int get_channel_from_ecc_syndrome(struct mem_ctl_info *, u16);
658 
659 /*
660  * Determine if the DIMMs have ECC enabled. ECC is enabled ONLY if all the DIMMs
661  * are ECC capable.
662  */
663 static unsigned long amd64_determine_edac_cap(struct amd64_pvt *pvt)
664 {
665 	u8 bit;
666 	unsigned long edac_cap = EDAC_FLAG_NONE;
667 
668 	bit = (pvt->fam > 0xf || pvt->ext_model >= K8_REV_F)
669 		? 19
670 		: 17;
671 
672 	if (pvt->dclr0 & BIT(bit))
673 		edac_cap = EDAC_FLAG_SECDED;
674 
675 	return edac_cap;
676 }
677 
678 static void amd64_debug_display_dimm_sizes(struct amd64_pvt *, u8);
679 
680 static void amd64_dump_dramcfg_low(struct amd64_pvt *pvt, u32 dclr, int chan)
681 {
682 	edac_dbg(1, "F2x%d90 (DRAM Cfg Low): 0x%08x\n", chan, dclr);
683 
684 	edac_dbg(1, "  DIMM type: %sbuffered; all DIMMs support ECC: %s\n",
685 		 (dclr & BIT(16)) ?  "un" : "",
686 		 (dclr & BIT(19)) ? "yes" : "no");
687 
688 	edac_dbg(1, "  PAR/ERR parity: %s\n",
689 		 (dclr & BIT(8)) ?  "enabled" : "disabled");
690 
691 	if (pvt->fam == 0x10)
692 		edac_dbg(1, "  DCT 128bit mode width: %s\n",
693 			 (dclr & BIT(11)) ?  "128b" : "64b");
694 
695 	edac_dbg(1, "  x4 logical DIMMs present: L0: %s L1: %s L2: %s L3: %s\n",
696 		 (dclr & BIT(12)) ?  "yes" : "no",
697 		 (dclr & BIT(13)) ?  "yes" : "no",
698 		 (dclr & BIT(14)) ?  "yes" : "no",
699 		 (dclr & BIT(15)) ?  "yes" : "no");
700 }
701 
702 /* Display and decode various NB registers for debug purposes. */
703 static void dump_misc_regs(struct amd64_pvt *pvt)
704 {
705 	edac_dbg(1, "F3xE8 (NB Cap): 0x%08x\n", pvt->nbcap);
706 
707 	edac_dbg(1, "  NB two channel DRAM capable: %s\n",
708 		 (pvt->nbcap & NBCAP_DCT_DUAL) ? "yes" : "no");
709 
710 	edac_dbg(1, "  ECC capable: %s, ChipKill ECC capable: %s\n",
711 		 (pvt->nbcap & NBCAP_SECDED) ? "yes" : "no",
712 		 (pvt->nbcap & NBCAP_CHIPKILL) ? "yes" : "no");
713 
714 	amd64_dump_dramcfg_low(pvt, pvt->dclr0, 0);
715 
716 	edac_dbg(1, "F3xB0 (Online Spare): 0x%08x\n", pvt->online_spare);
717 
718 	edac_dbg(1, "F1xF0 (DRAM Hole Address): 0x%08x, base: 0x%08x, offset: 0x%08x\n",
719 		 pvt->dhar, dhar_base(pvt),
720 		 (pvt->fam == 0xf) ? k8_dhar_offset(pvt)
721 				   : f10_dhar_offset(pvt));
722 
723 	edac_dbg(1, "  DramHoleValid: %s\n", dhar_valid(pvt) ? "yes" : "no");
724 
725 	amd64_debug_display_dimm_sizes(pvt, 0);
726 
727 	/* everything below this point is Fam10h and above */
728 	if (pvt->fam == 0xf)
729 		return;
730 
731 	amd64_debug_display_dimm_sizes(pvt, 1);
732 
733 	amd64_info("using %s syndromes.\n", ((pvt->ecc_sym_sz == 8) ? "x8" : "x4"));
734 
735 	/* Only if NOT ganged does dclr1 have valid info */
736 	if (!dct_ganging_enabled(pvt))
737 		amd64_dump_dramcfg_low(pvt, pvt->dclr1, 1);
738 }
739 
740 /*
741  * See BKDG, F2x[1,0][5C:40], F2[1,0][6C:60]
742  */
743 static void prep_chip_selects(struct amd64_pvt *pvt)
744 {
745 	if (pvt->fam == 0xf && pvt->ext_model < K8_REV_F) {
746 		pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 8;
747 		pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 8;
748 	} else if (pvt->fam == 0x15 && pvt->model >= 0x30) {
749 		pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 4;
750 		pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 2;
751 	} else {
752 		pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 8;
753 		pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 4;
754 	}
755 }
756 
757 /*
758  * Function 2 Offset F10_DCSB0; read in the DCS Base and DCS Mask registers
759  */
760 static void read_dct_base_mask(struct amd64_pvt *pvt)
761 {
762 	int cs;
763 
764 	prep_chip_selects(pvt);
765 
766 	for_each_chip_select(cs, 0, pvt) {
767 		int reg0   = DCSB0 + (cs * 4);
768 		int reg1   = DCSB1 + (cs * 4);
769 		u32 *base0 = &pvt->csels[0].csbases[cs];
770 		u32 *base1 = &pvt->csels[1].csbases[cs];
771 
772 		if (!amd64_read_dct_pci_cfg(pvt, reg0, base0))
773 			edac_dbg(0, "  DCSB0[%d]=0x%08x reg: F2x%x\n",
774 				 cs, *base0, reg0);
775 
776 		if (pvt->fam == 0xf || dct_ganging_enabled(pvt))
777 			continue;
778 
779 		if (!amd64_read_dct_pci_cfg(pvt, reg1, base1))
780 			edac_dbg(0, "  DCSB1[%d]=0x%08x reg: F2x%x\n",
781 				 cs, *base1, reg1);
782 	}
783 
784 	for_each_chip_select_mask(cs, 0, pvt) {
785 		int reg0   = DCSM0 + (cs * 4);
786 		int reg1   = DCSM1 + (cs * 4);
787 		u32 *mask0 = &pvt->csels[0].csmasks[cs];
788 		u32 *mask1 = &pvt->csels[1].csmasks[cs];
789 
790 		if (!amd64_read_dct_pci_cfg(pvt, reg0, mask0))
791 			edac_dbg(0, "    DCSM0[%d]=0x%08x reg: F2x%x\n",
792 				 cs, *mask0, reg0);
793 
794 		if (pvt->fam == 0xf || dct_ganging_enabled(pvt))
795 			continue;
796 
797 		if (!amd64_read_dct_pci_cfg(pvt, reg1, mask1))
798 			edac_dbg(0, "    DCSM1[%d]=0x%08x reg: F2x%x\n",
799 				 cs, *mask1, reg1);
800 	}
801 }
802 
803 static enum mem_type amd64_determine_memory_type(struct amd64_pvt *pvt, int cs)
804 {
805 	enum mem_type type;
806 
807 	/* F15h supports only DDR3 */
808 	if (pvt->fam >= 0x15)
809 		type = (pvt->dclr0 & BIT(16)) ?	MEM_DDR3 : MEM_RDDR3;
810 	else if (pvt->fam == 0x10 || pvt->ext_model >= K8_REV_F) {
811 		if (pvt->dchr0 & DDR3_MODE)
812 			type = (pvt->dclr0 & BIT(16)) ?	MEM_DDR3 : MEM_RDDR3;
813 		else
814 			type = (pvt->dclr0 & BIT(16)) ? MEM_DDR2 : MEM_RDDR2;
815 	} else {
816 		type = (pvt->dclr0 & BIT(18)) ? MEM_DDR : MEM_RDDR;
817 	}
818 
819 	amd64_info("CS%d: %s\n", cs, edac_mem_types[type]);
820 
821 	return type;
822 }
823 
824 /* Get the number of DCT channels the memory controller is using. */
825 static int k8_early_channel_count(struct amd64_pvt *pvt)
826 {
827 	int flag;
828 
829 	if (pvt->ext_model >= K8_REV_F)
830 		/* RevF (NPT) and later */
831 		flag = pvt->dclr0 & WIDTH_128;
832 	else
833 		/* RevE and earlier */
834 		flag = pvt->dclr0 & REVE_WIDTH_128;
835 
836 	/* not used */
837 	pvt->dclr1 = 0;
838 
839 	return (flag) ? 2 : 1;
840 }
841 
842 /* On F10h and later ErrAddr is MC4_ADDR[47:1] */
843 static u64 get_error_address(struct amd64_pvt *pvt, struct mce *m)
844 {
845 	u64 addr;
846 	u8 start_bit = 1;
847 	u8 end_bit   = 47;
848 
849 	if (pvt->fam == 0xf) {
850 		start_bit = 3;
851 		end_bit   = 39;
852 	}
853 
854 	addr = m->addr & GENMASK_ULL(end_bit, start_bit);
855 
856 	/*
857 	 * Erratum 637 workaround
858 	 */
859 	if (pvt->fam == 0x15) {
860 		struct amd64_pvt *pvt;
861 		u64 cc6_base, tmp_addr;
862 		u32 tmp;
863 		u16 mce_nid;
864 		u8 intlv_en;
865 
866 		if ((addr & GENMASK_ULL(47, 24)) >> 24 != 0x00fdf7)
867 			return addr;
868 
869 		mce_nid	= amd_get_nb_id(m->extcpu);
870 		pvt	= mcis[mce_nid]->pvt_info;
871 
872 		amd64_read_pci_cfg(pvt->F1, DRAM_LOCAL_NODE_LIM, &tmp);
873 		intlv_en = tmp >> 21 & 0x7;
874 
875 		/* add [47:27] + 3 trailing bits */
876 		cc6_base  = (tmp & GENMASK_ULL(20, 0)) << 3;
877 
878 		/* reverse and add DramIntlvEn */
879 		cc6_base |= intlv_en ^ 0x7;
880 
881 		/* pin at [47:24] */
882 		cc6_base <<= 24;
883 
884 		if (!intlv_en)
885 			return cc6_base | (addr & GENMASK_ULL(23, 0));
886 
887 		amd64_read_pci_cfg(pvt->F1, DRAM_LOCAL_NODE_BASE, &tmp);
888 
889 							/* faster log2 */
890 		tmp_addr  = (addr & GENMASK_ULL(23, 12)) << __fls(intlv_en + 1);
891 
892 		/* OR DramIntlvSel into bits [14:12] */
893 		tmp_addr |= (tmp & GENMASK_ULL(23, 21)) >> 9;
894 
895 		/* add remaining [11:0] bits from original MC4_ADDR */
896 		tmp_addr |= addr & GENMASK_ULL(11, 0);
897 
898 		return cc6_base | tmp_addr;
899 	}
900 
901 	return addr;
902 }
903 
904 static struct pci_dev *pci_get_related_function(unsigned int vendor,
905 						unsigned int device,
906 						struct pci_dev *related)
907 {
908 	struct pci_dev *dev = NULL;
909 
910 	while ((dev = pci_get_device(vendor, device, dev))) {
911 		if (pci_domain_nr(dev->bus) == pci_domain_nr(related->bus) &&
912 		    (dev->bus->number == related->bus->number) &&
913 		    (PCI_SLOT(dev->devfn) == PCI_SLOT(related->devfn)))
914 			break;
915 	}
916 
917 	return dev;
918 }
919 
920 static void read_dram_base_limit_regs(struct amd64_pvt *pvt, unsigned range)
921 {
922 	struct amd_northbridge *nb;
923 	struct pci_dev *f1 = NULL;
924 	unsigned int pci_func;
925 	int off = range << 3;
926 	u32 llim;
927 
928 	amd64_read_pci_cfg(pvt->F1, DRAM_BASE_LO + off,  &pvt->ranges[range].base.lo);
929 	amd64_read_pci_cfg(pvt->F1, DRAM_LIMIT_LO + off, &pvt->ranges[range].lim.lo);
930 
931 	if (pvt->fam == 0xf)
932 		return;
933 
934 	if (!dram_rw(pvt, range))
935 		return;
936 
937 	amd64_read_pci_cfg(pvt->F1, DRAM_BASE_HI + off,  &pvt->ranges[range].base.hi);
938 	amd64_read_pci_cfg(pvt->F1, DRAM_LIMIT_HI + off, &pvt->ranges[range].lim.hi);
939 
940 	/* F15h: factor in CC6 save area by reading dst node's limit reg */
941 	if (pvt->fam != 0x15)
942 		return;
943 
944 	nb = node_to_amd_nb(dram_dst_node(pvt, range));
945 	if (WARN_ON(!nb))
946 		return;
947 
948 	pci_func = (pvt->model == 0x30) ? PCI_DEVICE_ID_AMD_15H_M30H_NB_F1
949 					: PCI_DEVICE_ID_AMD_15H_NB_F1;
950 
951 	f1 = pci_get_related_function(nb->misc->vendor, pci_func, nb->misc);
952 	if (WARN_ON(!f1))
953 		return;
954 
955 	amd64_read_pci_cfg(f1, DRAM_LOCAL_NODE_LIM, &llim);
956 
957 	pvt->ranges[range].lim.lo &= GENMASK_ULL(15, 0);
958 
959 				    /* {[39:27],111b} */
960 	pvt->ranges[range].lim.lo |= ((llim & 0x1fff) << 3 | 0x7) << 16;
961 
962 	pvt->ranges[range].lim.hi &= GENMASK_ULL(7, 0);
963 
964 				    /* [47:40] */
965 	pvt->ranges[range].lim.hi |= llim >> 13;
966 
967 	pci_dev_put(f1);
968 }
969 
970 static void k8_map_sysaddr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr,
971 				    struct err_info *err)
972 {
973 	struct amd64_pvt *pvt = mci->pvt_info;
974 
975 	error_address_to_page_and_offset(sys_addr, err);
976 
977 	/*
978 	 * Find out which node the error address belongs to. This may be
979 	 * different from the node that detected the error.
980 	 */
981 	err->src_mci = find_mc_by_sys_addr(mci, sys_addr);
982 	if (!err->src_mci) {
983 		amd64_mc_err(mci, "failed to map error addr 0x%lx to a node\n",
984 			     (unsigned long)sys_addr);
985 		err->err_code = ERR_NODE;
986 		return;
987 	}
988 
989 	/* Now map the sys_addr to a CSROW */
990 	err->csrow = sys_addr_to_csrow(err->src_mci, sys_addr);
991 	if (err->csrow < 0) {
992 		err->err_code = ERR_CSROW;
993 		return;
994 	}
995 
996 	/* CHIPKILL enabled */
997 	if (pvt->nbcfg & NBCFG_CHIPKILL) {
998 		err->channel = get_channel_from_ecc_syndrome(mci, err->syndrome);
999 		if (err->channel < 0) {
1000 			/*
1001 			 * Syndrome didn't map, so we don't know which of the
1002 			 * 2 DIMMs is in error. So we need to ID 'both' of them
1003 			 * as suspect.
1004 			 */
1005 			amd64_mc_warn(err->src_mci, "unknown syndrome 0x%04x - "
1006 				      "possible error reporting race\n",
1007 				      err->syndrome);
1008 			err->err_code = ERR_CHANNEL;
1009 			return;
1010 		}
1011 	} else {
1012 		/*
1013 		 * non-chipkill ecc mode
1014 		 *
1015 		 * The k8 documentation is unclear about how to determine the
1016 		 * channel number when using non-chipkill memory.  This method
1017 		 * was obtained from email communication with someone at AMD.
1018 		 * (Wish the email was placed in this comment - norsk)
1019 		 */
1020 		err->channel = ((sys_addr & BIT(3)) != 0);
1021 	}
1022 }
1023 
1024 static int ddr2_cs_size(unsigned i, bool dct_width)
1025 {
1026 	unsigned shift = 0;
1027 
1028 	if (i <= 2)
1029 		shift = i;
1030 	else if (!(i & 0x1))
1031 		shift = i >> 1;
1032 	else
1033 		shift = (i + 1) >> 1;
1034 
1035 	return 128 << (shift + !!dct_width);
1036 }
1037 
1038 static int k8_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
1039 				  unsigned cs_mode)
1040 {
1041 	u32 dclr = dct ? pvt->dclr1 : pvt->dclr0;
1042 
1043 	if (pvt->ext_model >= K8_REV_F) {
1044 		WARN_ON(cs_mode > 11);
1045 		return ddr2_cs_size(cs_mode, dclr & WIDTH_128);
1046 	}
1047 	else if (pvt->ext_model >= K8_REV_D) {
1048 		unsigned diff;
1049 		WARN_ON(cs_mode > 10);
1050 
1051 		/*
1052 		 * the below calculation, besides trying to win an obfuscated C
1053 		 * contest, maps cs_mode values to DIMM chip select sizes. The
1054 		 * mappings are:
1055 		 *
1056 		 * cs_mode	CS size (mb)
1057 		 * =======	============
1058 		 * 0		32
1059 		 * 1		64
1060 		 * 2		128
1061 		 * 3		128
1062 		 * 4		256
1063 		 * 5		512
1064 		 * 6		256
1065 		 * 7		512
1066 		 * 8		1024
1067 		 * 9		1024
1068 		 * 10		2048
1069 		 *
1070 		 * Basically, it calculates a value with which to shift the
1071 		 * smallest CS size of 32MB.
1072 		 *
1073 		 * ddr[23]_cs_size have a similar purpose.
1074 		 */
1075 		diff = cs_mode/3 + (unsigned)(cs_mode > 5);
1076 
1077 		return 32 << (cs_mode - diff);
1078 	}
1079 	else {
1080 		WARN_ON(cs_mode > 6);
1081 		return 32 << cs_mode;
1082 	}
1083 }
1084 
1085 /*
1086  * Get the number of DCT channels in use.
1087  *
1088  * Return:
1089  *	number of Memory Channels in operation
1090  * Pass back:
1091  *	contents of the DCL0_LOW register
1092  */
1093 static int f1x_early_channel_count(struct amd64_pvt *pvt)
1094 {
1095 	int i, j, channels = 0;
1096 
1097 	/* On F10h, if we are in 128 bit mode, then we are using 2 channels */
1098 	if (pvt->fam == 0x10 && (pvt->dclr0 & WIDTH_128))
1099 		return 2;
1100 
1101 	/*
1102 	 * Need to check if in unganged mode: In such, there are 2 channels,
1103 	 * but they are not in 128 bit mode and thus the above 'dclr0' status
1104 	 * bit will be OFF.
1105 	 *
1106 	 * Need to check DCT0[0] and DCT1[0] to see if only one of them has
1107 	 * their CSEnable bit on. If so, then SINGLE DIMM case.
1108 	 */
1109 	edac_dbg(0, "Data width is not 128 bits - need more decoding\n");
1110 
1111 	/*
1112 	 * Check DRAM Bank Address Mapping values for each DIMM to see if there
1113 	 * is more than just one DIMM present in unganged mode. Need to check
1114 	 * both controllers since DIMMs can be placed in either one.
1115 	 */
1116 	for (i = 0; i < 2; i++) {
1117 		u32 dbam = (i ? pvt->dbam1 : pvt->dbam0);
1118 
1119 		for (j = 0; j < 4; j++) {
1120 			if (DBAM_DIMM(j, dbam) > 0) {
1121 				channels++;
1122 				break;
1123 			}
1124 		}
1125 	}
1126 
1127 	if (channels > 2)
1128 		channels = 2;
1129 
1130 	amd64_info("MCT channel count: %d\n", channels);
1131 
1132 	return channels;
1133 }
1134 
1135 static int ddr3_cs_size(unsigned i, bool dct_width)
1136 {
1137 	unsigned shift = 0;
1138 	int cs_size = 0;
1139 
1140 	if (i == 0 || i == 3 || i == 4)
1141 		cs_size = -1;
1142 	else if (i <= 2)
1143 		shift = i;
1144 	else if (i == 12)
1145 		shift = 7;
1146 	else if (!(i & 0x1))
1147 		shift = i >> 1;
1148 	else
1149 		shift = (i + 1) >> 1;
1150 
1151 	if (cs_size != -1)
1152 		cs_size = (128 * (1 << !!dct_width)) << shift;
1153 
1154 	return cs_size;
1155 }
1156 
1157 static int f10_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
1158 				   unsigned cs_mode)
1159 {
1160 	u32 dclr = dct ? pvt->dclr1 : pvt->dclr0;
1161 
1162 	WARN_ON(cs_mode > 11);
1163 
1164 	if (pvt->dchr0 & DDR3_MODE || pvt->dchr1 & DDR3_MODE)
1165 		return ddr3_cs_size(cs_mode, dclr & WIDTH_128);
1166 	else
1167 		return ddr2_cs_size(cs_mode, dclr & WIDTH_128);
1168 }
1169 
1170 /*
1171  * F15h supports only 64bit DCT interfaces
1172  */
1173 static int f15_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
1174 				   unsigned cs_mode)
1175 {
1176 	WARN_ON(cs_mode > 12);
1177 
1178 	return ddr3_cs_size(cs_mode, false);
1179 }
1180 
1181 /*
1182  * F16h and F15h model 30h have only limited cs_modes.
1183  */
1184 static int f16_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
1185 				unsigned cs_mode)
1186 {
1187 	WARN_ON(cs_mode > 12);
1188 
1189 	if (cs_mode == 6 || cs_mode == 8 ||
1190 	    cs_mode == 9 || cs_mode == 12)
1191 		return -1;
1192 	else
1193 		return ddr3_cs_size(cs_mode, false);
1194 }
1195 
1196 static void read_dram_ctl_register(struct amd64_pvt *pvt)
1197 {
1198 
1199 	if (pvt->fam == 0xf)
1200 		return;
1201 
1202 	if (!amd64_read_dct_pci_cfg(pvt, DCT_SEL_LO, &pvt->dct_sel_lo)) {
1203 		edac_dbg(0, "F2x110 (DCTSelLow): 0x%08x, High range addrs at: 0x%x\n",
1204 			 pvt->dct_sel_lo, dct_sel_baseaddr(pvt));
1205 
1206 		edac_dbg(0, "  DCTs operate in %s mode\n",
1207 			 (dct_ganging_enabled(pvt) ? "ganged" : "unganged"));
1208 
1209 		if (!dct_ganging_enabled(pvt))
1210 			edac_dbg(0, "  Address range split per DCT: %s\n",
1211 				 (dct_high_range_enabled(pvt) ? "yes" : "no"));
1212 
1213 		edac_dbg(0, "  data interleave for ECC: %s, DRAM cleared since last warm reset: %s\n",
1214 			 (dct_data_intlv_enabled(pvt) ? "enabled" : "disabled"),
1215 			 (dct_memory_cleared(pvt) ? "yes" : "no"));
1216 
1217 		edac_dbg(0, "  channel interleave: %s, "
1218 			 "interleave bits selector: 0x%x\n",
1219 			 (dct_interleave_enabled(pvt) ? "enabled" : "disabled"),
1220 			 dct_sel_interleave_addr(pvt));
1221 	}
1222 
1223 	amd64_read_dct_pci_cfg(pvt, DCT_SEL_HI, &pvt->dct_sel_hi);
1224 }
1225 
1226 /*
1227  * Determine channel (DCT) based on the interleaving mode (see F15h M30h BKDG,
1228  * 2.10.12 Memory Interleaving Modes).
1229  */
1230 static u8 f15_m30h_determine_channel(struct amd64_pvt *pvt, u64 sys_addr,
1231 				     u8 intlv_en, int num_dcts_intlv,
1232 				     u32 dct_sel)
1233 {
1234 	u8 channel = 0;
1235 	u8 select;
1236 
1237 	if (!(intlv_en))
1238 		return (u8)(dct_sel);
1239 
1240 	if (num_dcts_intlv == 2) {
1241 		select = (sys_addr >> 8) & 0x3;
1242 		channel = select ? 0x3 : 0;
1243 	} else if (num_dcts_intlv == 4)
1244 		channel = (sys_addr >> 8) & 0x7;
1245 
1246 	return channel;
1247 }
1248 
1249 /*
1250  * Determine channel (DCT) based on the interleaving mode: F10h BKDG, 2.8.9 Memory
1251  * Interleaving Modes.
1252  */
1253 static u8 f1x_determine_channel(struct amd64_pvt *pvt, u64 sys_addr,
1254 				bool hi_range_sel, u8 intlv_en)
1255 {
1256 	u8 dct_sel_high = (pvt->dct_sel_lo >> 1) & 1;
1257 
1258 	if (dct_ganging_enabled(pvt))
1259 		return 0;
1260 
1261 	if (hi_range_sel)
1262 		return dct_sel_high;
1263 
1264 	/*
1265 	 * see F2x110[DctSelIntLvAddr] - channel interleave mode
1266 	 */
1267 	if (dct_interleave_enabled(pvt)) {
1268 		u8 intlv_addr = dct_sel_interleave_addr(pvt);
1269 
1270 		/* return DCT select function: 0=DCT0, 1=DCT1 */
1271 		if (!intlv_addr)
1272 			return sys_addr >> 6 & 1;
1273 
1274 		if (intlv_addr & 0x2) {
1275 			u8 shift = intlv_addr & 0x1 ? 9 : 6;
1276 			u32 temp = hweight_long((u32) ((sys_addr >> 16) & 0x1F)) % 2;
1277 
1278 			return ((sys_addr >> shift) & 1) ^ temp;
1279 		}
1280 
1281 		return (sys_addr >> (12 + hweight8(intlv_en))) & 1;
1282 	}
1283 
1284 	if (dct_high_range_enabled(pvt))
1285 		return ~dct_sel_high & 1;
1286 
1287 	return 0;
1288 }
1289 
1290 /* Convert the sys_addr to the normalized DCT address */
1291 static u64 f1x_get_norm_dct_addr(struct amd64_pvt *pvt, u8 range,
1292 				 u64 sys_addr, bool hi_rng,
1293 				 u32 dct_sel_base_addr)
1294 {
1295 	u64 chan_off;
1296 	u64 dram_base		= get_dram_base(pvt, range);
1297 	u64 hole_off		= f10_dhar_offset(pvt);
1298 	u64 dct_sel_base_off	= (pvt->dct_sel_hi & 0xFFFFFC00) << 16;
1299 
1300 	if (hi_rng) {
1301 		/*
1302 		 * if
1303 		 * base address of high range is below 4Gb
1304 		 * (bits [47:27] at [31:11])
1305 		 * DRAM address space on this DCT is hoisted above 4Gb	&&
1306 		 * sys_addr > 4Gb
1307 		 *
1308 		 *	remove hole offset from sys_addr
1309 		 * else
1310 		 *	remove high range offset from sys_addr
1311 		 */
1312 		if ((!(dct_sel_base_addr >> 16) ||
1313 		     dct_sel_base_addr < dhar_base(pvt)) &&
1314 		    dhar_valid(pvt) &&
1315 		    (sys_addr >= BIT_64(32)))
1316 			chan_off = hole_off;
1317 		else
1318 			chan_off = dct_sel_base_off;
1319 	} else {
1320 		/*
1321 		 * if
1322 		 * we have a valid hole		&&
1323 		 * sys_addr > 4Gb
1324 		 *
1325 		 *	remove hole
1326 		 * else
1327 		 *	remove dram base to normalize to DCT address
1328 		 */
1329 		if (dhar_valid(pvt) && (sys_addr >= BIT_64(32)))
1330 			chan_off = hole_off;
1331 		else
1332 			chan_off = dram_base;
1333 	}
1334 
1335 	return (sys_addr & GENMASK_ULL(47,6)) - (chan_off & GENMASK_ULL(47,23));
1336 }
1337 
1338 /*
1339  * checks if the csrow passed in is marked as SPARED, if so returns the new
1340  * spare row
1341  */
1342 static int f10_process_possible_spare(struct amd64_pvt *pvt, u8 dct, int csrow)
1343 {
1344 	int tmp_cs;
1345 
1346 	if (online_spare_swap_done(pvt, dct) &&
1347 	    csrow == online_spare_bad_dramcs(pvt, dct)) {
1348 
1349 		for_each_chip_select(tmp_cs, dct, pvt) {
1350 			if (chip_select_base(tmp_cs, dct, pvt) & 0x2) {
1351 				csrow = tmp_cs;
1352 				break;
1353 			}
1354 		}
1355 	}
1356 	return csrow;
1357 }
1358 
1359 /*
1360  * Iterate over the DRAM DCT "base" and "mask" registers looking for a
1361  * SystemAddr match on the specified 'ChannelSelect' and 'NodeID'
1362  *
1363  * Return:
1364  *	-EINVAL:  NOT FOUND
1365  *	0..csrow = Chip-Select Row
1366  */
1367 static int f1x_lookup_addr_in_dct(u64 in_addr, u8 nid, u8 dct)
1368 {
1369 	struct mem_ctl_info *mci;
1370 	struct amd64_pvt *pvt;
1371 	u64 cs_base, cs_mask;
1372 	int cs_found = -EINVAL;
1373 	int csrow;
1374 
1375 	mci = mcis[nid];
1376 	if (!mci)
1377 		return cs_found;
1378 
1379 	pvt = mci->pvt_info;
1380 
1381 	edac_dbg(1, "input addr: 0x%llx, DCT: %d\n", in_addr, dct);
1382 
1383 	for_each_chip_select(csrow, dct, pvt) {
1384 		if (!csrow_enabled(csrow, dct, pvt))
1385 			continue;
1386 
1387 		get_cs_base_and_mask(pvt, csrow, dct, &cs_base, &cs_mask);
1388 
1389 		edac_dbg(1, "    CSROW=%d CSBase=0x%llx CSMask=0x%llx\n",
1390 			 csrow, cs_base, cs_mask);
1391 
1392 		cs_mask = ~cs_mask;
1393 
1394 		edac_dbg(1, "    (InputAddr & ~CSMask)=0x%llx (CSBase & ~CSMask)=0x%llx\n",
1395 			 (in_addr & cs_mask), (cs_base & cs_mask));
1396 
1397 		if ((in_addr & cs_mask) == (cs_base & cs_mask)) {
1398 			if (pvt->fam == 0x15 && pvt->model >= 0x30) {
1399 				cs_found =  csrow;
1400 				break;
1401 			}
1402 			cs_found = f10_process_possible_spare(pvt, dct, csrow);
1403 
1404 			edac_dbg(1, " MATCH csrow=%d\n", cs_found);
1405 			break;
1406 		}
1407 	}
1408 	return cs_found;
1409 }
1410 
1411 /*
1412  * See F2x10C. Non-interleaved graphics framebuffer memory under the 16G is
1413  * swapped with a region located at the bottom of memory so that the GPU can use
1414  * the interleaved region and thus two channels.
1415  */
1416 static u64 f1x_swap_interleaved_region(struct amd64_pvt *pvt, u64 sys_addr)
1417 {
1418 	u32 swap_reg, swap_base, swap_limit, rgn_size, tmp_addr;
1419 
1420 	if (pvt->fam == 0x10) {
1421 		/* only revC3 and revE have that feature */
1422 		if (pvt->model < 4 || (pvt->model < 0xa && pvt->stepping < 3))
1423 			return sys_addr;
1424 	}
1425 
1426 	amd64_read_dct_pci_cfg(pvt, SWAP_INTLV_REG, &swap_reg);
1427 
1428 	if (!(swap_reg & 0x1))
1429 		return sys_addr;
1430 
1431 	swap_base	= (swap_reg >> 3) & 0x7f;
1432 	swap_limit	= (swap_reg >> 11) & 0x7f;
1433 	rgn_size	= (swap_reg >> 20) & 0x7f;
1434 	tmp_addr	= sys_addr >> 27;
1435 
1436 	if (!(sys_addr >> 34) &&
1437 	    (((tmp_addr >= swap_base) &&
1438 	     (tmp_addr <= swap_limit)) ||
1439 	     (tmp_addr < rgn_size)))
1440 		return sys_addr ^ (u64)swap_base << 27;
1441 
1442 	return sys_addr;
1443 }
1444 
1445 /* For a given @dram_range, check if @sys_addr falls within it. */
1446 static int f1x_match_to_this_node(struct amd64_pvt *pvt, unsigned range,
1447 				  u64 sys_addr, int *chan_sel)
1448 {
1449 	int cs_found = -EINVAL;
1450 	u64 chan_addr;
1451 	u32 dct_sel_base;
1452 	u8 channel;
1453 	bool high_range = false;
1454 
1455 	u8 node_id    = dram_dst_node(pvt, range);
1456 	u8 intlv_en   = dram_intlv_en(pvt, range);
1457 	u32 intlv_sel = dram_intlv_sel(pvt, range);
1458 
1459 	edac_dbg(1, "(range %d) SystemAddr= 0x%llx Limit=0x%llx\n",
1460 		 range, sys_addr, get_dram_limit(pvt, range));
1461 
1462 	if (dhar_valid(pvt) &&
1463 	    dhar_base(pvt) <= sys_addr &&
1464 	    sys_addr < BIT_64(32)) {
1465 		amd64_warn("Huh? Address is in the MMIO hole: 0x%016llx\n",
1466 			    sys_addr);
1467 		return -EINVAL;
1468 	}
1469 
1470 	if (intlv_en && (intlv_sel != ((sys_addr >> 12) & intlv_en)))
1471 		return -EINVAL;
1472 
1473 	sys_addr = f1x_swap_interleaved_region(pvt, sys_addr);
1474 
1475 	dct_sel_base = dct_sel_baseaddr(pvt);
1476 
1477 	/*
1478 	 * check whether addresses >= DctSelBaseAddr[47:27] are to be used to
1479 	 * select between DCT0 and DCT1.
1480 	 */
1481 	if (dct_high_range_enabled(pvt) &&
1482 	   !dct_ganging_enabled(pvt) &&
1483 	   ((sys_addr >> 27) >= (dct_sel_base >> 11)))
1484 		high_range = true;
1485 
1486 	channel = f1x_determine_channel(pvt, sys_addr, high_range, intlv_en);
1487 
1488 	chan_addr = f1x_get_norm_dct_addr(pvt, range, sys_addr,
1489 					  high_range, dct_sel_base);
1490 
1491 	/* Remove node interleaving, see F1x120 */
1492 	if (intlv_en)
1493 		chan_addr = ((chan_addr >> (12 + hweight8(intlv_en))) << 12) |
1494 			    (chan_addr & 0xfff);
1495 
1496 	/* remove channel interleave */
1497 	if (dct_interleave_enabled(pvt) &&
1498 	   !dct_high_range_enabled(pvt) &&
1499 	   !dct_ganging_enabled(pvt)) {
1500 
1501 		if (dct_sel_interleave_addr(pvt) != 1) {
1502 			if (dct_sel_interleave_addr(pvt) == 0x3)
1503 				/* hash 9 */
1504 				chan_addr = ((chan_addr >> 10) << 9) |
1505 					     (chan_addr & 0x1ff);
1506 			else
1507 				/* A[6] or hash 6 */
1508 				chan_addr = ((chan_addr >> 7) << 6) |
1509 					     (chan_addr & 0x3f);
1510 		} else
1511 			/* A[12] */
1512 			chan_addr = ((chan_addr >> 13) << 12) |
1513 				     (chan_addr & 0xfff);
1514 	}
1515 
1516 	edac_dbg(1, "   Normalized DCT addr: 0x%llx\n", chan_addr);
1517 
1518 	cs_found = f1x_lookup_addr_in_dct(chan_addr, node_id, channel);
1519 
1520 	if (cs_found >= 0)
1521 		*chan_sel = channel;
1522 
1523 	return cs_found;
1524 }
1525 
1526 static int f15_m30h_match_to_this_node(struct amd64_pvt *pvt, unsigned range,
1527 					u64 sys_addr, int *chan_sel)
1528 {
1529 	int cs_found = -EINVAL;
1530 	int num_dcts_intlv = 0;
1531 	u64 chan_addr, chan_offset;
1532 	u64 dct_base, dct_limit;
1533 	u32 dct_cont_base_reg, dct_cont_limit_reg, tmp;
1534 	u8 channel, alias_channel, leg_mmio_hole, dct_sel, dct_offset_en;
1535 
1536 	u64 dhar_offset		= f10_dhar_offset(pvt);
1537 	u8 intlv_addr		= dct_sel_interleave_addr(pvt);
1538 	u8 node_id		= dram_dst_node(pvt, range);
1539 	u8 intlv_en		= dram_intlv_en(pvt, range);
1540 
1541 	amd64_read_pci_cfg(pvt->F1, DRAM_CONT_BASE, &dct_cont_base_reg);
1542 	amd64_read_pci_cfg(pvt->F1, DRAM_CONT_LIMIT, &dct_cont_limit_reg);
1543 
1544 	dct_offset_en		= (u8) ((dct_cont_base_reg >> 3) & BIT(0));
1545 	dct_sel			= (u8) ((dct_cont_base_reg >> 4) & 0x7);
1546 
1547 	edac_dbg(1, "(range %d) SystemAddr= 0x%llx Limit=0x%llx\n",
1548 		 range, sys_addr, get_dram_limit(pvt, range));
1549 
1550 	if (!(get_dram_base(pvt, range)  <= sys_addr) &&
1551 	    !(get_dram_limit(pvt, range) >= sys_addr))
1552 		return -EINVAL;
1553 
1554 	if (dhar_valid(pvt) &&
1555 	    dhar_base(pvt) <= sys_addr &&
1556 	    sys_addr < BIT_64(32)) {
1557 		amd64_warn("Huh? Address is in the MMIO hole: 0x%016llx\n",
1558 			    sys_addr);
1559 		return -EINVAL;
1560 	}
1561 
1562 	/* Verify sys_addr is within DCT Range. */
1563 	dct_base = (u64) dct_sel_baseaddr(pvt);
1564 	dct_limit = (dct_cont_limit_reg >> 11) & 0x1FFF;
1565 
1566 	if (!(dct_cont_base_reg & BIT(0)) &&
1567 	    !(dct_base <= (sys_addr >> 27) &&
1568 	      dct_limit >= (sys_addr >> 27)))
1569 		return -EINVAL;
1570 
1571 	/* Verify number of dct's that participate in channel interleaving. */
1572 	num_dcts_intlv = (int) hweight8(intlv_en);
1573 
1574 	if (!(num_dcts_intlv % 2 == 0) || (num_dcts_intlv > 4))
1575 		return -EINVAL;
1576 
1577 	channel = f15_m30h_determine_channel(pvt, sys_addr, intlv_en,
1578 					     num_dcts_intlv, dct_sel);
1579 
1580 	/* Verify we stay within the MAX number of channels allowed */
1581 	if (channel > 4 || channel < 0)
1582 		return -EINVAL;
1583 
1584 	leg_mmio_hole = (u8) (dct_cont_base_reg >> 1 & BIT(0));
1585 
1586 	/* Get normalized DCT addr */
1587 	if (leg_mmio_hole && (sys_addr >= BIT_64(32)))
1588 		chan_offset = dhar_offset;
1589 	else
1590 		chan_offset = dct_base << 27;
1591 
1592 	chan_addr = sys_addr - chan_offset;
1593 
1594 	/* remove channel interleave */
1595 	if (num_dcts_intlv == 2) {
1596 		if (intlv_addr == 0x4)
1597 			chan_addr = ((chan_addr >> 9) << 8) |
1598 						(chan_addr & 0xff);
1599 		else if (intlv_addr == 0x5)
1600 			chan_addr = ((chan_addr >> 10) << 9) |
1601 						(chan_addr & 0x1ff);
1602 		else
1603 			return -EINVAL;
1604 
1605 	} else if (num_dcts_intlv == 4) {
1606 		if (intlv_addr == 0x4)
1607 			chan_addr = ((chan_addr >> 10) << 8) |
1608 							(chan_addr & 0xff);
1609 		else if (intlv_addr == 0x5)
1610 			chan_addr = ((chan_addr >> 11) << 9) |
1611 							(chan_addr & 0x1ff);
1612 		else
1613 			return -EINVAL;
1614 	}
1615 
1616 	if (dct_offset_en) {
1617 		amd64_read_pci_cfg(pvt->F1,
1618 				   DRAM_CONT_HIGH_OFF + (int) channel * 4,
1619 				   &tmp);
1620 		chan_addr +=  (u64) ((tmp >> 11) & 0xfff) << 27;
1621 	}
1622 
1623 	f15h_select_dct(pvt, channel);
1624 
1625 	edac_dbg(1, "   Normalized DCT addr: 0x%llx\n", chan_addr);
1626 
1627 	/*
1628 	 * Find Chip select:
1629 	 * if channel = 3, then alias it to 1. This is because, in F15 M30h,
1630 	 * there is support for 4 DCT's, but only 2 are currently functional.
1631 	 * They are DCT0 and DCT3. But we have read all registers of DCT3 into
1632 	 * pvt->csels[1]. So we need to use '1' here to get correct info.
1633 	 * Refer F15 M30h BKDG Section 2.10 and 2.10.3 for clarifications.
1634 	 */
1635 	alias_channel =  (channel == 3) ? 1 : channel;
1636 
1637 	cs_found = f1x_lookup_addr_in_dct(chan_addr, node_id, alias_channel);
1638 
1639 	if (cs_found >= 0)
1640 		*chan_sel = alias_channel;
1641 
1642 	return cs_found;
1643 }
1644 
1645 static int f1x_translate_sysaddr_to_cs(struct amd64_pvt *pvt,
1646 					u64 sys_addr,
1647 					int *chan_sel)
1648 {
1649 	int cs_found = -EINVAL;
1650 	unsigned range;
1651 
1652 	for (range = 0; range < DRAM_RANGES; range++) {
1653 		if (!dram_rw(pvt, range))
1654 			continue;
1655 
1656 		if (pvt->fam == 0x15 && pvt->model >= 0x30)
1657 			cs_found = f15_m30h_match_to_this_node(pvt, range,
1658 							       sys_addr,
1659 							       chan_sel);
1660 
1661 		else if ((get_dram_base(pvt, range)  <= sys_addr) &&
1662 			 (get_dram_limit(pvt, range) >= sys_addr)) {
1663 			cs_found = f1x_match_to_this_node(pvt, range,
1664 							  sys_addr, chan_sel);
1665 			if (cs_found >= 0)
1666 				break;
1667 		}
1668 	}
1669 	return cs_found;
1670 }
1671 
1672 /*
1673  * For reference see "2.8.5 Routing DRAM Requests" in F10 BKDG. This code maps
1674  * a @sys_addr to NodeID, DCT (channel) and chip select (CSROW).
1675  *
1676  * The @sys_addr is usually an error address received from the hardware
1677  * (MCX_ADDR).
1678  */
1679 static void f1x_map_sysaddr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr,
1680 				     struct err_info *err)
1681 {
1682 	struct amd64_pvt *pvt = mci->pvt_info;
1683 
1684 	error_address_to_page_and_offset(sys_addr, err);
1685 
1686 	err->csrow = f1x_translate_sysaddr_to_cs(pvt, sys_addr, &err->channel);
1687 	if (err->csrow < 0) {
1688 		err->err_code = ERR_CSROW;
1689 		return;
1690 	}
1691 
1692 	/*
1693 	 * We need the syndromes for channel detection only when we're
1694 	 * ganged. Otherwise @chan should already contain the channel at
1695 	 * this point.
1696 	 */
1697 	if (dct_ganging_enabled(pvt))
1698 		err->channel = get_channel_from_ecc_syndrome(mci, err->syndrome);
1699 }
1700 
1701 /*
1702  * debug routine to display the memory sizes of all logical DIMMs and its
1703  * CSROWs
1704  */
1705 static void amd64_debug_display_dimm_sizes(struct amd64_pvt *pvt, u8 ctrl)
1706 {
1707 	int dimm, size0, size1;
1708 	u32 *dcsb = ctrl ? pvt->csels[1].csbases : pvt->csels[0].csbases;
1709 	u32 dbam  = ctrl ? pvt->dbam1 : pvt->dbam0;
1710 
1711 	if (pvt->fam == 0xf) {
1712 		/* K8 families < revF not supported yet */
1713 	       if (pvt->ext_model < K8_REV_F)
1714 			return;
1715 	       else
1716 		       WARN_ON(ctrl != 0);
1717 	}
1718 
1719 	dbam = (ctrl && !dct_ganging_enabled(pvt)) ? pvt->dbam1 : pvt->dbam0;
1720 	dcsb = (ctrl && !dct_ganging_enabled(pvt)) ? pvt->csels[1].csbases
1721 						   : pvt->csels[0].csbases;
1722 
1723 	edac_dbg(1, "F2x%d80 (DRAM Bank Address Mapping): 0x%08x\n",
1724 		 ctrl, dbam);
1725 
1726 	edac_printk(KERN_DEBUG, EDAC_MC, "DCT%d chip selects:\n", ctrl);
1727 
1728 	/* Dump memory sizes for DIMM and its CSROWs */
1729 	for (dimm = 0; dimm < 4; dimm++) {
1730 
1731 		size0 = 0;
1732 		if (dcsb[dimm*2] & DCSB_CS_ENABLE)
1733 			size0 = pvt->ops->dbam_to_cs(pvt, ctrl,
1734 						     DBAM_DIMM(dimm, dbam));
1735 
1736 		size1 = 0;
1737 		if (dcsb[dimm*2 + 1] & DCSB_CS_ENABLE)
1738 			size1 = pvt->ops->dbam_to_cs(pvt, ctrl,
1739 						     DBAM_DIMM(dimm, dbam));
1740 
1741 		amd64_info(EDAC_MC ": %d: %5dMB %d: %5dMB\n",
1742 				dimm * 2,     size0,
1743 				dimm * 2 + 1, size1);
1744 	}
1745 }
1746 
1747 static struct amd64_family_type amd64_family_types[] = {
1748 	[K8_CPUS] = {
1749 		.ctl_name = "K8",
1750 		.f1_id = PCI_DEVICE_ID_AMD_K8_NB_ADDRMAP,
1751 		.f3_id = PCI_DEVICE_ID_AMD_K8_NB_MISC,
1752 		.ops = {
1753 			.early_channel_count	= k8_early_channel_count,
1754 			.map_sysaddr_to_csrow	= k8_map_sysaddr_to_csrow,
1755 			.dbam_to_cs		= k8_dbam_to_chip_select,
1756 			.read_dct_pci_cfg	= k8_read_dct_pci_cfg,
1757 		}
1758 	},
1759 	[F10_CPUS] = {
1760 		.ctl_name = "F10h",
1761 		.f1_id = PCI_DEVICE_ID_AMD_10H_NB_MAP,
1762 		.f3_id = PCI_DEVICE_ID_AMD_10H_NB_MISC,
1763 		.ops = {
1764 			.early_channel_count	= f1x_early_channel_count,
1765 			.map_sysaddr_to_csrow	= f1x_map_sysaddr_to_csrow,
1766 			.dbam_to_cs		= f10_dbam_to_chip_select,
1767 			.read_dct_pci_cfg	= f10_read_dct_pci_cfg,
1768 		}
1769 	},
1770 	[F15_CPUS] = {
1771 		.ctl_name = "F15h",
1772 		.f1_id = PCI_DEVICE_ID_AMD_15H_NB_F1,
1773 		.f3_id = PCI_DEVICE_ID_AMD_15H_NB_F3,
1774 		.ops = {
1775 			.early_channel_count	= f1x_early_channel_count,
1776 			.map_sysaddr_to_csrow	= f1x_map_sysaddr_to_csrow,
1777 			.dbam_to_cs		= f15_dbam_to_chip_select,
1778 			.read_dct_pci_cfg	= f15_read_dct_pci_cfg,
1779 		}
1780 	},
1781 	[F15_M30H_CPUS] = {
1782 		.ctl_name = "F15h_M30h",
1783 		.f1_id = PCI_DEVICE_ID_AMD_15H_M30H_NB_F1,
1784 		.f3_id = PCI_DEVICE_ID_AMD_15H_M30H_NB_F3,
1785 		.ops = {
1786 			.early_channel_count	= f1x_early_channel_count,
1787 			.map_sysaddr_to_csrow	= f1x_map_sysaddr_to_csrow,
1788 			.dbam_to_cs		= f16_dbam_to_chip_select,
1789 			.read_dct_pci_cfg	= f15_read_dct_pci_cfg,
1790 		}
1791 	},
1792 	[F16_CPUS] = {
1793 		.ctl_name = "F16h",
1794 		.f1_id = PCI_DEVICE_ID_AMD_16H_NB_F1,
1795 		.f3_id = PCI_DEVICE_ID_AMD_16H_NB_F3,
1796 		.ops = {
1797 			.early_channel_count	= f1x_early_channel_count,
1798 			.map_sysaddr_to_csrow	= f1x_map_sysaddr_to_csrow,
1799 			.dbam_to_cs		= f16_dbam_to_chip_select,
1800 			.read_dct_pci_cfg	= f10_read_dct_pci_cfg,
1801 		}
1802 	},
1803 };
1804 
1805 /*
1806  * These are tables of eigenvectors (one per line) which can be used for the
1807  * construction of the syndrome tables. The modified syndrome search algorithm
1808  * uses those to find the symbol in error and thus the DIMM.
1809  *
1810  * Algorithm courtesy of Ross LaFetra from AMD.
1811  */
1812 static const u16 x4_vectors[] = {
1813 	0x2f57, 0x1afe, 0x66cc, 0xdd88,
1814 	0x11eb, 0x3396, 0x7f4c, 0xeac8,
1815 	0x0001, 0x0002, 0x0004, 0x0008,
1816 	0x1013, 0x3032, 0x4044, 0x8088,
1817 	0x106b, 0x30d6, 0x70fc, 0xe0a8,
1818 	0x4857, 0xc4fe, 0x13cc, 0x3288,
1819 	0x1ac5, 0x2f4a, 0x5394, 0xa1e8,
1820 	0x1f39, 0x251e, 0xbd6c, 0x6bd8,
1821 	0x15c1, 0x2a42, 0x89ac, 0x4758,
1822 	0x2b03, 0x1602, 0x4f0c, 0xca08,
1823 	0x1f07, 0x3a0e, 0x6b04, 0xbd08,
1824 	0x8ba7, 0x465e, 0x244c, 0x1cc8,
1825 	0x2b87, 0x164e, 0x642c, 0xdc18,
1826 	0x40b9, 0x80de, 0x1094, 0x20e8,
1827 	0x27db, 0x1eb6, 0x9dac, 0x7b58,
1828 	0x11c1, 0x2242, 0x84ac, 0x4c58,
1829 	0x1be5, 0x2d7a, 0x5e34, 0xa718,
1830 	0x4b39, 0x8d1e, 0x14b4, 0x28d8,
1831 	0x4c97, 0xc87e, 0x11fc, 0x33a8,
1832 	0x8e97, 0x497e, 0x2ffc, 0x1aa8,
1833 	0x16b3, 0x3d62, 0x4f34, 0x8518,
1834 	0x1e2f, 0x391a, 0x5cac, 0xf858,
1835 	0x1d9f, 0x3b7a, 0x572c, 0xfe18,
1836 	0x15f5, 0x2a5a, 0x5264, 0xa3b8,
1837 	0x1dbb, 0x3b66, 0x715c, 0xe3f8,
1838 	0x4397, 0xc27e, 0x17fc, 0x3ea8,
1839 	0x1617, 0x3d3e, 0x6464, 0xb8b8,
1840 	0x23ff, 0x12aa, 0xab6c, 0x56d8,
1841 	0x2dfb, 0x1ba6, 0x913c, 0x7328,
1842 	0x185d, 0x2ca6, 0x7914, 0x9e28,
1843 	0x171b, 0x3e36, 0x7d7c, 0xebe8,
1844 	0x4199, 0x82ee, 0x19f4, 0x2e58,
1845 	0x4807, 0xc40e, 0x130c, 0x3208,
1846 	0x1905, 0x2e0a, 0x5804, 0xac08,
1847 	0x213f, 0x132a, 0xadfc, 0x5ba8,
1848 	0x19a9, 0x2efe, 0xb5cc, 0x6f88,
1849 };
1850 
1851 static const u16 x8_vectors[] = {
1852 	0x0145, 0x028a, 0x2374, 0x43c8, 0xa1f0, 0x0520, 0x0a40, 0x1480,
1853 	0x0211, 0x0422, 0x0844, 0x1088, 0x01b0, 0x44e0, 0x23c0, 0xed80,
1854 	0x1011, 0x0116, 0x022c, 0x0458, 0x08b0, 0x8c60, 0x2740, 0x4e80,
1855 	0x0411, 0x0822, 0x1044, 0x0158, 0x02b0, 0x2360, 0x46c0, 0xab80,
1856 	0x0811, 0x1022, 0x012c, 0x0258, 0x04b0, 0x4660, 0x8cc0, 0x2780,
1857 	0x2071, 0x40e2, 0xa0c4, 0x0108, 0x0210, 0x0420, 0x0840, 0x1080,
1858 	0x4071, 0x80e2, 0x0104, 0x0208, 0x0410, 0x0820, 0x1040, 0x2080,
1859 	0x8071, 0x0102, 0x0204, 0x0408, 0x0810, 0x1020, 0x2040, 0x4080,
1860 	0x019d, 0x03d6, 0x136c, 0x2198, 0x50b0, 0xb2e0, 0x0740, 0x0e80,
1861 	0x0189, 0x03ea, 0x072c, 0x0e58, 0x1cb0, 0x56e0, 0x37c0, 0xf580,
1862 	0x01fd, 0x0376, 0x06ec, 0x0bb8, 0x1110, 0x2220, 0x4440, 0x8880,
1863 	0x0163, 0x02c6, 0x1104, 0x0758, 0x0eb0, 0x2be0, 0x6140, 0xc280,
1864 	0x02fd, 0x01c6, 0x0b5c, 0x1108, 0x07b0, 0x25a0, 0x8840, 0x6180,
1865 	0x0801, 0x012e, 0x025c, 0x04b8, 0x1370, 0x26e0, 0x57c0, 0xb580,
1866 	0x0401, 0x0802, 0x015c, 0x02b8, 0x22b0, 0x13e0, 0x7140, 0xe280,
1867 	0x0201, 0x0402, 0x0804, 0x01b8, 0x11b0, 0x31a0, 0x8040, 0x7180,
1868 	0x0101, 0x0202, 0x0404, 0x0808, 0x1010, 0x2020, 0x4040, 0x8080,
1869 	0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
1870 	0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000,
1871 };
1872 
1873 static int decode_syndrome(u16 syndrome, const u16 *vectors, unsigned num_vecs,
1874 			   unsigned v_dim)
1875 {
1876 	unsigned int i, err_sym;
1877 
1878 	for (err_sym = 0; err_sym < num_vecs / v_dim; err_sym++) {
1879 		u16 s = syndrome;
1880 		unsigned v_idx =  err_sym * v_dim;
1881 		unsigned v_end = (err_sym + 1) * v_dim;
1882 
1883 		/* walk over all 16 bits of the syndrome */
1884 		for (i = 1; i < (1U << 16); i <<= 1) {
1885 
1886 			/* if bit is set in that eigenvector... */
1887 			if (v_idx < v_end && vectors[v_idx] & i) {
1888 				u16 ev_comp = vectors[v_idx++];
1889 
1890 				/* ... and bit set in the modified syndrome, */
1891 				if (s & i) {
1892 					/* remove it. */
1893 					s ^= ev_comp;
1894 
1895 					if (!s)
1896 						return err_sym;
1897 				}
1898 
1899 			} else if (s & i)
1900 				/* can't get to zero, move to next symbol */
1901 				break;
1902 		}
1903 	}
1904 
1905 	edac_dbg(0, "syndrome(%x) not found\n", syndrome);
1906 	return -1;
1907 }
1908 
1909 static int map_err_sym_to_channel(int err_sym, int sym_size)
1910 {
1911 	if (sym_size == 4)
1912 		switch (err_sym) {
1913 		case 0x20:
1914 		case 0x21:
1915 			return 0;
1916 			break;
1917 		case 0x22:
1918 		case 0x23:
1919 			return 1;
1920 			break;
1921 		default:
1922 			return err_sym >> 4;
1923 			break;
1924 		}
1925 	/* x8 symbols */
1926 	else
1927 		switch (err_sym) {
1928 		/* imaginary bits not in a DIMM */
1929 		case 0x10:
1930 			WARN(1, KERN_ERR "Invalid error symbol: 0x%x\n",
1931 					  err_sym);
1932 			return -1;
1933 			break;
1934 
1935 		case 0x11:
1936 			return 0;
1937 			break;
1938 		case 0x12:
1939 			return 1;
1940 			break;
1941 		default:
1942 			return err_sym >> 3;
1943 			break;
1944 		}
1945 	return -1;
1946 }
1947 
1948 static int get_channel_from_ecc_syndrome(struct mem_ctl_info *mci, u16 syndrome)
1949 {
1950 	struct amd64_pvt *pvt = mci->pvt_info;
1951 	int err_sym = -1;
1952 
1953 	if (pvt->ecc_sym_sz == 8)
1954 		err_sym = decode_syndrome(syndrome, x8_vectors,
1955 					  ARRAY_SIZE(x8_vectors),
1956 					  pvt->ecc_sym_sz);
1957 	else if (pvt->ecc_sym_sz == 4)
1958 		err_sym = decode_syndrome(syndrome, x4_vectors,
1959 					  ARRAY_SIZE(x4_vectors),
1960 					  pvt->ecc_sym_sz);
1961 	else {
1962 		amd64_warn("Illegal syndrome type: %u\n", pvt->ecc_sym_sz);
1963 		return err_sym;
1964 	}
1965 
1966 	return map_err_sym_to_channel(err_sym, pvt->ecc_sym_sz);
1967 }
1968 
1969 static void __log_bus_error(struct mem_ctl_info *mci, struct err_info *err,
1970 			    u8 ecc_type)
1971 {
1972 	enum hw_event_mc_err_type err_type;
1973 	const char *string;
1974 
1975 	if (ecc_type == 2)
1976 		err_type = HW_EVENT_ERR_CORRECTED;
1977 	else if (ecc_type == 1)
1978 		err_type = HW_EVENT_ERR_UNCORRECTED;
1979 	else {
1980 		WARN(1, "Something is rotten in the state of Denmark.\n");
1981 		return;
1982 	}
1983 
1984 	switch (err->err_code) {
1985 	case DECODE_OK:
1986 		string = "";
1987 		break;
1988 	case ERR_NODE:
1989 		string = "Failed to map error addr to a node";
1990 		break;
1991 	case ERR_CSROW:
1992 		string = "Failed to map error addr to a csrow";
1993 		break;
1994 	case ERR_CHANNEL:
1995 		string = "unknown syndrome - possible error reporting race";
1996 		break;
1997 	default:
1998 		string = "WTF error";
1999 		break;
2000 	}
2001 
2002 	edac_mc_handle_error(err_type, mci, 1,
2003 			     err->page, err->offset, err->syndrome,
2004 			     err->csrow, err->channel, -1,
2005 			     string, "");
2006 }
2007 
2008 static inline void __amd64_decode_bus_error(struct mem_ctl_info *mci,
2009 					    struct mce *m)
2010 {
2011 	struct amd64_pvt *pvt = mci->pvt_info;
2012 	u8 ecc_type = (m->status >> 45) & 0x3;
2013 	u8 xec = XEC(m->status, 0x1f);
2014 	u16 ec = EC(m->status);
2015 	u64 sys_addr;
2016 	struct err_info err;
2017 
2018 	/* Bail out early if this was an 'observed' error */
2019 	if (PP(ec) == NBSL_PP_OBS)
2020 		return;
2021 
2022 	/* Do only ECC errors */
2023 	if (xec && xec != F10_NBSL_EXT_ERR_ECC)
2024 		return;
2025 
2026 	memset(&err, 0, sizeof(err));
2027 
2028 	sys_addr = get_error_address(pvt, m);
2029 
2030 	if (ecc_type == 2)
2031 		err.syndrome = extract_syndrome(m->status);
2032 
2033 	pvt->ops->map_sysaddr_to_csrow(mci, sys_addr, &err);
2034 
2035 	__log_bus_error(mci, &err, ecc_type);
2036 }
2037 
2038 void amd64_decode_bus_error(int node_id, struct mce *m)
2039 {
2040 	__amd64_decode_bus_error(mcis[node_id], m);
2041 }
2042 
2043 /*
2044  * Use pvt->F2 which contains the F2 CPU PCI device to get the related
2045  * F1 (AddrMap) and F3 (Misc) devices. Return negative value on error.
2046  */
2047 static int reserve_mc_sibling_devs(struct amd64_pvt *pvt, u16 f1_id, u16 f3_id)
2048 {
2049 	/* Reserve the ADDRESS MAP Device */
2050 	pvt->F1 = pci_get_related_function(pvt->F2->vendor, f1_id, pvt->F2);
2051 	if (!pvt->F1) {
2052 		amd64_err("error address map device not found: "
2053 			  "vendor %x device 0x%x (broken BIOS?)\n",
2054 			  PCI_VENDOR_ID_AMD, f1_id);
2055 		return -ENODEV;
2056 	}
2057 
2058 	/* Reserve the MISC Device */
2059 	pvt->F3 = pci_get_related_function(pvt->F2->vendor, f3_id, pvt->F2);
2060 	if (!pvt->F3) {
2061 		pci_dev_put(pvt->F1);
2062 		pvt->F1 = NULL;
2063 
2064 		amd64_err("error F3 device not found: "
2065 			  "vendor %x device 0x%x (broken BIOS?)\n",
2066 			  PCI_VENDOR_ID_AMD, f3_id);
2067 
2068 		return -ENODEV;
2069 	}
2070 	edac_dbg(1, "F1: %s\n", pci_name(pvt->F1));
2071 	edac_dbg(1, "F2: %s\n", pci_name(pvt->F2));
2072 	edac_dbg(1, "F3: %s\n", pci_name(pvt->F3));
2073 
2074 	return 0;
2075 }
2076 
2077 static void free_mc_sibling_devs(struct amd64_pvt *pvt)
2078 {
2079 	pci_dev_put(pvt->F1);
2080 	pci_dev_put(pvt->F3);
2081 }
2082 
2083 /*
2084  * Retrieve the hardware registers of the memory controller (this includes the
2085  * 'Address Map' and 'Misc' device regs)
2086  */
2087 static void read_mc_regs(struct amd64_pvt *pvt)
2088 {
2089 	unsigned range;
2090 	u64 msr_val;
2091 	u32 tmp;
2092 
2093 	/*
2094 	 * Retrieve TOP_MEM and TOP_MEM2; no masking off of reserved bits since
2095 	 * those are Read-As-Zero
2096 	 */
2097 	rdmsrl(MSR_K8_TOP_MEM1, pvt->top_mem);
2098 	edac_dbg(0, "  TOP_MEM:  0x%016llx\n", pvt->top_mem);
2099 
2100 	/* check first whether TOP_MEM2 is enabled */
2101 	rdmsrl(MSR_K8_SYSCFG, msr_val);
2102 	if (msr_val & (1U << 21)) {
2103 		rdmsrl(MSR_K8_TOP_MEM2, pvt->top_mem2);
2104 		edac_dbg(0, "  TOP_MEM2: 0x%016llx\n", pvt->top_mem2);
2105 	} else
2106 		edac_dbg(0, "  TOP_MEM2 disabled\n");
2107 
2108 	amd64_read_pci_cfg(pvt->F3, NBCAP, &pvt->nbcap);
2109 
2110 	read_dram_ctl_register(pvt);
2111 
2112 	for (range = 0; range < DRAM_RANGES; range++) {
2113 		u8 rw;
2114 
2115 		/* read settings for this DRAM range */
2116 		read_dram_base_limit_regs(pvt, range);
2117 
2118 		rw = dram_rw(pvt, range);
2119 		if (!rw)
2120 			continue;
2121 
2122 		edac_dbg(1, "  DRAM range[%d], base: 0x%016llx; limit: 0x%016llx\n",
2123 			 range,
2124 			 get_dram_base(pvt, range),
2125 			 get_dram_limit(pvt, range));
2126 
2127 		edac_dbg(1, "   IntlvEn=%s; Range access: %s%s IntlvSel=%d DstNode=%d\n",
2128 			 dram_intlv_en(pvt, range) ? "Enabled" : "Disabled",
2129 			 (rw & 0x1) ? "R" : "-",
2130 			 (rw & 0x2) ? "W" : "-",
2131 			 dram_intlv_sel(pvt, range),
2132 			 dram_dst_node(pvt, range));
2133 	}
2134 
2135 	read_dct_base_mask(pvt);
2136 
2137 	amd64_read_pci_cfg(pvt->F1, DHAR, &pvt->dhar);
2138 	amd64_read_dct_pci_cfg(pvt, DBAM0, &pvt->dbam0);
2139 
2140 	amd64_read_pci_cfg(pvt->F3, F10_ONLINE_SPARE, &pvt->online_spare);
2141 
2142 	amd64_read_dct_pci_cfg(pvt, DCLR0, &pvt->dclr0);
2143 	amd64_read_dct_pci_cfg(pvt, DCHR0, &pvt->dchr0);
2144 
2145 	if (!dct_ganging_enabled(pvt)) {
2146 		amd64_read_dct_pci_cfg(pvt, DCLR1, &pvt->dclr1);
2147 		amd64_read_dct_pci_cfg(pvt, DCHR1, &pvt->dchr1);
2148 	}
2149 
2150 	pvt->ecc_sym_sz = 4;
2151 
2152 	if (pvt->fam >= 0x10) {
2153 		amd64_read_pci_cfg(pvt->F3, EXT_NB_MCA_CFG, &tmp);
2154 		if (pvt->fam != 0x16)
2155 			/* F16h has only DCT0 */
2156 			amd64_read_dct_pci_cfg(pvt, DBAM1, &pvt->dbam1);
2157 
2158 		/* F10h, revD and later can do x8 ECC too */
2159 		if ((pvt->fam > 0x10 || pvt->model > 7) && tmp & BIT(25))
2160 			pvt->ecc_sym_sz = 8;
2161 	}
2162 	dump_misc_regs(pvt);
2163 }
2164 
2165 /*
2166  * NOTE: CPU Revision Dependent code
2167  *
2168  * Input:
2169  *	@csrow_nr ChipSelect Row Number (0..NUM_CHIPSELECTS-1)
2170  *	k8 private pointer to -->
2171  *			DRAM Bank Address mapping register
2172  *			node_id
2173  *			DCL register where dual_channel_active is
2174  *
2175  * The DBAM register consists of 4 sets of 4 bits each definitions:
2176  *
2177  * Bits:	CSROWs
2178  * 0-3		CSROWs 0 and 1
2179  * 4-7		CSROWs 2 and 3
2180  * 8-11		CSROWs 4 and 5
2181  * 12-15	CSROWs 6 and 7
2182  *
2183  * Values range from: 0 to 15
2184  * The meaning of the values depends on CPU revision and dual-channel state,
2185  * see relevant BKDG more info.
2186  *
2187  * The memory controller provides for total of only 8 CSROWs in its current
2188  * architecture. Each "pair" of CSROWs normally represents just one DIMM in
2189  * single channel or two (2) DIMMs in dual channel mode.
2190  *
2191  * The following code logic collapses the various tables for CSROW based on CPU
2192  * revision.
2193  *
2194  * Returns:
2195  *	The number of PAGE_SIZE pages on the specified CSROW number it
2196  *	encompasses
2197  *
2198  */
2199 static u32 amd64_csrow_nr_pages(struct amd64_pvt *pvt, u8 dct, int csrow_nr)
2200 {
2201 	u32 cs_mode, nr_pages;
2202 	u32 dbam = dct ? pvt->dbam1 : pvt->dbam0;
2203 
2204 
2205 	/*
2206 	 * The math on this doesn't look right on the surface because x/2*4 can
2207 	 * be simplified to x*2 but this expression makes use of the fact that
2208 	 * it is integral math where 1/2=0. This intermediate value becomes the
2209 	 * number of bits to shift the DBAM register to extract the proper CSROW
2210 	 * field.
2211 	 */
2212 	cs_mode = DBAM_DIMM(csrow_nr / 2, dbam);
2213 
2214 	nr_pages = pvt->ops->dbam_to_cs(pvt, dct, cs_mode) << (20 - PAGE_SHIFT);
2215 
2216 	edac_dbg(0, "csrow: %d, channel: %d, DBAM idx: %d\n",
2217 		    csrow_nr, dct,  cs_mode);
2218 	edac_dbg(0, "nr_pages/channel: %u\n", nr_pages);
2219 
2220 	return nr_pages;
2221 }
2222 
2223 /*
2224  * Initialize the array of csrow attribute instances, based on the values
2225  * from pci config hardware registers.
2226  */
2227 static int init_csrows(struct mem_ctl_info *mci)
2228 {
2229 	struct amd64_pvt *pvt = mci->pvt_info;
2230 	struct csrow_info *csrow;
2231 	struct dimm_info *dimm;
2232 	enum edac_type edac_mode;
2233 	enum mem_type mtype;
2234 	int i, j, empty = 1;
2235 	int nr_pages = 0;
2236 	u32 val;
2237 
2238 	amd64_read_pci_cfg(pvt->F3, NBCFG, &val);
2239 
2240 	pvt->nbcfg = val;
2241 
2242 	edac_dbg(0, "node %d, NBCFG=0x%08x[ChipKillEccCap: %d|DramEccEn: %d]\n",
2243 		 pvt->mc_node_id, val,
2244 		 !!(val & NBCFG_CHIPKILL), !!(val & NBCFG_ECC_ENABLE));
2245 
2246 	/*
2247 	 * We iterate over DCT0 here but we look at DCT1 in parallel, if needed.
2248 	 */
2249 	for_each_chip_select(i, 0, pvt) {
2250 		bool row_dct0 = !!csrow_enabled(i, 0, pvt);
2251 		bool row_dct1 = false;
2252 
2253 		if (pvt->fam != 0xf)
2254 			row_dct1 = !!csrow_enabled(i, 1, pvt);
2255 
2256 		if (!row_dct0 && !row_dct1)
2257 			continue;
2258 
2259 		csrow = mci->csrows[i];
2260 		empty = 0;
2261 
2262 		edac_dbg(1, "MC node: %d, csrow: %d\n",
2263 			    pvt->mc_node_id, i);
2264 
2265 		if (row_dct0) {
2266 			nr_pages = amd64_csrow_nr_pages(pvt, 0, i);
2267 			csrow->channels[0]->dimm->nr_pages = nr_pages;
2268 		}
2269 
2270 		/* K8 has only one DCT */
2271 		if (pvt->fam != 0xf && row_dct1) {
2272 			int row_dct1_pages = amd64_csrow_nr_pages(pvt, 1, i);
2273 
2274 			csrow->channels[1]->dimm->nr_pages = row_dct1_pages;
2275 			nr_pages += row_dct1_pages;
2276 		}
2277 
2278 		mtype = amd64_determine_memory_type(pvt, i);
2279 
2280 		edac_dbg(1, "Total csrow%d pages: %u\n", i, nr_pages);
2281 
2282 		/*
2283 		 * determine whether CHIPKILL or JUST ECC or NO ECC is operating
2284 		 */
2285 		if (pvt->nbcfg & NBCFG_ECC_ENABLE)
2286 			edac_mode = (pvt->nbcfg & NBCFG_CHIPKILL) ?
2287 				    EDAC_S4ECD4ED : EDAC_SECDED;
2288 		else
2289 			edac_mode = EDAC_NONE;
2290 
2291 		for (j = 0; j < pvt->channel_count; j++) {
2292 			dimm = csrow->channels[j]->dimm;
2293 			dimm->mtype = mtype;
2294 			dimm->edac_mode = edac_mode;
2295 		}
2296 	}
2297 
2298 	return empty;
2299 }
2300 
2301 /* get all cores on this DCT */
2302 static void get_cpus_on_this_dct_cpumask(struct cpumask *mask, u16 nid)
2303 {
2304 	int cpu;
2305 
2306 	for_each_online_cpu(cpu)
2307 		if (amd_get_nb_id(cpu) == nid)
2308 			cpumask_set_cpu(cpu, mask);
2309 }
2310 
2311 /* check MCG_CTL on all the cpus on this node */
2312 static bool amd64_nb_mce_bank_enabled_on_node(u16 nid)
2313 {
2314 	cpumask_var_t mask;
2315 	int cpu, nbe;
2316 	bool ret = false;
2317 
2318 	if (!zalloc_cpumask_var(&mask, GFP_KERNEL)) {
2319 		amd64_warn("%s: Error allocating mask\n", __func__);
2320 		return false;
2321 	}
2322 
2323 	get_cpus_on_this_dct_cpumask(mask, nid);
2324 
2325 	rdmsr_on_cpus(mask, MSR_IA32_MCG_CTL, msrs);
2326 
2327 	for_each_cpu(cpu, mask) {
2328 		struct msr *reg = per_cpu_ptr(msrs, cpu);
2329 		nbe = reg->l & MSR_MCGCTL_NBE;
2330 
2331 		edac_dbg(0, "core: %u, MCG_CTL: 0x%llx, NB MSR is %s\n",
2332 			 cpu, reg->q,
2333 			 (nbe ? "enabled" : "disabled"));
2334 
2335 		if (!nbe)
2336 			goto out;
2337 	}
2338 	ret = true;
2339 
2340 out:
2341 	free_cpumask_var(mask);
2342 	return ret;
2343 }
2344 
2345 static int toggle_ecc_err_reporting(struct ecc_settings *s, u16 nid, bool on)
2346 {
2347 	cpumask_var_t cmask;
2348 	int cpu;
2349 
2350 	if (!zalloc_cpumask_var(&cmask, GFP_KERNEL)) {
2351 		amd64_warn("%s: error allocating mask\n", __func__);
2352 		return false;
2353 	}
2354 
2355 	get_cpus_on_this_dct_cpumask(cmask, nid);
2356 
2357 	rdmsr_on_cpus(cmask, MSR_IA32_MCG_CTL, msrs);
2358 
2359 	for_each_cpu(cpu, cmask) {
2360 
2361 		struct msr *reg = per_cpu_ptr(msrs, cpu);
2362 
2363 		if (on) {
2364 			if (reg->l & MSR_MCGCTL_NBE)
2365 				s->flags.nb_mce_enable = 1;
2366 
2367 			reg->l |= MSR_MCGCTL_NBE;
2368 		} else {
2369 			/*
2370 			 * Turn off NB MCE reporting only when it was off before
2371 			 */
2372 			if (!s->flags.nb_mce_enable)
2373 				reg->l &= ~MSR_MCGCTL_NBE;
2374 		}
2375 	}
2376 	wrmsr_on_cpus(cmask, MSR_IA32_MCG_CTL, msrs);
2377 
2378 	free_cpumask_var(cmask);
2379 
2380 	return 0;
2381 }
2382 
2383 static bool enable_ecc_error_reporting(struct ecc_settings *s, u16 nid,
2384 				       struct pci_dev *F3)
2385 {
2386 	bool ret = true;
2387 	u32 value, mask = 0x3;		/* UECC/CECC enable */
2388 
2389 	if (toggle_ecc_err_reporting(s, nid, ON)) {
2390 		amd64_warn("Error enabling ECC reporting over MCGCTL!\n");
2391 		return false;
2392 	}
2393 
2394 	amd64_read_pci_cfg(F3, NBCTL, &value);
2395 
2396 	s->old_nbctl   = value & mask;
2397 	s->nbctl_valid = true;
2398 
2399 	value |= mask;
2400 	amd64_write_pci_cfg(F3, NBCTL, value);
2401 
2402 	amd64_read_pci_cfg(F3, NBCFG, &value);
2403 
2404 	edac_dbg(0, "1: node %d, NBCFG=0x%08x[DramEccEn: %d]\n",
2405 		 nid, value, !!(value & NBCFG_ECC_ENABLE));
2406 
2407 	if (!(value & NBCFG_ECC_ENABLE)) {
2408 		amd64_warn("DRAM ECC disabled on this node, enabling...\n");
2409 
2410 		s->flags.nb_ecc_prev = 0;
2411 
2412 		/* Attempt to turn on DRAM ECC Enable */
2413 		value |= NBCFG_ECC_ENABLE;
2414 		amd64_write_pci_cfg(F3, NBCFG, value);
2415 
2416 		amd64_read_pci_cfg(F3, NBCFG, &value);
2417 
2418 		if (!(value & NBCFG_ECC_ENABLE)) {
2419 			amd64_warn("Hardware rejected DRAM ECC enable,"
2420 				   "check memory DIMM configuration.\n");
2421 			ret = false;
2422 		} else {
2423 			amd64_info("Hardware accepted DRAM ECC Enable\n");
2424 		}
2425 	} else {
2426 		s->flags.nb_ecc_prev = 1;
2427 	}
2428 
2429 	edac_dbg(0, "2: node %d, NBCFG=0x%08x[DramEccEn: %d]\n",
2430 		 nid, value, !!(value & NBCFG_ECC_ENABLE));
2431 
2432 	return ret;
2433 }
2434 
2435 static void restore_ecc_error_reporting(struct ecc_settings *s, u16 nid,
2436 					struct pci_dev *F3)
2437 {
2438 	u32 value, mask = 0x3;		/* UECC/CECC enable */
2439 
2440 
2441 	if (!s->nbctl_valid)
2442 		return;
2443 
2444 	amd64_read_pci_cfg(F3, NBCTL, &value);
2445 	value &= ~mask;
2446 	value |= s->old_nbctl;
2447 
2448 	amd64_write_pci_cfg(F3, NBCTL, value);
2449 
2450 	/* restore previous BIOS DRAM ECC "off" setting we force-enabled */
2451 	if (!s->flags.nb_ecc_prev) {
2452 		amd64_read_pci_cfg(F3, NBCFG, &value);
2453 		value &= ~NBCFG_ECC_ENABLE;
2454 		amd64_write_pci_cfg(F3, NBCFG, value);
2455 	}
2456 
2457 	/* restore the NB Enable MCGCTL bit */
2458 	if (toggle_ecc_err_reporting(s, nid, OFF))
2459 		amd64_warn("Error restoring NB MCGCTL settings!\n");
2460 }
2461 
2462 /*
2463  * EDAC requires that the BIOS have ECC enabled before
2464  * taking over the processing of ECC errors. A command line
2465  * option allows to force-enable hardware ECC later in
2466  * enable_ecc_error_reporting().
2467  */
2468 static const char *ecc_msg =
2469 	"ECC disabled in the BIOS or no ECC capability, module will not load.\n"
2470 	" Either enable ECC checking or force module loading by setting "
2471 	"'ecc_enable_override'.\n"
2472 	" (Note that use of the override may cause unknown side effects.)\n";
2473 
2474 static bool ecc_enabled(struct pci_dev *F3, u16 nid)
2475 {
2476 	u32 value;
2477 	u8 ecc_en = 0;
2478 	bool nb_mce_en = false;
2479 
2480 	amd64_read_pci_cfg(F3, NBCFG, &value);
2481 
2482 	ecc_en = !!(value & NBCFG_ECC_ENABLE);
2483 	amd64_info("DRAM ECC %s.\n", (ecc_en ? "enabled" : "disabled"));
2484 
2485 	nb_mce_en = amd64_nb_mce_bank_enabled_on_node(nid);
2486 	if (!nb_mce_en)
2487 		amd64_notice("NB MCE bank disabled, set MSR "
2488 			     "0x%08x[4] on node %d to enable.\n",
2489 			     MSR_IA32_MCG_CTL, nid);
2490 
2491 	if (!ecc_en || !nb_mce_en) {
2492 		amd64_notice("%s", ecc_msg);
2493 		return false;
2494 	}
2495 	return true;
2496 }
2497 
2498 static int set_mc_sysfs_attrs(struct mem_ctl_info *mci)
2499 {
2500 	struct amd64_pvt *pvt = mci->pvt_info;
2501 	int rc;
2502 
2503 	rc = amd64_create_sysfs_dbg_files(mci);
2504 	if (rc < 0)
2505 		return rc;
2506 
2507 	if (pvt->fam >= 0x10) {
2508 		rc = amd64_create_sysfs_inject_files(mci);
2509 		if (rc < 0)
2510 			return rc;
2511 	}
2512 
2513 	return 0;
2514 }
2515 
2516 static void del_mc_sysfs_attrs(struct mem_ctl_info *mci)
2517 {
2518 	struct amd64_pvt *pvt = mci->pvt_info;
2519 
2520 	amd64_remove_sysfs_dbg_files(mci);
2521 
2522 	if (pvt->fam >= 0x10)
2523 		amd64_remove_sysfs_inject_files(mci);
2524 }
2525 
2526 static void setup_mci_misc_attrs(struct mem_ctl_info *mci,
2527 				 struct amd64_family_type *fam)
2528 {
2529 	struct amd64_pvt *pvt = mci->pvt_info;
2530 
2531 	mci->mtype_cap		= MEM_FLAG_DDR2 | MEM_FLAG_RDDR2;
2532 	mci->edac_ctl_cap	= EDAC_FLAG_NONE;
2533 
2534 	if (pvt->nbcap & NBCAP_SECDED)
2535 		mci->edac_ctl_cap |= EDAC_FLAG_SECDED;
2536 
2537 	if (pvt->nbcap & NBCAP_CHIPKILL)
2538 		mci->edac_ctl_cap |= EDAC_FLAG_S4ECD4ED;
2539 
2540 	mci->edac_cap		= amd64_determine_edac_cap(pvt);
2541 	mci->mod_name		= EDAC_MOD_STR;
2542 	mci->mod_ver		= EDAC_AMD64_VERSION;
2543 	mci->ctl_name		= fam->ctl_name;
2544 	mci->dev_name		= pci_name(pvt->F2);
2545 	mci->ctl_page_to_phys	= NULL;
2546 
2547 	/* memory scrubber interface */
2548 	mci->set_sdram_scrub_rate = amd64_set_scrub_rate;
2549 	mci->get_sdram_scrub_rate = amd64_get_scrub_rate;
2550 }
2551 
2552 /*
2553  * returns a pointer to the family descriptor on success, NULL otherwise.
2554  */
2555 static struct amd64_family_type *amd64_per_family_init(struct amd64_pvt *pvt)
2556 {
2557 	struct amd64_family_type *fam_type = NULL;
2558 
2559 	pvt->ext_model  = boot_cpu_data.x86_model >> 4;
2560 	pvt->stepping	= boot_cpu_data.x86_mask;
2561 	pvt->model	= boot_cpu_data.x86_model;
2562 	pvt->fam	= boot_cpu_data.x86;
2563 
2564 	switch (pvt->fam) {
2565 	case 0xf:
2566 		fam_type		= &amd64_family_types[K8_CPUS];
2567 		pvt->ops		= &amd64_family_types[K8_CPUS].ops;
2568 		break;
2569 
2570 	case 0x10:
2571 		fam_type		= &amd64_family_types[F10_CPUS];
2572 		pvt->ops		= &amd64_family_types[F10_CPUS].ops;
2573 		break;
2574 
2575 	case 0x15:
2576 		if (pvt->model == 0x30) {
2577 			fam_type	= &amd64_family_types[F15_M30H_CPUS];
2578 			pvt->ops	= &amd64_family_types[F15_M30H_CPUS].ops;
2579 			break;
2580 		}
2581 
2582 		fam_type		= &amd64_family_types[F15_CPUS];
2583 		pvt->ops		= &amd64_family_types[F15_CPUS].ops;
2584 		break;
2585 
2586 	case 0x16:
2587 		fam_type		= &amd64_family_types[F16_CPUS];
2588 		pvt->ops		= &amd64_family_types[F16_CPUS].ops;
2589 		break;
2590 
2591 	default:
2592 		amd64_err("Unsupported family!\n");
2593 		return NULL;
2594 	}
2595 
2596 	amd64_info("%s %sdetected (node %d).\n", fam_type->ctl_name,
2597 		     (pvt->fam == 0xf ?
2598 				(pvt->ext_model >= K8_REV_F  ? "revF or later "
2599 							     : "revE or earlier ")
2600 				 : ""), pvt->mc_node_id);
2601 	return fam_type;
2602 }
2603 
2604 static int amd64_init_one_instance(struct pci_dev *F2)
2605 {
2606 	struct amd64_pvt *pvt = NULL;
2607 	struct amd64_family_type *fam_type = NULL;
2608 	struct mem_ctl_info *mci = NULL;
2609 	struct edac_mc_layer layers[2];
2610 	int err = 0, ret;
2611 	u16 nid = amd_get_node_id(F2);
2612 
2613 	ret = -ENOMEM;
2614 	pvt = kzalloc(sizeof(struct amd64_pvt), GFP_KERNEL);
2615 	if (!pvt)
2616 		goto err_ret;
2617 
2618 	pvt->mc_node_id	= nid;
2619 	pvt->F2 = F2;
2620 
2621 	ret = -EINVAL;
2622 	fam_type = amd64_per_family_init(pvt);
2623 	if (!fam_type)
2624 		goto err_free;
2625 
2626 	ret = -ENODEV;
2627 	err = reserve_mc_sibling_devs(pvt, fam_type->f1_id, fam_type->f3_id);
2628 	if (err)
2629 		goto err_free;
2630 
2631 	read_mc_regs(pvt);
2632 
2633 	/*
2634 	 * We need to determine how many memory channels there are. Then use
2635 	 * that information for calculating the size of the dynamic instance
2636 	 * tables in the 'mci' structure.
2637 	 */
2638 	ret = -EINVAL;
2639 	pvt->channel_count = pvt->ops->early_channel_count(pvt);
2640 	if (pvt->channel_count < 0)
2641 		goto err_siblings;
2642 
2643 	ret = -ENOMEM;
2644 	layers[0].type = EDAC_MC_LAYER_CHIP_SELECT;
2645 	layers[0].size = pvt->csels[0].b_cnt;
2646 	layers[0].is_virt_csrow = true;
2647 	layers[1].type = EDAC_MC_LAYER_CHANNEL;
2648 
2649 	/*
2650 	 * Always allocate two channels since we can have setups with DIMMs on
2651 	 * only one channel. Also, this simplifies handling later for the price
2652 	 * of a couple of KBs tops.
2653 	 */
2654 	layers[1].size = 2;
2655 	layers[1].is_virt_csrow = false;
2656 
2657 	mci = edac_mc_alloc(nid, ARRAY_SIZE(layers), layers, 0);
2658 	if (!mci)
2659 		goto err_siblings;
2660 
2661 	mci->pvt_info = pvt;
2662 	mci->pdev = &pvt->F2->dev;
2663 
2664 	setup_mci_misc_attrs(mci, fam_type);
2665 
2666 	if (init_csrows(mci))
2667 		mci->edac_cap = EDAC_FLAG_NONE;
2668 
2669 	ret = -ENODEV;
2670 	if (edac_mc_add_mc(mci)) {
2671 		edac_dbg(1, "failed edac_mc_add_mc()\n");
2672 		goto err_add_mc;
2673 	}
2674 	if (set_mc_sysfs_attrs(mci)) {
2675 		edac_dbg(1, "failed edac_mc_add_mc()\n");
2676 		goto err_add_sysfs;
2677 	}
2678 
2679 	/* register stuff with EDAC MCE */
2680 	if (report_gart_errors)
2681 		amd_report_gart_errors(true);
2682 
2683 	amd_register_ecc_decoder(amd64_decode_bus_error);
2684 
2685 	mcis[nid] = mci;
2686 
2687 	atomic_inc(&drv_instances);
2688 
2689 	return 0;
2690 
2691 err_add_sysfs:
2692 	edac_mc_del_mc(mci->pdev);
2693 err_add_mc:
2694 	edac_mc_free(mci);
2695 
2696 err_siblings:
2697 	free_mc_sibling_devs(pvt);
2698 
2699 err_free:
2700 	kfree(pvt);
2701 
2702 err_ret:
2703 	return ret;
2704 }
2705 
2706 static int amd64_probe_one_instance(struct pci_dev *pdev,
2707 				    const struct pci_device_id *mc_type)
2708 {
2709 	u16 nid = amd_get_node_id(pdev);
2710 	struct pci_dev *F3 = node_to_amd_nb(nid)->misc;
2711 	struct ecc_settings *s;
2712 	int ret = 0;
2713 
2714 	ret = pci_enable_device(pdev);
2715 	if (ret < 0) {
2716 		edac_dbg(0, "ret=%d\n", ret);
2717 		return -EIO;
2718 	}
2719 
2720 	ret = -ENOMEM;
2721 	s = kzalloc(sizeof(struct ecc_settings), GFP_KERNEL);
2722 	if (!s)
2723 		goto err_out;
2724 
2725 	ecc_stngs[nid] = s;
2726 
2727 	if (!ecc_enabled(F3, nid)) {
2728 		ret = -ENODEV;
2729 
2730 		if (!ecc_enable_override)
2731 			goto err_enable;
2732 
2733 		amd64_warn("Forcing ECC on!\n");
2734 
2735 		if (!enable_ecc_error_reporting(s, nid, F3))
2736 			goto err_enable;
2737 	}
2738 
2739 	ret = amd64_init_one_instance(pdev);
2740 	if (ret < 0) {
2741 		amd64_err("Error probing instance: %d\n", nid);
2742 		restore_ecc_error_reporting(s, nid, F3);
2743 	}
2744 
2745 	return ret;
2746 
2747 err_enable:
2748 	kfree(s);
2749 	ecc_stngs[nid] = NULL;
2750 
2751 err_out:
2752 	return ret;
2753 }
2754 
2755 static void amd64_remove_one_instance(struct pci_dev *pdev)
2756 {
2757 	struct mem_ctl_info *mci;
2758 	struct amd64_pvt *pvt;
2759 	u16 nid = amd_get_node_id(pdev);
2760 	struct pci_dev *F3 = node_to_amd_nb(nid)->misc;
2761 	struct ecc_settings *s = ecc_stngs[nid];
2762 
2763 	mci = find_mci_by_dev(&pdev->dev);
2764 	WARN_ON(!mci);
2765 
2766 	del_mc_sysfs_attrs(mci);
2767 	/* Remove from EDAC CORE tracking list */
2768 	mci = edac_mc_del_mc(&pdev->dev);
2769 	if (!mci)
2770 		return;
2771 
2772 	pvt = mci->pvt_info;
2773 
2774 	restore_ecc_error_reporting(s, nid, F3);
2775 
2776 	free_mc_sibling_devs(pvt);
2777 
2778 	/* unregister from EDAC MCE */
2779 	amd_report_gart_errors(false);
2780 	amd_unregister_ecc_decoder(amd64_decode_bus_error);
2781 
2782 	kfree(ecc_stngs[nid]);
2783 	ecc_stngs[nid] = NULL;
2784 
2785 	/* Free the EDAC CORE resources */
2786 	mci->pvt_info = NULL;
2787 	mcis[nid] = NULL;
2788 
2789 	kfree(pvt);
2790 	edac_mc_free(mci);
2791 }
2792 
2793 /*
2794  * This table is part of the interface for loading drivers for PCI devices. The
2795  * PCI core identifies what devices are on a system during boot, and then
2796  * inquiry this table to see if this driver is for a given device found.
2797  */
2798 static DEFINE_PCI_DEVICE_TABLE(amd64_pci_table) = {
2799 	{
2800 		.vendor		= PCI_VENDOR_ID_AMD,
2801 		.device		= PCI_DEVICE_ID_AMD_K8_NB_MEMCTL,
2802 		.subvendor	= PCI_ANY_ID,
2803 		.subdevice	= PCI_ANY_ID,
2804 		.class		= 0,
2805 		.class_mask	= 0,
2806 	},
2807 	{
2808 		.vendor		= PCI_VENDOR_ID_AMD,
2809 		.device		= PCI_DEVICE_ID_AMD_10H_NB_DRAM,
2810 		.subvendor	= PCI_ANY_ID,
2811 		.subdevice	= PCI_ANY_ID,
2812 		.class		= 0,
2813 		.class_mask	= 0,
2814 	},
2815 	{
2816 		.vendor		= PCI_VENDOR_ID_AMD,
2817 		.device		= PCI_DEVICE_ID_AMD_15H_NB_F2,
2818 		.subvendor	= PCI_ANY_ID,
2819 		.subdevice	= PCI_ANY_ID,
2820 		.class		= 0,
2821 		.class_mask	= 0,
2822 	},
2823 	{
2824 		.vendor		= PCI_VENDOR_ID_AMD,
2825 		.device		= PCI_DEVICE_ID_AMD_15H_M30H_NB_F2,
2826 		.subvendor	= PCI_ANY_ID,
2827 		.subdevice	= PCI_ANY_ID,
2828 		.class		= 0,
2829 		.class_mask	= 0,
2830 	},
2831 	{
2832 		.vendor		= PCI_VENDOR_ID_AMD,
2833 		.device		= PCI_DEVICE_ID_AMD_16H_NB_F2,
2834 		.subvendor	= PCI_ANY_ID,
2835 		.subdevice	= PCI_ANY_ID,
2836 		.class		= 0,
2837 		.class_mask	= 0,
2838 	},
2839 
2840 	{0, }
2841 };
2842 MODULE_DEVICE_TABLE(pci, amd64_pci_table);
2843 
2844 static struct pci_driver amd64_pci_driver = {
2845 	.name		= EDAC_MOD_STR,
2846 	.probe		= amd64_probe_one_instance,
2847 	.remove		= amd64_remove_one_instance,
2848 	.id_table	= amd64_pci_table,
2849 };
2850 
2851 static void setup_pci_device(void)
2852 {
2853 	struct mem_ctl_info *mci;
2854 	struct amd64_pvt *pvt;
2855 
2856 	if (amd64_ctl_pci)
2857 		return;
2858 
2859 	mci = mcis[0];
2860 	if (mci) {
2861 
2862 		pvt = mci->pvt_info;
2863 		amd64_ctl_pci =
2864 			edac_pci_create_generic_ctl(&pvt->F2->dev, EDAC_MOD_STR);
2865 
2866 		if (!amd64_ctl_pci) {
2867 			pr_warning("%s(): Unable to create PCI control\n",
2868 				   __func__);
2869 
2870 			pr_warning("%s(): PCI error report via EDAC not set\n",
2871 				   __func__);
2872 			}
2873 	}
2874 }
2875 
2876 static int __init amd64_edac_init(void)
2877 {
2878 	int err = -ENODEV;
2879 
2880 	printk(KERN_INFO "AMD64 EDAC driver v%s\n", EDAC_AMD64_VERSION);
2881 
2882 	opstate_init();
2883 
2884 	if (amd_cache_northbridges() < 0)
2885 		goto err_ret;
2886 
2887 	err = -ENOMEM;
2888 	mcis	  = kzalloc(amd_nb_num() * sizeof(mcis[0]), GFP_KERNEL);
2889 	ecc_stngs = kzalloc(amd_nb_num() * sizeof(ecc_stngs[0]), GFP_KERNEL);
2890 	if (!(mcis && ecc_stngs))
2891 		goto err_free;
2892 
2893 	msrs = msrs_alloc();
2894 	if (!msrs)
2895 		goto err_free;
2896 
2897 	err = pci_register_driver(&amd64_pci_driver);
2898 	if (err)
2899 		goto err_pci;
2900 
2901 	err = -ENODEV;
2902 	if (!atomic_read(&drv_instances))
2903 		goto err_no_instances;
2904 
2905 	setup_pci_device();
2906 	return 0;
2907 
2908 err_no_instances:
2909 	pci_unregister_driver(&amd64_pci_driver);
2910 
2911 err_pci:
2912 	msrs_free(msrs);
2913 	msrs = NULL;
2914 
2915 err_free:
2916 	kfree(mcis);
2917 	mcis = NULL;
2918 
2919 	kfree(ecc_stngs);
2920 	ecc_stngs = NULL;
2921 
2922 err_ret:
2923 	return err;
2924 }
2925 
2926 static void __exit amd64_edac_exit(void)
2927 {
2928 	if (amd64_ctl_pci)
2929 		edac_pci_release_generic_ctl(amd64_ctl_pci);
2930 
2931 	pci_unregister_driver(&amd64_pci_driver);
2932 
2933 	kfree(ecc_stngs);
2934 	ecc_stngs = NULL;
2935 
2936 	kfree(mcis);
2937 	mcis = NULL;
2938 
2939 	msrs_free(msrs);
2940 	msrs = NULL;
2941 }
2942 
2943 module_init(amd64_edac_init);
2944 module_exit(amd64_edac_exit);
2945 
2946 MODULE_LICENSE("GPL");
2947 MODULE_AUTHOR("SoftwareBitMaker: Doug Thompson, "
2948 		"Dave Peterson, Thayne Harbaugh");
2949 MODULE_DESCRIPTION("MC support for AMD64 memory controllers - "
2950 		EDAC_AMD64_VERSION);
2951 
2952 module_param(edac_op_state, int, 0444);
2953 MODULE_PARM_DESC(edac_op_state, "EDAC Error Reporting state: 0=Poll,1=NMI");
2954