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