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