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