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