1// SPDX-License-Identifier: GPL-2.0-only
2#include "amd64_edac.h"
3#include <asm/amd_nb.h>
4
5static 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 */
11static int ecc_enable_override;
12module_param(ecc_enable_override, int, 0644);
13
14static struct msr __percpu *msrs;
15
16static 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 */
32static struct ecc_settings **ecc_stngs;
33
34/* Device for the PCI component */
35static 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 */
44static 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
73int __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
86int __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 */
102static 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 */
126static 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 */
187static 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
230static 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
249static 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 */
283static 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 */
305static 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
358found:
359	return edac_mc_find((int)node_id);
360
361err_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 */
372static 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 */
444static 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 */
490static 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)						\
547static 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
556EDAC_DCT_ATTR_SHOW(dhar);
557EDAC_DCT_ATTR_SHOW(dbam0);
558EDAC_DCT_ATTR_SHOW(top_mem);
559EDAC_DCT_ATTR_SHOW(top_mem2);
560
561static 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 */
579static DEVICE_ATTR(dhar, S_IRUGO, dhar_show, NULL);
580static DEVICE_ATTR(dbam, S_IRUGO, dbam0_show, NULL);
581static DEVICE_ATTR(topmem, S_IRUGO, top_mem_show, NULL);
582static DEVICE_ATTR(topmem2, S_IRUGO, top_mem2_show, NULL);
583static DEVICE_ATTR_RO(dram_hole);
584
585static 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
594static const struct attribute_group dbg_group = {
595	.attrs = dbg_attrs,
596};
597
598static 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 */
612static 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
634static 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 */
648static 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
670static 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 */
684static 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 */
710static 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 */
743static 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
792static DEVICE_ATTR_RW(inject_section);
793static DEVICE_ATTR_RW(inject_word);
794static DEVICE_ATTR_RW(inject_ecc_vector);
795static DEVICE_ATTR_WO(inject_write);
796static DEVICE_ATTR_WO(inject_read);
797
798static 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
807static 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
820static 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 */
855static 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 */
899static 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. */
910static 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 */
937static 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. */
951static 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 */
966static 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 */
987static 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
999static 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
1025out:
1026	pci_dev_put(pdev);
1027	return ret;
1028}
1029
1030static 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. */
1047static 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
1062static 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
1092out_unlock:
1093	mutex_unlock(&df_indirect_mutex);
1094
1095out:
1096	return err;
1097}
1098
1099static 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
1104static 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
1109struct addr_ctx {
1110	u64 ret_addr;
1111	u32 tmp;
1112	u16 nid;
1113	u8 inst_id;
1114};
1115
1116static 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
1317out_err:
1318	return -EINVAL;
1319}
1320
1321static 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 */
1327static 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
1342static 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 */
1368static 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
1424static 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
1465static 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
1497static 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
1533static 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
1584static 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
1605static 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
1648static 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 */
1688static 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
1702static 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
1712static 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 */
1766static 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
1809static 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
1846static 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
1903ddr3:
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] */
1908static 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
1973static 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
1989static 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
2043static 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
2097static 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
2111static 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
2158static 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
2180static 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
2200static 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
2215static 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 */
2231static 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.. */
2240static 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 */
2273static 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
2285static 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 */
2319static 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 */
2350static 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 */
2394static 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 */
2445static 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 */
2470static 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 */
2519static 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. */
2549static 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
2629static 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
2751static 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 */
2785static 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 */
2814static 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
2853static 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
2875static 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
2911static 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
2942static 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
2963static 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
3010static 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 */
3058static 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
3064static 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
3108log_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 */
3116static int
3117reserve_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
3146static 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 */
3167static 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 */
3191static 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 */
3289static 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
3307static 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
3324static 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 */
3368static 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 */
3436static 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 */
3446static 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
3474out:
3475	free_cpumask_var(mask);
3476	return ret;
3477}
3478
3479static 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
3517static 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
3569static 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
3595static 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
3619static 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
3653static inline void
3654umc_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
3684static 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
3710static 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
3728static 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
3743static 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 */
3774static 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
3783static 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
3791static 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
3805static 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
3822static 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
3836static 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
3861static 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 */
3878static bool gpu_ecc_enabled(struct amd64_pvt *pvt)
3879{
3880	return true;
3881}
3882
3883static 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
3905static 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
3922static 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
3949static 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
3959static 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
3978static 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
3985static 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
3993static 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. */
4002static 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
4011static 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	case 0x1A:
4154		switch (pvt->model) {
4155		case 0x00 ... 0x1f:
4156			pvt->ctl_name           = "F1Ah";
4157			pvt->max_mcs            = 12;
4158			pvt->flags.zn_regs_v2   = 1;
4159			break;
4160		case 0x40 ... 0x4f:
4161			pvt->ctl_name           = "F1Ah_M40h";
4162			pvt->flags.zn_regs_v2   = 1;
4163			break;
4164		}
4165		break;
4166
4167	default:
4168		amd64_err("Unsupported family!\n");
4169		return -ENODEV;
4170	}
4171
4172	return 0;
4173}
4174
4175static const struct attribute_group *amd64_edac_attr_groups[] = {
4176#ifdef CONFIG_EDAC_DEBUG
4177	&dbg_group,
4178	&inj_group,
4179#endif
4180	NULL
4181};
4182
4183static int init_one_instance(struct amd64_pvt *pvt)
4184{
4185	struct mem_ctl_info *mci = NULL;
4186	struct edac_mc_layer layers[2];
4187	int ret = -ENOMEM;
4188
4189	/*
4190	 * For Heterogeneous family EDAC CHIP_SELECT and CHANNEL layers should
4191	 * be swapped to fit into the layers.
4192	 */
4193	layers[0].type = EDAC_MC_LAYER_CHIP_SELECT;
4194	layers[0].size = (pvt->F3->device == PCI_DEVICE_ID_AMD_MI200_DF_F3) ?
4195			 pvt->max_mcs : pvt->csels[0].b_cnt;
4196	layers[0].is_virt_csrow = true;
4197	layers[1].type = EDAC_MC_LAYER_CHANNEL;
4198	layers[1].size = (pvt->F3->device == PCI_DEVICE_ID_AMD_MI200_DF_F3) ?
4199			 pvt->csels[0].b_cnt : pvt->max_mcs;
4200	layers[1].is_virt_csrow = false;
4201
4202	mci = edac_mc_alloc(pvt->mc_node_id, ARRAY_SIZE(layers), layers, 0);
4203	if (!mci)
4204		return ret;
4205
4206	mci->pvt_info = pvt;
4207	mci->pdev = &pvt->F3->dev;
4208
4209	pvt->ops->setup_mci_misc_attrs(mci);
4210
4211	ret = -ENODEV;
4212	if (edac_mc_add_mc_with_groups(mci, amd64_edac_attr_groups)) {
4213		edac_dbg(1, "failed edac_mc_add_mc()\n");
4214		edac_mc_free(mci);
4215		return ret;
4216	}
4217
4218	return 0;
4219}
4220
4221static bool instance_has_memory(struct amd64_pvt *pvt)
4222{
4223	bool cs_enabled = false;
4224	int cs = 0, dct = 0;
4225
4226	for (dct = 0; dct < pvt->max_mcs; dct++) {
4227		for_each_chip_select(cs, dct, pvt)
4228			cs_enabled |= csrow_enabled(cs, dct, pvt);
4229	}
4230
4231	return cs_enabled;
4232}
4233
4234static int probe_one_instance(unsigned int nid)
4235{
4236	struct pci_dev *F3 = node_to_amd_nb(nid)->misc;
4237	struct amd64_pvt *pvt = NULL;
4238	struct ecc_settings *s;
4239	int ret;
4240
4241	ret = -ENOMEM;
4242	s = kzalloc(sizeof(struct ecc_settings), GFP_KERNEL);
4243	if (!s)
4244		goto err_out;
4245
4246	ecc_stngs[nid] = s;
4247
4248	pvt = kzalloc(sizeof(struct amd64_pvt), GFP_KERNEL);
4249	if (!pvt)
4250		goto err_settings;
4251
4252	pvt->mc_node_id	= nid;
4253	pvt->F3 = F3;
4254
4255	ret = per_family_init(pvt);
4256	if (ret < 0)
4257		goto err_enable;
4258
4259	ret = pvt->ops->hw_info_get(pvt);
4260	if (ret < 0)
4261		goto err_enable;
4262
4263	ret = 0;
4264	if (!instance_has_memory(pvt)) {
4265		amd64_info("Node %d: No DIMMs detected.\n", nid);
4266		goto err_enable;
4267	}
4268
4269	if (!pvt->ops->ecc_enabled(pvt)) {
4270		ret = -ENODEV;
4271
4272		if (!ecc_enable_override)
4273			goto err_enable;
4274
4275		if (boot_cpu_data.x86 >= 0x17) {
4276			amd64_warn("Forcing ECC on is not recommended on newer systems. Please enable ECC in BIOS.");
4277			goto err_enable;
4278		} else
4279			amd64_warn("Forcing ECC on!\n");
4280
4281		if (!enable_ecc_error_reporting(s, nid, F3))
4282			goto err_enable;
4283	}
4284
4285	ret = init_one_instance(pvt);
4286	if (ret < 0) {
4287		amd64_err("Error probing instance: %d\n", nid);
4288
4289		if (boot_cpu_data.x86 < 0x17)
4290			restore_ecc_error_reporting(s, nid, F3);
4291
4292		goto err_enable;
4293	}
4294
4295	amd64_info("%s detected (node %d).\n", pvt->ctl_name, pvt->mc_node_id);
4296
4297	/* Display and decode various registers for debug purposes. */
4298	pvt->ops->dump_misc_regs(pvt);
4299
4300	return ret;
4301
4302err_enable:
4303	hw_info_put(pvt);
4304	kfree(pvt);
4305
4306err_settings:
4307	kfree(s);
4308	ecc_stngs[nid] = NULL;
4309
4310err_out:
4311	return ret;
4312}
4313
4314static void remove_one_instance(unsigned int nid)
4315{
4316	struct pci_dev *F3 = node_to_amd_nb(nid)->misc;
4317	struct ecc_settings *s = ecc_stngs[nid];
4318	struct mem_ctl_info *mci;
4319	struct amd64_pvt *pvt;
4320
4321	/* Remove from EDAC CORE tracking list */
4322	mci = edac_mc_del_mc(&F3->dev);
4323	if (!mci)
4324		return;
4325
4326	pvt = mci->pvt_info;
4327
4328	restore_ecc_error_reporting(s, nid, F3);
4329
4330	kfree(ecc_stngs[nid]);
4331	ecc_stngs[nid] = NULL;
4332
4333	/* Free the EDAC CORE resources */
4334	mci->pvt_info = NULL;
4335
4336	hw_info_put(pvt);
4337	kfree(pvt);
4338	edac_mc_free(mci);
4339}
4340
4341static void setup_pci_device(void)
4342{
4343	if (pci_ctl)
4344		return;
4345
4346	pci_ctl = edac_pci_create_generic_ctl(pci_ctl_dev, EDAC_MOD_STR);
4347	if (!pci_ctl) {
4348		pr_warn("%s(): Unable to create PCI control\n", __func__);
4349		pr_warn("%s(): PCI error report via EDAC not set\n", __func__);
4350	}
4351}
4352
4353static const struct x86_cpu_id amd64_cpuids[] = {
4354	X86_MATCH_VENDOR_FAM(AMD,	0x0F, NULL),
4355	X86_MATCH_VENDOR_FAM(AMD,	0x10, NULL),
4356	X86_MATCH_VENDOR_FAM(AMD,	0x15, NULL),
4357	X86_MATCH_VENDOR_FAM(AMD,	0x16, NULL),
4358	X86_MATCH_VENDOR_FAM(AMD,	0x17, NULL),
4359	X86_MATCH_VENDOR_FAM(HYGON,	0x18, NULL),
4360	X86_MATCH_VENDOR_FAM(AMD,	0x19, NULL),
4361	X86_MATCH_VENDOR_FAM(AMD,	0x1A, NULL),
4362	{ }
4363};
4364MODULE_DEVICE_TABLE(x86cpu, amd64_cpuids);
4365
4366static int __init amd64_edac_init(void)
4367{
4368	const char *owner;
4369	int err = -ENODEV;
4370	int i;
4371
4372	if (ghes_get_devices())
4373		return -EBUSY;
4374
4375	owner = edac_get_owner();
4376	if (owner && strncmp(owner, EDAC_MOD_STR, sizeof(EDAC_MOD_STR)))
4377		return -EBUSY;
4378
4379	if (!x86_match_cpu(amd64_cpuids))
4380		return -ENODEV;
4381
4382	if (!amd_nb_num())
4383		return -ENODEV;
4384
4385	opstate_init();
4386
4387	err = -ENOMEM;
4388	ecc_stngs = kcalloc(amd_nb_num(), sizeof(ecc_stngs[0]), GFP_KERNEL);
4389	if (!ecc_stngs)
4390		goto err_free;
4391
4392	msrs = msrs_alloc();
4393	if (!msrs)
4394		goto err_free;
4395
4396	for (i = 0; i < amd_nb_num(); i++) {
4397		err = probe_one_instance(i);
4398		if (err) {
4399			/* unwind properly */
4400			while (--i >= 0)
4401				remove_one_instance(i);
4402
4403			goto err_pci;
4404		}
4405	}
4406
4407	if (!edac_has_mcs()) {
4408		err = -ENODEV;
4409		goto err_pci;
4410	}
4411
4412	/* register stuff with EDAC MCE */
4413	if (boot_cpu_data.x86 >= 0x17) {
4414		amd_register_ecc_decoder(decode_umc_error);
4415	} else {
4416		amd_register_ecc_decoder(decode_bus_error);
4417		setup_pci_device();
4418	}
4419
4420#ifdef CONFIG_X86_32
4421	amd64_err("%s on 32-bit is unsupported. USE AT YOUR OWN RISK!\n", EDAC_MOD_STR);
4422#endif
4423
4424	return 0;
4425
4426err_pci:
4427	pci_ctl_dev = NULL;
4428
4429	msrs_free(msrs);
4430	msrs = NULL;
4431
4432err_free:
4433	kfree(ecc_stngs);
4434	ecc_stngs = NULL;
4435
4436	return err;
4437}
4438
4439static void __exit amd64_edac_exit(void)
4440{
4441	int i;
4442
4443	if (pci_ctl)
4444		edac_pci_release_generic_ctl(pci_ctl);
4445
4446	/* unregister from EDAC MCE */
4447	if (boot_cpu_data.x86 >= 0x17)
4448		amd_unregister_ecc_decoder(decode_umc_error);
4449	else
4450		amd_unregister_ecc_decoder(decode_bus_error);
4451
4452	for (i = 0; i < amd_nb_num(); i++)
4453		remove_one_instance(i);
4454
4455	kfree(ecc_stngs);
4456	ecc_stngs = NULL;
4457
4458	pci_ctl_dev = NULL;
4459
4460	msrs_free(msrs);
4461	msrs = NULL;
4462}
4463
4464module_init(amd64_edac_init);
4465module_exit(amd64_edac_exit);
4466
4467MODULE_LICENSE("GPL");
4468MODULE_AUTHOR("SoftwareBitMaker: Doug Thompson, Dave Peterson, Thayne Harbaugh; AMD");
4469MODULE_DESCRIPTION("MC support for AMD64 memory controllers");
4470
4471module_param(edac_op_state, int, 0444);
4472MODULE_PARM_DESC(edac_op_state, "EDAC Error Reporting state: 0=Poll,1=NMI");
4473