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