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