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