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