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