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