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