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