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