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