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