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