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