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