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