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