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