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