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