xref: /openbmc/linux/drivers/edac/amd64_edac.c (revision 8f84ae50)
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 	/* Asymmetric dual-rank DIMM support. */
1479 	if (csrow_sec_enabled(2 * dimm + 1, ctrl, pvt))
1480 		cs_mode |= CS_ODD_SECONDARY;
1481 
1482 	/*
1483 	 * 3 Rank inteleaving support.
1484 	 * There should be only three bases enabled and their two masks should
1485 	 * be equal.
1486 	 */
1487 	for_each_chip_select(base, ctrl, pvt)
1488 		count += csrow_enabled(base, ctrl, pvt);
1489 
1490 	if (count == 3 &&
1491 	    pvt->csels[ctrl].csmasks[0] == pvt->csels[ctrl].csmasks[1]) {
1492 		edac_dbg(1, "3R interleaving in use.\n");
1493 		cs_mode |= CS_3R_INTERLEAVE;
1494 	}
1495 
1496 	return cs_mode;
1497 }
1498 
__addr_mask_to_cs_size(u32 addr_mask_orig,unsigned int cs_mode,int csrow_nr,int dimm)1499 static int __addr_mask_to_cs_size(u32 addr_mask_orig, unsigned int cs_mode,
1500 				  int csrow_nr, int dimm)
1501 {
1502 	u32 msb, weight, num_zero_bits;
1503 	u32 addr_mask_deinterleaved;
1504 	int size = 0;
1505 
1506 	/*
1507 	 * The number of zero bits in the mask is equal to the number of bits
1508 	 * in a full mask minus the number of bits in the current mask.
1509 	 *
1510 	 * The MSB is the number of bits in the full mask because BIT[0] is
1511 	 * always 0.
1512 	 *
1513 	 * In the special 3 Rank interleaving case, a single bit is flipped
1514 	 * without swapping with the most significant bit. This can be handled
1515 	 * by keeping the MSB where it is and ignoring the single zero bit.
1516 	 */
1517 	msb = fls(addr_mask_orig) - 1;
1518 	weight = hweight_long(addr_mask_orig);
1519 	num_zero_bits = msb - weight - !!(cs_mode & CS_3R_INTERLEAVE);
1520 
1521 	/* Take the number of zero bits off from the top of the mask. */
1522 	addr_mask_deinterleaved = GENMASK_ULL(msb - num_zero_bits, 1);
1523 
1524 	edac_dbg(1, "CS%d DIMM%d AddrMasks:\n", csrow_nr, dimm);
1525 	edac_dbg(1, "  Original AddrMask: 0x%x\n", addr_mask_orig);
1526 	edac_dbg(1, "  Deinterleaved AddrMask: 0x%x\n", addr_mask_deinterleaved);
1527 
1528 	/* Register [31:1] = Address [39:9]. Size is in kBs here. */
1529 	size = (addr_mask_deinterleaved >> 2) + 1;
1530 
1531 	/* Return size in MBs. */
1532 	return size >> 10;
1533 }
1534 
umc_addr_mask_to_cs_size(struct amd64_pvt * pvt,u8 umc,unsigned int cs_mode,int csrow_nr)1535 static int umc_addr_mask_to_cs_size(struct amd64_pvt *pvt, u8 umc,
1536 				    unsigned int cs_mode, int csrow_nr)
1537 {
1538 	int cs_mask_nr = csrow_nr;
1539 	u32 addr_mask_orig;
1540 	int dimm, size = 0;
1541 
1542 	/* No Chip Selects are enabled. */
1543 	if (!cs_mode)
1544 		return size;
1545 
1546 	/* Requested size of an even CS but none are enabled. */
1547 	if (!(cs_mode & CS_EVEN) && !(csrow_nr & 1))
1548 		return size;
1549 
1550 	/* Requested size of an odd CS but none are enabled. */
1551 	if (!(cs_mode & CS_ODD) && (csrow_nr & 1))
1552 		return size;
1553 
1554 	/*
1555 	 * Family 17h introduced systems with one mask per DIMM,
1556 	 * and two Chip Selects per DIMM.
1557 	 *
1558 	 *	CS0 and CS1 -> MASK0 / DIMM0
1559 	 *	CS2 and CS3 -> MASK1 / DIMM1
1560 	 *
1561 	 * Family 19h Model 10h introduced systems with one mask per Chip Select,
1562 	 * and two Chip Selects per DIMM.
1563 	 *
1564 	 *	CS0 -> MASK0 -> DIMM0
1565 	 *	CS1 -> MASK1 -> DIMM0
1566 	 *	CS2 -> MASK2 -> DIMM1
1567 	 *	CS3 -> MASK3 -> DIMM1
1568 	 *
1569 	 * Keep the mask number equal to the Chip Select number for newer systems,
1570 	 * and shift the mask number for older systems.
1571 	 */
1572 	dimm = csrow_nr >> 1;
1573 
1574 	if (!pvt->flags.zn_regs_v2)
1575 		cs_mask_nr >>= 1;
1576 
1577 	/* Asymmetric dual-rank DIMM support. */
1578 	if ((csrow_nr & 1) && (cs_mode & CS_ODD_SECONDARY))
1579 		addr_mask_orig = pvt->csels[umc].csmasks_sec[cs_mask_nr];
1580 	else
1581 		addr_mask_orig = pvt->csels[umc].csmasks[cs_mask_nr];
1582 
1583 	return __addr_mask_to_cs_size(addr_mask_orig, cs_mode, csrow_nr, dimm);
1584 }
1585 
umc_debug_display_dimm_sizes(struct amd64_pvt * pvt,u8 ctrl)1586 static void umc_debug_display_dimm_sizes(struct amd64_pvt *pvt, u8 ctrl)
1587 {
1588 	int dimm, size0, size1, cs0, cs1, cs_mode;
1589 
1590 	edac_printk(KERN_DEBUG, EDAC_MC, "UMC%d chip selects:\n", ctrl);
1591 
1592 	for (dimm = 0; dimm < 2; dimm++) {
1593 		cs0 = dimm * 2;
1594 		cs1 = dimm * 2 + 1;
1595 
1596 		cs_mode = umc_get_cs_mode(dimm, ctrl, pvt);
1597 
1598 		size0 = umc_addr_mask_to_cs_size(pvt, ctrl, cs_mode, cs0);
1599 		size1 = umc_addr_mask_to_cs_size(pvt, ctrl, cs_mode, cs1);
1600 
1601 		amd64_info(EDAC_MC ": %d: %5dMB %d: %5dMB\n",
1602 				cs0,	size0,
1603 				cs1,	size1);
1604 	}
1605 }
1606 
umc_dump_misc_regs(struct amd64_pvt * pvt)1607 static void umc_dump_misc_regs(struct amd64_pvt *pvt)
1608 {
1609 	struct amd64_umc *umc;
1610 	u32 i, tmp, umc_base;
1611 
1612 	for_each_umc(i) {
1613 		umc_base = get_umc_base(i);
1614 		umc = &pvt->umc[i];
1615 
1616 		edac_dbg(1, "UMC%d DIMM cfg: 0x%x\n", i, umc->dimm_cfg);
1617 		edac_dbg(1, "UMC%d UMC cfg: 0x%x\n", i, umc->umc_cfg);
1618 		edac_dbg(1, "UMC%d SDP ctrl: 0x%x\n", i, umc->sdp_ctrl);
1619 		edac_dbg(1, "UMC%d ECC ctrl: 0x%x\n", i, umc->ecc_ctrl);
1620 
1621 		amd_smn_read(pvt->mc_node_id, umc_base + UMCCH_ECC_BAD_SYMBOL, &tmp);
1622 		edac_dbg(1, "UMC%d ECC bad symbol: 0x%x\n", i, tmp);
1623 
1624 		amd_smn_read(pvt->mc_node_id, umc_base + UMCCH_UMC_CAP, &tmp);
1625 		edac_dbg(1, "UMC%d UMC cap: 0x%x\n", i, tmp);
1626 		edac_dbg(1, "UMC%d UMC cap high: 0x%x\n", i, umc->umc_cap_hi);
1627 
1628 		edac_dbg(1, "UMC%d ECC capable: %s, ChipKill ECC capable: %s\n",
1629 				i, (umc->umc_cap_hi & BIT(30)) ? "yes" : "no",
1630 				    (umc->umc_cap_hi & BIT(31)) ? "yes" : "no");
1631 		edac_dbg(1, "UMC%d All DIMMs support ECC: %s\n",
1632 				i, (umc->umc_cfg & BIT(12)) ? "yes" : "no");
1633 		edac_dbg(1, "UMC%d x4 DIMMs present: %s\n",
1634 				i, (umc->dimm_cfg & BIT(6)) ? "yes" : "no");
1635 		edac_dbg(1, "UMC%d x16 DIMMs present: %s\n",
1636 				i, (umc->dimm_cfg & BIT(7)) ? "yes" : "no");
1637 
1638 		if (umc->dram_type == MEM_LRDDR4 || umc->dram_type == MEM_LRDDR5) {
1639 			amd_smn_read(pvt->mc_node_id,
1640 				     umc_base + get_umc_reg(pvt, UMCCH_ADDR_CFG),
1641 				     &tmp);
1642 			edac_dbg(1, "UMC%d LRDIMM %dx rank multiply\n",
1643 					i, 1 << ((tmp >> 4) & 0x3));
1644 		}
1645 
1646 		umc_debug_display_dimm_sizes(pvt, i);
1647 	}
1648 }
1649 
dct_dump_misc_regs(struct amd64_pvt * pvt)1650 static void dct_dump_misc_regs(struct amd64_pvt *pvt)
1651 {
1652 	edac_dbg(1, "F3xE8 (NB Cap): 0x%08x\n", pvt->nbcap);
1653 
1654 	edac_dbg(1, "  NB two channel DRAM capable: %s\n",
1655 		 (pvt->nbcap & NBCAP_DCT_DUAL) ? "yes" : "no");
1656 
1657 	edac_dbg(1, "  ECC capable: %s, ChipKill ECC capable: %s\n",
1658 		 (pvt->nbcap & NBCAP_SECDED) ? "yes" : "no",
1659 		 (pvt->nbcap & NBCAP_CHIPKILL) ? "yes" : "no");
1660 
1661 	debug_dump_dramcfg_low(pvt, pvt->dclr0, 0);
1662 
1663 	edac_dbg(1, "F3xB0 (Online Spare): 0x%08x\n", pvt->online_spare);
1664 
1665 	edac_dbg(1, "F1xF0 (DRAM Hole Address): 0x%08x, base: 0x%08x, offset: 0x%08x\n",
1666 		 pvt->dhar, dhar_base(pvt),
1667 		 (pvt->fam == 0xf) ? k8_dhar_offset(pvt)
1668 				   : f10_dhar_offset(pvt));
1669 
1670 	dct_debug_display_dimm_sizes(pvt, 0);
1671 
1672 	/* everything below this point is Fam10h and above */
1673 	if (pvt->fam == 0xf)
1674 		return;
1675 
1676 	dct_debug_display_dimm_sizes(pvt, 1);
1677 
1678 	/* Only if NOT ganged does dclr1 have valid info */
1679 	if (!dct_ganging_enabled(pvt))
1680 		debug_dump_dramcfg_low(pvt, pvt->dclr1, 1);
1681 
1682 	edac_dbg(1, "  DramHoleValid: %s\n", dhar_valid(pvt) ? "yes" : "no");
1683 
1684 	amd64_info("using x%u syndromes.\n", pvt->ecc_sym_sz);
1685 }
1686 
1687 /*
1688  * See BKDG, F2x[1,0][5C:40], F2[1,0][6C:60]
1689  */
dct_prep_chip_selects(struct amd64_pvt * pvt)1690 static void dct_prep_chip_selects(struct amd64_pvt *pvt)
1691 {
1692 	if (pvt->fam == 0xf && pvt->ext_model < K8_REV_F) {
1693 		pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 8;
1694 		pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 8;
1695 	} else if (pvt->fam == 0x15 && pvt->model == 0x30) {
1696 		pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 4;
1697 		pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 2;
1698 	} else {
1699 		pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 8;
1700 		pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 4;
1701 	}
1702 }
1703 
umc_prep_chip_selects(struct amd64_pvt * pvt)1704 static void umc_prep_chip_selects(struct amd64_pvt *pvt)
1705 {
1706 	int umc;
1707 
1708 	for_each_umc(umc) {
1709 		pvt->csels[umc].b_cnt = 4;
1710 		pvt->csels[umc].m_cnt = pvt->flags.zn_regs_v2 ? 4 : 2;
1711 	}
1712 }
1713 
umc_read_base_mask(struct amd64_pvt * pvt)1714 static void umc_read_base_mask(struct amd64_pvt *pvt)
1715 {
1716 	u32 umc_base_reg, umc_base_reg_sec;
1717 	u32 umc_mask_reg, umc_mask_reg_sec;
1718 	u32 base_reg, base_reg_sec;
1719 	u32 mask_reg, mask_reg_sec;
1720 	u32 *base, *base_sec;
1721 	u32 *mask, *mask_sec;
1722 	int cs, umc;
1723 
1724 	for_each_umc(umc) {
1725 		umc_base_reg = get_umc_base(umc) + UMCCH_BASE_ADDR;
1726 		umc_base_reg_sec = get_umc_base(umc) + UMCCH_BASE_ADDR_SEC;
1727 
1728 		for_each_chip_select(cs, umc, pvt) {
1729 			base = &pvt->csels[umc].csbases[cs];
1730 			base_sec = &pvt->csels[umc].csbases_sec[cs];
1731 
1732 			base_reg = umc_base_reg + (cs * 4);
1733 			base_reg_sec = umc_base_reg_sec + (cs * 4);
1734 
1735 			if (!amd_smn_read(pvt->mc_node_id, base_reg, base))
1736 				edac_dbg(0, "  DCSB%d[%d]=0x%08x reg: 0x%x\n",
1737 					 umc, cs, *base, base_reg);
1738 
1739 			if (!amd_smn_read(pvt->mc_node_id, base_reg_sec, base_sec))
1740 				edac_dbg(0, "    DCSB_SEC%d[%d]=0x%08x reg: 0x%x\n",
1741 					 umc, cs, *base_sec, base_reg_sec);
1742 		}
1743 
1744 		umc_mask_reg = get_umc_base(umc) + UMCCH_ADDR_MASK;
1745 		umc_mask_reg_sec = get_umc_base(umc) + get_umc_reg(pvt, UMCCH_ADDR_MASK_SEC);
1746 
1747 		for_each_chip_select_mask(cs, umc, pvt) {
1748 			mask = &pvt->csels[umc].csmasks[cs];
1749 			mask_sec = &pvt->csels[umc].csmasks_sec[cs];
1750 
1751 			mask_reg = umc_mask_reg + (cs * 4);
1752 			mask_reg_sec = umc_mask_reg_sec + (cs * 4);
1753 
1754 			if (!amd_smn_read(pvt->mc_node_id, mask_reg, mask))
1755 				edac_dbg(0, "  DCSM%d[%d]=0x%08x reg: 0x%x\n",
1756 					 umc, cs, *mask, mask_reg);
1757 
1758 			if (!amd_smn_read(pvt->mc_node_id, mask_reg_sec, mask_sec))
1759 				edac_dbg(0, "    DCSM_SEC%d[%d]=0x%08x reg: 0x%x\n",
1760 					 umc, cs, *mask_sec, mask_reg_sec);
1761 		}
1762 	}
1763 }
1764 
1765 /*
1766  * Function 2 Offset F10_DCSB0; read in the DCS Base and DCS Mask registers
1767  */
dct_read_base_mask(struct amd64_pvt * pvt)1768 static void dct_read_base_mask(struct amd64_pvt *pvt)
1769 {
1770 	int cs;
1771 
1772 	for_each_chip_select(cs, 0, pvt) {
1773 		int reg0   = DCSB0 + (cs * 4);
1774 		int reg1   = DCSB1 + (cs * 4);
1775 		u32 *base0 = &pvt->csels[0].csbases[cs];
1776 		u32 *base1 = &pvt->csels[1].csbases[cs];
1777 
1778 		if (!amd64_read_dct_pci_cfg(pvt, 0, reg0, base0))
1779 			edac_dbg(0, "  DCSB0[%d]=0x%08x reg: F2x%x\n",
1780 				 cs, *base0, reg0);
1781 
1782 		if (pvt->fam == 0xf)
1783 			continue;
1784 
1785 		if (!amd64_read_dct_pci_cfg(pvt, 1, reg0, base1))
1786 			edac_dbg(0, "  DCSB1[%d]=0x%08x reg: F2x%x\n",
1787 				 cs, *base1, (pvt->fam == 0x10) ? reg1
1788 							: reg0);
1789 	}
1790 
1791 	for_each_chip_select_mask(cs, 0, pvt) {
1792 		int reg0   = DCSM0 + (cs * 4);
1793 		int reg1   = DCSM1 + (cs * 4);
1794 		u32 *mask0 = &pvt->csels[0].csmasks[cs];
1795 		u32 *mask1 = &pvt->csels[1].csmasks[cs];
1796 
1797 		if (!amd64_read_dct_pci_cfg(pvt, 0, reg0, mask0))
1798 			edac_dbg(0, "    DCSM0[%d]=0x%08x reg: F2x%x\n",
1799 				 cs, *mask0, reg0);
1800 
1801 		if (pvt->fam == 0xf)
1802 			continue;
1803 
1804 		if (!amd64_read_dct_pci_cfg(pvt, 1, reg0, mask1))
1805 			edac_dbg(0, "    DCSM1[%d]=0x%08x reg: F2x%x\n",
1806 				 cs, *mask1, (pvt->fam == 0x10) ? reg1
1807 							: reg0);
1808 	}
1809 }
1810 
umc_determine_memory_type(struct amd64_pvt * pvt)1811 static void umc_determine_memory_type(struct amd64_pvt *pvt)
1812 {
1813 	struct amd64_umc *umc;
1814 	u32 i;
1815 
1816 	for_each_umc(i) {
1817 		umc = &pvt->umc[i];
1818 
1819 		if (!(umc->sdp_ctrl & UMC_SDP_INIT)) {
1820 			umc->dram_type = MEM_EMPTY;
1821 			continue;
1822 		}
1823 
1824 		/*
1825 		 * Check if the system supports the "DDR Type" field in UMC Config
1826 		 * and has DDR5 DIMMs in use.
1827 		 */
1828 		if (pvt->flags.zn_regs_v2 && ((umc->umc_cfg & GENMASK(2, 0)) == 0x1)) {
1829 			if (umc->dimm_cfg & BIT(5))
1830 				umc->dram_type = MEM_LRDDR5;
1831 			else if (umc->dimm_cfg & BIT(4))
1832 				umc->dram_type = MEM_RDDR5;
1833 			else
1834 				umc->dram_type = MEM_DDR5;
1835 		} else {
1836 			if (umc->dimm_cfg & BIT(5))
1837 				umc->dram_type = MEM_LRDDR4;
1838 			else if (umc->dimm_cfg & BIT(4))
1839 				umc->dram_type = MEM_RDDR4;
1840 			else
1841 				umc->dram_type = MEM_DDR4;
1842 		}
1843 
1844 		edac_dbg(1, "  UMC%d DIMM type: %s\n", i, edac_mem_types[umc->dram_type]);
1845 	}
1846 }
1847 
dct_determine_memory_type(struct amd64_pvt * pvt)1848 static void dct_determine_memory_type(struct amd64_pvt *pvt)
1849 {
1850 	u32 dram_ctrl, dcsm;
1851 
1852 	switch (pvt->fam) {
1853 	case 0xf:
1854 		if (pvt->ext_model >= K8_REV_F)
1855 			goto ddr3;
1856 
1857 		pvt->dram_type = (pvt->dclr0 & BIT(18)) ? MEM_DDR : MEM_RDDR;
1858 		return;
1859 
1860 	case 0x10:
1861 		if (pvt->dchr0 & DDR3_MODE)
1862 			goto ddr3;
1863 
1864 		pvt->dram_type = (pvt->dclr0 & BIT(16)) ? MEM_DDR2 : MEM_RDDR2;
1865 		return;
1866 
1867 	case 0x15:
1868 		if (pvt->model < 0x60)
1869 			goto ddr3;
1870 
1871 		/*
1872 		 * Model 0x60h needs special handling:
1873 		 *
1874 		 * We use a Chip Select value of '0' to obtain dcsm.
1875 		 * Theoretically, it is possible to populate LRDIMMs of different
1876 		 * 'Rank' value on a DCT. But this is not the common case. So,
1877 		 * it's reasonable to assume all DIMMs are going to be of same
1878 		 * 'type' until proven otherwise.
1879 		 */
1880 		amd64_read_dct_pci_cfg(pvt, 0, DRAM_CONTROL, &dram_ctrl);
1881 		dcsm = pvt->csels[0].csmasks[0];
1882 
1883 		if (((dram_ctrl >> 8) & 0x7) == 0x2)
1884 			pvt->dram_type = MEM_DDR4;
1885 		else if (pvt->dclr0 & BIT(16))
1886 			pvt->dram_type = MEM_DDR3;
1887 		else if (dcsm & 0x3)
1888 			pvt->dram_type = MEM_LRDDR3;
1889 		else
1890 			pvt->dram_type = MEM_RDDR3;
1891 
1892 		return;
1893 
1894 	case 0x16:
1895 		goto ddr3;
1896 
1897 	default:
1898 		WARN(1, KERN_ERR "%s: Family??? 0x%x\n", __func__, pvt->fam);
1899 		pvt->dram_type = MEM_EMPTY;
1900 	}
1901 
1902 	edac_dbg(1, "  DIMM type: %s\n", edac_mem_types[pvt->dram_type]);
1903 	return;
1904 
1905 ddr3:
1906 	pvt->dram_type = (pvt->dclr0 & BIT(16)) ? MEM_DDR3 : MEM_RDDR3;
1907 }
1908 
1909 /* On F10h and later ErrAddr is MC4_ADDR[47:1] */
get_error_address(struct amd64_pvt * pvt,struct mce * m)1910 static u64 get_error_address(struct amd64_pvt *pvt, struct mce *m)
1911 {
1912 	u16 mce_nid = topology_die_id(m->extcpu);
1913 	struct mem_ctl_info *mci;
1914 	u8 start_bit = 1;
1915 	u8 end_bit   = 47;
1916 	u64 addr;
1917 
1918 	mci = edac_mc_find(mce_nid);
1919 	if (!mci)
1920 		return 0;
1921 
1922 	pvt = mci->pvt_info;
1923 
1924 	if (pvt->fam == 0xf) {
1925 		start_bit = 3;
1926 		end_bit   = 39;
1927 	}
1928 
1929 	addr = m->addr & GENMASK_ULL(end_bit, start_bit);
1930 
1931 	/*
1932 	 * Erratum 637 workaround
1933 	 */
1934 	if (pvt->fam == 0x15) {
1935 		u64 cc6_base, tmp_addr;
1936 		u32 tmp;
1937 		u8 intlv_en;
1938 
1939 		if ((addr & GENMASK_ULL(47, 24)) >> 24 != 0x00fdf7)
1940 			return addr;
1941 
1942 
1943 		amd64_read_pci_cfg(pvt->F1, DRAM_LOCAL_NODE_LIM, &tmp);
1944 		intlv_en = tmp >> 21 & 0x7;
1945 
1946 		/* add [47:27] + 3 trailing bits */
1947 		cc6_base  = (tmp & GENMASK_ULL(20, 0)) << 3;
1948 
1949 		/* reverse and add DramIntlvEn */
1950 		cc6_base |= intlv_en ^ 0x7;
1951 
1952 		/* pin at [47:24] */
1953 		cc6_base <<= 24;
1954 
1955 		if (!intlv_en)
1956 			return cc6_base | (addr & GENMASK_ULL(23, 0));
1957 
1958 		amd64_read_pci_cfg(pvt->F1, DRAM_LOCAL_NODE_BASE, &tmp);
1959 
1960 							/* faster log2 */
1961 		tmp_addr  = (addr & GENMASK_ULL(23, 12)) << __fls(intlv_en + 1);
1962 
1963 		/* OR DramIntlvSel into bits [14:12] */
1964 		tmp_addr |= (tmp & GENMASK_ULL(23, 21)) >> 9;
1965 
1966 		/* add remaining [11:0] bits from original MC4_ADDR */
1967 		tmp_addr |= addr & GENMASK_ULL(11, 0);
1968 
1969 		return cc6_base | tmp_addr;
1970 	}
1971 
1972 	return addr;
1973 }
1974 
pci_get_related_function(unsigned int vendor,unsigned int device,struct pci_dev * related)1975 static struct pci_dev *pci_get_related_function(unsigned int vendor,
1976 						unsigned int device,
1977 						struct pci_dev *related)
1978 {
1979 	struct pci_dev *dev = NULL;
1980 
1981 	while ((dev = pci_get_device(vendor, device, dev))) {
1982 		if (pci_domain_nr(dev->bus) == pci_domain_nr(related->bus) &&
1983 		    (dev->bus->number == related->bus->number) &&
1984 		    (PCI_SLOT(dev->devfn) == PCI_SLOT(related->devfn)))
1985 			break;
1986 	}
1987 
1988 	return dev;
1989 }
1990 
read_dram_base_limit_regs(struct amd64_pvt * pvt,unsigned range)1991 static void read_dram_base_limit_regs(struct amd64_pvt *pvt, unsigned range)
1992 {
1993 	struct amd_northbridge *nb;
1994 	struct pci_dev *f1 = NULL;
1995 	unsigned int pci_func;
1996 	int off = range << 3;
1997 	u32 llim;
1998 
1999 	amd64_read_pci_cfg(pvt->F1, DRAM_BASE_LO + off,  &pvt->ranges[range].base.lo);
2000 	amd64_read_pci_cfg(pvt->F1, DRAM_LIMIT_LO + off, &pvt->ranges[range].lim.lo);
2001 
2002 	if (pvt->fam == 0xf)
2003 		return;
2004 
2005 	if (!dram_rw(pvt, range))
2006 		return;
2007 
2008 	amd64_read_pci_cfg(pvt->F1, DRAM_BASE_HI + off,  &pvt->ranges[range].base.hi);
2009 	amd64_read_pci_cfg(pvt->F1, DRAM_LIMIT_HI + off, &pvt->ranges[range].lim.hi);
2010 
2011 	/* F15h: factor in CC6 save area by reading dst node's limit reg */
2012 	if (pvt->fam != 0x15)
2013 		return;
2014 
2015 	nb = node_to_amd_nb(dram_dst_node(pvt, range));
2016 	if (WARN_ON(!nb))
2017 		return;
2018 
2019 	if (pvt->model == 0x60)
2020 		pci_func = PCI_DEVICE_ID_AMD_15H_M60H_NB_F1;
2021 	else if (pvt->model == 0x30)
2022 		pci_func = PCI_DEVICE_ID_AMD_15H_M30H_NB_F1;
2023 	else
2024 		pci_func = PCI_DEVICE_ID_AMD_15H_NB_F1;
2025 
2026 	f1 = pci_get_related_function(nb->misc->vendor, pci_func, nb->misc);
2027 	if (WARN_ON(!f1))
2028 		return;
2029 
2030 	amd64_read_pci_cfg(f1, DRAM_LOCAL_NODE_LIM, &llim);
2031 
2032 	pvt->ranges[range].lim.lo &= GENMASK_ULL(15, 0);
2033 
2034 				    /* {[39:27],111b} */
2035 	pvt->ranges[range].lim.lo |= ((llim & 0x1fff) << 3 | 0x7) << 16;
2036 
2037 	pvt->ranges[range].lim.hi &= GENMASK_ULL(7, 0);
2038 
2039 				    /* [47:40] */
2040 	pvt->ranges[range].lim.hi |= llim >> 13;
2041 
2042 	pci_dev_put(f1);
2043 }
2044 
k8_map_sysaddr_to_csrow(struct mem_ctl_info * mci,u64 sys_addr,struct err_info * err)2045 static void k8_map_sysaddr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr,
2046 				    struct err_info *err)
2047 {
2048 	struct amd64_pvt *pvt = mci->pvt_info;
2049 
2050 	error_address_to_page_and_offset(sys_addr, err);
2051 
2052 	/*
2053 	 * Find out which node the error address belongs to. This may be
2054 	 * different from the node that detected the error.
2055 	 */
2056 	err->src_mci = find_mc_by_sys_addr(mci, sys_addr);
2057 	if (!err->src_mci) {
2058 		amd64_mc_err(mci, "failed to map error addr 0x%lx to a node\n",
2059 			     (unsigned long)sys_addr);
2060 		err->err_code = ERR_NODE;
2061 		return;
2062 	}
2063 
2064 	/* Now map the sys_addr to a CSROW */
2065 	err->csrow = sys_addr_to_csrow(err->src_mci, sys_addr);
2066 	if (err->csrow < 0) {
2067 		err->err_code = ERR_CSROW;
2068 		return;
2069 	}
2070 
2071 	/* CHIPKILL enabled */
2072 	if (pvt->nbcfg & NBCFG_CHIPKILL) {
2073 		err->channel = get_channel_from_ecc_syndrome(mci, err->syndrome);
2074 		if (err->channel < 0) {
2075 			/*
2076 			 * Syndrome didn't map, so we don't know which of the
2077 			 * 2 DIMMs is in error. So we need to ID 'both' of them
2078 			 * as suspect.
2079 			 */
2080 			amd64_mc_warn(err->src_mci, "unknown syndrome 0x%04x - "
2081 				      "possible error reporting race\n",
2082 				      err->syndrome);
2083 			err->err_code = ERR_CHANNEL;
2084 			return;
2085 		}
2086 	} else {
2087 		/*
2088 		 * non-chipkill ecc mode
2089 		 *
2090 		 * The k8 documentation is unclear about how to determine the
2091 		 * channel number when using non-chipkill memory.  This method
2092 		 * was obtained from email communication with someone at AMD.
2093 		 * (Wish the email was placed in this comment - norsk)
2094 		 */
2095 		err->channel = ((sys_addr & BIT(3)) != 0);
2096 	}
2097 }
2098 
ddr2_cs_size(unsigned i,bool dct_width)2099 static int ddr2_cs_size(unsigned i, bool dct_width)
2100 {
2101 	unsigned shift = 0;
2102 
2103 	if (i <= 2)
2104 		shift = i;
2105 	else if (!(i & 0x1))
2106 		shift = i >> 1;
2107 	else
2108 		shift = (i + 1) >> 1;
2109 
2110 	return 128 << (shift + !!dct_width);
2111 }
2112 
k8_dbam_to_chip_select(struct amd64_pvt * pvt,u8 dct,unsigned cs_mode,int cs_mask_nr)2113 static int k8_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
2114 				  unsigned cs_mode, int cs_mask_nr)
2115 {
2116 	u32 dclr = dct ? pvt->dclr1 : pvt->dclr0;
2117 
2118 	if (pvt->ext_model >= K8_REV_F) {
2119 		WARN_ON(cs_mode > 11);
2120 		return ddr2_cs_size(cs_mode, dclr & WIDTH_128);
2121 	}
2122 	else if (pvt->ext_model >= K8_REV_D) {
2123 		unsigned diff;
2124 		WARN_ON(cs_mode > 10);
2125 
2126 		/*
2127 		 * the below calculation, besides trying to win an obfuscated C
2128 		 * contest, maps cs_mode values to DIMM chip select sizes. The
2129 		 * mappings are:
2130 		 *
2131 		 * cs_mode	CS size (mb)
2132 		 * =======	============
2133 		 * 0		32
2134 		 * 1		64
2135 		 * 2		128
2136 		 * 3		128
2137 		 * 4		256
2138 		 * 5		512
2139 		 * 6		256
2140 		 * 7		512
2141 		 * 8		1024
2142 		 * 9		1024
2143 		 * 10		2048
2144 		 *
2145 		 * Basically, it calculates a value with which to shift the
2146 		 * smallest CS size of 32MB.
2147 		 *
2148 		 * ddr[23]_cs_size have a similar purpose.
2149 		 */
2150 		diff = cs_mode/3 + (unsigned)(cs_mode > 5);
2151 
2152 		return 32 << (cs_mode - diff);
2153 	}
2154 	else {
2155 		WARN_ON(cs_mode > 6);
2156 		return 32 << cs_mode;
2157 	}
2158 }
2159 
ddr3_cs_size(unsigned i,bool dct_width)2160 static int ddr3_cs_size(unsigned i, bool dct_width)
2161 {
2162 	unsigned shift = 0;
2163 	int cs_size = 0;
2164 
2165 	if (i == 0 || i == 3 || i == 4)
2166 		cs_size = -1;
2167 	else if (i <= 2)
2168 		shift = i;
2169 	else if (i == 12)
2170 		shift = 7;
2171 	else if (!(i & 0x1))
2172 		shift = i >> 1;
2173 	else
2174 		shift = (i + 1) >> 1;
2175 
2176 	if (cs_size != -1)
2177 		cs_size = (128 * (1 << !!dct_width)) << shift;
2178 
2179 	return cs_size;
2180 }
2181 
ddr3_lrdimm_cs_size(unsigned i,unsigned rank_multiply)2182 static int ddr3_lrdimm_cs_size(unsigned i, unsigned rank_multiply)
2183 {
2184 	unsigned shift = 0;
2185 	int cs_size = 0;
2186 
2187 	if (i < 4 || i == 6)
2188 		cs_size = -1;
2189 	else if (i == 12)
2190 		shift = 7;
2191 	else if (!(i & 0x1))
2192 		shift = i >> 1;
2193 	else
2194 		shift = (i + 1) >> 1;
2195 
2196 	if (cs_size != -1)
2197 		cs_size = rank_multiply * (128 << shift);
2198 
2199 	return cs_size;
2200 }
2201 
ddr4_cs_size(unsigned i)2202 static int ddr4_cs_size(unsigned i)
2203 {
2204 	int cs_size = 0;
2205 
2206 	if (i == 0)
2207 		cs_size = -1;
2208 	else if (i == 1)
2209 		cs_size = 1024;
2210 	else
2211 		/* Min cs_size = 1G */
2212 		cs_size = 1024 * (1 << (i >> 1));
2213 
2214 	return cs_size;
2215 }
2216 
f10_dbam_to_chip_select(struct amd64_pvt * pvt,u8 dct,unsigned cs_mode,int cs_mask_nr)2217 static int f10_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
2218 				   unsigned cs_mode, int cs_mask_nr)
2219 {
2220 	u32 dclr = dct ? pvt->dclr1 : pvt->dclr0;
2221 
2222 	WARN_ON(cs_mode > 11);
2223 
2224 	if (pvt->dchr0 & DDR3_MODE || pvt->dchr1 & DDR3_MODE)
2225 		return ddr3_cs_size(cs_mode, dclr & WIDTH_128);
2226 	else
2227 		return ddr2_cs_size(cs_mode, dclr & WIDTH_128);
2228 }
2229 
2230 /*
2231  * F15h supports only 64bit DCT interfaces
2232  */
f15_dbam_to_chip_select(struct amd64_pvt * pvt,u8 dct,unsigned cs_mode,int cs_mask_nr)2233 static int f15_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
2234 				   unsigned cs_mode, int cs_mask_nr)
2235 {
2236 	WARN_ON(cs_mode > 12);
2237 
2238 	return ddr3_cs_size(cs_mode, false);
2239 }
2240 
2241 /* 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)2242 static int f15_m60h_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
2243 					unsigned cs_mode, int cs_mask_nr)
2244 {
2245 	int cs_size;
2246 	u32 dcsm = pvt->csels[dct].csmasks[cs_mask_nr];
2247 
2248 	WARN_ON(cs_mode > 12);
2249 
2250 	if (pvt->dram_type == MEM_DDR4) {
2251 		if (cs_mode > 9)
2252 			return -1;
2253 
2254 		cs_size = ddr4_cs_size(cs_mode);
2255 	} else if (pvt->dram_type == MEM_LRDDR3) {
2256 		unsigned rank_multiply = dcsm & 0xf;
2257 
2258 		if (rank_multiply == 3)
2259 			rank_multiply = 4;
2260 		cs_size = ddr3_lrdimm_cs_size(cs_mode, rank_multiply);
2261 	} else {
2262 		/* Minimum cs size is 512mb for F15hM60h*/
2263 		if (cs_mode == 0x1)
2264 			return -1;
2265 
2266 		cs_size = ddr3_cs_size(cs_mode, false);
2267 	}
2268 
2269 	return cs_size;
2270 }
2271 
2272 /*
2273  * F16h and F15h model 30h have only limited cs_modes.
2274  */
f16_dbam_to_chip_select(struct amd64_pvt * pvt,u8 dct,unsigned cs_mode,int cs_mask_nr)2275 static int f16_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
2276 				unsigned cs_mode, int cs_mask_nr)
2277 {
2278 	WARN_ON(cs_mode > 12);
2279 
2280 	if (cs_mode == 6 || cs_mode == 8 ||
2281 	    cs_mode == 9 || cs_mode == 12)
2282 		return -1;
2283 	else
2284 		return ddr3_cs_size(cs_mode, false);
2285 }
2286 
read_dram_ctl_register(struct amd64_pvt * pvt)2287 static void read_dram_ctl_register(struct amd64_pvt *pvt)
2288 {
2289 
2290 	if (pvt->fam == 0xf)
2291 		return;
2292 
2293 	if (!amd64_read_pci_cfg(pvt->F2, DCT_SEL_LO, &pvt->dct_sel_lo)) {
2294 		edac_dbg(0, "F2x110 (DCTSelLow): 0x%08x, High range addrs at: 0x%x\n",
2295 			 pvt->dct_sel_lo, dct_sel_baseaddr(pvt));
2296 
2297 		edac_dbg(0, "  DCTs operate in %s mode\n",
2298 			 (dct_ganging_enabled(pvt) ? "ganged" : "unganged"));
2299 
2300 		if (!dct_ganging_enabled(pvt))
2301 			edac_dbg(0, "  Address range split per DCT: %s\n",
2302 				 (dct_high_range_enabled(pvt) ? "yes" : "no"));
2303 
2304 		edac_dbg(0, "  data interleave for ECC: %s, DRAM cleared since last warm reset: %s\n",
2305 			 (dct_data_intlv_enabled(pvt) ? "enabled" : "disabled"),
2306 			 (dct_memory_cleared(pvt) ? "yes" : "no"));
2307 
2308 		edac_dbg(0, "  channel interleave: %s, "
2309 			 "interleave bits selector: 0x%x\n",
2310 			 (dct_interleave_enabled(pvt) ? "enabled" : "disabled"),
2311 			 dct_sel_interleave_addr(pvt));
2312 	}
2313 
2314 	amd64_read_pci_cfg(pvt->F2, DCT_SEL_HI, &pvt->dct_sel_hi);
2315 }
2316 
2317 /*
2318  * Determine channel (DCT) based on the interleaving mode (see F15h M30h BKDG,
2319  * 2.10.12 Memory Interleaving Modes).
2320  */
f15_m30h_determine_channel(struct amd64_pvt * pvt,u64 sys_addr,u8 intlv_en,int num_dcts_intlv,u32 dct_sel)2321 static u8 f15_m30h_determine_channel(struct amd64_pvt *pvt, u64 sys_addr,
2322 				     u8 intlv_en, int num_dcts_intlv,
2323 				     u32 dct_sel)
2324 {
2325 	u8 channel = 0;
2326 	u8 select;
2327 
2328 	if (!(intlv_en))
2329 		return (u8)(dct_sel);
2330 
2331 	if (num_dcts_intlv == 2) {
2332 		select = (sys_addr >> 8) & 0x3;
2333 		channel = select ? 0x3 : 0;
2334 	} else if (num_dcts_intlv == 4) {
2335 		u8 intlv_addr = dct_sel_interleave_addr(pvt);
2336 		switch (intlv_addr) {
2337 		case 0x4:
2338 			channel = (sys_addr >> 8) & 0x3;
2339 			break;
2340 		case 0x5:
2341 			channel = (sys_addr >> 9) & 0x3;
2342 			break;
2343 		}
2344 	}
2345 	return channel;
2346 }
2347 
2348 /*
2349  * Determine channel (DCT) based on the interleaving mode: F10h BKDG, 2.8.9 Memory
2350  * Interleaving Modes.
2351  */
f1x_determine_channel(struct amd64_pvt * pvt,u64 sys_addr,bool hi_range_sel,u8 intlv_en)2352 static u8 f1x_determine_channel(struct amd64_pvt *pvt, u64 sys_addr,
2353 				bool hi_range_sel, u8 intlv_en)
2354 {
2355 	u8 dct_sel_high = (pvt->dct_sel_lo >> 1) & 1;
2356 
2357 	if (dct_ganging_enabled(pvt))
2358 		return 0;
2359 
2360 	if (hi_range_sel)
2361 		return dct_sel_high;
2362 
2363 	/*
2364 	 * see F2x110[DctSelIntLvAddr] - channel interleave mode
2365 	 */
2366 	if (dct_interleave_enabled(pvt)) {
2367 		u8 intlv_addr = dct_sel_interleave_addr(pvt);
2368 
2369 		/* return DCT select function: 0=DCT0, 1=DCT1 */
2370 		if (!intlv_addr)
2371 			return sys_addr >> 6 & 1;
2372 
2373 		if (intlv_addr & 0x2) {
2374 			u8 shift = intlv_addr & 0x1 ? 9 : 6;
2375 			u32 temp = hweight_long((u32) ((sys_addr >> 16) & 0x1F)) & 1;
2376 
2377 			return ((sys_addr >> shift) & 1) ^ temp;
2378 		}
2379 
2380 		if (intlv_addr & 0x4) {
2381 			u8 shift = intlv_addr & 0x1 ? 9 : 8;
2382 
2383 			return (sys_addr >> shift) & 1;
2384 		}
2385 
2386 		return (sys_addr >> (12 + hweight8(intlv_en))) & 1;
2387 	}
2388 
2389 	if (dct_high_range_enabled(pvt))
2390 		return ~dct_sel_high & 1;
2391 
2392 	return 0;
2393 }
2394 
2395 /* 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)2396 static u64 f1x_get_norm_dct_addr(struct amd64_pvt *pvt, u8 range,
2397 				 u64 sys_addr, bool hi_rng,
2398 				 u32 dct_sel_base_addr)
2399 {
2400 	u64 chan_off;
2401 	u64 dram_base		= get_dram_base(pvt, range);
2402 	u64 hole_off		= f10_dhar_offset(pvt);
2403 	u64 dct_sel_base_off	= (u64)(pvt->dct_sel_hi & 0xFFFFFC00) << 16;
2404 
2405 	if (hi_rng) {
2406 		/*
2407 		 * if
2408 		 * base address of high range is below 4Gb
2409 		 * (bits [47:27] at [31:11])
2410 		 * DRAM address space on this DCT is hoisted above 4Gb	&&
2411 		 * sys_addr > 4Gb
2412 		 *
2413 		 *	remove hole offset from sys_addr
2414 		 * else
2415 		 *	remove high range offset from sys_addr
2416 		 */
2417 		if ((!(dct_sel_base_addr >> 16) ||
2418 		     dct_sel_base_addr < dhar_base(pvt)) &&
2419 		    dhar_valid(pvt) &&
2420 		    (sys_addr >= BIT_64(32)))
2421 			chan_off = hole_off;
2422 		else
2423 			chan_off = dct_sel_base_off;
2424 	} else {
2425 		/*
2426 		 * if
2427 		 * we have a valid hole		&&
2428 		 * sys_addr > 4Gb
2429 		 *
2430 		 *	remove hole
2431 		 * else
2432 		 *	remove dram base to normalize to DCT address
2433 		 */
2434 		if (dhar_valid(pvt) && (sys_addr >= BIT_64(32)))
2435 			chan_off = hole_off;
2436 		else
2437 			chan_off = dram_base;
2438 	}
2439 
2440 	return (sys_addr & GENMASK_ULL(47,6)) - (chan_off & GENMASK_ULL(47,23));
2441 }
2442 
2443 /*
2444  * checks if the csrow passed in is marked as SPARED, if so returns the new
2445  * spare row
2446  */
f10_process_possible_spare(struct amd64_pvt * pvt,u8 dct,int csrow)2447 static int f10_process_possible_spare(struct amd64_pvt *pvt, u8 dct, int csrow)
2448 {
2449 	int tmp_cs;
2450 
2451 	if (online_spare_swap_done(pvt, dct) &&
2452 	    csrow == online_spare_bad_dramcs(pvt, dct)) {
2453 
2454 		for_each_chip_select(tmp_cs, dct, pvt) {
2455 			if (chip_select_base(tmp_cs, dct, pvt) & 0x2) {
2456 				csrow = tmp_cs;
2457 				break;
2458 			}
2459 		}
2460 	}
2461 	return csrow;
2462 }
2463 
2464 /*
2465  * Iterate over the DRAM DCT "base" and "mask" registers looking for a
2466  * SystemAddr match on the specified 'ChannelSelect' and 'NodeID'
2467  *
2468  * Return:
2469  *	-EINVAL:  NOT FOUND
2470  *	0..csrow = Chip-Select Row
2471  */
f1x_lookup_addr_in_dct(u64 in_addr,u8 nid,u8 dct)2472 static int f1x_lookup_addr_in_dct(u64 in_addr, u8 nid, u8 dct)
2473 {
2474 	struct mem_ctl_info *mci;
2475 	struct amd64_pvt *pvt;
2476 	u64 cs_base, cs_mask;
2477 	int cs_found = -EINVAL;
2478 	int csrow;
2479 
2480 	mci = edac_mc_find(nid);
2481 	if (!mci)
2482 		return cs_found;
2483 
2484 	pvt = mci->pvt_info;
2485 
2486 	edac_dbg(1, "input addr: 0x%llx, DCT: %d\n", in_addr, dct);
2487 
2488 	for_each_chip_select(csrow, dct, pvt) {
2489 		if (!csrow_enabled(csrow, dct, pvt))
2490 			continue;
2491 
2492 		get_cs_base_and_mask(pvt, csrow, dct, &cs_base, &cs_mask);
2493 
2494 		edac_dbg(1, "    CSROW=%d CSBase=0x%llx CSMask=0x%llx\n",
2495 			 csrow, cs_base, cs_mask);
2496 
2497 		cs_mask = ~cs_mask;
2498 
2499 		edac_dbg(1, "    (InputAddr & ~CSMask)=0x%llx (CSBase & ~CSMask)=0x%llx\n",
2500 			 (in_addr & cs_mask), (cs_base & cs_mask));
2501 
2502 		if ((in_addr & cs_mask) == (cs_base & cs_mask)) {
2503 			if (pvt->fam == 0x15 && pvt->model >= 0x30) {
2504 				cs_found =  csrow;
2505 				break;
2506 			}
2507 			cs_found = f10_process_possible_spare(pvt, dct, csrow);
2508 
2509 			edac_dbg(1, " MATCH csrow=%d\n", cs_found);
2510 			break;
2511 		}
2512 	}
2513 	return cs_found;
2514 }
2515 
2516 /*
2517  * See F2x10C. Non-interleaved graphics framebuffer memory under the 16G is
2518  * swapped with a region located at the bottom of memory so that the GPU can use
2519  * the interleaved region and thus two channels.
2520  */
f1x_swap_interleaved_region(struct amd64_pvt * pvt,u64 sys_addr)2521 static u64 f1x_swap_interleaved_region(struct amd64_pvt *pvt, u64 sys_addr)
2522 {
2523 	u32 swap_reg, swap_base, swap_limit, rgn_size, tmp_addr;
2524 
2525 	if (pvt->fam == 0x10) {
2526 		/* only revC3 and revE have that feature */
2527 		if (pvt->model < 4 || (pvt->model < 0xa && pvt->stepping < 3))
2528 			return sys_addr;
2529 	}
2530 
2531 	amd64_read_pci_cfg(pvt->F2, SWAP_INTLV_REG, &swap_reg);
2532 
2533 	if (!(swap_reg & 0x1))
2534 		return sys_addr;
2535 
2536 	swap_base	= (swap_reg >> 3) & 0x7f;
2537 	swap_limit	= (swap_reg >> 11) & 0x7f;
2538 	rgn_size	= (swap_reg >> 20) & 0x7f;
2539 	tmp_addr	= sys_addr >> 27;
2540 
2541 	if (!(sys_addr >> 34) &&
2542 	    (((tmp_addr >= swap_base) &&
2543 	     (tmp_addr <= swap_limit)) ||
2544 	     (tmp_addr < rgn_size)))
2545 		return sys_addr ^ (u64)swap_base << 27;
2546 
2547 	return sys_addr;
2548 }
2549 
2550 /* 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)2551 static int f1x_match_to_this_node(struct amd64_pvt *pvt, unsigned range,
2552 				  u64 sys_addr, int *chan_sel)
2553 {
2554 	int cs_found = -EINVAL;
2555 	u64 chan_addr;
2556 	u32 dct_sel_base;
2557 	u8 channel;
2558 	bool high_range = false;
2559 
2560 	u8 node_id    = dram_dst_node(pvt, range);
2561 	u8 intlv_en   = dram_intlv_en(pvt, range);
2562 	u32 intlv_sel = dram_intlv_sel(pvt, range);
2563 
2564 	edac_dbg(1, "(range %d) SystemAddr= 0x%llx Limit=0x%llx\n",
2565 		 range, sys_addr, get_dram_limit(pvt, range));
2566 
2567 	if (dhar_valid(pvt) &&
2568 	    dhar_base(pvt) <= sys_addr &&
2569 	    sys_addr < BIT_64(32)) {
2570 		amd64_warn("Huh? Address is in the MMIO hole: 0x%016llx\n",
2571 			    sys_addr);
2572 		return -EINVAL;
2573 	}
2574 
2575 	if (intlv_en && (intlv_sel != ((sys_addr >> 12) & intlv_en)))
2576 		return -EINVAL;
2577 
2578 	sys_addr = f1x_swap_interleaved_region(pvt, sys_addr);
2579 
2580 	dct_sel_base = dct_sel_baseaddr(pvt);
2581 
2582 	/*
2583 	 * check whether addresses >= DctSelBaseAddr[47:27] are to be used to
2584 	 * select between DCT0 and DCT1.
2585 	 */
2586 	if (dct_high_range_enabled(pvt) &&
2587 	   !dct_ganging_enabled(pvt) &&
2588 	   ((sys_addr >> 27) >= (dct_sel_base >> 11)))
2589 		high_range = true;
2590 
2591 	channel = f1x_determine_channel(pvt, sys_addr, high_range, intlv_en);
2592 
2593 	chan_addr = f1x_get_norm_dct_addr(pvt, range, sys_addr,
2594 					  high_range, dct_sel_base);
2595 
2596 	/* Remove node interleaving, see F1x120 */
2597 	if (intlv_en)
2598 		chan_addr = ((chan_addr >> (12 + hweight8(intlv_en))) << 12) |
2599 			    (chan_addr & 0xfff);
2600 
2601 	/* remove channel interleave */
2602 	if (dct_interleave_enabled(pvt) &&
2603 	   !dct_high_range_enabled(pvt) &&
2604 	   !dct_ganging_enabled(pvt)) {
2605 
2606 		if (dct_sel_interleave_addr(pvt) != 1) {
2607 			if (dct_sel_interleave_addr(pvt) == 0x3)
2608 				/* hash 9 */
2609 				chan_addr = ((chan_addr >> 10) << 9) |
2610 					     (chan_addr & 0x1ff);
2611 			else
2612 				/* A[6] or hash 6 */
2613 				chan_addr = ((chan_addr >> 7) << 6) |
2614 					     (chan_addr & 0x3f);
2615 		} else
2616 			/* A[12] */
2617 			chan_addr = ((chan_addr >> 13) << 12) |
2618 				     (chan_addr & 0xfff);
2619 	}
2620 
2621 	edac_dbg(1, "   Normalized DCT addr: 0x%llx\n", chan_addr);
2622 
2623 	cs_found = f1x_lookup_addr_in_dct(chan_addr, node_id, channel);
2624 
2625 	if (cs_found >= 0)
2626 		*chan_sel = channel;
2627 
2628 	return cs_found;
2629 }
2630 
f15_m30h_match_to_this_node(struct amd64_pvt * pvt,unsigned range,u64 sys_addr,int * chan_sel)2631 static int f15_m30h_match_to_this_node(struct amd64_pvt *pvt, unsigned range,
2632 					u64 sys_addr, int *chan_sel)
2633 {
2634 	int cs_found = -EINVAL;
2635 	int num_dcts_intlv = 0;
2636 	u64 chan_addr, chan_offset;
2637 	u64 dct_base, dct_limit;
2638 	u32 dct_cont_base_reg, dct_cont_limit_reg, tmp;
2639 	u8 channel, alias_channel, leg_mmio_hole, dct_sel, dct_offset_en;
2640 
2641 	u64 dhar_offset		= f10_dhar_offset(pvt);
2642 	u8 intlv_addr		= dct_sel_interleave_addr(pvt);
2643 	u8 node_id		= dram_dst_node(pvt, range);
2644 	u8 intlv_en		= dram_intlv_en(pvt, range);
2645 
2646 	amd64_read_pci_cfg(pvt->F1, DRAM_CONT_BASE, &dct_cont_base_reg);
2647 	amd64_read_pci_cfg(pvt->F1, DRAM_CONT_LIMIT, &dct_cont_limit_reg);
2648 
2649 	dct_offset_en		= (u8) ((dct_cont_base_reg >> 3) & BIT(0));
2650 	dct_sel			= (u8) ((dct_cont_base_reg >> 4) & 0x7);
2651 
2652 	edac_dbg(1, "(range %d) SystemAddr= 0x%llx Limit=0x%llx\n",
2653 		 range, sys_addr, get_dram_limit(pvt, range));
2654 
2655 	if (!(get_dram_base(pvt, range)  <= sys_addr) &&
2656 	    !(get_dram_limit(pvt, range) >= sys_addr))
2657 		return -EINVAL;
2658 
2659 	if (dhar_valid(pvt) &&
2660 	    dhar_base(pvt) <= sys_addr &&
2661 	    sys_addr < BIT_64(32)) {
2662 		amd64_warn("Huh? Address is in the MMIO hole: 0x%016llx\n",
2663 			    sys_addr);
2664 		return -EINVAL;
2665 	}
2666 
2667 	/* Verify sys_addr is within DCT Range. */
2668 	dct_base = (u64) dct_sel_baseaddr(pvt);
2669 	dct_limit = (dct_cont_limit_reg >> 11) & 0x1FFF;
2670 
2671 	if (!(dct_cont_base_reg & BIT(0)) &&
2672 	    !(dct_base <= (sys_addr >> 27) &&
2673 	      dct_limit >= (sys_addr >> 27)))
2674 		return -EINVAL;
2675 
2676 	/* Verify number of dct's that participate in channel interleaving. */
2677 	num_dcts_intlv = (int) hweight8(intlv_en);
2678 
2679 	if (!(num_dcts_intlv % 2 == 0) || (num_dcts_intlv > 4))
2680 		return -EINVAL;
2681 
2682 	if (pvt->model >= 0x60)
2683 		channel = f1x_determine_channel(pvt, sys_addr, false, intlv_en);
2684 	else
2685 		channel = f15_m30h_determine_channel(pvt, sys_addr, intlv_en,
2686 						     num_dcts_intlv, dct_sel);
2687 
2688 	/* Verify we stay within the MAX number of channels allowed */
2689 	if (channel > 3)
2690 		return -EINVAL;
2691 
2692 	leg_mmio_hole = (u8) (dct_cont_base_reg >> 1 & BIT(0));
2693 
2694 	/* Get normalized DCT addr */
2695 	if (leg_mmio_hole && (sys_addr >= BIT_64(32)))
2696 		chan_offset = dhar_offset;
2697 	else
2698 		chan_offset = dct_base << 27;
2699 
2700 	chan_addr = sys_addr - chan_offset;
2701 
2702 	/* remove channel interleave */
2703 	if (num_dcts_intlv == 2) {
2704 		if (intlv_addr == 0x4)
2705 			chan_addr = ((chan_addr >> 9) << 8) |
2706 						(chan_addr & 0xff);
2707 		else if (intlv_addr == 0x5)
2708 			chan_addr = ((chan_addr >> 10) << 9) |
2709 						(chan_addr & 0x1ff);
2710 		else
2711 			return -EINVAL;
2712 
2713 	} else if (num_dcts_intlv == 4) {
2714 		if (intlv_addr == 0x4)
2715 			chan_addr = ((chan_addr >> 10) << 8) |
2716 							(chan_addr & 0xff);
2717 		else if (intlv_addr == 0x5)
2718 			chan_addr = ((chan_addr >> 11) << 9) |
2719 							(chan_addr & 0x1ff);
2720 		else
2721 			return -EINVAL;
2722 	}
2723 
2724 	if (dct_offset_en) {
2725 		amd64_read_pci_cfg(pvt->F1,
2726 				   DRAM_CONT_HIGH_OFF + (int) channel * 4,
2727 				   &tmp);
2728 		chan_addr +=  (u64) ((tmp >> 11) & 0xfff) << 27;
2729 	}
2730 
2731 	f15h_select_dct(pvt, channel);
2732 
2733 	edac_dbg(1, "   Normalized DCT addr: 0x%llx\n", chan_addr);
2734 
2735 	/*
2736 	 * Find Chip select:
2737 	 * if channel = 3, then alias it to 1. This is because, in F15 M30h,
2738 	 * there is support for 4 DCT's, but only 2 are currently functional.
2739 	 * They are DCT0 and DCT3. But we have read all registers of DCT3 into
2740 	 * pvt->csels[1]. So we need to use '1' here to get correct info.
2741 	 * Refer F15 M30h BKDG Section 2.10 and 2.10.3 for clarifications.
2742 	 */
2743 	alias_channel =  (channel == 3) ? 1 : channel;
2744 
2745 	cs_found = f1x_lookup_addr_in_dct(chan_addr, node_id, alias_channel);
2746 
2747 	if (cs_found >= 0)
2748 		*chan_sel = alias_channel;
2749 
2750 	return cs_found;
2751 }
2752 
f1x_translate_sysaddr_to_cs(struct amd64_pvt * pvt,u64 sys_addr,int * chan_sel)2753 static int f1x_translate_sysaddr_to_cs(struct amd64_pvt *pvt,
2754 					u64 sys_addr,
2755 					int *chan_sel)
2756 {
2757 	int cs_found = -EINVAL;
2758 	unsigned range;
2759 
2760 	for (range = 0; range < DRAM_RANGES; range++) {
2761 		if (!dram_rw(pvt, range))
2762 			continue;
2763 
2764 		if (pvt->fam == 0x15 && pvt->model >= 0x30)
2765 			cs_found = f15_m30h_match_to_this_node(pvt, range,
2766 							       sys_addr,
2767 							       chan_sel);
2768 
2769 		else if ((get_dram_base(pvt, range)  <= sys_addr) &&
2770 			 (get_dram_limit(pvt, range) >= sys_addr)) {
2771 			cs_found = f1x_match_to_this_node(pvt, range,
2772 							  sys_addr, chan_sel);
2773 			if (cs_found >= 0)
2774 				break;
2775 		}
2776 	}
2777 	return cs_found;
2778 }
2779 
2780 /*
2781  * For reference see "2.8.5 Routing DRAM Requests" in F10 BKDG. This code maps
2782  * a @sys_addr to NodeID, DCT (channel) and chip select (CSROW).
2783  *
2784  * The @sys_addr is usually an error address received from the hardware
2785  * (MCX_ADDR).
2786  */
f1x_map_sysaddr_to_csrow(struct mem_ctl_info * mci,u64 sys_addr,struct err_info * err)2787 static void f1x_map_sysaddr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr,
2788 				     struct err_info *err)
2789 {
2790 	struct amd64_pvt *pvt = mci->pvt_info;
2791 
2792 	error_address_to_page_and_offset(sys_addr, err);
2793 
2794 	err->csrow = f1x_translate_sysaddr_to_cs(pvt, sys_addr, &err->channel);
2795 	if (err->csrow < 0) {
2796 		err->err_code = ERR_CSROW;
2797 		return;
2798 	}
2799 
2800 	/*
2801 	 * We need the syndromes for channel detection only when we're
2802 	 * ganged. Otherwise @chan should already contain the channel at
2803 	 * this point.
2804 	 */
2805 	if (dct_ganging_enabled(pvt))
2806 		err->channel = get_channel_from_ecc_syndrome(mci, err->syndrome);
2807 }
2808 
2809 /*
2810  * These are tables of eigenvectors (one per line) which can be used for the
2811  * construction of the syndrome tables. The modified syndrome search algorithm
2812  * uses those to find the symbol in error and thus the DIMM.
2813  *
2814  * Algorithm courtesy of Ross LaFetra from AMD.
2815  */
2816 static const u16 x4_vectors[] = {
2817 	0x2f57, 0x1afe, 0x66cc, 0xdd88,
2818 	0x11eb, 0x3396, 0x7f4c, 0xeac8,
2819 	0x0001, 0x0002, 0x0004, 0x0008,
2820 	0x1013, 0x3032, 0x4044, 0x8088,
2821 	0x106b, 0x30d6, 0x70fc, 0xe0a8,
2822 	0x4857, 0xc4fe, 0x13cc, 0x3288,
2823 	0x1ac5, 0x2f4a, 0x5394, 0xa1e8,
2824 	0x1f39, 0x251e, 0xbd6c, 0x6bd8,
2825 	0x15c1, 0x2a42, 0x89ac, 0x4758,
2826 	0x2b03, 0x1602, 0x4f0c, 0xca08,
2827 	0x1f07, 0x3a0e, 0x6b04, 0xbd08,
2828 	0x8ba7, 0x465e, 0x244c, 0x1cc8,
2829 	0x2b87, 0x164e, 0x642c, 0xdc18,
2830 	0x40b9, 0x80de, 0x1094, 0x20e8,
2831 	0x27db, 0x1eb6, 0x9dac, 0x7b58,
2832 	0x11c1, 0x2242, 0x84ac, 0x4c58,
2833 	0x1be5, 0x2d7a, 0x5e34, 0xa718,
2834 	0x4b39, 0x8d1e, 0x14b4, 0x28d8,
2835 	0x4c97, 0xc87e, 0x11fc, 0x33a8,
2836 	0x8e97, 0x497e, 0x2ffc, 0x1aa8,
2837 	0x16b3, 0x3d62, 0x4f34, 0x8518,
2838 	0x1e2f, 0x391a, 0x5cac, 0xf858,
2839 	0x1d9f, 0x3b7a, 0x572c, 0xfe18,
2840 	0x15f5, 0x2a5a, 0x5264, 0xa3b8,
2841 	0x1dbb, 0x3b66, 0x715c, 0xe3f8,
2842 	0x4397, 0xc27e, 0x17fc, 0x3ea8,
2843 	0x1617, 0x3d3e, 0x6464, 0xb8b8,
2844 	0x23ff, 0x12aa, 0xab6c, 0x56d8,
2845 	0x2dfb, 0x1ba6, 0x913c, 0x7328,
2846 	0x185d, 0x2ca6, 0x7914, 0x9e28,
2847 	0x171b, 0x3e36, 0x7d7c, 0xebe8,
2848 	0x4199, 0x82ee, 0x19f4, 0x2e58,
2849 	0x4807, 0xc40e, 0x130c, 0x3208,
2850 	0x1905, 0x2e0a, 0x5804, 0xac08,
2851 	0x213f, 0x132a, 0xadfc, 0x5ba8,
2852 	0x19a9, 0x2efe, 0xb5cc, 0x6f88,
2853 };
2854 
2855 static const u16 x8_vectors[] = {
2856 	0x0145, 0x028a, 0x2374, 0x43c8, 0xa1f0, 0x0520, 0x0a40, 0x1480,
2857 	0x0211, 0x0422, 0x0844, 0x1088, 0x01b0, 0x44e0, 0x23c0, 0xed80,
2858 	0x1011, 0x0116, 0x022c, 0x0458, 0x08b0, 0x8c60, 0x2740, 0x4e80,
2859 	0x0411, 0x0822, 0x1044, 0x0158, 0x02b0, 0x2360, 0x46c0, 0xab80,
2860 	0x0811, 0x1022, 0x012c, 0x0258, 0x04b0, 0x4660, 0x8cc0, 0x2780,
2861 	0x2071, 0x40e2, 0xa0c4, 0x0108, 0x0210, 0x0420, 0x0840, 0x1080,
2862 	0x4071, 0x80e2, 0x0104, 0x0208, 0x0410, 0x0820, 0x1040, 0x2080,
2863 	0x8071, 0x0102, 0x0204, 0x0408, 0x0810, 0x1020, 0x2040, 0x4080,
2864 	0x019d, 0x03d6, 0x136c, 0x2198, 0x50b0, 0xb2e0, 0x0740, 0x0e80,
2865 	0x0189, 0x03ea, 0x072c, 0x0e58, 0x1cb0, 0x56e0, 0x37c0, 0xf580,
2866 	0x01fd, 0x0376, 0x06ec, 0x0bb8, 0x1110, 0x2220, 0x4440, 0x8880,
2867 	0x0163, 0x02c6, 0x1104, 0x0758, 0x0eb0, 0x2be0, 0x6140, 0xc280,
2868 	0x02fd, 0x01c6, 0x0b5c, 0x1108, 0x07b0, 0x25a0, 0x8840, 0x6180,
2869 	0x0801, 0x012e, 0x025c, 0x04b8, 0x1370, 0x26e0, 0x57c0, 0xb580,
2870 	0x0401, 0x0802, 0x015c, 0x02b8, 0x22b0, 0x13e0, 0x7140, 0xe280,
2871 	0x0201, 0x0402, 0x0804, 0x01b8, 0x11b0, 0x31a0, 0x8040, 0x7180,
2872 	0x0101, 0x0202, 0x0404, 0x0808, 0x1010, 0x2020, 0x4040, 0x8080,
2873 	0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
2874 	0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000,
2875 };
2876 
decode_syndrome(u16 syndrome,const u16 * vectors,unsigned num_vecs,unsigned v_dim)2877 static int decode_syndrome(u16 syndrome, const u16 *vectors, unsigned num_vecs,
2878 			   unsigned v_dim)
2879 {
2880 	unsigned int i, err_sym;
2881 
2882 	for (err_sym = 0; err_sym < num_vecs / v_dim; err_sym++) {
2883 		u16 s = syndrome;
2884 		unsigned v_idx =  err_sym * v_dim;
2885 		unsigned v_end = (err_sym + 1) * v_dim;
2886 
2887 		/* walk over all 16 bits of the syndrome */
2888 		for (i = 1; i < (1U << 16); i <<= 1) {
2889 
2890 			/* if bit is set in that eigenvector... */
2891 			if (v_idx < v_end && vectors[v_idx] & i) {
2892 				u16 ev_comp = vectors[v_idx++];
2893 
2894 				/* ... and bit set in the modified syndrome, */
2895 				if (s & i) {
2896 					/* remove it. */
2897 					s ^= ev_comp;
2898 
2899 					if (!s)
2900 						return err_sym;
2901 				}
2902 
2903 			} else if (s & i)
2904 				/* can't get to zero, move to next symbol */
2905 				break;
2906 		}
2907 	}
2908 
2909 	edac_dbg(0, "syndrome(%x) not found\n", syndrome);
2910 	return -1;
2911 }
2912 
map_err_sym_to_channel(int err_sym,int sym_size)2913 static int map_err_sym_to_channel(int err_sym, int sym_size)
2914 {
2915 	if (sym_size == 4)
2916 		switch (err_sym) {
2917 		case 0x20:
2918 		case 0x21:
2919 			return 0;
2920 		case 0x22:
2921 		case 0x23:
2922 			return 1;
2923 		default:
2924 			return err_sym >> 4;
2925 		}
2926 	/* x8 symbols */
2927 	else
2928 		switch (err_sym) {
2929 		/* imaginary bits not in a DIMM */
2930 		case 0x10:
2931 			WARN(1, KERN_ERR "Invalid error symbol: 0x%x\n",
2932 					  err_sym);
2933 			return -1;
2934 		case 0x11:
2935 			return 0;
2936 		case 0x12:
2937 			return 1;
2938 		default:
2939 			return err_sym >> 3;
2940 		}
2941 	return -1;
2942 }
2943 
get_channel_from_ecc_syndrome(struct mem_ctl_info * mci,u16 syndrome)2944 static int get_channel_from_ecc_syndrome(struct mem_ctl_info *mci, u16 syndrome)
2945 {
2946 	struct amd64_pvt *pvt = mci->pvt_info;
2947 	int err_sym = -1;
2948 
2949 	if (pvt->ecc_sym_sz == 8)
2950 		err_sym = decode_syndrome(syndrome, x8_vectors,
2951 					  ARRAY_SIZE(x8_vectors),
2952 					  pvt->ecc_sym_sz);
2953 	else if (pvt->ecc_sym_sz == 4)
2954 		err_sym = decode_syndrome(syndrome, x4_vectors,
2955 					  ARRAY_SIZE(x4_vectors),
2956 					  pvt->ecc_sym_sz);
2957 	else {
2958 		amd64_warn("Illegal syndrome type: %u\n", pvt->ecc_sym_sz);
2959 		return err_sym;
2960 	}
2961 
2962 	return map_err_sym_to_channel(err_sym, pvt->ecc_sym_sz);
2963 }
2964 
__log_ecc_error(struct mem_ctl_info * mci,struct err_info * err,u8 ecc_type)2965 static void __log_ecc_error(struct mem_ctl_info *mci, struct err_info *err,
2966 			    u8 ecc_type)
2967 {
2968 	enum hw_event_mc_err_type err_type;
2969 	const char *string;
2970 
2971 	if (ecc_type == 2)
2972 		err_type = HW_EVENT_ERR_CORRECTED;
2973 	else if (ecc_type == 1)
2974 		err_type = HW_EVENT_ERR_UNCORRECTED;
2975 	else if (ecc_type == 3)
2976 		err_type = HW_EVENT_ERR_DEFERRED;
2977 	else {
2978 		WARN(1, "Something is rotten in the state of Denmark.\n");
2979 		return;
2980 	}
2981 
2982 	switch (err->err_code) {
2983 	case DECODE_OK:
2984 		string = "";
2985 		break;
2986 	case ERR_NODE:
2987 		string = "Failed to map error addr to a node";
2988 		break;
2989 	case ERR_CSROW:
2990 		string = "Failed to map error addr to a csrow";
2991 		break;
2992 	case ERR_CHANNEL:
2993 		string = "Unknown syndrome - possible error reporting race";
2994 		break;
2995 	case ERR_SYND:
2996 		string = "MCA_SYND not valid - unknown syndrome and csrow";
2997 		break;
2998 	case ERR_NORM_ADDR:
2999 		string = "Cannot decode normalized address";
3000 		break;
3001 	default:
3002 		string = "WTF error";
3003 		break;
3004 	}
3005 
3006 	edac_mc_handle_error(err_type, mci, 1,
3007 			     err->page, err->offset, err->syndrome,
3008 			     err->csrow, err->channel, -1,
3009 			     string, "");
3010 }
3011 
decode_bus_error(int node_id,struct mce * m)3012 static inline void decode_bus_error(int node_id, struct mce *m)
3013 {
3014 	struct mem_ctl_info *mci;
3015 	struct amd64_pvt *pvt;
3016 	u8 ecc_type = (m->status >> 45) & 0x3;
3017 	u8 xec = XEC(m->status, 0x1f);
3018 	u16 ec = EC(m->status);
3019 	u64 sys_addr;
3020 	struct err_info err;
3021 
3022 	mci = edac_mc_find(node_id);
3023 	if (!mci)
3024 		return;
3025 
3026 	pvt = mci->pvt_info;
3027 
3028 	/* Bail out early if this was an 'observed' error */
3029 	if (PP(ec) == NBSL_PP_OBS)
3030 		return;
3031 
3032 	/* Do only ECC errors */
3033 	if (xec && xec != F10_NBSL_EXT_ERR_ECC)
3034 		return;
3035 
3036 	memset(&err, 0, sizeof(err));
3037 
3038 	sys_addr = get_error_address(pvt, m);
3039 
3040 	if (ecc_type == 2)
3041 		err.syndrome = extract_syndrome(m->status);
3042 
3043 	pvt->ops->map_sysaddr_to_csrow(mci, sys_addr, &err);
3044 
3045 	__log_ecc_error(mci, &err, ecc_type);
3046 }
3047 
3048 /*
3049  * To find the UMC channel represented by this bank we need to match on its
3050  * instance_id. The instance_id of a bank is held in the lower 32 bits of its
3051  * IPID.
3052  *
3053  * Currently, we can derive the channel number by looking at the 6th nibble in
3054  * the instance_id. For example, instance_id=0xYXXXXX where Y is the channel
3055  * number.
3056  *
3057  * For DRAM ECC errors, the Chip Select number is given in bits [2:0] of
3058  * the MCA_SYND[ErrorInformation] field.
3059  */
umc_get_err_info(struct mce * m,struct err_info * err)3060 static void umc_get_err_info(struct mce *m, struct err_info *err)
3061 {
3062 	err->channel = (m->ipid & GENMASK(31, 0)) >> 20;
3063 	err->csrow = m->synd & 0x7;
3064 }
3065 
decode_umc_error(int node_id,struct mce * m)3066 static void decode_umc_error(int node_id, struct mce *m)
3067 {
3068 	u8 ecc_type = (m->status >> 45) & 0x3;
3069 	struct mem_ctl_info *mci;
3070 	struct amd64_pvt *pvt;
3071 	struct err_info err;
3072 	u64 sys_addr;
3073 
3074 	node_id = fixup_node_id(node_id, m);
3075 
3076 	mci = edac_mc_find(node_id);
3077 	if (!mci)
3078 		return;
3079 
3080 	pvt = mci->pvt_info;
3081 
3082 	memset(&err, 0, sizeof(err));
3083 
3084 	if (m->status & MCI_STATUS_DEFERRED)
3085 		ecc_type = 3;
3086 
3087 	if (!(m->status & MCI_STATUS_SYNDV)) {
3088 		err.err_code = ERR_SYND;
3089 		goto log_error;
3090 	}
3091 
3092 	if (ecc_type == 2) {
3093 		u8 length = (m->synd >> 18) & 0x3f;
3094 
3095 		if (length)
3096 			err.syndrome = (m->synd >> 32) & GENMASK(length - 1, 0);
3097 		else
3098 			err.err_code = ERR_CHANNEL;
3099 	}
3100 
3101 	pvt->ops->get_err_info(m, &err);
3102 
3103 	if (umc_normaddr_to_sysaddr(m->addr, pvt->mc_node_id, err.channel, &sys_addr)) {
3104 		err.err_code = ERR_NORM_ADDR;
3105 		goto log_error;
3106 	}
3107 
3108 	error_address_to_page_and_offset(sys_addr, &err);
3109 
3110 log_error:
3111 	__log_ecc_error(mci, &err, ecc_type);
3112 }
3113 
3114 /*
3115  * Use pvt->F3 which contains the F3 CPU PCI device to get the related
3116  * F1 (AddrMap) and F2 (Dct) devices. Return negative value on error.
3117  */
3118 static int
reserve_mc_sibling_devs(struct amd64_pvt * pvt,u16 pci_id1,u16 pci_id2)3119 reserve_mc_sibling_devs(struct amd64_pvt *pvt, u16 pci_id1, u16 pci_id2)
3120 {
3121 	/* Reserve the ADDRESS MAP Device */
3122 	pvt->F1 = pci_get_related_function(pvt->F3->vendor, pci_id1, pvt->F3);
3123 	if (!pvt->F1) {
3124 		edac_dbg(1, "F1 not found: device 0x%x\n", pci_id1);
3125 		return -ENODEV;
3126 	}
3127 
3128 	/* Reserve the DCT Device */
3129 	pvt->F2 = pci_get_related_function(pvt->F3->vendor, pci_id2, pvt->F3);
3130 	if (!pvt->F2) {
3131 		pci_dev_put(pvt->F1);
3132 		pvt->F1 = NULL;
3133 
3134 		edac_dbg(1, "F2 not found: device 0x%x\n", pci_id2);
3135 		return -ENODEV;
3136 	}
3137 
3138 	if (!pci_ctl_dev)
3139 		pci_ctl_dev = &pvt->F2->dev;
3140 
3141 	edac_dbg(1, "F1: %s\n", pci_name(pvt->F1));
3142 	edac_dbg(1, "F2: %s\n", pci_name(pvt->F2));
3143 	edac_dbg(1, "F3: %s\n", pci_name(pvt->F3));
3144 
3145 	return 0;
3146 }
3147 
determine_ecc_sym_sz(struct amd64_pvt * pvt)3148 static void determine_ecc_sym_sz(struct amd64_pvt *pvt)
3149 {
3150 	pvt->ecc_sym_sz = 4;
3151 
3152 	if (pvt->fam >= 0x10) {
3153 		u32 tmp;
3154 
3155 		amd64_read_pci_cfg(pvt->F3, EXT_NB_MCA_CFG, &tmp);
3156 		/* F16h has only DCT0, so no need to read dbam1. */
3157 		if (pvt->fam != 0x16)
3158 			amd64_read_dct_pci_cfg(pvt, 1, DBAM0, &pvt->dbam1);
3159 
3160 		/* F10h, revD and later can do x8 ECC too. */
3161 		if ((pvt->fam > 0x10 || pvt->model > 7) && tmp & BIT(25))
3162 			pvt->ecc_sym_sz = 8;
3163 	}
3164 }
3165 
3166 /*
3167  * Retrieve the hardware registers of the memory controller.
3168  */
umc_read_mc_regs(struct amd64_pvt * pvt)3169 static void umc_read_mc_regs(struct amd64_pvt *pvt)
3170 {
3171 	u8 nid = pvt->mc_node_id;
3172 	struct amd64_umc *umc;
3173 	u32 i, umc_base;
3174 
3175 	/* Read registers from each UMC */
3176 	for_each_umc(i) {
3177 
3178 		umc_base = get_umc_base(i);
3179 		umc = &pvt->umc[i];
3180 
3181 		amd_smn_read(nid, umc_base + get_umc_reg(pvt, UMCCH_DIMM_CFG), &umc->dimm_cfg);
3182 		amd_smn_read(nid, umc_base + UMCCH_UMC_CFG, &umc->umc_cfg);
3183 		amd_smn_read(nid, umc_base + UMCCH_SDP_CTRL, &umc->sdp_ctrl);
3184 		amd_smn_read(nid, umc_base + UMCCH_ECC_CTRL, &umc->ecc_ctrl);
3185 		amd_smn_read(nid, umc_base + UMCCH_UMC_CAP_HI, &umc->umc_cap_hi);
3186 	}
3187 }
3188 
3189 /*
3190  * Retrieve the hardware registers of the memory controller (this includes the
3191  * 'Address Map' and 'Misc' device regs)
3192  */
dct_read_mc_regs(struct amd64_pvt * pvt)3193 static void dct_read_mc_regs(struct amd64_pvt *pvt)
3194 {
3195 	unsigned int range;
3196 	u64 msr_val;
3197 
3198 	/*
3199 	 * Retrieve TOP_MEM and TOP_MEM2; no masking off of reserved bits since
3200 	 * those are Read-As-Zero.
3201 	 */
3202 	rdmsrl(MSR_K8_TOP_MEM1, pvt->top_mem);
3203 	edac_dbg(0, "  TOP_MEM:  0x%016llx\n", pvt->top_mem);
3204 
3205 	/* Check first whether TOP_MEM2 is enabled: */
3206 	rdmsrl(MSR_AMD64_SYSCFG, msr_val);
3207 	if (msr_val & BIT(21)) {
3208 		rdmsrl(MSR_K8_TOP_MEM2, pvt->top_mem2);
3209 		edac_dbg(0, "  TOP_MEM2: 0x%016llx\n", pvt->top_mem2);
3210 	} else {
3211 		edac_dbg(0, "  TOP_MEM2 disabled\n");
3212 	}
3213 
3214 	amd64_read_pci_cfg(pvt->F3, NBCAP, &pvt->nbcap);
3215 
3216 	read_dram_ctl_register(pvt);
3217 
3218 	for (range = 0; range < DRAM_RANGES; range++) {
3219 		u8 rw;
3220 
3221 		/* read settings for this DRAM range */
3222 		read_dram_base_limit_regs(pvt, range);
3223 
3224 		rw = dram_rw(pvt, range);
3225 		if (!rw)
3226 			continue;
3227 
3228 		edac_dbg(1, "  DRAM range[%d], base: 0x%016llx; limit: 0x%016llx\n",
3229 			 range,
3230 			 get_dram_base(pvt, range),
3231 			 get_dram_limit(pvt, range));
3232 
3233 		edac_dbg(1, "   IntlvEn=%s; Range access: %s%s IntlvSel=%d DstNode=%d\n",
3234 			 dram_intlv_en(pvt, range) ? "Enabled" : "Disabled",
3235 			 (rw & 0x1) ? "R" : "-",
3236 			 (rw & 0x2) ? "W" : "-",
3237 			 dram_intlv_sel(pvt, range),
3238 			 dram_dst_node(pvt, range));
3239 	}
3240 
3241 	amd64_read_pci_cfg(pvt->F1, DHAR, &pvt->dhar);
3242 	amd64_read_dct_pci_cfg(pvt, 0, DBAM0, &pvt->dbam0);
3243 
3244 	amd64_read_pci_cfg(pvt->F3, F10_ONLINE_SPARE, &pvt->online_spare);
3245 
3246 	amd64_read_dct_pci_cfg(pvt, 0, DCLR0, &pvt->dclr0);
3247 	amd64_read_dct_pci_cfg(pvt, 0, DCHR0, &pvt->dchr0);
3248 
3249 	if (!dct_ganging_enabled(pvt)) {
3250 		amd64_read_dct_pci_cfg(pvt, 1, DCLR0, &pvt->dclr1);
3251 		amd64_read_dct_pci_cfg(pvt, 1, DCHR0, &pvt->dchr1);
3252 	}
3253 
3254 	determine_ecc_sym_sz(pvt);
3255 }
3256 
3257 /*
3258  * NOTE: CPU Revision Dependent code
3259  *
3260  * Input:
3261  *	@csrow_nr ChipSelect Row Number (0..NUM_CHIPSELECTS-1)
3262  *	k8 private pointer to -->
3263  *			DRAM Bank Address mapping register
3264  *			node_id
3265  *			DCL register where dual_channel_active is
3266  *
3267  * The DBAM register consists of 4 sets of 4 bits each definitions:
3268  *
3269  * Bits:	CSROWs
3270  * 0-3		CSROWs 0 and 1
3271  * 4-7		CSROWs 2 and 3
3272  * 8-11		CSROWs 4 and 5
3273  * 12-15	CSROWs 6 and 7
3274  *
3275  * Values range from: 0 to 15
3276  * The meaning of the values depends on CPU revision and dual-channel state,
3277  * see relevant BKDG more info.
3278  *
3279  * The memory controller provides for total of only 8 CSROWs in its current
3280  * architecture. Each "pair" of CSROWs normally represents just one DIMM in
3281  * single channel or two (2) DIMMs in dual channel mode.
3282  *
3283  * The following code logic collapses the various tables for CSROW based on CPU
3284  * revision.
3285  *
3286  * Returns:
3287  *	The number of PAGE_SIZE pages on the specified CSROW number it
3288  *	encompasses
3289  *
3290  */
dct_get_csrow_nr_pages(struct amd64_pvt * pvt,u8 dct,int csrow_nr)3291 static u32 dct_get_csrow_nr_pages(struct amd64_pvt *pvt, u8 dct, int csrow_nr)
3292 {
3293 	u32 dbam = dct ? pvt->dbam1 : pvt->dbam0;
3294 	u32 cs_mode, nr_pages;
3295 
3296 	csrow_nr >>= 1;
3297 	cs_mode = DBAM_DIMM(csrow_nr, dbam);
3298 
3299 	nr_pages   = pvt->ops->dbam_to_cs(pvt, dct, cs_mode, csrow_nr);
3300 	nr_pages <<= 20 - PAGE_SHIFT;
3301 
3302 	edac_dbg(0, "csrow: %d, channel: %d, DBAM idx: %d\n",
3303 		    csrow_nr, dct,  cs_mode);
3304 	edac_dbg(0, "nr_pages/channel: %u\n", nr_pages);
3305 
3306 	return nr_pages;
3307 }
3308 
umc_get_csrow_nr_pages(struct amd64_pvt * pvt,u8 dct,int csrow_nr_orig)3309 static u32 umc_get_csrow_nr_pages(struct amd64_pvt *pvt, u8 dct, int csrow_nr_orig)
3310 {
3311 	int csrow_nr = csrow_nr_orig;
3312 	u32 cs_mode, nr_pages;
3313 
3314 	cs_mode = umc_get_cs_mode(csrow_nr >> 1, dct, pvt);
3315 
3316 	nr_pages   = umc_addr_mask_to_cs_size(pvt, dct, cs_mode, csrow_nr);
3317 	nr_pages <<= 20 - PAGE_SHIFT;
3318 
3319 	edac_dbg(0, "csrow: %d, channel: %d, cs_mode %d\n",
3320 		 csrow_nr_orig, dct,  cs_mode);
3321 	edac_dbg(0, "nr_pages/channel: %u\n", nr_pages);
3322 
3323 	return nr_pages;
3324 }
3325 
umc_init_csrows(struct mem_ctl_info * mci)3326 static void umc_init_csrows(struct mem_ctl_info *mci)
3327 {
3328 	struct amd64_pvt *pvt = mci->pvt_info;
3329 	enum edac_type edac_mode = EDAC_NONE;
3330 	enum dev_type dev_type = DEV_UNKNOWN;
3331 	struct dimm_info *dimm;
3332 	u8 umc, cs;
3333 
3334 	if (mci->edac_ctl_cap & EDAC_FLAG_S16ECD16ED) {
3335 		edac_mode = EDAC_S16ECD16ED;
3336 		dev_type = DEV_X16;
3337 	} else if (mci->edac_ctl_cap & EDAC_FLAG_S8ECD8ED) {
3338 		edac_mode = EDAC_S8ECD8ED;
3339 		dev_type = DEV_X8;
3340 	} else if (mci->edac_ctl_cap & EDAC_FLAG_S4ECD4ED) {
3341 		edac_mode = EDAC_S4ECD4ED;
3342 		dev_type = DEV_X4;
3343 	} else if (mci->edac_ctl_cap & EDAC_FLAG_SECDED) {
3344 		edac_mode = EDAC_SECDED;
3345 	}
3346 
3347 	for_each_umc(umc) {
3348 		for_each_chip_select(cs, umc, pvt) {
3349 			if (!csrow_enabled(cs, umc, pvt))
3350 				continue;
3351 
3352 			dimm = mci->csrows[cs]->channels[umc]->dimm;
3353 
3354 			edac_dbg(1, "MC node: %d, csrow: %d\n",
3355 					pvt->mc_node_id, cs);
3356 
3357 			dimm->nr_pages = umc_get_csrow_nr_pages(pvt, umc, cs);
3358 			dimm->mtype = pvt->umc[umc].dram_type;
3359 			dimm->edac_mode = edac_mode;
3360 			dimm->dtype = dev_type;
3361 			dimm->grain = 64;
3362 		}
3363 	}
3364 }
3365 
3366 /*
3367  * Initialize the array of csrow attribute instances, based on the values
3368  * from pci config hardware registers.
3369  */
dct_init_csrows(struct mem_ctl_info * mci)3370 static void dct_init_csrows(struct mem_ctl_info *mci)
3371 {
3372 	struct amd64_pvt *pvt = mci->pvt_info;
3373 	enum edac_type edac_mode = EDAC_NONE;
3374 	struct csrow_info *csrow;
3375 	struct dimm_info *dimm;
3376 	int nr_pages = 0;
3377 	int i, j;
3378 	u32 val;
3379 
3380 	amd64_read_pci_cfg(pvt->F3, NBCFG, &val);
3381 
3382 	pvt->nbcfg = val;
3383 
3384 	edac_dbg(0, "node %d, NBCFG=0x%08x[ChipKillEccCap: %d|DramEccEn: %d]\n",
3385 		 pvt->mc_node_id, val,
3386 		 !!(val & NBCFG_CHIPKILL), !!(val & NBCFG_ECC_ENABLE));
3387 
3388 	/*
3389 	 * We iterate over DCT0 here but we look at DCT1 in parallel, if needed.
3390 	 */
3391 	for_each_chip_select(i, 0, pvt) {
3392 		bool row_dct0 = !!csrow_enabled(i, 0, pvt);
3393 		bool row_dct1 = false;
3394 
3395 		if (pvt->fam != 0xf)
3396 			row_dct1 = !!csrow_enabled(i, 1, pvt);
3397 
3398 		if (!row_dct0 && !row_dct1)
3399 			continue;
3400 
3401 		csrow = mci->csrows[i];
3402 
3403 		edac_dbg(1, "MC node: %d, csrow: %d\n",
3404 			    pvt->mc_node_id, i);
3405 
3406 		if (row_dct0) {
3407 			nr_pages = dct_get_csrow_nr_pages(pvt, 0, i);
3408 			csrow->channels[0]->dimm->nr_pages = nr_pages;
3409 		}
3410 
3411 		/* K8 has only one DCT */
3412 		if (pvt->fam != 0xf && row_dct1) {
3413 			int row_dct1_pages = dct_get_csrow_nr_pages(pvt, 1, i);
3414 
3415 			csrow->channels[1]->dimm->nr_pages = row_dct1_pages;
3416 			nr_pages += row_dct1_pages;
3417 		}
3418 
3419 		edac_dbg(1, "Total csrow%d pages: %u\n", i, nr_pages);
3420 
3421 		/* Determine DIMM ECC mode: */
3422 		if (pvt->nbcfg & NBCFG_ECC_ENABLE) {
3423 			edac_mode = (pvt->nbcfg & NBCFG_CHIPKILL)
3424 					? EDAC_S4ECD4ED
3425 					: EDAC_SECDED;
3426 		}
3427 
3428 		for (j = 0; j < pvt->max_mcs; j++) {
3429 			dimm = csrow->channels[j]->dimm;
3430 			dimm->mtype = pvt->dram_type;
3431 			dimm->edac_mode = edac_mode;
3432 			dimm->grain = 64;
3433 		}
3434 	}
3435 }
3436 
3437 /* get all cores on this DCT */
get_cpus_on_this_dct_cpumask(struct cpumask * mask,u16 nid)3438 static void get_cpus_on_this_dct_cpumask(struct cpumask *mask, u16 nid)
3439 {
3440 	int cpu;
3441 
3442 	for_each_online_cpu(cpu)
3443 		if (topology_die_id(cpu) == nid)
3444 			cpumask_set_cpu(cpu, mask);
3445 }
3446 
3447 /* check MCG_CTL on all the cpus on this node */
nb_mce_bank_enabled_on_node(u16 nid)3448 static bool nb_mce_bank_enabled_on_node(u16 nid)
3449 {
3450 	cpumask_var_t mask;
3451 	int cpu, nbe;
3452 	bool ret = false;
3453 
3454 	if (!zalloc_cpumask_var(&mask, GFP_KERNEL)) {
3455 		amd64_warn("%s: Error allocating mask\n", __func__);
3456 		return false;
3457 	}
3458 
3459 	get_cpus_on_this_dct_cpumask(mask, nid);
3460 
3461 	rdmsr_on_cpus(mask, MSR_IA32_MCG_CTL, msrs);
3462 
3463 	for_each_cpu(cpu, mask) {
3464 		struct msr *reg = per_cpu_ptr(msrs, cpu);
3465 		nbe = reg->l & MSR_MCGCTL_NBE;
3466 
3467 		edac_dbg(0, "core: %u, MCG_CTL: 0x%llx, NB MSR is %s\n",
3468 			 cpu, reg->q,
3469 			 (nbe ? "enabled" : "disabled"));
3470 
3471 		if (!nbe)
3472 			goto out;
3473 	}
3474 	ret = true;
3475 
3476 out:
3477 	free_cpumask_var(mask);
3478 	return ret;
3479 }
3480 
toggle_ecc_err_reporting(struct ecc_settings * s,u16 nid,bool on)3481 static int toggle_ecc_err_reporting(struct ecc_settings *s, u16 nid, bool on)
3482 {
3483 	cpumask_var_t cmask;
3484 	int cpu;
3485 
3486 	if (!zalloc_cpumask_var(&cmask, GFP_KERNEL)) {
3487 		amd64_warn("%s: error allocating mask\n", __func__);
3488 		return -ENOMEM;
3489 	}
3490 
3491 	get_cpus_on_this_dct_cpumask(cmask, nid);
3492 
3493 	rdmsr_on_cpus(cmask, MSR_IA32_MCG_CTL, msrs);
3494 
3495 	for_each_cpu(cpu, cmask) {
3496 
3497 		struct msr *reg = per_cpu_ptr(msrs, cpu);
3498 
3499 		if (on) {
3500 			if (reg->l & MSR_MCGCTL_NBE)
3501 				s->flags.nb_mce_enable = 1;
3502 
3503 			reg->l |= MSR_MCGCTL_NBE;
3504 		} else {
3505 			/*
3506 			 * Turn off NB MCE reporting only when it was off before
3507 			 */
3508 			if (!s->flags.nb_mce_enable)
3509 				reg->l &= ~MSR_MCGCTL_NBE;
3510 		}
3511 	}
3512 	wrmsr_on_cpus(cmask, MSR_IA32_MCG_CTL, msrs);
3513 
3514 	free_cpumask_var(cmask);
3515 
3516 	return 0;
3517 }
3518 
enable_ecc_error_reporting(struct ecc_settings * s,u16 nid,struct pci_dev * F3)3519 static bool enable_ecc_error_reporting(struct ecc_settings *s, u16 nid,
3520 				       struct pci_dev *F3)
3521 {
3522 	bool ret = true;
3523 	u32 value, mask = 0x3;		/* UECC/CECC enable */
3524 
3525 	if (toggle_ecc_err_reporting(s, nid, ON)) {
3526 		amd64_warn("Error enabling ECC reporting over MCGCTL!\n");
3527 		return false;
3528 	}
3529 
3530 	amd64_read_pci_cfg(F3, NBCTL, &value);
3531 
3532 	s->old_nbctl   = value & mask;
3533 	s->nbctl_valid = true;
3534 
3535 	value |= mask;
3536 	amd64_write_pci_cfg(F3, NBCTL, value);
3537 
3538 	amd64_read_pci_cfg(F3, NBCFG, &value);
3539 
3540 	edac_dbg(0, "1: node %d, NBCFG=0x%08x[DramEccEn: %d]\n",
3541 		 nid, value, !!(value & NBCFG_ECC_ENABLE));
3542 
3543 	if (!(value & NBCFG_ECC_ENABLE)) {
3544 		amd64_warn("DRAM ECC disabled on this node, enabling...\n");
3545 
3546 		s->flags.nb_ecc_prev = 0;
3547 
3548 		/* Attempt to turn on DRAM ECC Enable */
3549 		value |= NBCFG_ECC_ENABLE;
3550 		amd64_write_pci_cfg(F3, NBCFG, value);
3551 
3552 		amd64_read_pci_cfg(F3, NBCFG, &value);
3553 
3554 		if (!(value & NBCFG_ECC_ENABLE)) {
3555 			amd64_warn("Hardware rejected DRAM ECC enable,"
3556 				   "check memory DIMM configuration.\n");
3557 			ret = false;
3558 		} else {
3559 			amd64_info("Hardware accepted DRAM ECC Enable\n");
3560 		}
3561 	} else {
3562 		s->flags.nb_ecc_prev = 1;
3563 	}
3564 
3565 	edac_dbg(0, "2: node %d, NBCFG=0x%08x[DramEccEn: %d]\n",
3566 		 nid, value, !!(value & NBCFG_ECC_ENABLE));
3567 
3568 	return ret;
3569 }
3570 
restore_ecc_error_reporting(struct ecc_settings * s,u16 nid,struct pci_dev * F3)3571 static void restore_ecc_error_reporting(struct ecc_settings *s, u16 nid,
3572 					struct pci_dev *F3)
3573 {
3574 	u32 value, mask = 0x3;		/* UECC/CECC enable */
3575 
3576 	if (!s->nbctl_valid)
3577 		return;
3578 
3579 	amd64_read_pci_cfg(F3, NBCTL, &value);
3580 	value &= ~mask;
3581 	value |= s->old_nbctl;
3582 
3583 	amd64_write_pci_cfg(F3, NBCTL, value);
3584 
3585 	/* restore previous BIOS DRAM ECC "off" setting we force-enabled */
3586 	if (!s->flags.nb_ecc_prev) {
3587 		amd64_read_pci_cfg(F3, NBCFG, &value);
3588 		value &= ~NBCFG_ECC_ENABLE;
3589 		amd64_write_pci_cfg(F3, NBCFG, value);
3590 	}
3591 
3592 	/* restore the NB Enable MCGCTL bit */
3593 	if (toggle_ecc_err_reporting(s, nid, OFF))
3594 		amd64_warn("Error restoring NB MCGCTL settings!\n");
3595 }
3596 
dct_ecc_enabled(struct amd64_pvt * pvt)3597 static bool dct_ecc_enabled(struct amd64_pvt *pvt)
3598 {
3599 	u16 nid = pvt->mc_node_id;
3600 	bool nb_mce_en = false;
3601 	u8 ecc_en = 0;
3602 	u32 value;
3603 
3604 	amd64_read_pci_cfg(pvt->F3, NBCFG, &value);
3605 
3606 	ecc_en = !!(value & NBCFG_ECC_ENABLE);
3607 
3608 	nb_mce_en = nb_mce_bank_enabled_on_node(nid);
3609 	if (!nb_mce_en)
3610 		edac_dbg(0, "NB MCE bank disabled, set MSR 0x%08x[4] on node %d to enable.\n",
3611 			 MSR_IA32_MCG_CTL, nid);
3612 
3613 	edac_dbg(3, "Node %d: DRAM ECC %s.\n", nid, (ecc_en ? "enabled" : "disabled"));
3614 
3615 	if (!ecc_en || !nb_mce_en)
3616 		return false;
3617 	else
3618 		return true;
3619 }
3620 
umc_ecc_enabled(struct amd64_pvt * pvt)3621 static bool umc_ecc_enabled(struct amd64_pvt *pvt)
3622 {
3623 	u8 umc_en_mask = 0, ecc_en_mask = 0;
3624 	u16 nid = pvt->mc_node_id;
3625 	struct amd64_umc *umc;
3626 	u8 ecc_en = 0, i;
3627 
3628 	for_each_umc(i) {
3629 		umc = &pvt->umc[i];
3630 
3631 		/* Only check enabled UMCs. */
3632 		if (!(umc->sdp_ctrl & UMC_SDP_INIT))
3633 			continue;
3634 
3635 		umc_en_mask |= BIT(i);
3636 
3637 		if (umc->umc_cap_hi & UMC_ECC_ENABLED)
3638 			ecc_en_mask |= BIT(i);
3639 	}
3640 
3641 	/* Check whether at least one UMC is enabled: */
3642 	if (umc_en_mask)
3643 		ecc_en = umc_en_mask == ecc_en_mask;
3644 	else
3645 		edac_dbg(0, "Node %d: No enabled UMCs.\n", nid);
3646 
3647 	edac_dbg(3, "Node %d: DRAM ECC %s.\n", nid, (ecc_en ? "enabled" : "disabled"));
3648 
3649 	if (!ecc_en)
3650 		return false;
3651 	else
3652 		return true;
3653 }
3654 
3655 static inline void
umc_determine_edac_ctl_cap(struct mem_ctl_info * mci,struct amd64_pvt * pvt)3656 umc_determine_edac_ctl_cap(struct mem_ctl_info *mci, struct amd64_pvt *pvt)
3657 {
3658 	u8 i, ecc_en = 1, cpk_en = 1, dev_x4 = 1, dev_x16 = 1;
3659 
3660 	for_each_umc(i) {
3661 		if (pvt->umc[i].sdp_ctrl & UMC_SDP_INIT) {
3662 			ecc_en &= !!(pvt->umc[i].umc_cap_hi & UMC_ECC_ENABLED);
3663 			cpk_en &= !!(pvt->umc[i].umc_cap_hi & UMC_ECC_CHIPKILL_CAP);
3664 
3665 			dev_x4  &= !!(pvt->umc[i].dimm_cfg & BIT(6));
3666 			dev_x16 &= !!(pvt->umc[i].dimm_cfg & BIT(7));
3667 		}
3668 	}
3669 
3670 	/* Set chipkill only if ECC is enabled: */
3671 	if (ecc_en) {
3672 		mci->edac_ctl_cap |= EDAC_FLAG_SECDED;
3673 
3674 		if (!cpk_en)
3675 			return;
3676 
3677 		if (dev_x4)
3678 			mci->edac_ctl_cap |= EDAC_FLAG_S4ECD4ED;
3679 		else if (dev_x16)
3680 			mci->edac_ctl_cap |= EDAC_FLAG_S16ECD16ED;
3681 		else
3682 			mci->edac_ctl_cap |= EDAC_FLAG_S8ECD8ED;
3683 	}
3684 }
3685 
dct_setup_mci_misc_attrs(struct mem_ctl_info * mci)3686 static void dct_setup_mci_misc_attrs(struct mem_ctl_info *mci)
3687 {
3688 	struct amd64_pvt *pvt = mci->pvt_info;
3689 
3690 	mci->mtype_cap		= MEM_FLAG_DDR2 | MEM_FLAG_RDDR2;
3691 	mci->edac_ctl_cap	= EDAC_FLAG_NONE;
3692 
3693 	if (pvt->nbcap & NBCAP_SECDED)
3694 		mci->edac_ctl_cap |= EDAC_FLAG_SECDED;
3695 
3696 	if (pvt->nbcap & NBCAP_CHIPKILL)
3697 		mci->edac_ctl_cap |= EDAC_FLAG_S4ECD4ED;
3698 
3699 	mci->edac_cap		= dct_determine_edac_cap(pvt);
3700 	mci->mod_name		= EDAC_MOD_STR;
3701 	mci->ctl_name		= pvt->ctl_name;
3702 	mci->dev_name		= pci_name(pvt->F3);
3703 	mci->ctl_page_to_phys	= NULL;
3704 
3705 	/* memory scrubber interface */
3706 	mci->set_sdram_scrub_rate = set_scrub_rate;
3707 	mci->get_sdram_scrub_rate = get_scrub_rate;
3708 
3709 	dct_init_csrows(mci);
3710 }
3711 
umc_setup_mci_misc_attrs(struct mem_ctl_info * mci)3712 static void umc_setup_mci_misc_attrs(struct mem_ctl_info *mci)
3713 {
3714 	struct amd64_pvt *pvt = mci->pvt_info;
3715 
3716 	mci->mtype_cap		= MEM_FLAG_DDR4 | MEM_FLAG_RDDR4;
3717 	mci->edac_ctl_cap	= EDAC_FLAG_NONE;
3718 
3719 	umc_determine_edac_ctl_cap(mci, pvt);
3720 
3721 	mci->edac_cap		= umc_determine_edac_cap(pvt);
3722 	mci->mod_name		= EDAC_MOD_STR;
3723 	mci->ctl_name		= pvt->ctl_name;
3724 	mci->dev_name		= pci_name(pvt->F3);
3725 	mci->ctl_page_to_phys	= NULL;
3726 
3727 	umc_init_csrows(mci);
3728 }
3729 
dct_hw_info_get(struct amd64_pvt * pvt)3730 static int dct_hw_info_get(struct amd64_pvt *pvt)
3731 {
3732 	int ret = reserve_mc_sibling_devs(pvt, pvt->f1_id, pvt->f2_id);
3733 
3734 	if (ret)
3735 		return ret;
3736 
3737 	dct_prep_chip_selects(pvt);
3738 	dct_read_base_mask(pvt);
3739 	dct_read_mc_regs(pvt);
3740 	dct_determine_memory_type(pvt);
3741 
3742 	return 0;
3743 }
3744 
umc_hw_info_get(struct amd64_pvt * pvt)3745 static int umc_hw_info_get(struct amd64_pvt *pvt)
3746 {
3747 	pvt->umc = kcalloc(pvt->max_mcs, sizeof(struct amd64_umc), GFP_KERNEL);
3748 	if (!pvt->umc)
3749 		return -ENOMEM;
3750 
3751 	umc_prep_chip_selects(pvt);
3752 	umc_read_base_mask(pvt);
3753 	umc_read_mc_regs(pvt);
3754 	umc_determine_memory_type(pvt);
3755 
3756 	return 0;
3757 }
3758 
3759 /*
3760  * The CPUs have one channel per UMC, so UMC number is equivalent to a
3761  * channel number. The GPUs have 8 channels per UMC, so the UMC number no
3762  * longer works as a channel number.
3763  *
3764  * The channel number within a GPU UMC is given in MCA_IPID[15:12].
3765  * However, the IDs are split such that two UMC values go to one UMC, and
3766  * the channel numbers are split in two groups of four.
3767  *
3768  * Refer to comment on gpu_get_umc_base().
3769  *
3770  * For example,
3771  * UMC0 CH[3:0] = 0x0005[3:0]000
3772  * UMC0 CH[7:4] = 0x0015[3:0]000
3773  * UMC1 CH[3:0] = 0x0025[3:0]000
3774  * UMC1 CH[7:4] = 0x0035[3:0]000
3775  */
gpu_get_err_info(struct mce * m,struct err_info * err)3776 static void gpu_get_err_info(struct mce *m, struct err_info *err)
3777 {
3778 	u8 ch = (m->ipid & GENMASK(31, 0)) >> 20;
3779 	u8 phy = ((m->ipid >> 12) & 0xf);
3780 
3781 	err->channel = ch % 2 ? phy + 4 : phy;
3782 	err->csrow = phy;
3783 }
3784 
gpu_addr_mask_to_cs_size(struct amd64_pvt * pvt,u8 umc,unsigned int cs_mode,int csrow_nr)3785 static int gpu_addr_mask_to_cs_size(struct amd64_pvt *pvt, u8 umc,
3786 				    unsigned int cs_mode, int csrow_nr)
3787 {
3788 	u32 addr_mask_orig = pvt->csels[umc].csmasks[csrow_nr];
3789 
3790 	return __addr_mask_to_cs_size(addr_mask_orig, cs_mode, csrow_nr, csrow_nr >> 1);
3791 }
3792 
gpu_debug_display_dimm_sizes(struct amd64_pvt * pvt,u8 ctrl)3793 static void gpu_debug_display_dimm_sizes(struct amd64_pvt *pvt, u8 ctrl)
3794 {
3795 	int size, cs_mode, cs = 0;
3796 
3797 	edac_printk(KERN_DEBUG, EDAC_MC, "UMC%d chip selects:\n", ctrl);
3798 
3799 	cs_mode = CS_EVEN_PRIMARY | CS_ODD_PRIMARY;
3800 
3801 	for_each_chip_select(cs, ctrl, pvt) {
3802 		size = gpu_addr_mask_to_cs_size(pvt, ctrl, cs_mode, cs);
3803 		amd64_info(EDAC_MC ": %d: %5dMB\n", cs, size);
3804 	}
3805 }
3806 
gpu_dump_misc_regs(struct amd64_pvt * pvt)3807 static void gpu_dump_misc_regs(struct amd64_pvt *pvt)
3808 {
3809 	struct amd64_umc *umc;
3810 	u32 i;
3811 
3812 	for_each_umc(i) {
3813 		umc = &pvt->umc[i];
3814 
3815 		edac_dbg(1, "UMC%d UMC cfg: 0x%x\n", i, umc->umc_cfg);
3816 		edac_dbg(1, "UMC%d SDP ctrl: 0x%x\n", i, umc->sdp_ctrl);
3817 		edac_dbg(1, "UMC%d ECC ctrl: 0x%x\n", i, umc->ecc_ctrl);
3818 		edac_dbg(1, "UMC%d All HBMs support ECC: yes\n", i);
3819 
3820 		gpu_debug_display_dimm_sizes(pvt, i);
3821 	}
3822 }
3823 
gpu_get_csrow_nr_pages(struct amd64_pvt * pvt,u8 dct,int csrow_nr)3824 static u32 gpu_get_csrow_nr_pages(struct amd64_pvt *pvt, u8 dct, int csrow_nr)
3825 {
3826 	u32 nr_pages;
3827 	int cs_mode = CS_EVEN_PRIMARY | CS_ODD_PRIMARY;
3828 
3829 	nr_pages   = gpu_addr_mask_to_cs_size(pvt, dct, cs_mode, csrow_nr);
3830 	nr_pages <<= 20 - PAGE_SHIFT;
3831 
3832 	edac_dbg(0, "csrow: %d, channel: %d\n", csrow_nr, dct);
3833 	edac_dbg(0, "nr_pages/channel: %u\n", nr_pages);
3834 
3835 	return nr_pages;
3836 }
3837 
gpu_init_csrows(struct mem_ctl_info * mci)3838 static void gpu_init_csrows(struct mem_ctl_info *mci)
3839 {
3840 	struct amd64_pvt *pvt = mci->pvt_info;
3841 	struct dimm_info *dimm;
3842 	u8 umc, cs;
3843 
3844 	for_each_umc(umc) {
3845 		for_each_chip_select(cs, umc, pvt) {
3846 			if (!csrow_enabled(cs, umc, pvt))
3847 				continue;
3848 
3849 			dimm = mci->csrows[umc]->channels[cs]->dimm;
3850 
3851 			edac_dbg(1, "MC node: %d, csrow: %d\n",
3852 				 pvt->mc_node_id, cs);
3853 
3854 			dimm->nr_pages = gpu_get_csrow_nr_pages(pvt, umc, cs);
3855 			dimm->edac_mode = EDAC_SECDED;
3856 			dimm->mtype = MEM_HBM2;
3857 			dimm->dtype = DEV_X16;
3858 			dimm->grain = 64;
3859 		}
3860 	}
3861 }
3862 
gpu_setup_mci_misc_attrs(struct mem_ctl_info * mci)3863 static void gpu_setup_mci_misc_attrs(struct mem_ctl_info *mci)
3864 {
3865 	struct amd64_pvt *pvt = mci->pvt_info;
3866 
3867 	mci->mtype_cap		= MEM_FLAG_HBM2;
3868 	mci->edac_ctl_cap	= EDAC_FLAG_SECDED;
3869 
3870 	mci->edac_cap		= EDAC_FLAG_EC;
3871 	mci->mod_name		= EDAC_MOD_STR;
3872 	mci->ctl_name		= pvt->ctl_name;
3873 	mci->dev_name		= pci_name(pvt->F3);
3874 	mci->ctl_page_to_phys	= NULL;
3875 
3876 	gpu_init_csrows(mci);
3877 }
3878 
3879 /* ECC is enabled by default on GPU nodes */
gpu_ecc_enabled(struct amd64_pvt * pvt)3880 static bool gpu_ecc_enabled(struct amd64_pvt *pvt)
3881 {
3882 	return true;
3883 }
3884 
gpu_get_umc_base(u8 umc,u8 channel)3885 static inline u32 gpu_get_umc_base(u8 umc, u8 channel)
3886 {
3887 	/*
3888 	 * On CPUs, there is one channel per UMC, so UMC numbering equals
3889 	 * channel numbering. On GPUs, there are eight channels per UMC,
3890 	 * so the channel numbering is different from UMC numbering.
3891 	 *
3892 	 * On CPU nodes channels are selected in 6th nibble
3893 	 * UMC chY[3:0]= [(chY*2 + 1) : (chY*2)]50000;
3894 	 *
3895 	 * On GPU nodes channels are selected in 3rd nibble
3896 	 * HBM chX[3:0]= [Y  ]5X[3:0]000;
3897 	 * HBM chX[7:4]= [Y+1]5X[3:0]000
3898 	 */
3899 	umc *= 2;
3900 
3901 	if (channel >= 4)
3902 		umc++;
3903 
3904 	return 0x50000 + (umc << 20) + ((channel % 4) << 12);
3905 }
3906 
gpu_read_mc_regs(struct amd64_pvt * pvt)3907 static void gpu_read_mc_regs(struct amd64_pvt *pvt)
3908 {
3909 	u8 nid = pvt->mc_node_id;
3910 	struct amd64_umc *umc;
3911 	u32 i, umc_base;
3912 
3913 	/* Read registers from each UMC */
3914 	for_each_umc(i) {
3915 		umc_base = gpu_get_umc_base(i, 0);
3916 		umc = &pvt->umc[i];
3917 
3918 		amd_smn_read(nid, umc_base + UMCCH_UMC_CFG, &umc->umc_cfg);
3919 		amd_smn_read(nid, umc_base + UMCCH_SDP_CTRL, &umc->sdp_ctrl);
3920 		amd_smn_read(nid, umc_base + UMCCH_ECC_CTRL, &umc->ecc_ctrl);
3921 	}
3922 }
3923 
gpu_read_base_mask(struct amd64_pvt * pvt)3924 static void gpu_read_base_mask(struct amd64_pvt *pvt)
3925 {
3926 	u32 base_reg, mask_reg;
3927 	u32 *base, *mask;
3928 	int umc, cs;
3929 
3930 	for_each_umc(umc) {
3931 		for_each_chip_select(cs, umc, pvt) {
3932 			base_reg = gpu_get_umc_base(umc, cs) + UMCCH_BASE_ADDR;
3933 			base = &pvt->csels[umc].csbases[cs];
3934 
3935 			if (!amd_smn_read(pvt->mc_node_id, base_reg, base)) {
3936 				edac_dbg(0, "  DCSB%d[%d]=0x%08x reg: 0x%x\n",
3937 					 umc, cs, *base, base_reg);
3938 			}
3939 
3940 			mask_reg = gpu_get_umc_base(umc, cs) + UMCCH_ADDR_MASK;
3941 			mask = &pvt->csels[umc].csmasks[cs];
3942 
3943 			if (!amd_smn_read(pvt->mc_node_id, mask_reg, mask)) {
3944 				edac_dbg(0, "  DCSM%d[%d]=0x%08x reg: 0x%x\n",
3945 					 umc, cs, *mask, mask_reg);
3946 			}
3947 		}
3948 	}
3949 }
3950 
gpu_prep_chip_selects(struct amd64_pvt * pvt)3951 static void gpu_prep_chip_selects(struct amd64_pvt *pvt)
3952 {
3953 	int umc;
3954 
3955 	for_each_umc(umc) {
3956 		pvt->csels[umc].b_cnt = 8;
3957 		pvt->csels[umc].m_cnt = 8;
3958 	}
3959 }
3960 
gpu_hw_info_get(struct amd64_pvt * pvt)3961 static int gpu_hw_info_get(struct amd64_pvt *pvt)
3962 {
3963 	int ret;
3964 
3965 	ret = gpu_get_node_map();
3966 	if (ret)
3967 		return ret;
3968 
3969 	pvt->umc = kcalloc(pvt->max_mcs, sizeof(struct amd64_umc), GFP_KERNEL);
3970 	if (!pvt->umc)
3971 		return -ENOMEM;
3972 
3973 	gpu_prep_chip_selects(pvt);
3974 	gpu_read_base_mask(pvt);
3975 	gpu_read_mc_regs(pvt);
3976 
3977 	return 0;
3978 }
3979 
hw_info_put(struct amd64_pvt * pvt)3980 static void hw_info_put(struct amd64_pvt *pvt)
3981 {
3982 	pci_dev_put(pvt->F1);
3983 	pci_dev_put(pvt->F2);
3984 	kfree(pvt->umc);
3985 }
3986 
3987 static struct low_ops umc_ops = {
3988 	.hw_info_get			= umc_hw_info_get,
3989 	.ecc_enabled			= umc_ecc_enabled,
3990 	.setup_mci_misc_attrs		= umc_setup_mci_misc_attrs,
3991 	.dump_misc_regs			= umc_dump_misc_regs,
3992 	.get_err_info			= umc_get_err_info,
3993 };
3994 
3995 static struct low_ops gpu_ops = {
3996 	.hw_info_get			= gpu_hw_info_get,
3997 	.ecc_enabled			= gpu_ecc_enabled,
3998 	.setup_mci_misc_attrs		= gpu_setup_mci_misc_attrs,
3999 	.dump_misc_regs			= gpu_dump_misc_regs,
4000 	.get_err_info			= gpu_get_err_info,
4001 };
4002 
4003 /* Use Family 16h versions for defaults and adjust as needed below. */
4004 static struct low_ops dct_ops = {
4005 	.map_sysaddr_to_csrow		= f1x_map_sysaddr_to_csrow,
4006 	.dbam_to_cs			= f16_dbam_to_chip_select,
4007 	.hw_info_get			= dct_hw_info_get,
4008 	.ecc_enabled			= dct_ecc_enabled,
4009 	.setup_mci_misc_attrs		= dct_setup_mci_misc_attrs,
4010 	.dump_misc_regs			= dct_dump_misc_regs,
4011 };
4012 
per_family_init(struct amd64_pvt * pvt)4013 static int per_family_init(struct amd64_pvt *pvt)
4014 {
4015 	pvt->ext_model  = boot_cpu_data.x86_model >> 4;
4016 	pvt->stepping	= boot_cpu_data.x86_stepping;
4017 	pvt->model	= boot_cpu_data.x86_model;
4018 	pvt->fam	= boot_cpu_data.x86;
4019 	pvt->max_mcs	= 2;
4020 
4021 	/*
4022 	 * Decide on which ops group to use here and do any family/model
4023 	 * overrides below.
4024 	 */
4025 	if (pvt->fam >= 0x17)
4026 		pvt->ops = &umc_ops;
4027 	else
4028 		pvt->ops = &dct_ops;
4029 
4030 	switch (pvt->fam) {
4031 	case 0xf:
4032 		pvt->ctl_name				= (pvt->ext_model >= K8_REV_F) ?
4033 							  "K8 revF or later" : "K8 revE or earlier";
4034 		pvt->f1_id				= PCI_DEVICE_ID_AMD_K8_NB_ADDRMAP;
4035 		pvt->f2_id				= PCI_DEVICE_ID_AMD_K8_NB_MEMCTL;
4036 		pvt->ops->map_sysaddr_to_csrow		= k8_map_sysaddr_to_csrow;
4037 		pvt->ops->dbam_to_cs			= k8_dbam_to_chip_select;
4038 		break;
4039 
4040 	case 0x10:
4041 		pvt->ctl_name				= "F10h";
4042 		pvt->f1_id				= PCI_DEVICE_ID_AMD_10H_NB_MAP;
4043 		pvt->f2_id				= PCI_DEVICE_ID_AMD_10H_NB_DRAM;
4044 		pvt->ops->dbam_to_cs			= f10_dbam_to_chip_select;
4045 		break;
4046 
4047 	case 0x15:
4048 		switch (pvt->model) {
4049 		case 0x30:
4050 			pvt->ctl_name			= "F15h_M30h";
4051 			pvt->f1_id			= PCI_DEVICE_ID_AMD_15H_M30H_NB_F1;
4052 			pvt->f2_id			= PCI_DEVICE_ID_AMD_15H_M30H_NB_F2;
4053 			break;
4054 		case 0x60:
4055 			pvt->ctl_name			= "F15h_M60h";
4056 			pvt->f1_id			= PCI_DEVICE_ID_AMD_15H_M60H_NB_F1;
4057 			pvt->f2_id			= PCI_DEVICE_ID_AMD_15H_M60H_NB_F2;
4058 			pvt->ops->dbam_to_cs		= f15_m60h_dbam_to_chip_select;
4059 			break;
4060 		case 0x13:
4061 			/* Richland is only client */
4062 			return -ENODEV;
4063 		default:
4064 			pvt->ctl_name			= "F15h";
4065 			pvt->f1_id			= PCI_DEVICE_ID_AMD_15H_NB_F1;
4066 			pvt->f2_id			= PCI_DEVICE_ID_AMD_15H_NB_F2;
4067 			pvt->ops->dbam_to_cs		= f15_dbam_to_chip_select;
4068 			break;
4069 		}
4070 		break;
4071 
4072 	case 0x16:
4073 		switch (pvt->model) {
4074 		case 0x30:
4075 			pvt->ctl_name			= "F16h_M30h";
4076 			pvt->f1_id			= PCI_DEVICE_ID_AMD_16H_M30H_NB_F1;
4077 			pvt->f2_id			= PCI_DEVICE_ID_AMD_16H_M30H_NB_F2;
4078 			break;
4079 		default:
4080 			pvt->ctl_name			= "F16h";
4081 			pvt->f1_id			= PCI_DEVICE_ID_AMD_16H_NB_F1;
4082 			pvt->f2_id			= PCI_DEVICE_ID_AMD_16H_NB_F2;
4083 			break;
4084 		}
4085 		break;
4086 
4087 	case 0x17:
4088 		switch (pvt->model) {
4089 		case 0x10 ... 0x2f:
4090 			pvt->ctl_name			= "F17h_M10h";
4091 			break;
4092 		case 0x30 ... 0x3f:
4093 			pvt->ctl_name			= "F17h_M30h";
4094 			pvt->max_mcs			= 8;
4095 			break;
4096 		case 0x60 ... 0x6f:
4097 			pvt->ctl_name			= "F17h_M60h";
4098 			break;
4099 		case 0x70 ... 0x7f:
4100 			pvt->ctl_name			= "F17h_M70h";
4101 			break;
4102 		default:
4103 			pvt->ctl_name			= "F17h";
4104 			break;
4105 		}
4106 		break;
4107 
4108 	case 0x18:
4109 		pvt->ctl_name				= "F18h";
4110 		break;
4111 
4112 	case 0x19:
4113 		switch (pvt->model) {
4114 		case 0x00 ... 0x0f:
4115 			pvt->ctl_name			= "F19h";
4116 			pvt->max_mcs			= 8;
4117 			break;
4118 		case 0x10 ... 0x1f:
4119 			pvt->ctl_name			= "F19h_M10h";
4120 			pvt->max_mcs			= 12;
4121 			pvt->flags.zn_regs_v2		= 1;
4122 			break;
4123 		case 0x20 ... 0x2f:
4124 			pvt->ctl_name			= "F19h_M20h";
4125 			break;
4126 		case 0x30 ... 0x3f:
4127 			if (pvt->F3->device == PCI_DEVICE_ID_AMD_MI200_DF_F3) {
4128 				pvt->ctl_name		= "MI200";
4129 				pvt->max_mcs		= 4;
4130 				pvt->ops		= &gpu_ops;
4131 			} else {
4132 				pvt->ctl_name		= "F19h_M30h";
4133 				pvt->max_mcs		= 8;
4134 			}
4135 			break;
4136 		case 0x50 ... 0x5f:
4137 			pvt->ctl_name			= "F19h_M50h";
4138 			break;
4139 		case 0x60 ... 0x6f:
4140 			pvt->ctl_name			= "F19h_M60h";
4141 			pvt->flags.zn_regs_v2		= 1;
4142 			break;
4143 		case 0x70 ... 0x7f:
4144 			pvt->ctl_name			= "F19h_M70h";
4145 			pvt->flags.zn_regs_v2		= 1;
4146 			break;
4147 		case 0xa0 ... 0xaf:
4148 			pvt->ctl_name			= "F19h_MA0h";
4149 			pvt->max_mcs			= 12;
4150 			pvt->flags.zn_regs_v2		= 1;
4151 			break;
4152 		}
4153 		break;
4154 
4155 	case 0x1A:
4156 		switch (pvt->model) {
4157 		case 0x00 ... 0x1f:
4158 			pvt->ctl_name           = "F1Ah";
4159 			pvt->max_mcs            = 12;
4160 			pvt->flags.zn_regs_v2   = 1;
4161 			break;
4162 		case 0x40 ... 0x4f:
4163 			pvt->ctl_name           = "F1Ah_M40h";
4164 			pvt->flags.zn_regs_v2   = 1;
4165 			break;
4166 		}
4167 		break;
4168 
4169 	default:
4170 		amd64_err("Unsupported family!\n");
4171 		return -ENODEV;
4172 	}
4173 
4174 	return 0;
4175 }
4176 
4177 static const struct attribute_group *amd64_edac_attr_groups[] = {
4178 #ifdef CONFIG_EDAC_DEBUG
4179 	&dbg_group,
4180 	&inj_group,
4181 #endif
4182 	NULL
4183 };
4184 
init_one_instance(struct amd64_pvt * pvt)4185 static int init_one_instance(struct amd64_pvt *pvt)
4186 {
4187 	struct mem_ctl_info *mci = NULL;
4188 	struct edac_mc_layer layers[2];
4189 	int ret = -ENOMEM;
4190 
4191 	/*
4192 	 * For Heterogeneous family EDAC CHIP_SELECT and CHANNEL layers should
4193 	 * be swapped to fit into the layers.
4194 	 */
4195 	layers[0].type = EDAC_MC_LAYER_CHIP_SELECT;
4196 	layers[0].size = (pvt->F3->device == PCI_DEVICE_ID_AMD_MI200_DF_F3) ?
4197 			 pvt->max_mcs : pvt->csels[0].b_cnt;
4198 	layers[0].is_virt_csrow = true;
4199 	layers[1].type = EDAC_MC_LAYER_CHANNEL;
4200 	layers[1].size = (pvt->F3->device == PCI_DEVICE_ID_AMD_MI200_DF_F3) ?
4201 			 pvt->csels[0].b_cnt : pvt->max_mcs;
4202 	layers[1].is_virt_csrow = false;
4203 
4204 	mci = edac_mc_alloc(pvt->mc_node_id, ARRAY_SIZE(layers), layers, 0);
4205 	if (!mci)
4206 		return ret;
4207 
4208 	mci->pvt_info = pvt;
4209 	mci->pdev = &pvt->F3->dev;
4210 
4211 	pvt->ops->setup_mci_misc_attrs(mci);
4212 
4213 	ret = -ENODEV;
4214 	if (edac_mc_add_mc_with_groups(mci, amd64_edac_attr_groups)) {
4215 		edac_dbg(1, "failed edac_mc_add_mc()\n");
4216 		edac_mc_free(mci);
4217 		return ret;
4218 	}
4219 
4220 	return 0;
4221 }
4222 
instance_has_memory(struct amd64_pvt * pvt)4223 static bool instance_has_memory(struct amd64_pvt *pvt)
4224 {
4225 	bool cs_enabled = false;
4226 	int cs = 0, dct = 0;
4227 
4228 	for (dct = 0; dct < pvt->max_mcs; dct++) {
4229 		for_each_chip_select(cs, dct, pvt)
4230 			cs_enabled |= csrow_enabled(cs, dct, pvt);
4231 	}
4232 
4233 	return cs_enabled;
4234 }
4235 
probe_one_instance(unsigned int nid)4236 static int probe_one_instance(unsigned int nid)
4237 {
4238 	struct pci_dev *F3 = node_to_amd_nb(nid)->misc;
4239 	struct amd64_pvt *pvt = NULL;
4240 	struct ecc_settings *s;
4241 	int ret;
4242 
4243 	ret = -ENOMEM;
4244 	s = kzalloc(sizeof(struct ecc_settings), GFP_KERNEL);
4245 	if (!s)
4246 		goto err_out;
4247 
4248 	ecc_stngs[nid] = s;
4249 
4250 	pvt = kzalloc(sizeof(struct amd64_pvt), GFP_KERNEL);
4251 	if (!pvt)
4252 		goto err_settings;
4253 
4254 	pvt->mc_node_id	= nid;
4255 	pvt->F3 = F3;
4256 
4257 	ret = per_family_init(pvt);
4258 	if (ret < 0)
4259 		goto err_enable;
4260 
4261 	ret = pvt->ops->hw_info_get(pvt);
4262 	if (ret < 0)
4263 		goto err_enable;
4264 
4265 	ret = 0;
4266 	if (!instance_has_memory(pvt)) {
4267 		amd64_info("Node %d: No DIMMs detected.\n", nid);
4268 		goto err_enable;
4269 	}
4270 
4271 	if (!pvt->ops->ecc_enabled(pvt)) {
4272 		ret = -ENODEV;
4273 
4274 		if (!ecc_enable_override)
4275 			goto err_enable;
4276 
4277 		if (boot_cpu_data.x86 >= 0x17) {
4278 			amd64_warn("Forcing ECC on is not recommended on newer systems. Please enable ECC in BIOS.");
4279 			goto err_enable;
4280 		} else
4281 			amd64_warn("Forcing ECC on!\n");
4282 
4283 		if (!enable_ecc_error_reporting(s, nid, F3))
4284 			goto err_enable;
4285 	}
4286 
4287 	ret = init_one_instance(pvt);
4288 	if (ret < 0) {
4289 		amd64_err("Error probing instance: %d\n", nid);
4290 
4291 		if (boot_cpu_data.x86 < 0x17)
4292 			restore_ecc_error_reporting(s, nid, F3);
4293 
4294 		goto err_enable;
4295 	}
4296 
4297 	amd64_info("%s detected (node %d).\n", pvt->ctl_name, pvt->mc_node_id);
4298 
4299 	/* Display and decode various registers for debug purposes. */
4300 	pvt->ops->dump_misc_regs(pvt);
4301 
4302 	return ret;
4303 
4304 err_enable:
4305 	hw_info_put(pvt);
4306 	kfree(pvt);
4307 
4308 err_settings:
4309 	kfree(s);
4310 	ecc_stngs[nid] = NULL;
4311 
4312 err_out:
4313 	return ret;
4314 }
4315 
remove_one_instance(unsigned int nid)4316 static void remove_one_instance(unsigned int nid)
4317 {
4318 	struct pci_dev *F3 = node_to_amd_nb(nid)->misc;
4319 	struct ecc_settings *s = ecc_stngs[nid];
4320 	struct mem_ctl_info *mci;
4321 	struct amd64_pvt *pvt;
4322 
4323 	/* Remove from EDAC CORE tracking list */
4324 	mci = edac_mc_del_mc(&F3->dev);
4325 	if (!mci)
4326 		return;
4327 
4328 	pvt = mci->pvt_info;
4329 
4330 	restore_ecc_error_reporting(s, nid, F3);
4331 
4332 	kfree(ecc_stngs[nid]);
4333 	ecc_stngs[nid] = NULL;
4334 
4335 	/* Free the EDAC CORE resources */
4336 	mci->pvt_info = NULL;
4337 
4338 	hw_info_put(pvt);
4339 	kfree(pvt);
4340 	edac_mc_free(mci);
4341 }
4342 
setup_pci_device(void)4343 static void setup_pci_device(void)
4344 {
4345 	if (pci_ctl)
4346 		return;
4347 
4348 	pci_ctl = edac_pci_create_generic_ctl(pci_ctl_dev, EDAC_MOD_STR);
4349 	if (!pci_ctl) {
4350 		pr_warn("%s(): Unable to create PCI control\n", __func__);
4351 		pr_warn("%s(): PCI error report via EDAC not set\n", __func__);
4352 	}
4353 }
4354 
4355 static const struct x86_cpu_id amd64_cpuids[] = {
4356 	X86_MATCH_VENDOR_FAM(AMD,	0x0F, NULL),
4357 	X86_MATCH_VENDOR_FAM(AMD,	0x10, NULL),
4358 	X86_MATCH_VENDOR_FAM(AMD,	0x15, NULL),
4359 	X86_MATCH_VENDOR_FAM(AMD,	0x16, NULL),
4360 	X86_MATCH_VENDOR_FAM(AMD,	0x17, NULL),
4361 	X86_MATCH_VENDOR_FAM(HYGON,	0x18, NULL),
4362 	X86_MATCH_VENDOR_FAM(AMD,	0x19, NULL),
4363 	X86_MATCH_VENDOR_FAM(AMD,	0x1A, NULL),
4364 	{ }
4365 };
4366 MODULE_DEVICE_TABLE(x86cpu, amd64_cpuids);
4367 
amd64_edac_init(void)4368 static int __init amd64_edac_init(void)
4369 {
4370 	const char *owner;
4371 	int err = -ENODEV;
4372 	int i;
4373 
4374 	if (ghes_get_devices())
4375 		return -EBUSY;
4376 
4377 	owner = edac_get_owner();
4378 	if (owner && strncmp(owner, EDAC_MOD_STR, sizeof(EDAC_MOD_STR)))
4379 		return -EBUSY;
4380 
4381 	if (!x86_match_cpu(amd64_cpuids))
4382 		return -ENODEV;
4383 
4384 	if (!amd_nb_num())
4385 		return -ENODEV;
4386 
4387 	opstate_init();
4388 
4389 	err = -ENOMEM;
4390 	ecc_stngs = kcalloc(amd_nb_num(), sizeof(ecc_stngs[0]), GFP_KERNEL);
4391 	if (!ecc_stngs)
4392 		goto err_free;
4393 
4394 	msrs = msrs_alloc();
4395 	if (!msrs)
4396 		goto err_free;
4397 
4398 	for (i = 0; i < amd_nb_num(); i++) {
4399 		err = probe_one_instance(i);
4400 		if (err) {
4401 			/* unwind properly */
4402 			while (--i >= 0)
4403 				remove_one_instance(i);
4404 
4405 			goto err_pci;
4406 		}
4407 	}
4408 
4409 	if (!edac_has_mcs()) {
4410 		err = -ENODEV;
4411 		goto err_pci;
4412 	}
4413 
4414 	/* register stuff with EDAC MCE */
4415 	if (boot_cpu_data.x86 >= 0x17) {
4416 		amd_register_ecc_decoder(decode_umc_error);
4417 	} else {
4418 		amd_register_ecc_decoder(decode_bus_error);
4419 		setup_pci_device();
4420 	}
4421 
4422 #ifdef CONFIG_X86_32
4423 	amd64_err("%s on 32-bit is unsupported. USE AT YOUR OWN RISK!\n", EDAC_MOD_STR);
4424 #endif
4425 
4426 	return 0;
4427 
4428 err_pci:
4429 	pci_ctl_dev = NULL;
4430 
4431 	msrs_free(msrs);
4432 	msrs = NULL;
4433 
4434 err_free:
4435 	kfree(ecc_stngs);
4436 	ecc_stngs = NULL;
4437 
4438 	return err;
4439 }
4440 
amd64_edac_exit(void)4441 static void __exit amd64_edac_exit(void)
4442 {
4443 	int i;
4444 
4445 	if (pci_ctl)
4446 		edac_pci_release_generic_ctl(pci_ctl);
4447 
4448 	/* unregister from EDAC MCE */
4449 	if (boot_cpu_data.x86 >= 0x17)
4450 		amd_unregister_ecc_decoder(decode_umc_error);
4451 	else
4452 		amd_unregister_ecc_decoder(decode_bus_error);
4453 
4454 	for (i = 0; i < amd_nb_num(); i++)
4455 		remove_one_instance(i);
4456 
4457 	kfree(ecc_stngs);
4458 	ecc_stngs = NULL;
4459 
4460 	pci_ctl_dev = NULL;
4461 
4462 	msrs_free(msrs);
4463 	msrs = NULL;
4464 }
4465 
4466 module_init(amd64_edac_init);
4467 module_exit(amd64_edac_exit);
4468 
4469 MODULE_LICENSE("GPL");
4470 MODULE_AUTHOR("SoftwareBitMaker: Doug Thompson, Dave Peterson, Thayne Harbaugh; AMD");
4471 MODULE_DESCRIPTION("MC support for AMD64 memory controllers");
4472 
4473 module_param(edac_op_state, int, 0444);
4474 MODULE_PARM_DESC(edac_op_state, "EDAC Error Reporting state: 0=Poll,1=NMI");
4475