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 /* Asymmetric dual-rank DIMM support. */
1479 if (csrow_sec_enabled(2 * dimm + 1, ctrl, pvt))
1480 cs_mode |= CS_ODD_SECONDARY;
1481
1482 /*
1483 * 3 Rank inteleaving support.
1484 * There should be only three bases enabled and their two masks should
1485 * be equal.
1486 */
1487 for_each_chip_select(base, ctrl, pvt)
1488 count += csrow_enabled(base, ctrl, pvt);
1489
1490 if (count == 3 &&
1491 pvt->csels[ctrl].csmasks[0] == pvt->csels[ctrl].csmasks[1]) {
1492 edac_dbg(1, "3R interleaving in use.\n");
1493 cs_mode |= CS_3R_INTERLEAVE;
1494 }
1495
1496 return cs_mode;
1497 }
1498
__addr_mask_to_cs_size(u32 addr_mask_orig,unsigned int cs_mode,int csrow_nr,int dimm)1499 static int __addr_mask_to_cs_size(u32 addr_mask_orig, unsigned int cs_mode,
1500 int csrow_nr, int dimm)
1501 {
1502 u32 msb, weight, num_zero_bits;
1503 u32 addr_mask_deinterleaved;
1504 int size = 0;
1505
1506 /*
1507 * The number of zero bits in the mask is equal to the number of bits
1508 * in a full mask minus the number of bits in the current mask.
1509 *
1510 * The MSB is the number of bits in the full mask because BIT[0] is
1511 * always 0.
1512 *
1513 * In the special 3 Rank interleaving case, a single bit is flipped
1514 * without swapping with the most significant bit. This can be handled
1515 * by keeping the MSB where it is and ignoring the single zero bit.
1516 */
1517 msb = fls(addr_mask_orig) - 1;
1518 weight = hweight_long(addr_mask_orig);
1519 num_zero_bits = msb - weight - !!(cs_mode & CS_3R_INTERLEAVE);
1520
1521 /* Take the number of zero bits off from the top of the mask. */
1522 addr_mask_deinterleaved = GENMASK_ULL(msb - num_zero_bits, 1);
1523
1524 edac_dbg(1, "CS%d DIMM%d AddrMasks:\n", csrow_nr, dimm);
1525 edac_dbg(1, " Original AddrMask: 0x%x\n", addr_mask_orig);
1526 edac_dbg(1, " Deinterleaved AddrMask: 0x%x\n", addr_mask_deinterleaved);
1527
1528 /* Register [31:1] = Address [39:9]. Size is in kBs here. */
1529 size = (addr_mask_deinterleaved >> 2) + 1;
1530
1531 /* Return size in MBs. */
1532 return size >> 10;
1533 }
1534
umc_addr_mask_to_cs_size(struct amd64_pvt * pvt,u8 umc,unsigned int cs_mode,int csrow_nr)1535 static int umc_addr_mask_to_cs_size(struct amd64_pvt *pvt, u8 umc,
1536 unsigned int cs_mode, int csrow_nr)
1537 {
1538 int cs_mask_nr = csrow_nr;
1539 u32 addr_mask_orig;
1540 int dimm, size = 0;
1541
1542 /* No Chip Selects are enabled. */
1543 if (!cs_mode)
1544 return size;
1545
1546 /* Requested size of an even CS but none are enabled. */
1547 if (!(cs_mode & CS_EVEN) && !(csrow_nr & 1))
1548 return size;
1549
1550 /* Requested size of an odd CS but none are enabled. */
1551 if (!(cs_mode & CS_ODD) && (csrow_nr & 1))
1552 return size;
1553
1554 /*
1555 * Family 17h introduced systems with one mask per DIMM,
1556 * and two Chip Selects per DIMM.
1557 *
1558 * CS0 and CS1 -> MASK0 / DIMM0
1559 * CS2 and CS3 -> MASK1 / DIMM1
1560 *
1561 * Family 19h Model 10h introduced systems with one mask per Chip Select,
1562 * and two Chip Selects per DIMM.
1563 *
1564 * CS0 -> MASK0 -> DIMM0
1565 * CS1 -> MASK1 -> DIMM0
1566 * CS2 -> MASK2 -> DIMM1
1567 * CS3 -> MASK3 -> DIMM1
1568 *
1569 * Keep the mask number equal to the Chip Select number for newer systems,
1570 * and shift the mask number for older systems.
1571 */
1572 dimm = csrow_nr >> 1;
1573
1574 if (!pvt->flags.zn_regs_v2)
1575 cs_mask_nr >>= 1;
1576
1577 /* Asymmetric dual-rank DIMM support. */
1578 if ((csrow_nr & 1) && (cs_mode & CS_ODD_SECONDARY))
1579 addr_mask_orig = pvt->csels[umc].csmasks_sec[cs_mask_nr];
1580 else
1581 addr_mask_orig = pvt->csels[umc].csmasks[cs_mask_nr];
1582
1583 return __addr_mask_to_cs_size(addr_mask_orig, cs_mode, csrow_nr, dimm);
1584 }
1585
umc_debug_display_dimm_sizes(struct amd64_pvt * pvt,u8 ctrl)1586 static void umc_debug_display_dimm_sizes(struct amd64_pvt *pvt, u8 ctrl)
1587 {
1588 int dimm, size0, size1, cs0, cs1, cs_mode;
1589
1590 edac_printk(KERN_DEBUG, EDAC_MC, "UMC%d chip selects:\n", ctrl);
1591
1592 for (dimm = 0; dimm < 2; dimm++) {
1593 cs0 = dimm * 2;
1594 cs1 = dimm * 2 + 1;
1595
1596 cs_mode = umc_get_cs_mode(dimm, ctrl, pvt);
1597
1598 size0 = umc_addr_mask_to_cs_size(pvt, ctrl, cs_mode, cs0);
1599 size1 = umc_addr_mask_to_cs_size(pvt, ctrl, cs_mode, cs1);
1600
1601 amd64_info(EDAC_MC ": %d: %5dMB %d: %5dMB\n",
1602 cs0, size0,
1603 cs1, size1);
1604 }
1605 }
1606
umc_dump_misc_regs(struct amd64_pvt * pvt)1607 static void umc_dump_misc_regs(struct amd64_pvt *pvt)
1608 {
1609 struct amd64_umc *umc;
1610 u32 i, tmp, umc_base;
1611
1612 for_each_umc(i) {
1613 umc_base = get_umc_base(i);
1614 umc = &pvt->umc[i];
1615
1616 edac_dbg(1, "UMC%d DIMM cfg: 0x%x\n", i, umc->dimm_cfg);
1617 edac_dbg(1, "UMC%d UMC cfg: 0x%x\n", i, umc->umc_cfg);
1618 edac_dbg(1, "UMC%d SDP ctrl: 0x%x\n", i, umc->sdp_ctrl);
1619 edac_dbg(1, "UMC%d ECC ctrl: 0x%x\n", i, umc->ecc_ctrl);
1620
1621 amd_smn_read(pvt->mc_node_id, umc_base + UMCCH_ECC_BAD_SYMBOL, &tmp);
1622 edac_dbg(1, "UMC%d ECC bad symbol: 0x%x\n", i, tmp);
1623
1624 amd_smn_read(pvt->mc_node_id, umc_base + UMCCH_UMC_CAP, &tmp);
1625 edac_dbg(1, "UMC%d UMC cap: 0x%x\n", i, tmp);
1626 edac_dbg(1, "UMC%d UMC cap high: 0x%x\n", i, umc->umc_cap_hi);
1627
1628 edac_dbg(1, "UMC%d ECC capable: %s, ChipKill ECC capable: %s\n",
1629 i, (umc->umc_cap_hi & BIT(30)) ? "yes" : "no",
1630 (umc->umc_cap_hi & BIT(31)) ? "yes" : "no");
1631 edac_dbg(1, "UMC%d All DIMMs support ECC: %s\n",
1632 i, (umc->umc_cfg & BIT(12)) ? "yes" : "no");
1633 edac_dbg(1, "UMC%d x4 DIMMs present: %s\n",
1634 i, (umc->dimm_cfg & BIT(6)) ? "yes" : "no");
1635 edac_dbg(1, "UMC%d x16 DIMMs present: %s\n",
1636 i, (umc->dimm_cfg & BIT(7)) ? "yes" : "no");
1637
1638 if (umc->dram_type == MEM_LRDDR4 || umc->dram_type == MEM_LRDDR5) {
1639 amd_smn_read(pvt->mc_node_id,
1640 umc_base + get_umc_reg(pvt, UMCCH_ADDR_CFG),
1641 &tmp);
1642 edac_dbg(1, "UMC%d LRDIMM %dx rank multiply\n",
1643 i, 1 << ((tmp >> 4) & 0x3));
1644 }
1645
1646 umc_debug_display_dimm_sizes(pvt, i);
1647 }
1648 }
1649
dct_dump_misc_regs(struct amd64_pvt * pvt)1650 static void dct_dump_misc_regs(struct amd64_pvt *pvt)
1651 {
1652 edac_dbg(1, "F3xE8 (NB Cap): 0x%08x\n", pvt->nbcap);
1653
1654 edac_dbg(1, " NB two channel DRAM capable: %s\n",
1655 (pvt->nbcap & NBCAP_DCT_DUAL) ? "yes" : "no");
1656
1657 edac_dbg(1, " ECC capable: %s, ChipKill ECC capable: %s\n",
1658 (pvt->nbcap & NBCAP_SECDED) ? "yes" : "no",
1659 (pvt->nbcap & NBCAP_CHIPKILL) ? "yes" : "no");
1660
1661 debug_dump_dramcfg_low(pvt, pvt->dclr0, 0);
1662
1663 edac_dbg(1, "F3xB0 (Online Spare): 0x%08x\n", pvt->online_spare);
1664
1665 edac_dbg(1, "F1xF0 (DRAM Hole Address): 0x%08x, base: 0x%08x, offset: 0x%08x\n",
1666 pvt->dhar, dhar_base(pvt),
1667 (pvt->fam == 0xf) ? k8_dhar_offset(pvt)
1668 : f10_dhar_offset(pvt));
1669
1670 dct_debug_display_dimm_sizes(pvt, 0);
1671
1672 /* everything below this point is Fam10h and above */
1673 if (pvt->fam == 0xf)
1674 return;
1675
1676 dct_debug_display_dimm_sizes(pvt, 1);
1677
1678 /* Only if NOT ganged does dclr1 have valid info */
1679 if (!dct_ganging_enabled(pvt))
1680 debug_dump_dramcfg_low(pvt, pvt->dclr1, 1);
1681
1682 edac_dbg(1, " DramHoleValid: %s\n", dhar_valid(pvt) ? "yes" : "no");
1683
1684 amd64_info("using x%u syndromes.\n", pvt->ecc_sym_sz);
1685 }
1686
1687 /*
1688 * See BKDG, F2x[1,0][5C:40], F2[1,0][6C:60]
1689 */
dct_prep_chip_selects(struct amd64_pvt * pvt)1690 static void dct_prep_chip_selects(struct amd64_pvt *pvt)
1691 {
1692 if (pvt->fam == 0xf && pvt->ext_model < K8_REV_F) {
1693 pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 8;
1694 pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 8;
1695 } else if (pvt->fam == 0x15 && pvt->model == 0x30) {
1696 pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 4;
1697 pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 2;
1698 } else {
1699 pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 8;
1700 pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 4;
1701 }
1702 }
1703
umc_prep_chip_selects(struct amd64_pvt * pvt)1704 static void umc_prep_chip_selects(struct amd64_pvt *pvt)
1705 {
1706 int umc;
1707
1708 for_each_umc(umc) {
1709 pvt->csels[umc].b_cnt = 4;
1710 pvt->csels[umc].m_cnt = pvt->flags.zn_regs_v2 ? 4 : 2;
1711 }
1712 }
1713
umc_read_base_mask(struct amd64_pvt * pvt)1714 static void umc_read_base_mask(struct amd64_pvt *pvt)
1715 {
1716 u32 umc_base_reg, umc_base_reg_sec;
1717 u32 umc_mask_reg, umc_mask_reg_sec;
1718 u32 base_reg, base_reg_sec;
1719 u32 mask_reg, mask_reg_sec;
1720 u32 *base, *base_sec;
1721 u32 *mask, *mask_sec;
1722 int cs, umc;
1723
1724 for_each_umc(umc) {
1725 umc_base_reg = get_umc_base(umc) + UMCCH_BASE_ADDR;
1726 umc_base_reg_sec = get_umc_base(umc) + UMCCH_BASE_ADDR_SEC;
1727
1728 for_each_chip_select(cs, umc, pvt) {
1729 base = &pvt->csels[umc].csbases[cs];
1730 base_sec = &pvt->csels[umc].csbases_sec[cs];
1731
1732 base_reg = umc_base_reg + (cs * 4);
1733 base_reg_sec = umc_base_reg_sec + (cs * 4);
1734
1735 if (!amd_smn_read(pvt->mc_node_id, base_reg, base))
1736 edac_dbg(0, " DCSB%d[%d]=0x%08x reg: 0x%x\n",
1737 umc, cs, *base, base_reg);
1738
1739 if (!amd_smn_read(pvt->mc_node_id, base_reg_sec, base_sec))
1740 edac_dbg(0, " DCSB_SEC%d[%d]=0x%08x reg: 0x%x\n",
1741 umc, cs, *base_sec, base_reg_sec);
1742 }
1743
1744 umc_mask_reg = get_umc_base(umc) + UMCCH_ADDR_MASK;
1745 umc_mask_reg_sec = get_umc_base(umc) + get_umc_reg(pvt, UMCCH_ADDR_MASK_SEC);
1746
1747 for_each_chip_select_mask(cs, umc, pvt) {
1748 mask = &pvt->csels[umc].csmasks[cs];
1749 mask_sec = &pvt->csels[umc].csmasks_sec[cs];
1750
1751 mask_reg = umc_mask_reg + (cs * 4);
1752 mask_reg_sec = umc_mask_reg_sec + (cs * 4);
1753
1754 if (!amd_smn_read(pvt->mc_node_id, mask_reg, mask))
1755 edac_dbg(0, " DCSM%d[%d]=0x%08x reg: 0x%x\n",
1756 umc, cs, *mask, mask_reg);
1757
1758 if (!amd_smn_read(pvt->mc_node_id, mask_reg_sec, mask_sec))
1759 edac_dbg(0, " DCSM_SEC%d[%d]=0x%08x reg: 0x%x\n",
1760 umc, cs, *mask_sec, mask_reg_sec);
1761 }
1762 }
1763 }
1764
1765 /*
1766 * Function 2 Offset F10_DCSB0; read in the DCS Base and DCS Mask registers
1767 */
dct_read_base_mask(struct amd64_pvt * pvt)1768 static void dct_read_base_mask(struct amd64_pvt *pvt)
1769 {
1770 int cs;
1771
1772 for_each_chip_select(cs, 0, pvt) {
1773 int reg0 = DCSB0 + (cs * 4);
1774 int reg1 = DCSB1 + (cs * 4);
1775 u32 *base0 = &pvt->csels[0].csbases[cs];
1776 u32 *base1 = &pvt->csels[1].csbases[cs];
1777
1778 if (!amd64_read_dct_pci_cfg(pvt, 0, reg0, base0))
1779 edac_dbg(0, " DCSB0[%d]=0x%08x reg: F2x%x\n",
1780 cs, *base0, reg0);
1781
1782 if (pvt->fam == 0xf)
1783 continue;
1784
1785 if (!amd64_read_dct_pci_cfg(pvt, 1, reg0, base1))
1786 edac_dbg(0, " DCSB1[%d]=0x%08x reg: F2x%x\n",
1787 cs, *base1, (pvt->fam == 0x10) ? reg1
1788 : reg0);
1789 }
1790
1791 for_each_chip_select_mask(cs, 0, pvt) {
1792 int reg0 = DCSM0 + (cs * 4);
1793 int reg1 = DCSM1 + (cs * 4);
1794 u32 *mask0 = &pvt->csels[0].csmasks[cs];
1795 u32 *mask1 = &pvt->csels[1].csmasks[cs];
1796
1797 if (!amd64_read_dct_pci_cfg(pvt, 0, reg0, mask0))
1798 edac_dbg(0, " DCSM0[%d]=0x%08x reg: F2x%x\n",
1799 cs, *mask0, reg0);
1800
1801 if (pvt->fam == 0xf)
1802 continue;
1803
1804 if (!amd64_read_dct_pci_cfg(pvt, 1, reg0, mask1))
1805 edac_dbg(0, " DCSM1[%d]=0x%08x reg: F2x%x\n",
1806 cs, *mask1, (pvt->fam == 0x10) ? reg1
1807 : reg0);
1808 }
1809 }
1810
umc_determine_memory_type(struct amd64_pvt * pvt)1811 static void umc_determine_memory_type(struct amd64_pvt *pvt)
1812 {
1813 struct amd64_umc *umc;
1814 u32 i;
1815
1816 for_each_umc(i) {
1817 umc = &pvt->umc[i];
1818
1819 if (!(umc->sdp_ctrl & UMC_SDP_INIT)) {
1820 umc->dram_type = MEM_EMPTY;
1821 continue;
1822 }
1823
1824 /*
1825 * Check if the system supports the "DDR Type" field in UMC Config
1826 * and has DDR5 DIMMs in use.
1827 */
1828 if (pvt->flags.zn_regs_v2 && ((umc->umc_cfg & GENMASK(2, 0)) == 0x1)) {
1829 if (umc->dimm_cfg & BIT(5))
1830 umc->dram_type = MEM_LRDDR5;
1831 else if (umc->dimm_cfg & BIT(4))
1832 umc->dram_type = MEM_RDDR5;
1833 else
1834 umc->dram_type = MEM_DDR5;
1835 } else {
1836 if (umc->dimm_cfg & BIT(5))
1837 umc->dram_type = MEM_LRDDR4;
1838 else if (umc->dimm_cfg & BIT(4))
1839 umc->dram_type = MEM_RDDR4;
1840 else
1841 umc->dram_type = MEM_DDR4;
1842 }
1843
1844 edac_dbg(1, " UMC%d DIMM type: %s\n", i, edac_mem_types[umc->dram_type]);
1845 }
1846 }
1847
dct_determine_memory_type(struct amd64_pvt * pvt)1848 static void dct_determine_memory_type(struct amd64_pvt *pvt)
1849 {
1850 u32 dram_ctrl, dcsm;
1851
1852 switch (pvt->fam) {
1853 case 0xf:
1854 if (pvt->ext_model >= K8_REV_F)
1855 goto ddr3;
1856
1857 pvt->dram_type = (pvt->dclr0 & BIT(18)) ? MEM_DDR : MEM_RDDR;
1858 return;
1859
1860 case 0x10:
1861 if (pvt->dchr0 & DDR3_MODE)
1862 goto ddr3;
1863
1864 pvt->dram_type = (pvt->dclr0 & BIT(16)) ? MEM_DDR2 : MEM_RDDR2;
1865 return;
1866
1867 case 0x15:
1868 if (pvt->model < 0x60)
1869 goto ddr3;
1870
1871 /*
1872 * Model 0x60h needs special handling:
1873 *
1874 * We use a Chip Select value of '0' to obtain dcsm.
1875 * Theoretically, it is possible to populate LRDIMMs of different
1876 * 'Rank' value on a DCT. But this is not the common case. So,
1877 * it's reasonable to assume all DIMMs are going to be of same
1878 * 'type' until proven otherwise.
1879 */
1880 amd64_read_dct_pci_cfg(pvt, 0, DRAM_CONTROL, &dram_ctrl);
1881 dcsm = pvt->csels[0].csmasks[0];
1882
1883 if (((dram_ctrl >> 8) & 0x7) == 0x2)
1884 pvt->dram_type = MEM_DDR4;
1885 else if (pvt->dclr0 & BIT(16))
1886 pvt->dram_type = MEM_DDR3;
1887 else if (dcsm & 0x3)
1888 pvt->dram_type = MEM_LRDDR3;
1889 else
1890 pvt->dram_type = MEM_RDDR3;
1891
1892 return;
1893
1894 case 0x16:
1895 goto ddr3;
1896
1897 default:
1898 WARN(1, KERN_ERR "%s: Family??? 0x%x\n", __func__, pvt->fam);
1899 pvt->dram_type = MEM_EMPTY;
1900 }
1901
1902 edac_dbg(1, " DIMM type: %s\n", edac_mem_types[pvt->dram_type]);
1903 return;
1904
1905 ddr3:
1906 pvt->dram_type = (pvt->dclr0 & BIT(16)) ? MEM_DDR3 : MEM_RDDR3;
1907 }
1908
1909 /* On F10h and later ErrAddr is MC4_ADDR[47:1] */
get_error_address(struct amd64_pvt * pvt,struct mce * m)1910 static u64 get_error_address(struct amd64_pvt *pvt, struct mce *m)
1911 {
1912 u16 mce_nid = topology_die_id(m->extcpu);
1913 struct mem_ctl_info *mci;
1914 u8 start_bit = 1;
1915 u8 end_bit = 47;
1916 u64 addr;
1917
1918 mci = edac_mc_find(mce_nid);
1919 if (!mci)
1920 return 0;
1921
1922 pvt = mci->pvt_info;
1923
1924 if (pvt->fam == 0xf) {
1925 start_bit = 3;
1926 end_bit = 39;
1927 }
1928
1929 addr = m->addr & GENMASK_ULL(end_bit, start_bit);
1930
1931 /*
1932 * Erratum 637 workaround
1933 */
1934 if (pvt->fam == 0x15) {
1935 u64 cc6_base, tmp_addr;
1936 u32 tmp;
1937 u8 intlv_en;
1938
1939 if ((addr & GENMASK_ULL(47, 24)) >> 24 != 0x00fdf7)
1940 return addr;
1941
1942
1943 amd64_read_pci_cfg(pvt->F1, DRAM_LOCAL_NODE_LIM, &tmp);
1944 intlv_en = tmp >> 21 & 0x7;
1945
1946 /* add [47:27] + 3 trailing bits */
1947 cc6_base = (tmp & GENMASK_ULL(20, 0)) << 3;
1948
1949 /* reverse and add DramIntlvEn */
1950 cc6_base |= intlv_en ^ 0x7;
1951
1952 /* pin at [47:24] */
1953 cc6_base <<= 24;
1954
1955 if (!intlv_en)
1956 return cc6_base | (addr & GENMASK_ULL(23, 0));
1957
1958 amd64_read_pci_cfg(pvt->F1, DRAM_LOCAL_NODE_BASE, &tmp);
1959
1960 /* faster log2 */
1961 tmp_addr = (addr & GENMASK_ULL(23, 12)) << __fls(intlv_en + 1);
1962
1963 /* OR DramIntlvSel into bits [14:12] */
1964 tmp_addr |= (tmp & GENMASK_ULL(23, 21)) >> 9;
1965
1966 /* add remaining [11:0] bits from original MC4_ADDR */
1967 tmp_addr |= addr & GENMASK_ULL(11, 0);
1968
1969 return cc6_base | tmp_addr;
1970 }
1971
1972 return addr;
1973 }
1974
pci_get_related_function(unsigned int vendor,unsigned int device,struct pci_dev * related)1975 static struct pci_dev *pci_get_related_function(unsigned int vendor,
1976 unsigned int device,
1977 struct pci_dev *related)
1978 {
1979 struct pci_dev *dev = NULL;
1980
1981 while ((dev = pci_get_device(vendor, device, dev))) {
1982 if (pci_domain_nr(dev->bus) == pci_domain_nr(related->bus) &&
1983 (dev->bus->number == related->bus->number) &&
1984 (PCI_SLOT(dev->devfn) == PCI_SLOT(related->devfn)))
1985 break;
1986 }
1987
1988 return dev;
1989 }
1990
read_dram_base_limit_regs(struct amd64_pvt * pvt,unsigned range)1991 static void read_dram_base_limit_regs(struct amd64_pvt *pvt, unsigned range)
1992 {
1993 struct amd_northbridge *nb;
1994 struct pci_dev *f1 = NULL;
1995 unsigned int pci_func;
1996 int off = range << 3;
1997 u32 llim;
1998
1999 amd64_read_pci_cfg(pvt->F1, DRAM_BASE_LO + off, &pvt->ranges[range].base.lo);
2000 amd64_read_pci_cfg(pvt->F1, DRAM_LIMIT_LO + off, &pvt->ranges[range].lim.lo);
2001
2002 if (pvt->fam == 0xf)
2003 return;
2004
2005 if (!dram_rw(pvt, range))
2006 return;
2007
2008 amd64_read_pci_cfg(pvt->F1, DRAM_BASE_HI + off, &pvt->ranges[range].base.hi);
2009 amd64_read_pci_cfg(pvt->F1, DRAM_LIMIT_HI + off, &pvt->ranges[range].lim.hi);
2010
2011 /* F15h: factor in CC6 save area by reading dst node's limit reg */
2012 if (pvt->fam != 0x15)
2013 return;
2014
2015 nb = node_to_amd_nb(dram_dst_node(pvt, range));
2016 if (WARN_ON(!nb))
2017 return;
2018
2019 if (pvt->model == 0x60)
2020 pci_func = PCI_DEVICE_ID_AMD_15H_M60H_NB_F1;
2021 else if (pvt->model == 0x30)
2022 pci_func = PCI_DEVICE_ID_AMD_15H_M30H_NB_F1;
2023 else
2024 pci_func = PCI_DEVICE_ID_AMD_15H_NB_F1;
2025
2026 f1 = pci_get_related_function(nb->misc->vendor, pci_func, nb->misc);
2027 if (WARN_ON(!f1))
2028 return;
2029
2030 amd64_read_pci_cfg(f1, DRAM_LOCAL_NODE_LIM, &llim);
2031
2032 pvt->ranges[range].lim.lo &= GENMASK_ULL(15, 0);
2033
2034 /* {[39:27],111b} */
2035 pvt->ranges[range].lim.lo |= ((llim & 0x1fff) << 3 | 0x7) << 16;
2036
2037 pvt->ranges[range].lim.hi &= GENMASK_ULL(7, 0);
2038
2039 /* [47:40] */
2040 pvt->ranges[range].lim.hi |= llim >> 13;
2041
2042 pci_dev_put(f1);
2043 }
2044
k8_map_sysaddr_to_csrow(struct mem_ctl_info * mci,u64 sys_addr,struct err_info * err)2045 static void k8_map_sysaddr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr,
2046 struct err_info *err)
2047 {
2048 struct amd64_pvt *pvt = mci->pvt_info;
2049
2050 error_address_to_page_and_offset(sys_addr, err);
2051
2052 /*
2053 * Find out which node the error address belongs to. This may be
2054 * different from the node that detected the error.
2055 */
2056 err->src_mci = find_mc_by_sys_addr(mci, sys_addr);
2057 if (!err->src_mci) {
2058 amd64_mc_err(mci, "failed to map error addr 0x%lx to a node\n",
2059 (unsigned long)sys_addr);
2060 err->err_code = ERR_NODE;
2061 return;
2062 }
2063
2064 /* Now map the sys_addr to a CSROW */
2065 err->csrow = sys_addr_to_csrow(err->src_mci, sys_addr);
2066 if (err->csrow < 0) {
2067 err->err_code = ERR_CSROW;
2068 return;
2069 }
2070
2071 /* CHIPKILL enabled */
2072 if (pvt->nbcfg & NBCFG_CHIPKILL) {
2073 err->channel = get_channel_from_ecc_syndrome(mci, err->syndrome);
2074 if (err->channel < 0) {
2075 /*
2076 * Syndrome didn't map, so we don't know which of the
2077 * 2 DIMMs is in error. So we need to ID 'both' of them
2078 * as suspect.
2079 */
2080 amd64_mc_warn(err->src_mci, "unknown syndrome 0x%04x - "
2081 "possible error reporting race\n",
2082 err->syndrome);
2083 err->err_code = ERR_CHANNEL;
2084 return;
2085 }
2086 } else {
2087 /*
2088 * non-chipkill ecc mode
2089 *
2090 * The k8 documentation is unclear about how to determine the
2091 * channel number when using non-chipkill memory. This method
2092 * was obtained from email communication with someone at AMD.
2093 * (Wish the email was placed in this comment - norsk)
2094 */
2095 err->channel = ((sys_addr & BIT(3)) != 0);
2096 }
2097 }
2098
ddr2_cs_size(unsigned i,bool dct_width)2099 static int ddr2_cs_size(unsigned i, bool dct_width)
2100 {
2101 unsigned shift = 0;
2102
2103 if (i <= 2)
2104 shift = i;
2105 else if (!(i & 0x1))
2106 shift = i >> 1;
2107 else
2108 shift = (i + 1) >> 1;
2109
2110 return 128 << (shift + !!dct_width);
2111 }
2112
k8_dbam_to_chip_select(struct amd64_pvt * pvt,u8 dct,unsigned cs_mode,int cs_mask_nr)2113 static int k8_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
2114 unsigned cs_mode, int cs_mask_nr)
2115 {
2116 u32 dclr = dct ? pvt->dclr1 : pvt->dclr0;
2117
2118 if (pvt->ext_model >= K8_REV_F) {
2119 WARN_ON(cs_mode > 11);
2120 return ddr2_cs_size(cs_mode, dclr & WIDTH_128);
2121 }
2122 else if (pvt->ext_model >= K8_REV_D) {
2123 unsigned diff;
2124 WARN_ON(cs_mode > 10);
2125
2126 /*
2127 * the below calculation, besides trying to win an obfuscated C
2128 * contest, maps cs_mode values to DIMM chip select sizes. The
2129 * mappings are:
2130 *
2131 * cs_mode CS size (mb)
2132 * ======= ============
2133 * 0 32
2134 * 1 64
2135 * 2 128
2136 * 3 128
2137 * 4 256
2138 * 5 512
2139 * 6 256
2140 * 7 512
2141 * 8 1024
2142 * 9 1024
2143 * 10 2048
2144 *
2145 * Basically, it calculates a value with which to shift the
2146 * smallest CS size of 32MB.
2147 *
2148 * ddr[23]_cs_size have a similar purpose.
2149 */
2150 diff = cs_mode/3 + (unsigned)(cs_mode > 5);
2151
2152 return 32 << (cs_mode - diff);
2153 }
2154 else {
2155 WARN_ON(cs_mode > 6);
2156 return 32 << cs_mode;
2157 }
2158 }
2159
ddr3_cs_size(unsigned i,bool dct_width)2160 static int ddr3_cs_size(unsigned i, bool dct_width)
2161 {
2162 unsigned shift = 0;
2163 int cs_size = 0;
2164
2165 if (i == 0 || i == 3 || i == 4)
2166 cs_size = -1;
2167 else if (i <= 2)
2168 shift = i;
2169 else if (i == 12)
2170 shift = 7;
2171 else if (!(i & 0x1))
2172 shift = i >> 1;
2173 else
2174 shift = (i + 1) >> 1;
2175
2176 if (cs_size != -1)
2177 cs_size = (128 * (1 << !!dct_width)) << shift;
2178
2179 return cs_size;
2180 }
2181
ddr3_lrdimm_cs_size(unsigned i,unsigned rank_multiply)2182 static int ddr3_lrdimm_cs_size(unsigned i, unsigned rank_multiply)
2183 {
2184 unsigned shift = 0;
2185 int cs_size = 0;
2186
2187 if (i < 4 || i == 6)
2188 cs_size = -1;
2189 else if (i == 12)
2190 shift = 7;
2191 else if (!(i & 0x1))
2192 shift = i >> 1;
2193 else
2194 shift = (i + 1) >> 1;
2195
2196 if (cs_size != -1)
2197 cs_size = rank_multiply * (128 << shift);
2198
2199 return cs_size;
2200 }
2201
ddr4_cs_size(unsigned i)2202 static int ddr4_cs_size(unsigned i)
2203 {
2204 int cs_size = 0;
2205
2206 if (i == 0)
2207 cs_size = -1;
2208 else if (i == 1)
2209 cs_size = 1024;
2210 else
2211 /* Min cs_size = 1G */
2212 cs_size = 1024 * (1 << (i >> 1));
2213
2214 return cs_size;
2215 }
2216
f10_dbam_to_chip_select(struct amd64_pvt * pvt,u8 dct,unsigned cs_mode,int cs_mask_nr)2217 static int f10_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
2218 unsigned cs_mode, int cs_mask_nr)
2219 {
2220 u32 dclr = dct ? pvt->dclr1 : pvt->dclr0;
2221
2222 WARN_ON(cs_mode > 11);
2223
2224 if (pvt->dchr0 & DDR3_MODE || pvt->dchr1 & DDR3_MODE)
2225 return ddr3_cs_size(cs_mode, dclr & WIDTH_128);
2226 else
2227 return ddr2_cs_size(cs_mode, dclr & WIDTH_128);
2228 }
2229
2230 /*
2231 * F15h supports only 64bit DCT interfaces
2232 */
f15_dbam_to_chip_select(struct amd64_pvt * pvt,u8 dct,unsigned cs_mode,int cs_mask_nr)2233 static int f15_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
2234 unsigned cs_mode, int cs_mask_nr)
2235 {
2236 WARN_ON(cs_mode > 12);
2237
2238 return ddr3_cs_size(cs_mode, false);
2239 }
2240
2241 /* 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)2242 static int f15_m60h_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
2243 unsigned cs_mode, int cs_mask_nr)
2244 {
2245 int cs_size;
2246 u32 dcsm = pvt->csels[dct].csmasks[cs_mask_nr];
2247
2248 WARN_ON(cs_mode > 12);
2249
2250 if (pvt->dram_type == MEM_DDR4) {
2251 if (cs_mode > 9)
2252 return -1;
2253
2254 cs_size = ddr4_cs_size(cs_mode);
2255 } else if (pvt->dram_type == MEM_LRDDR3) {
2256 unsigned rank_multiply = dcsm & 0xf;
2257
2258 if (rank_multiply == 3)
2259 rank_multiply = 4;
2260 cs_size = ddr3_lrdimm_cs_size(cs_mode, rank_multiply);
2261 } else {
2262 /* Minimum cs size is 512mb for F15hM60h*/
2263 if (cs_mode == 0x1)
2264 return -1;
2265
2266 cs_size = ddr3_cs_size(cs_mode, false);
2267 }
2268
2269 return cs_size;
2270 }
2271
2272 /*
2273 * F16h and F15h model 30h have only limited cs_modes.
2274 */
f16_dbam_to_chip_select(struct amd64_pvt * pvt,u8 dct,unsigned cs_mode,int cs_mask_nr)2275 static int f16_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
2276 unsigned cs_mode, int cs_mask_nr)
2277 {
2278 WARN_ON(cs_mode > 12);
2279
2280 if (cs_mode == 6 || cs_mode == 8 ||
2281 cs_mode == 9 || cs_mode == 12)
2282 return -1;
2283 else
2284 return ddr3_cs_size(cs_mode, false);
2285 }
2286
read_dram_ctl_register(struct amd64_pvt * pvt)2287 static void read_dram_ctl_register(struct amd64_pvt *pvt)
2288 {
2289
2290 if (pvt->fam == 0xf)
2291 return;
2292
2293 if (!amd64_read_pci_cfg(pvt->F2, DCT_SEL_LO, &pvt->dct_sel_lo)) {
2294 edac_dbg(0, "F2x110 (DCTSelLow): 0x%08x, High range addrs at: 0x%x\n",
2295 pvt->dct_sel_lo, dct_sel_baseaddr(pvt));
2296
2297 edac_dbg(0, " DCTs operate in %s mode\n",
2298 (dct_ganging_enabled(pvt) ? "ganged" : "unganged"));
2299
2300 if (!dct_ganging_enabled(pvt))
2301 edac_dbg(0, " Address range split per DCT: %s\n",
2302 (dct_high_range_enabled(pvt) ? "yes" : "no"));
2303
2304 edac_dbg(0, " data interleave for ECC: %s, DRAM cleared since last warm reset: %s\n",
2305 (dct_data_intlv_enabled(pvt) ? "enabled" : "disabled"),
2306 (dct_memory_cleared(pvt) ? "yes" : "no"));
2307
2308 edac_dbg(0, " channel interleave: %s, "
2309 "interleave bits selector: 0x%x\n",
2310 (dct_interleave_enabled(pvt) ? "enabled" : "disabled"),
2311 dct_sel_interleave_addr(pvt));
2312 }
2313
2314 amd64_read_pci_cfg(pvt->F2, DCT_SEL_HI, &pvt->dct_sel_hi);
2315 }
2316
2317 /*
2318 * Determine channel (DCT) based on the interleaving mode (see F15h M30h BKDG,
2319 * 2.10.12 Memory Interleaving Modes).
2320 */
f15_m30h_determine_channel(struct amd64_pvt * pvt,u64 sys_addr,u8 intlv_en,int num_dcts_intlv,u32 dct_sel)2321 static u8 f15_m30h_determine_channel(struct amd64_pvt *pvt, u64 sys_addr,
2322 u8 intlv_en, int num_dcts_intlv,
2323 u32 dct_sel)
2324 {
2325 u8 channel = 0;
2326 u8 select;
2327
2328 if (!(intlv_en))
2329 return (u8)(dct_sel);
2330
2331 if (num_dcts_intlv == 2) {
2332 select = (sys_addr >> 8) & 0x3;
2333 channel = select ? 0x3 : 0;
2334 } else if (num_dcts_intlv == 4) {
2335 u8 intlv_addr = dct_sel_interleave_addr(pvt);
2336 switch (intlv_addr) {
2337 case 0x4:
2338 channel = (sys_addr >> 8) & 0x3;
2339 break;
2340 case 0x5:
2341 channel = (sys_addr >> 9) & 0x3;
2342 break;
2343 }
2344 }
2345 return channel;
2346 }
2347
2348 /*
2349 * Determine channel (DCT) based on the interleaving mode: F10h BKDG, 2.8.9 Memory
2350 * Interleaving Modes.
2351 */
f1x_determine_channel(struct amd64_pvt * pvt,u64 sys_addr,bool hi_range_sel,u8 intlv_en)2352 static u8 f1x_determine_channel(struct amd64_pvt *pvt, u64 sys_addr,
2353 bool hi_range_sel, u8 intlv_en)
2354 {
2355 u8 dct_sel_high = (pvt->dct_sel_lo >> 1) & 1;
2356
2357 if (dct_ganging_enabled(pvt))
2358 return 0;
2359
2360 if (hi_range_sel)
2361 return dct_sel_high;
2362
2363 /*
2364 * see F2x110[DctSelIntLvAddr] - channel interleave mode
2365 */
2366 if (dct_interleave_enabled(pvt)) {
2367 u8 intlv_addr = dct_sel_interleave_addr(pvt);
2368
2369 /* return DCT select function: 0=DCT0, 1=DCT1 */
2370 if (!intlv_addr)
2371 return sys_addr >> 6 & 1;
2372
2373 if (intlv_addr & 0x2) {
2374 u8 shift = intlv_addr & 0x1 ? 9 : 6;
2375 u32 temp = hweight_long((u32) ((sys_addr >> 16) & 0x1F)) & 1;
2376
2377 return ((sys_addr >> shift) & 1) ^ temp;
2378 }
2379
2380 if (intlv_addr & 0x4) {
2381 u8 shift = intlv_addr & 0x1 ? 9 : 8;
2382
2383 return (sys_addr >> shift) & 1;
2384 }
2385
2386 return (sys_addr >> (12 + hweight8(intlv_en))) & 1;
2387 }
2388
2389 if (dct_high_range_enabled(pvt))
2390 return ~dct_sel_high & 1;
2391
2392 return 0;
2393 }
2394
2395 /* 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)2396 static u64 f1x_get_norm_dct_addr(struct amd64_pvt *pvt, u8 range,
2397 u64 sys_addr, bool hi_rng,
2398 u32 dct_sel_base_addr)
2399 {
2400 u64 chan_off;
2401 u64 dram_base = get_dram_base(pvt, range);
2402 u64 hole_off = f10_dhar_offset(pvt);
2403 u64 dct_sel_base_off = (u64)(pvt->dct_sel_hi & 0xFFFFFC00) << 16;
2404
2405 if (hi_rng) {
2406 /*
2407 * if
2408 * base address of high range is below 4Gb
2409 * (bits [47:27] at [31:11])
2410 * DRAM address space on this DCT is hoisted above 4Gb &&
2411 * sys_addr > 4Gb
2412 *
2413 * remove hole offset from sys_addr
2414 * else
2415 * remove high range offset from sys_addr
2416 */
2417 if ((!(dct_sel_base_addr >> 16) ||
2418 dct_sel_base_addr < dhar_base(pvt)) &&
2419 dhar_valid(pvt) &&
2420 (sys_addr >= BIT_64(32)))
2421 chan_off = hole_off;
2422 else
2423 chan_off = dct_sel_base_off;
2424 } else {
2425 /*
2426 * if
2427 * we have a valid hole &&
2428 * sys_addr > 4Gb
2429 *
2430 * remove hole
2431 * else
2432 * remove dram base to normalize to DCT address
2433 */
2434 if (dhar_valid(pvt) && (sys_addr >= BIT_64(32)))
2435 chan_off = hole_off;
2436 else
2437 chan_off = dram_base;
2438 }
2439
2440 return (sys_addr & GENMASK_ULL(47,6)) - (chan_off & GENMASK_ULL(47,23));
2441 }
2442
2443 /*
2444 * checks if the csrow passed in is marked as SPARED, if so returns the new
2445 * spare row
2446 */
f10_process_possible_spare(struct amd64_pvt * pvt,u8 dct,int csrow)2447 static int f10_process_possible_spare(struct amd64_pvt *pvt, u8 dct, int csrow)
2448 {
2449 int tmp_cs;
2450
2451 if (online_spare_swap_done(pvt, dct) &&
2452 csrow == online_spare_bad_dramcs(pvt, dct)) {
2453
2454 for_each_chip_select(tmp_cs, dct, pvt) {
2455 if (chip_select_base(tmp_cs, dct, pvt) & 0x2) {
2456 csrow = tmp_cs;
2457 break;
2458 }
2459 }
2460 }
2461 return csrow;
2462 }
2463
2464 /*
2465 * Iterate over the DRAM DCT "base" and "mask" registers looking for a
2466 * SystemAddr match on the specified 'ChannelSelect' and 'NodeID'
2467 *
2468 * Return:
2469 * -EINVAL: NOT FOUND
2470 * 0..csrow = Chip-Select Row
2471 */
f1x_lookup_addr_in_dct(u64 in_addr,u8 nid,u8 dct)2472 static int f1x_lookup_addr_in_dct(u64 in_addr, u8 nid, u8 dct)
2473 {
2474 struct mem_ctl_info *mci;
2475 struct amd64_pvt *pvt;
2476 u64 cs_base, cs_mask;
2477 int cs_found = -EINVAL;
2478 int csrow;
2479
2480 mci = edac_mc_find(nid);
2481 if (!mci)
2482 return cs_found;
2483
2484 pvt = mci->pvt_info;
2485
2486 edac_dbg(1, "input addr: 0x%llx, DCT: %d\n", in_addr, dct);
2487
2488 for_each_chip_select(csrow, dct, pvt) {
2489 if (!csrow_enabled(csrow, dct, pvt))
2490 continue;
2491
2492 get_cs_base_and_mask(pvt, csrow, dct, &cs_base, &cs_mask);
2493
2494 edac_dbg(1, " CSROW=%d CSBase=0x%llx CSMask=0x%llx\n",
2495 csrow, cs_base, cs_mask);
2496
2497 cs_mask = ~cs_mask;
2498
2499 edac_dbg(1, " (InputAddr & ~CSMask)=0x%llx (CSBase & ~CSMask)=0x%llx\n",
2500 (in_addr & cs_mask), (cs_base & cs_mask));
2501
2502 if ((in_addr & cs_mask) == (cs_base & cs_mask)) {
2503 if (pvt->fam == 0x15 && pvt->model >= 0x30) {
2504 cs_found = csrow;
2505 break;
2506 }
2507 cs_found = f10_process_possible_spare(pvt, dct, csrow);
2508
2509 edac_dbg(1, " MATCH csrow=%d\n", cs_found);
2510 break;
2511 }
2512 }
2513 return cs_found;
2514 }
2515
2516 /*
2517 * See F2x10C. Non-interleaved graphics framebuffer memory under the 16G is
2518 * swapped with a region located at the bottom of memory so that the GPU can use
2519 * the interleaved region and thus two channels.
2520 */
f1x_swap_interleaved_region(struct amd64_pvt * pvt,u64 sys_addr)2521 static u64 f1x_swap_interleaved_region(struct amd64_pvt *pvt, u64 sys_addr)
2522 {
2523 u32 swap_reg, swap_base, swap_limit, rgn_size, tmp_addr;
2524
2525 if (pvt->fam == 0x10) {
2526 /* only revC3 and revE have that feature */
2527 if (pvt->model < 4 || (pvt->model < 0xa && pvt->stepping < 3))
2528 return sys_addr;
2529 }
2530
2531 amd64_read_pci_cfg(pvt->F2, SWAP_INTLV_REG, &swap_reg);
2532
2533 if (!(swap_reg & 0x1))
2534 return sys_addr;
2535
2536 swap_base = (swap_reg >> 3) & 0x7f;
2537 swap_limit = (swap_reg >> 11) & 0x7f;
2538 rgn_size = (swap_reg >> 20) & 0x7f;
2539 tmp_addr = sys_addr >> 27;
2540
2541 if (!(sys_addr >> 34) &&
2542 (((tmp_addr >= swap_base) &&
2543 (tmp_addr <= swap_limit)) ||
2544 (tmp_addr < rgn_size)))
2545 return sys_addr ^ (u64)swap_base << 27;
2546
2547 return sys_addr;
2548 }
2549
2550 /* 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)2551 static int f1x_match_to_this_node(struct amd64_pvt *pvt, unsigned range,
2552 u64 sys_addr, int *chan_sel)
2553 {
2554 int cs_found = -EINVAL;
2555 u64 chan_addr;
2556 u32 dct_sel_base;
2557 u8 channel;
2558 bool high_range = false;
2559
2560 u8 node_id = dram_dst_node(pvt, range);
2561 u8 intlv_en = dram_intlv_en(pvt, range);
2562 u32 intlv_sel = dram_intlv_sel(pvt, range);
2563
2564 edac_dbg(1, "(range %d) SystemAddr= 0x%llx Limit=0x%llx\n",
2565 range, sys_addr, get_dram_limit(pvt, range));
2566
2567 if (dhar_valid(pvt) &&
2568 dhar_base(pvt) <= sys_addr &&
2569 sys_addr < BIT_64(32)) {
2570 amd64_warn("Huh? Address is in the MMIO hole: 0x%016llx\n",
2571 sys_addr);
2572 return -EINVAL;
2573 }
2574
2575 if (intlv_en && (intlv_sel != ((sys_addr >> 12) & intlv_en)))
2576 return -EINVAL;
2577
2578 sys_addr = f1x_swap_interleaved_region(pvt, sys_addr);
2579
2580 dct_sel_base = dct_sel_baseaddr(pvt);
2581
2582 /*
2583 * check whether addresses >= DctSelBaseAddr[47:27] are to be used to
2584 * select between DCT0 and DCT1.
2585 */
2586 if (dct_high_range_enabled(pvt) &&
2587 !dct_ganging_enabled(pvt) &&
2588 ((sys_addr >> 27) >= (dct_sel_base >> 11)))
2589 high_range = true;
2590
2591 channel = f1x_determine_channel(pvt, sys_addr, high_range, intlv_en);
2592
2593 chan_addr = f1x_get_norm_dct_addr(pvt, range, sys_addr,
2594 high_range, dct_sel_base);
2595
2596 /* Remove node interleaving, see F1x120 */
2597 if (intlv_en)
2598 chan_addr = ((chan_addr >> (12 + hweight8(intlv_en))) << 12) |
2599 (chan_addr & 0xfff);
2600
2601 /* remove channel interleave */
2602 if (dct_interleave_enabled(pvt) &&
2603 !dct_high_range_enabled(pvt) &&
2604 !dct_ganging_enabled(pvt)) {
2605
2606 if (dct_sel_interleave_addr(pvt) != 1) {
2607 if (dct_sel_interleave_addr(pvt) == 0x3)
2608 /* hash 9 */
2609 chan_addr = ((chan_addr >> 10) << 9) |
2610 (chan_addr & 0x1ff);
2611 else
2612 /* A[6] or hash 6 */
2613 chan_addr = ((chan_addr >> 7) << 6) |
2614 (chan_addr & 0x3f);
2615 } else
2616 /* A[12] */
2617 chan_addr = ((chan_addr >> 13) << 12) |
2618 (chan_addr & 0xfff);
2619 }
2620
2621 edac_dbg(1, " Normalized DCT addr: 0x%llx\n", chan_addr);
2622
2623 cs_found = f1x_lookup_addr_in_dct(chan_addr, node_id, channel);
2624
2625 if (cs_found >= 0)
2626 *chan_sel = channel;
2627
2628 return cs_found;
2629 }
2630
f15_m30h_match_to_this_node(struct amd64_pvt * pvt,unsigned range,u64 sys_addr,int * chan_sel)2631 static int f15_m30h_match_to_this_node(struct amd64_pvt *pvt, unsigned range,
2632 u64 sys_addr, int *chan_sel)
2633 {
2634 int cs_found = -EINVAL;
2635 int num_dcts_intlv = 0;
2636 u64 chan_addr, chan_offset;
2637 u64 dct_base, dct_limit;
2638 u32 dct_cont_base_reg, dct_cont_limit_reg, tmp;
2639 u8 channel, alias_channel, leg_mmio_hole, dct_sel, dct_offset_en;
2640
2641 u64 dhar_offset = f10_dhar_offset(pvt);
2642 u8 intlv_addr = dct_sel_interleave_addr(pvt);
2643 u8 node_id = dram_dst_node(pvt, range);
2644 u8 intlv_en = dram_intlv_en(pvt, range);
2645
2646 amd64_read_pci_cfg(pvt->F1, DRAM_CONT_BASE, &dct_cont_base_reg);
2647 amd64_read_pci_cfg(pvt->F1, DRAM_CONT_LIMIT, &dct_cont_limit_reg);
2648
2649 dct_offset_en = (u8) ((dct_cont_base_reg >> 3) & BIT(0));
2650 dct_sel = (u8) ((dct_cont_base_reg >> 4) & 0x7);
2651
2652 edac_dbg(1, "(range %d) SystemAddr= 0x%llx Limit=0x%llx\n",
2653 range, sys_addr, get_dram_limit(pvt, range));
2654
2655 if (!(get_dram_base(pvt, range) <= sys_addr) &&
2656 !(get_dram_limit(pvt, range) >= sys_addr))
2657 return -EINVAL;
2658
2659 if (dhar_valid(pvt) &&
2660 dhar_base(pvt) <= sys_addr &&
2661 sys_addr < BIT_64(32)) {
2662 amd64_warn("Huh? Address is in the MMIO hole: 0x%016llx\n",
2663 sys_addr);
2664 return -EINVAL;
2665 }
2666
2667 /* Verify sys_addr is within DCT Range. */
2668 dct_base = (u64) dct_sel_baseaddr(pvt);
2669 dct_limit = (dct_cont_limit_reg >> 11) & 0x1FFF;
2670
2671 if (!(dct_cont_base_reg & BIT(0)) &&
2672 !(dct_base <= (sys_addr >> 27) &&
2673 dct_limit >= (sys_addr >> 27)))
2674 return -EINVAL;
2675
2676 /* Verify number of dct's that participate in channel interleaving. */
2677 num_dcts_intlv = (int) hweight8(intlv_en);
2678
2679 if (!(num_dcts_intlv % 2 == 0) || (num_dcts_intlv > 4))
2680 return -EINVAL;
2681
2682 if (pvt->model >= 0x60)
2683 channel = f1x_determine_channel(pvt, sys_addr, false, intlv_en);
2684 else
2685 channel = f15_m30h_determine_channel(pvt, sys_addr, intlv_en,
2686 num_dcts_intlv, dct_sel);
2687
2688 /* Verify we stay within the MAX number of channels allowed */
2689 if (channel > 3)
2690 return -EINVAL;
2691
2692 leg_mmio_hole = (u8) (dct_cont_base_reg >> 1 & BIT(0));
2693
2694 /* Get normalized DCT addr */
2695 if (leg_mmio_hole && (sys_addr >= BIT_64(32)))
2696 chan_offset = dhar_offset;
2697 else
2698 chan_offset = dct_base << 27;
2699
2700 chan_addr = sys_addr - chan_offset;
2701
2702 /* remove channel interleave */
2703 if (num_dcts_intlv == 2) {
2704 if (intlv_addr == 0x4)
2705 chan_addr = ((chan_addr >> 9) << 8) |
2706 (chan_addr & 0xff);
2707 else if (intlv_addr == 0x5)
2708 chan_addr = ((chan_addr >> 10) << 9) |
2709 (chan_addr & 0x1ff);
2710 else
2711 return -EINVAL;
2712
2713 } else if (num_dcts_intlv == 4) {
2714 if (intlv_addr == 0x4)
2715 chan_addr = ((chan_addr >> 10) << 8) |
2716 (chan_addr & 0xff);
2717 else if (intlv_addr == 0x5)
2718 chan_addr = ((chan_addr >> 11) << 9) |
2719 (chan_addr & 0x1ff);
2720 else
2721 return -EINVAL;
2722 }
2723
2724 if (dct_offset_en) {
2725 amd64_read_pci_cfg(pvt->F1,
2726 DRAM_CONT_HIGH_OFF + (int) channel * 4,
2727 &tmp);
2728 chan_addr += (u64) ((tmp >> 11) & 0xfff) << 27;
2729 }
2730
2731 f15h_select_dct(pvt, channel);
2732
2733 edac_dbg(1, " Normalized DCT addr: 0x%llx\n", chan_addr);
2734
2735 /*
2736 * Find Chip select:
2737 * if channel = 3, then alias it to 1. This is because, in F15 M30h,
2738 * there is support for 4 DCT's, but only 2 are currently functional.
2739 * They are DCT0 and DCT3. But we have read all registers of DCT3 into
2740 * pvt->csels[1]. So we need to use '1' here to get correct info.
2741 * Refer F15 M30h BKDG Section 2.10 and 2.10.3 for clarifications.
2742 */
2743 alias_channel = (channel == 3) ? 1 : channel;
2744
2745 cs_found = f1x_lookup_addr_in_dct(chan_addr, node_id, alias_channel);
2746
2747 if (cs_found >= 0)
2748 *chan_sel = alias_channel;
2749
2750 return cs_found;
2751 }
2752
f1x_translate_sysaddr_to_cs(struct amd64_pvt * pvt,u64 sys_addr,int * chan_sel)2753 static int f1x_translate_sysaddr_to_cs(struct amd64_pvt *pvt,
2754 u64 sys_addr,
2755 int *chan_sel)
2756 {
2757 int cs_found = -EINVAL;
2758 unsigned range;
2759
2760 for (range = 0; range < DRAM_RANGES; range++) {
2761 if (!dram_rw(pvt, range))
2762 continue;
2763
2764 if (pvt->fam == 0x15 && pvt->model >= 0x30)
2765 cs_found = f15_m30h_match_to_this_node(pvt, range,
2766 sys_addr,
2767 chan_sel);
2768
2769 else if ((get_dram_base(pvt, range) <= sys_addr) &&
2770 (get_dram_limit(pvt, range) >= sys_addr)) {
2771 cs_found = f1x_match_to_this_node(pvt, range,
2772 sys_addr, chan_sel);
2773 if (cs_found >= 0)
2774 break;
2775 }
2776 }
2777 return cs_found;
2778 }
2779
2780 /*
2781 * For reference see "2.8.5 Routing DRAM Requests" in F10 BKDG. This code maps
2782 * a @sys_addr to NodeID, DCT (channel) and chip select (CSROW).
2783 *
2784 * The @sys_addr is usually an error address received from the hardware
2785 * (MCX_ADDR).
2786 */
f1x_map_sysaddr_to_csrow(struct mem_ctl_info * mci,u64 sys_addr,struct err_info * err)2787 static void f1x_map_sysaddr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr,
2788 struct err_info *err)
2789 {
2790 struct amd64_pvt *pvt = mci->pvt_info;
2791
2792 error_address_to_page_and_offset(sys_addr, err);
2793
2794 err->csrow = f1x_translate_sysaddr_to_cs(pvt, sys_addr, &err->channel);
2795 if (err->csrow < 0) {
2796 err->err_code = ERR_CSROW;
2797 return;
2798 }
2799
2800 /*
2801 * We need the syndromes for channel detection only when we're
2802 * ganged. Otherwise @chan should already contain the channel at
2803 * this point.
2804 */
2805 if (dct_ganging_enabled(pvt))
2806 err->channel = get_channel_from_ecc_syndrome(mci, err->syndrome);
2807 }
2808
2809 /*
2810 * These are tables of eigenvectors (one per line) which can be used for the
2811 * construction of the syndrome tables. The modified syndrome search algorithm
2812 * uses those to find the symbol in error and thus the DIMM.
2813 *
2814 * Algorithm courtesy of Ross LaFetra from AMD.
2815 */
2816 static const u16 x4_vectors[] = {
2817 0x2f57, 0x1afe, 0x66cc, 0xdd88,
2818 0x11eb, 0x3396, 0x7f4c, 0xeac8,
2819 0x0001, 0x0002, 0x0004, 0x0008,
2820 0x1013, 0x3032, 0x4044, 0x8088,
2821 0x106b, 0x30d6, 0x70fc, 0xe0a8,
2822 0x4857, 0xc4fe, 0x13cc, 0x3288,
2823 0x1ac5, 0x2f4a, 0x5394, 0xa1e8,
2824 0x1f39, 0x251e, 0xbd6c, 0x6bd8,
2825 0x15c1, 0x2a42, 0x89ac, 0x4758,
2826 0x2b03, 0x1602, 0x4f0c, 0xca08,
2827 0x1f07, 0x3a0e, 0x6b04, 0xbd08,
2828 0x8ba7, 0x465e, 0x244c, 0x1cc8,
2829 0x2b87, 0x164e, 0x642c, 0xdc18,
2830 0x40b9, 0x80de, 0x1094, 0x20e8,
2831 0x27db, 0x1eb6, 0x9dac, 0x7b58,
2832 0x11c1, 0x2242, 0x84ac, 0x4c58,
2833 0x1be5, 0x2d7a, 0x5e34, 0xa718,
2834 0x4b39, 0x8d1e, 0x14b4, 0x28d8,
2835 0x4c97, 0xc87e, 0x11fc, 0x33a8,
2836 0x8e97, 0x497e, 0x2ffc, 0x1aa8,
2837 0x16b3, 0x3d62, 0x4f34, 0x8518,
2838 0x1e2f, 0x391a, 0x5cac, 0xf858,
2839 0x1d9f, 0x3b7a, 0x572c, 0xfe18,
2840 0x15f5, 0x2a5a, 0x5264, 0xa3b8,
2841 0x1dbb, 0x3b66, 0x715c, 0xe3f8,
2842 0x4397, 0xc27e, 0x17fc, 0x3ea8,
2843 0x1617, 0x3d3e, 0x6464, 0xb8b8,
2844 0x23ff, 0x12aa, 0xab6c, 0x56d8,
2845 0x2dfb, 0x1ba6, 0x913c, 0x7328,
2846 0x185d, 0x2ca6, 0x7914, 0x9e28,
2847 0x171b, 0x3e36, 0x7d7c, 0xebe8,
2848 0x4199, 0x82ee, 0x19f4, 0x2e58,
2849 0x4807, 0xc40e, 0x130c, 0x3208,
2850 0x1905, 0x2e0a, 0x5804, 0xac08,
2851 0x213f, 0x132a, 0xadfc, 0x5ba8,
2852 0x19a9, 0x2efe, 0xb5cc, 0x6f88,
2853 };
2854
2855 static const u16 x8_vectors[] = {
2856 0x0145, 0x028a, 0x2374, 0x43c8, 0xa1f0, 0x0520, 0x0a40, 0x1480,
2857 0x0211, 0x0422, 0x0844, 0x1088, 0x01b0, 0x44e0, 0x23c0, 0xed80,
2858 0x1011, 0x0116, 0x022c, 0x0458, 0x08b0, 0x8c60, 0x2740, 0x4e80,
2859 0x0411, 0x0822, 0x1044, 0x0158, 0x02b0, 0x2360, 0x46c0, 0xab80,
2860 0x0811, 0x1022, 0x012c, 0x0258, 0x04b0, 0x4660, 0x8cc0, 0x2780,
2861 0x2071, 0x40e2, 0xa0c4, 0x0108, 0x0210, 0x0420, 0x0840, 0x1080,
2862 0x4071, 0x80e2, 0x0104, 0x0208, 0x0410, 0x0820, 0x1040, 0x2080,
2863 0x8071, 0x0102, 0x0204, 0x0408, 0x0810, 0x1020, 0x2040, 0x4080,
2864 0x019d, 0x03d6, 0x136c, 0x2198, 0x50b0, 0xb2e0, 0x0740, 0x0e80,
2865 0x0189, 0x03ea, 0x072c, 0x0e58, 0x1cb0, 0x56e0, 0x37c0, 0xf580,
2866 0x01fd, 0x0376, 0x06ec, 0x0bb8, 0x1110, 0x2220, 0x4440, 0x8880,
2867 0x0163, 0x02c6, 0x1104, 0x0758, 0x0eb0, 0x2be0, 0x6140, 0xc280,
2868 0x02fd, 0x01c6, 0x0b5c, 0x1108, 0x07b0, 0x25a0, 0x8840, 0x6180,
2869 0x0801, 0x012e, 0x025c, 0x04b8, 0x1370, 0x26e0, 0x57c0, 0xb580,
2870 0x0401, 0x0802, 0x015c, 0x02b8, 0x22b0, 0x13e0, 0x7140, 0xe280,
2871 0x0201, 0x0402, 0x0804, 0x01b8, 0x11b0, 0x31a0, 0x8040, 0x7180,
2872 0x0101, 0x0202, 0x0404, 0x0808, 0x1010, 0x2020, 0x4040, 0x8080,
2873 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
2874 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000,
2875 };
2876
decode_syndrome(u16 syndrome,const u16 * vectors,unsigned num_vecs,unsigned v_dim)2877 static int decode_syndrome(u16 syndrome, const u16 *vectors, unsigned num_vecs,
2878 unsigned v_dim)
2879 {
2880 unsigned int i, err_sym;
2881
2882 for (err_sym = 0; err_sym < num_vecs / v_dim; err_sym++) {
2883 u16 s = syndrome;
2884 unsigned v_idx = err_sym * v_dim;
2885 unsigned v_end = (err_sym + 1) * v_dim;
2886
2887 /* walk over all 16 bits of the syndrome */
2888 for (i = 1; i < (1U << 16); i <<= 1) {
2889
2890 /* if bit is set in that eigenvector... */
2891 if (v_idx < v_end && vectors[v_idx] & i) {
2892 u16 ev_comp = vectors[v_idx++];
2893
2894 /* ... and bit set in the modified syndrome, */
2895 if (s & i) {
2896 /* remove it. */
2897 s ^= ev_comp;
2898
2899 if (!s)
2900 return err_sym;
2901 }
2902
2903 } else if (s & i)
2904 /* can't get to zero, move to next symbol */
2905 break;
2906 }
2907 }
2908
2909 edac_dbg(0, "syndrome(%x) not found\n", syndrome);
2910 return -1;
2911 }
2912
map_err_sym_to_channel(int err_sym,int sym_size)2913 static int map_err_sym_to_channel(int err_sym, int sym_size)
2914 {
2915 if (sym_size == 4)
2916 switch (err_sym) {
2917 case 0x20:
2918 case 0x21:
2919 return 0;
2920 case 0x22:
2921 case 0x23:
2922 return 1;
2923 default:
2924 return err_sym >> 4;
2925 }
2926 /* x8 symbols */
2927 else
2928 switch (err_sym) {
2929 /* imaginary bits not in a DIMM */
2930 case 0x10:
2931 WARN(1, KERN_ERR "Invalid error symbol: 0x%x\n",
2932 err_sym);
2933 return -1;
2934 case 0x11:
2935 return 0;
2936 case 0x12:
2937 return 1;
2938 default:
2939 return err_sym >> 3;
2940 }
2941 return -1;
2942 }
2943
get_channel_from_ecc_syndrome(struct mem_ctl_info * mci,u16 syndrome)2944 static int get_channel_from_ecc_syndrome(struct mem_ctl_info *mci, u16 syndrome)
2945 {
2946 struct amd64_pvt *pvt = mci->pvt_info;
2947 int err_sym = -1;
2948
2949 if (pvt->ecc_sym_sz == 8)
2950 err_sym = decode_syndrome(syndrome, x8_vectors,
2951 ARRAY_SIZE(x8_vectors),
2952 pvt->ecc_sym_sz);
2953 else if (pvt->ecc_sym_sz == 4)
2954 err_sym = decode_syndrome(syndrome, x4_vectors,
2955 ARRAY_SIZE(x4_vectors),
2956 pvt->ecc_sym_sz);
2957 else {
2958 amd64_warn("Illegal syndrome type: %u\n", pvt->ecc_sym_sz);
2959 return err_sym;
2960 }
2961
2962 return map_err_sym_to_channel(err_sym, pvt->ecc_sym_sz);
2963 }
2964
__log_ecc_error(struct mem_ctl_info * mci,struct err_info * err,u8 ecc_type)2965 static void __log_ecc_error(struct mem_ctl_info *mci, struct err_info *err,
2966 u8 ecc_type)
2967 {
2968 enum hw_event_mc_err_type err_type;
2969 const char *string;
2970
2971 if (ecc_type == 2)
2972 err_type = HW_EVENT_ERR_CORRECTED;
2973 else if (ecc_type == 1)
2974 err_type = HW_EVENT_ERR_UNCORRECTED;
2975 else if (ecc_type == 3)
2976 err_type = HW_EVENT_ERR_DEFERRED;
2977 else {
2978 WARN(1, "Something is rotten in the state of Denmark.\n");
2979 return;
2980 }
2981
2982 switch (err->err_code) {
2983 case DECODE_OK:
2984 string = "";
2985 break;
2986 case ERR_NODE:
2987 string = "Failed to map error addr to a node";
2988 break;
2989 case ERR_CSROW:
2990 string = "Failed to map error addr to a csrow";
2991 break;
2992 case ERR_CHANNEL:
2993 string = "Unknown syndrome - possible error reporting race";
2994 break;
2995 case ERR_SYND:
2996 string = "MCA_SYND not valid - unknown syndrome and csrow";
2997 break;
2998 case ERR_NORM_ADDR:
2999 string = "Cannot decode normalized address";
3000 break;
3001 default:
3002 string = "WTF error";
3003 break;
3004 }
3005
3006 edac_mc_handle_error(err_type, mci, 1,
3007 err->page, err->offset, err->syndrome,
3008 err->csrow, err->channel, -1,
3009 string, "");
3010 }
3011
decode_bus_error(int node_id,struct mce * m)3012 static inline void decode_bus_error(int node_id, struct mce *m)
3013 {
3014 struct mem_ctl_info *mci;
3015 struct amd64_pvt *pvt;
3016 u8 ecc_type = (m->status >> 45) & 0x3;
3017 u8 xec = XEC(m->status, 0x1f);
3018 u16 ec = EC(m->status);
3019 u64 sys_addr;
3020 struct err_info err;
3021
3022 mci = edac_mc_find(node_id);
3023 if (!mci)
3024 return;
3025
3026 pvt = mci->pvt_info;
3027
3028 /* Bail out early if this was an 'observed' error */
3029 if (PP(ec) == NBSL_PP_OBS)
3030 return;
3031
3032 /* Do only ECC errors */
3033 if (xec && xec != F10_NBSL_EXT_ERR_ECC)
3034 return;
3035
3036 memset(&err, 0, sizeof(err));
3037
3038 sys_addr = get_error_address(pvt, m);
3039
3040 if (ecc_type == 2)
3041 err.syndrome = extract_syndrome(m->status);
3042
3043 pvt->ops->map_sysaddr_to_csrow(mci, sys_addr, &err);
3044
3045 __log_ecc_error(mci, &err, ecc_type);
3046 }
3047
3048 /*
3049 * To find the UMC channel represented by this bank we need to match on its
3050 * instance_id. The instance_id of a bank is held in the lower 32 bits of its
3051 * IPID.
3052 *
3053 * Currently, we can derive the channel number by looking at the 6th nibble in
3054 * the instance_id. For example, instance_id=0xYXXXXX where Y is the channel
3055 * number.
3056 *
3057 * For DRAM ECC errors, the Chip Select number is given in bits [2:0] of
3058 * the MCA_SYND[ErrorInformation] field.
3059 */
umc_get_err_info(struct mce * m,struct err_info * err)3060 static void umc_get_err_info(struct mce *m, struct err_info *err)
3061 {
3062 err->channel = (m->ipid & GENMASK(31, 0)) >> 20;
3063 err->csrow = m->synd & 0x7;
3064 }
3065
decode_umc_error(int node_id,struct mce * m)3066 static void decode_umc_error(int node_id, struct mce *m)
3067 {
3068 u8 ecc_type = (m->status >> 45) & 0x3;
3069 struct mem_ctl_info *mci;
3070 struct amd64_pvt *pvt;
3071 struct err_info err;
3072 u64 sys_addr;
3073
3074 node_id = fixup_node_id(node_id, m);
3075
3076 mci = edac_mc_find(node_id);
3077 if (!mci)
3078 return;
3079
3080 pvt = mci->pvt_info;
3081
3082 memset(&err, 0, sizeof(err));
3083
3084 if (m->status & MCI_STATUS_DEFERRED)
3085 ecc_type = 3;
3086
3087 if (!(m->status & MCI_STATUS_SYNDV)) {
3088 err.err_code = ERR_SYND;
3089 goto log_error;
3090 }
3091
3092 if (ecc_type == 2) {
3093 u8 length = (m->synd >> 18) & 0x3f;
3094
3095 if (length)
3096 err.syndrome = (m->synd >> 32) & GENMASK(length - 1, 0);
3097 else
3098 err.err_code = ERR_CHANNEL;
3099 }
3100
3101 pvt->ops->get_err_info(m, &err);
3102
3103 if (umc_normaddr_to_sysaddr(m->addr, pvt->mc_node_id, err.channel, &sys_addr)) {
3104 err.err_code = ERR_NORM_ADDR;
3105 goto log_error;
3106 }
3107
3108 error_address_to_page_and_offset(sys_addr, &err);
3109
3110 log_error:
3111 __log_ecc_error(mci, &err, ecc_type);
3112 }
3113
3114 /*
3115 * Use pvt->F3 which contains the F3 CPU PCI device to get the related
3116 * F1 (AddrMap) and F2 (Dct) devices. Return negative value on error.
3117 */
3118 static int
reserve_mc_sibling_devs(struct amd64_pvt * pvt,u16 pci_id1,u16 pci_id2)3119 reserve_mc_sibling_devs(struct amd64_pvt *pvt, u16 pci_id1, u16 pci_id2)
3120 {
3121 /* Reserve the ADDRESS MAP Device */
3122 pvt->F1 = pci_get_related_function(pvt->F3->vendor, pci_id1, pvt->F3);
3123 if (!pvt->F1) {
3124 edac_dbg(1, "F1 not found: device 0x%x\n", pci_id1);
3125 return -ENODEV;
3126 }
3127
3128 /* Reserve the DCT Device */
3129 pvt->F2 = pci_get_related_function(pvt->F3->vendor, pci_id2, pvt->F3);
3130 if (!pvt->F2) {
3131 pci_dev_put(pvt->F1);
3132 pvt->F1 = NULL;
3133
3134 edac_dbg(1, "F2 not found: device 0x%x\n", pci_id2);
3135 return -ENODEV;
3136 }
3137
3138 if (!pci_ctl_dev)
3139 pci_ctl_dev = &pvt->F2->dev;
3140
3141 edac_dbg(1, "F1: %s\n", pci_name(pvt->F1));
3142 edac_dbg(1, "F2: %s\n", pci_name(pvt->F2));
3143 edac_dbg(1, "F3: %s\n", pci_name(pvt->F3));
3144
3145 return 0;
3146 }
3147
determine_ecc_sym_sz(struct amd64_pvt * pvt)3148 static void determine_ecc_sym_sz(struct amd64_pvt *pvt)
3149 {
3150 pvt->ecc_sym_sz = 4;
3151
3152 if (pvt->fam >= 0x10) {
3153 u32 tmp;
3154
3155 amd64_read_pci_cfg(pvt->F3, EXT_NB_MCA_CFG, &tmp);
3156 /* F16h has only DCT0, so no need to read dbam1. */
3157 if (pvt->fam != 0x16)
3158 amd64_read_dct_pci_cfg(pvt, 1, DBAM0, &pvt->dbam1);
3159
3160 /* F10h, revD and later can do x8 ECC too. */
3161 if ((pvt->fam > 0x10 || pvt->model > 7) && tmp & BIT(25))
3162 pvt->ecc_sym_sz = 8;
3163 }
3164 }
3165
3166 /*
3167 * Retrieve the hardware registers of the memory controller.
3168 */
umc_read_mc_regs(struct amd64_pvt * pvt)3169 static void umc_read_mc_regs(struct amd64_pvt *pvt)
3170 {
3171 u8 nid = pvt->mc_node_id;
3172 struct amd64_umc *umc;
3173 u32 i, umc_base;
3174
3175 /* Read registers from each UMC */
3176 for_each_umc(i) {
3177
3178 umc_base = get_umc_base(i);
3179 umc = &pvt->umc[i];
3180
3181 amd_smn_read(nid, umc_base + get_umc_reg(pvt, UMCCH_DIMM_CFG), &umc->dimm_cfg);
3182 amd_smn_read(nid, umc_base + UMCCH_UMC_CFG, &umc->umc_cfg);
3183 amd_smn_read(nid, umc_base + UMCCH_SDP_CTRL, &umc->sdp_ctrl);
3184 amd_smn_read(nid, umc_base + UMCCH_ECC_CTRL, &umc->ecc_ctrl);
3185 amd_smn_read(nid, umc_base + UMCCH_UMC_CAP_HI, &umc->umc_cap_hi);
3186 }
3187 }
3188
3189 /*
3190 * Retrieve the hardware registers of the memory controller (this includes the
3191 * 'Address Map' and 'Misc' device regs)
3192 */
dct_read_mc_regs(struct amd64_pvt * pvt)3193 static void dct_read_mc_regs(struct amd64_pvt *pvt)
3194 {
3195 unsigned int range;
3196 u64 msr_val;
3197
3198 /*
3199 * Retrieve TOP_MEM and TOP_MEM2; no masking off of reserved bits since
3200 * those are Read-As-Zero.
3201 */
3202 rdmsrl(MSR_K8_TOP_MEM1, pvt->top_mem);
3203 edac_dbg(0, " TOP_MEM: 0x%016llx\n", pvt->top_mem);
3204
3205 /* Check first whether TOP_MEM2 is enabled: */
3206 rdmsrl(MSR_AMD64_SYSCFG, msr_val);
3207 if (msr_val & BIT(21)) {
3208 rdmsrl(MSR_K8_TOP_MEM2, pvt->top_mem2);
3209 edac_dbg(0, " TOP_MEM2: 0x%016llx\n", pvt->top_mem2);
3210 } else {
3211 edac_dbg(0, " TOP_MEM2 disabled\n");
3212 }
3213
3214 amd64_read_pci_cfg(pvt->F3, NBCAP, &pvt->nbcap);
3215
3216 read_dram_ctl_register(pvt);
3217
3218 for (range = 0; range < DRAM_RANGES; range++) {
3219 u8 rw;
3220
3221 /* read settings for this DRAM range */
3222 read_dram_base_limit_regs(pvt, range);
3223
3224 rw = dram_rw(pvt, range);
3225 if (!rw)
3226 continue;
3227
3228 edac_dbg(1, " DRAM range[%d], base: 0x%016llx; limit: 0x%016llx\n",
3229 range,
3230 get_dram_base(pvt, range),
3231 get_dram_limit(pvt, range));
3232
3233 edac_dbg(1, " IntlvEn=%s; Range access: %s%s IntlvSel=%d DstNode=%d\n",
3234 dram_intlv_en(pvt, range) ? "Enabled" : "Disabled",
3235 (rw & 0x1) ? "R" : "-",
3236 (rw & 0x2) ? "W" : "-",
3237 dram_intlv_sel(pvt, range),
3238 dram_dst_node(pvt, range));
3239 }
3240
3241 amd64_read_pci_cfg(pvt->F1, DHAR, &pvt->dhar);
3242 amd64_read_dct_pci_cfg(pvt, 0, DBAM0, &pvt->dbam0);
3243
3244 amd64_read_pci_cfg(pvt->F3, F10_ONLINE_SPARE, &pvt->online_spare);
3245
3246 amd64_read_dct_pci_cfg(pvt, 0, DCLR0, &pvt->dclr0);
3247 amd64_read_dct_pci_cfg(pvt, 0, DCHR0, &pvt->dchr0);
3248
3249 if (!dct_ganging_enabled(pvt)) {
3250 amd64_read_dct_pci_cfg(pvt, 1, DCLR0, &pvt->dclr1);
3251 amd64_read_dct_pci_cfg(pvt, 1, DCHR0, &pvt->dchr1);
3252 }
3253
3254 determine_ecc_sym_sz(pvt);
3255 }
3256
3257 /*
3258 * NOTE: CPU Revision Dependent code
3259 *
3260 * Input:
3261 * @csrow_nr ChipSelect Row Number (0..NUM_CHIPSELECTS-1)
3262 * k8 private pointer to -->
3263 * DRAM Bank Address mapping register
3264 * node_id
3265 * DCL register where dual_channel_active is
3266 *
3267 * The DBAM register consists of 4 sets of 4 bits each definitions:
3268 *
3269 * Bits: CSROWs
3270 * 0-3 CSROWs 0 and 1
3271 * 4-7 CSROWs 2 and 3
3272 * 8-11 CSROWs 4 and 5
3273 * 12-15 CSROWs 6 and 7
3274 *
3275 * Values range from: 0 to 15
3276 * The meaning of the values depends on CPU revision and dual-channel state,
3277 * see relevant BKDG more info.
3278 *
3279 * The memory controller provides for total of only 8 CSROWs in its current
3280 * architecture. Each "pair" of CSROWs normally represents just one DIMM in
3281 * single channel or two (2) DIMMs in dual channel mode.
3282 *
3283 * The following code logic collapses the various tables for CSROW based on CPU
3284 * revision.
3285 *
3286 * Returns:
3287 * The number of PAGE_SIZE pages on the specified CSROW number it
3288 * encompasses
3289 *
3290 */
dct_get_csrow_nr_pages(struct amd64_pvt * pvt,u8 dct,int csrow_nr)3291 static u32 dct_get_csrow_nr_pages(struct amd64_pvt *pvt, u8 dct, int csrow_nr)
3292 {
3293 u32 dbam = dct ? pvt->dbam1 : pvt->dbam0;
3294 u32 cs_mode, nr_pages;
3295
3296 csrow_nr >>= 1;
3297 cs_mode = DBAM_DIMM(csrow_nr, dbam);
3298
3299 nr_pages = pvt->ops->dbam_to_cs(pvt, dct, cs_mode, csrow_nr);
3300 nr_pages <<= 20 - PAGE_SHIFT;
3301
3302 edac_dbg(0, "csrow: %d, channel: %d, DBAM idx: %d\n",
3303 csrow_nr, dct, cs_mode);
3304 edac_dbg(0, "nr_pages/channel: %u\n", nr_pages);
3305
3306 return nr_pages;
3307 }
3308
umc_get_csrow_nr_pages(struct amd64_pvt * pvt,u8 dct,int csrow_nr_orig)3309 static u32 umc_get_csrow_nr_pages(struct amd64_pvt *pvt, u8 dct, int csrow_nr_orig)
3310 {
3311 int csrow_nr = csrow_nr_orig;
3312 u32 cs_mode, nr_pages;
3313
3314 cs_mode = umc_get_cs_mode(csrow_nr >> 1, dct, pvt);
3315
3316 nr_pages = umc_addr_mask_to_cs_size(pvt, dct, cs_mode, csrow_nr);
3317 nr_pages <<= 20 - PAGE_SHIFT;
3318
3319 edac_dbg(0, "csrow: %d, channel: %d, cs_mode %d\n",
3320 csrow_nr_orig, dct, cs_mode);
3321 edac_dbg(0, "nr_pages/channel: %u\n", nr_pages);
3322
3323 return nr_pages;
3324 }
3325
umc_init_csrows(struct mem_ctl_info * mci)3326 static void umc_init_csrows(struct mem_ctl_info *mci)
3327 {
3328 struct amd64_pvt *pvt = mci->pvt_info;
3329 enum edac_type edac_mode = EDAC_NONE;
3330 enum dev_type dev_type = DEV_UNKNOWN;
3331 struct dimm_info *dimm;
3332 u8 umc, cs;
3333
3334 if (mci->edac_ctl_cap & EDAC_FLAG_S16ECD16ED) {
3335 edac_mode = EDAC_S16ECD16ED;
3336 dev_type = DEV_X16;
3337 } else if (mci->edac_ctl_cap & EDAC_FLAG_S8ECD8ED) {
3338 edac_mode = EDAC_S8ECD8ED;
3339 dev_type = DEV_X8;
3340 } else if (mci->edac_ctl_cap & EDAC_FLAG_S4ECD4ED) {
3341 edac_mode = EDAC_S4ECD4ED;
3342 dev_type = DEV_X4;
3343 } else if (mci->edac_ctl_cap & EDAC_FLAG_SECDED) {
3344 edac_mode = EDAC_SECDED;
3345 }
3346
3347 for_each_umc(umc) {
3348 for_each_chip_select(cs, umc, pvt) {
3349 if (!csrow_enabled(cs, umc, pvt))
3350 continue;
3351
3352 dimm = mci->csrows[cs]->channels[umc]->dimm;
3353
3354 edac_dbg(1, "MC node: %d, csrow: %d\n",
3355 pvt->mc_node_id, cs);
3356
3357 dimm->nr_pages = umc_get_csrow_nr_pages(pvt, umc, cs);
3358 dimm->mtype = pvt->umc[umc].dram_type;
3359 dimm->edac_mode = edac_mode;
3360 dimm->dtype = dev_type;
3361 dimm->grain = 64;
3362 }
3363 }
3364 }
3365
3366 /*
3367 * Initialize the array of csrow attribute instances, based on the values
3368 * from pci config hardware registers.
3369 */
dct_init_csrows(struct mem_ctl_info * mci)3370 static void dct_init_csrows(struct mem_ctl_info *mci)
3371 {
3372 struct amd64_pvt *pvt = mci->pvt_info;
3373 enum edac_type edac_mode = EDAC_NONE;
3374 struct csrow_info *csrow;
3375 struct dimm_info *dimm;
3376 int nr_pages = 0;
3377 int i, j;
3378 u32 val;
3379
3380 amd64_read_pci_cfg(pvt->F3, NBCFG, &val);
3381
3382 pvt->nbcfg = val;
3383
3384 edac_dbg(0, "node %d, NBCFG=0x%08x[ChipKillEccCap: %d|DramEccEn: %d]\n",
3385 pvt->mc_node_id, val,
3386 !!(val & NBCFG_CHIPKILL), !!(val & NBCFG_ECC_ENABLE));
3387
3388 /*
3389 * We iterate over DCT0 here but we look at DCT1 in parallel, if needed.
3390 */
3391 for_each_chip_select(i, 0, pvt) {
3392 bool row_dct0 = !!csrow_enabled(i, 0, pvt);
3393 bool row_dct1 = false;
3394
3395 if (pvt->fam != 0xf)
3396 row_dct1 = !!csrow_enabled(i, 1, pvt);
3397
3398 if (!row_dct0 && !row_dct1)
3399 continue;
3400
3401 csrow = mci->csrows[i];
3402
3403 edac_dbg(1, "MC node: %d, csrow: %d\n",
3404 pvt->mc_node_id, i);
3405
3406 if (row_dct0) {
3407 nr_pages = dct_get_csrow_nr_pages(pvt, 0, i);
3408 csrow->channels[0]->dimm->nr_pages = nr_pages;
3409 }
3410
3411 /* K8 has only one DCT */
3412 if (pvt->fam != 0xf && row_dct1) {
3413 int row_dct1_pages = dct_get_csrow_nr_pages(pvt, 1, i);
3414
3415 csrow->channels[1]->dimm->nr_pages = row_dct1_pages;
3416 nr_pages += row_dct1_pages;
3417 }
3418
3419 edac_dbg(1, "Total csrow%d pages: %u\n", i, nr_pages);
3420
3421 /* Determine DIMM ECC mode: */
3422 if (pvt->nbcfg & NBCFG_ECC_ENABLE) {
3423 edac_mode = (pvt->nbcfg & NBCFG_CHIPKILL)
3424 ? EDAC_S4ECD4ED
3425 : EDAC_SECDED;
3426 }
3427
3428 for (j = 0; j < pvt->max_mcs; j++) {
3429 dimm = csrow->channels[j]->dimm;
3430 dimm->mtype = pvt->dram_type;
3431 dimm->edac_mode = edac_mode;
3432 dimm->grain = 64;
3433 }
3434 }
3435 }
3436
3437 /* get all cores on this DCT */
get_cpus_on_this_dct_cpumask(struct cpumask * mask,u16 nid)3438 static void get_cpus_on_this_dct_cpumask(struct cpumask *mask, u16 nid)
3439 {
3440 int cpu;
3441
3442 for_each_online_cpu(cpu)
3443 if (topology_die_id(cpu) == nid)
3444 cpumask_set_cpu(cpu, mask);
3445 }
3446
3447 /* check MCG_CTL on all the cpus on this node */
nb_mce_bank_enabled_on_node(u16 nid)3448 static bool nb_mce_bank_enabled_on_node(u16 nid)
3449 {
3450 cpumask_var_t mask;
3451 int cpu, nbe;
3452 bool ret = false;
3453
3454 if (!zalloc_cpumask_var(&mask, GFP_KERNEL)) {
3455 amd64_warn("%s: Error allocating mask\n", __func__);
3456 return false;
3457 }
3458
3459 get_cpus_on_this_dct_cpumask(mask, nid);
3460
3461 rdmsr_on_cpus(mask, MSR_IA32_MCG_CTL, msrs);
3462
3463 for_each_cpu(cpu, mask) {
3464 struct msr *reg = per_cpu_ptr(msrs, cpu);
3465 nbe = reg->l & MSR_MCGCTL_NBE;
3466
3467 edac_dbg(0, "core: %u, MCG_CTL: 0x%llx, NB MSR is %s\n",
3468 cpu, reg->q,
3469 (nbe ? "enabled" : "disabled"));
3470
3471 if (!nbe)
3472 goto out;
3473 }
3474 ret = true;
3475
3476 out:
3477 free_cpumask_var(mask);
3478 return ret;
3479 }
3480
toggle_ecc_err_reporting(struct ecc_settings * s,u16 nid,bool on)3481 static int toggle_ecc_err_reporting(struct ecc_settings *s, u16 nid, bool on)
3482 {
3483 cpumask_var_t cmask;
3484 int cpu;
3485
3486 if (!zalloc_cpumask_var(&cmask, GFP_KERNEL)) {
3487 amd64_warn("%s: error allocating mask\n", __func__);
3488 return -ENOMEM;
3489 }
3490
3491 get_cpus_on_this_dct_cpumask(cmask, nid);
3492
3493 rdmsr_on_cpus(cmask, MSR_IA32_MCG_CTL, msrs);
3494
3495 for_each_cpu(cpu, cmask) {
3496
3497 struct msr *reg = per_cpu_ptr(msrs, cpu);
3498
3499 if (on) {
3500 if (reg->l & MSR_MCGCTL_NBE)
3501 s->flags.nb_mce_enable = 1;
3502
3503 reg->l |= MSR_MCGCTL_NBE;
3504 } else {
3505 /*
3506 * Turn off NB MCE reporting only when it was off before
3507 */
3508 if (!s->flags.nb_mce_enable)
3509 reg->l &= ~MSR_MCGCTL_NBE;
3510 }
3511 }
3512 wrmsr_on_cpus(cmask, MSR_IA32_MCG_CTL, msrs);
3513
3514 free_cpumask_var(cmask);
3515
3516 return 0;
3517 }
3518
enable_ecc_error_reporting(struct ecc_settings * s,u16 nid,struct pci_dev * F3)3519 static bool enable_ecc_error_reporting(struct ecc_settings *s, u16 nid,
3520 struct pci_dev *F3)
3521 {
3522 bool ret = true;
3523 u32 value, mask = 0x3; /* UECC/CECC enable */
3524
3525 if (toggle_ecc_err_reporting(s, nid, ON)) {
3526 amd64_warn("Error enabling ECC reporting over MCGCTL!\n");
3527 return false;
3528 }
3529
3530 amd64_read_pci_cfg(F3, NBCTL, &value);
3531
3532 s->old_nbctl = value & mask;
3533 s->nbctl_valid = true;
3534
3535 value |= mask;
3536 amd64_write_pci_cfg(F3, NBCTL, value);
3537
3538 amd64_read_pci_cfg(F3, NBCFG, &value);
3539
3540 edac_dbg(0, "1: node %d, NBCFG=0x%08x[DramEccEn: %d]\n",
3541 nid, value, !!(value & NBCFG_ECC_ENABLE));
3542
3543 if (!(value & NBCFG_ECC_ENABLE)) {
3544 amd64_warn("DRAM ECC disabled on this node, enabling...\n");
3545
3546 s->flags.nb_ecc_prev = 0;
3547
3548 /* Attempt to turn on DRAM ECC Enable */
3549 value |= NBCFG_ECC_ENABLE;
3550 amd64_write_pci_cfg(F3, NBCFG, value);
3551
3552 amd64_read_pci_cfg(F3, NBCFG, &value);
3553
3554 if (!(value & NBCFG_ECC_ENABLE)) {
3555 amd64_warn("Hardware rejected DRAM ECC enable,"
3556 "check memory DIMM configuration.\n");
3557 ret = false;
3558 } else {
3559 amd64_info("Hardware accepted DRAM ECC Enable\n");
3560 }
3561 } else {
3562 s->flags.nb_ecc_prev = 1;
3563 }
3564
3565 edac_dbg(0, "2: node %d, NBCFG=0x%08x[DramEccEn: %d]\n",
3566 nid, value, !!(value & NBCFG_ECC_ENABLE));
3567
3568 return ret;
3569 }
3570
restore_ecc_error_reporting(struct ecc_settings * s,u16 nid,struct pci_dev * F3)3571 static void restore_ecc_error_reporting(struct ecc_settings *s, u16 nid,
3572 struct pci_dev *F3)
3573 {
3574 u32 value, mask = 0x3; /* UECC/CECC enable */
3575
3576 if (!s->nbctl_valid)
3577 return;
3578
3579 amd64_read_pci_cfg(F3, NBCTL, &value);
3580 value &= ~mask;
3581 value |= s->old_nbctl;
3582
3583 amd64_write_pci_cfg(F3, NBCTL, value);
3584
3585 /* restore previous BIOS DRAM ECC "off" setting we force-enabled */
3586 if (!s->flags.nb_ecc_prev) {
3587 amd64_read_pci_cfg(F3, NBCFG, &value);
3588 value &= ~NBCFG_ECC_ENABLE;
3589 amd64_write_pci_cfg(F3, NBCFG, value);
3590 }
3591
3592 /* restore the NB Enable MCGCTL bit */
3593 if (toggle_ecc_err_reporting(s, nid, OFF))
3594 amd64_warn("Error restoring NB MCGCTL settings!\n");
3595 }
3596
dct_ecc_enabled(struct amd64_pvt * pvt)3597 static bool dct_ecc_enabled(struct amd64_pvt *pvt)
3598 {
3599 u16 nid = pvt->mc_node_id;
3600 bool nb_mce_en = false;
3601 u8 ecc_en = 0;
3602 u32 value;
3603
3604 amd64_read_pci_cfg(pvt->F3, NBCFG, &value);
3605
3606 ecc_en = !!(value & NBCFG_ECC_ENABLE);
3607
3608 nb_mce_en = nb_mce_bank_enabled_on_node(nid);
3609 if (!nb_mce_en)
3610 edac_dbg(0, "NB MCE bank disabled, set MSR 0x%08x[4] on node %d to enable.\n",
3611 MSR_IA32_MCG_CTL, nid);
3612
3613 edac_dbg(3, "Node %d: DRAM ECC %s.\n", nid, (ecc_en ? "enabled" : "disabled"));
3614
3615 if (!ecc_en || !nb_mce_en)
3616 return false;
3617 else
3618 return true;
3619 }
3620
umc_ecc_enabled(struct amd64_pvt * pvt)3621 static bool umc_ecc_enabled(struct amd64_pvt *pvt)
3622 {
3623 u8 umc_en_mask = 0, ecc_en_mask = 0;
3624 u16 nid = pvt->mc_node_id;
3625 struct amd64_umc *umc;
3626 u8 ecc_en = 0, i;
3627
3628 for_each_umc(i) {
3629 umc = &pvt->umc[i];
3630
3631 /* Only check enabled UMCs. */
3632 if (!(umc->sdp_ctrl & UMC_SDP_INIT))
3633 continue;
3634
3635 umc_en_mask |= BIT(i);
3636
3637 if (umc->umc_cap_hi & UMC_ECC_ENABLED)
3638 ecc_en_mask |= BIT(i);
3639 }
3640
3641 /* Check whether at least one UMC is enabled: */
3642 if (umc_en_mask)
3643 ecc_en = umc_en_mask == ecc_en_mask;
3644 else
3645 edac_dbg(0, "Node %d: No enabled UMCs.\n", nid);
3646
3647 edac_dbg(3, "Node %d: DRAM ECC %s.\n", nid, (ecc_en ? "enabled" : "disabled"));
3648
3649 if (!ecc_en)
3650 return false;
3651 else
3652 return true;
3653 }
3654
3655 static inline void
umc_determine_edac_ctl_cap(struct mem_ctl_info * mci,struct amd64_pvt * pvt)3656 umc_determine_edac_ctl_cap(struct mem_ctl_info *mci, struct amd64_pvt *pvt)
3657 {
3658 u8 i, ecc_en = 1, cpk_en = 1, dev_x4 = 1, dev_x16 = 1;
3659
3660 for_each_umc(i) {
3661 if (pvt->umc[i].sdp_ctrl & UMC_SDP_INIT) {
3662 ecc_en &= !!(pvt->umc[i].umc_cap_hi & UMC_ECC_ENABLED);
3663 cpk_en &= !!(pvt->umc[i].umc_cap_hi & UMC_ECC_CHIPKILL_CAP);
3664
3665 dev_x4 &= !!(pvt->umc[i].dimm_cfg & BIT(6));
3666 dev_x16 &= !!(pvt->umc[i].dimm_cfg & BIT(7));
3667 }
3668 }
3669
3670 /* Set chipkill only if ECC is enabled: */
3671 if (ecc_en) {
3672 mci->edac_ctl_cap |= EDAC_FLAG_SECDED;
3673
3674 if (!cpk_en)
3675 return;
3676
3677 if (dev_x4)
3678 mci->edac_ctl_cap |= EDAC_FLAG_S4ECD4ED;
3679 else if (dev_x16)
3680 mci->edac_ctl_cap |= EDAC_FLAG_S16ECD16ED;
3681 else
3682 mci->edac_ctl_cap |= EDAC_FLAG_S8ECD8ED;
3683 }
3684 }
3685
dct_setup_mci_misc_attrs(struct mem_ctl_info * mci)3686 static void dct_setup_mci_misc_attrs(struct mem_ctl_info *mci)
3687 {
3688 struct amd64_pvt *pvt = mci->pvt_info;
3689
3690 mci->mtype_cap = MEM_FLAG_DDR2 | MEM_FLAG_RDDR2;
3691 mci->edac_ctl_cap = EDAC_FLAG_NONE;
3692
3693 if (pvt->nbcap & NBCAP_SECDED)
3694 mci->edac_ctl_cap |= EDAC_FLAG_SECDED;
3695
3696 if (pvt->nbcap & NBCAP_CHIPKILL)
3697 mci->edac_ctl_cap |= EDAC_FLAG_S4ECD4ED;
3698
3699 mci->edac_cap = dct_determine_edac_cap(pvt);
3700 mci->mod_name = EDAC_MOD_STR;
3701 mci->ctl_name = pvt->ctl_name;
3702 mci->dev_name = pci_name(pvt->F3);
3703 mci->ctl_page_to_phys = NULL;
3704
3705 /* memory scrubber interface */
3706 mci->set_sdram_scrub_rate = set_scrub_rate;
3707 mci->get_sdram_scrub_rate = get_scrub_rate;
3708
3709 dct_init_csrows(mci);
3710 }
3711
umc_setup_mci_misc_attrs(struct mem_ctl_info * mci)3712 static void umc_setup_mci_misc_attrs(struct mem_ctl_info *mci)
3713 {
3714 struct amd64_pvt *pvt = mci->pvt_info;
3715
3716 mci->mtype_cap = MEM_FLAG_DDR4 | MEM_FLAG_RDDR4;
3717 mci->edac_ctl_cap = EDAC_FLAG_NONE;
3718
3719 umc_determine_edac_ctl_cap(mci, pvt);
3720
3721 mci->edac_cap = umc_determine_edac_cap(pvt);
3722 mci->mod_name = EDAC_MOD_STR;
3723 mci->ctl_name = pvt->ctl_name;
3724 mci->dev_name = pci_name(pvt->F3);
3725 mci->ctl_page_to_phys = NULL;
3726
3727 umc_init_csrows(mci);
3728 }
3729
dct_hw_info_get(struct amd64_pvt * pvt)3730 static int dct_hw_info_get(struct amd64_pvt *pvt)
3731 {
3732 int ret = reserve_mc_sibling_devs(pvt, pvt->f1_id, pvt->f2_id);
3733
3734 if (ret)
3735 return ret;
3736
3737 dct_prep_chip_selects(pvt);
3738 dct_read_base_mask(pvt);
3739 dct_read_mc_regs(pvt);
3740 dct_determine_memory_type(pvt);
3741
3742 return 0;
3743 }
3744
umc_hw_info_get(struct amd64_pvt * pvt)3745 static int umc_hw_info_get(struct amd64_pvt *pvt)
3746 {
3747 pvt->umc = kcalloc(pvt->max_mcs, sizeof(struct amd64_umc), GFP_KERNEL);
3748 if (!pvt->umc)
3749 return -ENOMEM;
3750
3751 umc_prep_chip_selects(pvt);
3752 umc_read_base_mask(pvt);
3753 umc_read_mc_regs(pvt);
3754 umc_determine_memory_type(pvt);
3755
3756 return 0;
3757 }
3758
3759 /*
3760 * The CPUs have one channel per UMC, so UMC number is equivalent to a
3761 * channel number. The GPUs have 8 channels per UMC, so the UMC number no
3762 * longer works as a channel number.
3763 *
3764 * The channel number within a GPU UMC is given in MCA_IPID[15:12].
3765 * However, the IDs are split such that two UMC values go to one UMC, and
3766 * the channel numbers are split in two groups of four.
3767 *
3768 * Refer to comment on gpu_get_umc_base().
3769 *
3770 * For example,
3771 * UMC0 CH[3:0] = 0x0005[3:0]000
3772 * UMC0 CH[7:4] = 0x0015[3:0]000
3773 * UMC1 CH[3:0] = 0x0025[3:0]000
3774 * UMC1 CH[7:4] = 0x0035[3:0]000
3775 */
gpu_get_err_info(struct mce * m,struct err_info * err)3776 static void gpu_get_err_info(struct mce *m, struct err_info *err)
3777 {
3778 u8 ch = (m->ipid & GENMASK(31, 0)) >> 20;
3779 u8 phy = ((m->ipid >> 12) & 0xf);
3780
3781 err->channel = ch % 2 ? phy + 4 : phy;
3782 err->csrow = phy;
3783 }
3784
gpu_addr_mask_to_cs_size(struct amd64_pvt * pvt,u8 umc,unsigned int cs_mode,int csrow_nr)3785 static int gpu_addr_mask_to_cs_size(struct amd64_pvt *pvt, u8 umc,
3786 unsigned int cs_mode, int csrow_nr)
3787 {
3788 u32 addr_mask_orig = pvt->csels[umc].csmasks[csrow_nr];
3789
3790 return __addr_mask_to_cs_size(addr_mask_orig, cs_mode, csrow_nr, csrow_nr >> 1);
3791 }
3792
gpu_debug_display_dimm_sizes(struct amd64_pvt * pvt,u8 ctrl)3793 static void gpu_debug_display_dimm_sizes(struct amd64_pvt *pvt, u8 ctrl)
3794 {
3795 int size, cs_mode, cs = 0;
3796
3797 edac_printk(KERN_DEBUG, EDAC_MC, "UMC%d chip selects:\n", ctrl);
3798
3799 cs_mode = CS_EVEN_PRIMARY | CS_ODD_PRIMARY;
3800
3801 for_each_chip_select(cs, ctrl, pvt) {
3802 size = gpu_addr_mask_to_cs_size(pvt, ctrl, cs_mode, cs);
3803 amd64_info(EDAC_MC ": %d: %5dMB\n", cs, size);
3804 }
3805 }
3806
gpu_dump_misc_regs(struct amd64_pvt * pvt)3807 static void gpu_dump_misc_regs(struct amd64_pvt *pvt)
3808 {
3809 struct amd64_umc *umc;
3810 u32 i;
3811
3812 for_each_umc(i) {
3813 umc = &pvt->umc[i];
3814
3815 edac_dbg(1, "UMC%d UMC cfg: 0x%x\n", i, umc->umc_cfg);
3816 edac_dbg(1, "UMC%d SDP ctrl: 0x%x\n", i, umc->sdp_ctrl);
3817 edac_dbg(1, "UMC%d ECC ctrl: 0x%x\n", i, umc->ecc_ctrl);
3818 edac_dbg(1, "UMC%d All HBMs support ECC: yes\n", i);
3819
3820 gpu_debug_display_dimm_sizes(pvt, i);
3821 }
3822 }
3823
gpu_get_csrow_nr_pages(struct amd64_pvt * pvt,u8 dct,int csrow_nr)3824 static u32 gpu_get_csrow_nr_pages(struct amd64_pvt *pvt, u8 dct, int csrow_nr)
3825 {
3826 u32 nr_pages;
3827 int cs_mode = CS_EVEN_PRIMARY | CS_ODD_PRIMARY;
3828
3829 nr_pages = gpu_addr_mask_to_cs_size(pvt, dct, cs_mode, csrow_nr);
3830 nr_pages <<= 20 - PAGE_SHIFT;
3831
3832 edac_dbg(0, "csrow: %d, channel: %d\n", csrow_nr, dct);
3833 edac_dbg(0, "nr_pages/channel: %u\n", nr_pages);
3834
3835 return nr_pages;
3836 }
3837
gpu_init_csrows(struct mem_ctl_info * mci)3838 static void gpu_init_csrows(struct mem_ctl_info *mci)
3839 {
3840 struct amd64_pvt *pvt = mci->pvt_info;
3841 struct dimm_info *dimm;
3842 u8 umc, cs;
3843
3844 for_each_umc(umc) {
3845 for_each_chip_select(cs, umc, pvt) {
3846 if (!csrow_enabled(cs, umc, pvt))
3847 continue;
3848
3849 dimm = mci->csrows[umc]->channels[cs]->dimm;
3850
3851 edac_dbg(1, "MC node: %d, csrow: %d\n",
3852 pvt->mc_node_id, cs);
3853
3854 dimm->nr_pages = gpu_get_csrow_nr_pages(pvt, umc, cs);
3855 dimm->edac_mode = EDAC_SECDED;
3856 dimm->mtype = MEM_HBM2;
3857 dimm->dtype = DEV_X16;
3858 dimm->grain = 64;
3859 }
3860 }
3861 }
3862
gpu_setup_mci_misc_attrs(struct mem_ctl_info * mci)3863 static void gpu_setup_mci_misc_attrs(struct mem_ctl_info *mci)
3864 {
3865 struct amd64_pvt *pvt = mci->pvt_info;
3866
3867 mci->mtype_cap = MEM_FLAG_HBM2;
3868 mci->edac_ctl_cap = EDAC_FLAG_SECDED;
3869
3870 mci->edac_cap = EDAC_FLAG_EC;
3871 mci->mod_name = EDAC_MOD_STR;
3872 mci->ctl_name = pvt->ctl_name;
3873 mci->dev_name = pci_name(pvt->F3);
3874 mci->ctl_page_to_phys = NULL;
3875
3876 gpu_init_csrows(mci);
3877 }
3878
3879 /* ECC is enabled by default on GPU nodes */
gpu_ecc_enabled(struct amd64_pvt * pvt)3880 static bool gpu_ecc_enabled(struct amd64_pvt *pvt)
3881 {
3882 return true;
3883 }
3884
gpu_get_umc_base(u8 umc,u8 channel)3885 static inline u32 gpu_get_umc_base(u8 umc, u8 channel)
3886 {
3887 /*
3888 * On CPUs, there is one channel per UMC, so UMC numbering equals
3889 * channel numbering. On GPUs, there are eight channels per UMC,
3890 * so the channel numbering is different from UMC numbering.
3891 *
3892 * On CPU nodes channels are selected in 6th nibble
3893 * UMC chY[3:0]= [(chY*2 + 1) : (chY*2)]50000;
3894 *
3895 * On GPU nodes channels are selected in 3rd nibble
3896 * HBM chX[3:0]= [Y ]5X[3:0]000;
3897 * HBM chX[7:4]= [Y+1]5X[3:0]000
3898 */
3899 umc *= 2;
3900
3901 if (channel >= 4)
3902 umc++;
3903
3904 return 0x50000 + (umc << 20) + ((channel % 4) << 12);
3905 }
3906
gpu_read_mc_regs(struct amd64_pvt * pvt)3907 static void gpu_read_mc_regs(struct amd64_pvt *pvt)
3908 {
3909 u8 nid = pvt->mc_node_id;
3910 struct amd64_umc *umc;
3911 u32 i, umc_base;
3912
3913 /* Read registers from each UMC */
3914 for_each_umc(i) {
3915 umc_base = gpu_get_umc_base(i, 0);
3916 umc = &pvt->umc[i];
3917
3918 amd_smn_read(nid, umc_base + UMCCH_UMC_CFG, &umc->umc_cfg);
3919 amd_smn_read(nid, umc_base + UMCCH_SDP_CTRL, &umc->sdp_ctrl);
3920 amd_smn_read(nid, umc_base + UMCCH_ECC_CTRL, &umc->ecc_ctrl);
3921 }
3922 }
3923
gpu_read_base_mask(struct amd64_pvt * pvt)3924 static void gpu_read_base_mask(struct amd64_pvt *pvt)
3925 {
3926 u32 base_reg, mask_reg;
3927 u32 *base, *mask;
3928 int umc, cs;
3929
3930 for_each_umc(umc) {
3931 for_each_chip_select(cs, umc, pvt) {
3932 base_reg = gpu_get_umc_base(umc, cs) + UMCCH_BASE_ADDR;
3933 base = &pvt->csels[umc].csbases[cs];
3934
3935 if (!amd_smn_read(pvt->mc_node_id, base_reg, base)) {
3936 edac_dbg(0, " DCSB%d[%d]=0x%08x reg: 0x%x\n",
3937 umc, cs, *base, base_reg);
3938 }
3939
3940 mask_reg = gpu_get_umc_base(umc, cs) + UMCCH_ADDR_MASK;
3941 mask = &pvt->csels[umc].csmasks[cs];
3942
3943 if (!amd_smn_read(pvt->mc_node_id, mask_reg, mask)) {
3944 edac_dbg(0, " DCSM%d[%d]=0x%08x reg: 0x%x\n",
3945 umc, cs, *mask, mask_reg);
3946 }
3947 }
3948 }
3949 }
3950
gpu_prep_chip_selects(struct amd64_pvt * pvt)3951 static void gpu_prep_chip_selects(struct amd64_pvt *pvt)
3952 {
3953 int umc;
3954
3955 for_each_umc(umc) {
3956 pvt->csels[umc].b_cnt = 8;
3957 pvt->csels[umc].m_cnt = 8;
3958 }
3959 }
3960
gpu_hw_info_get(struct amd64_pvt * pvt)3961 static int gpu_hw_info_get(struct amd64_pvt *pvt)
3962 {
3963 int ret;
3964
3965 ret = gpu_get_node_map();
3966 if (ret)
3967 return ret;
3968
3969 pvt->umc = kcalloc(pvt->max_mcs, sizeof(struct amd64_umc), GFP_KERNEL);
3970 if (!pvt->umc)
3971 return -ENOMEM;
3972
3973 gpu_prep_chip_selects(pvt);
3974 gpu_read_base_mask(pvt);
3975 gpu_read_mc_regs(pvt);
3976
3977 return 0;
3978 }
3979
hw_info_put(struct amd64_pvt * pvt)3980 static void hw_info_put(struct amd64_pvt *pvt)
3981 {
3982 pci_dev_put(pvt->F1);
3983 pci_dev_put(pvt->F2);
3984 kfree(pvt->umc);
3985 }
3986
3987 static struct low_ops umc_ops = {
3988 .hw_info_get = umc_hw_info_get,
3989 .ecc_enabled = umc_ecc_enabled,
3990 .setup_mci_misc_attrs = umc_setup_mci_misc_attrs,
3991 .dump_misc_regs = umc_dump_misc_regs,
3992 .get_err_info = umc_get_err_info,
3993 };
3994
3995 static struct low_ops gpu_ops = {
3996 .hw_info_get = gpu_hw_info_get,
3997 .ecc_enabled = gpu_ecc_enabled,
3998 .setup_mci_misc_attrs = gpu_setup_mci_misc_attrs,
3999 .dump_misc_regs = gpu_dump_misc_regs,
4000 .get_err_info = gpu_get_err_info,
4001 };
4002
4003 /* Use Family 16h versions for defaults and adjust as needed below. */
4004 static struct low_ops dct_ops = {
4005 .map_sysaddr_to_csrow = f1x_map_sysaddr_to_csrow,
4006 .dbam_to_cs = f16_dbam_to_chip_select,
4007 .hw_info_get = dct_hw_info_get,
4008 .ecc_enabled = dct_ecc_enabled,
4009 .setup_mci_misc_attrs = dct_setup_mci_misc_attrs,
4010 .dump_misc_regs = dct_dump_misc_regs,
4011 };
4012
per_family_init(struct amd64_pvt * pvt)4013 static int per_family_init(struct amd64_pvt *pvt)
4014 {
4015 pvt->ext_model = boot_cpu_data.x86_model >> 4;
4016 pvt->stepping = boot_cpu_data.x86_stepping;
4017 pvt->model = boot_cpu_data.x86_model;
4018 pvt->fam = boot_cpu_data.x86;
4019 pvt->max_mcs = 2;
4020
4021 /*
4022 * Decide on which ops group to use here and do any family/model
4023 * overrides below.
4024 */
4025 if (pvt->fam >= 0x17)
4026 pvt->ops = &umc_ops;
4027 else
4028 pvt->ops = &dct_ops;
4029
4030 switch (pvt->fam) {
4031 case 0xf:
4032 pvt->ctl_name = (pvt->ext_model >= K8_REV_F) ?
4033 "K8 revF or later" : "K8 revE or earlier";
4034 pvt->f1_id = PCI_DEVICE_ID_AMD_K8_NB_ADDRMAP;
4035 pvt->f2_id = PCI_DEVICE_ID_AMD_K8_NB_MEMCTL;
4036 pvt->ops->map_sysaddr_to_csrow = k8_map_sysaddr_to_csrow;
4037 pvt->ops->dbam_to_cs = k8_dbam_to_chip_select;
4038 break;
4039
4040 case 0x10:
4041 pvt->ctl_name = "F10h";
4042 pvt->f1_id = PCI_DEVICE_ID_AMD_10H_NB_MAP;
4043 pvt->f2_id = PCI_DEVICE_ID_AMD_10H_NB_DRAM;
4044 pvt->ops->dbam_to_cs = f10_dbam_to_chip_select;
4045 break;
4046
4047 case 0x15:
4048 switch (pvt->model) {
4049 case 0x30:
4050 pvt->ctl_name = "F15h_M30h";
4051 pvt->f1_id = PCI_DEVICE_ID_AMD_15H_M30H_NB_F1;
4052 pvt->f2_id = PCI_DEVICE_ID_AMD_15H_M30H_NB_F2;
4053 break;
4054 case 0x60:
4055 pvt->ctl_name = "F15h_M60h";
4056 pvt->f1_id = PCI_DEVICE_ID_AMD_15H_M60H_NB_F1;
4057 pvt->f2_id = PCI_DEVICE_ID_AMD_15H_M60H_NB_F2;
4058 pvt->ops->dbam_to_cs = f15_m60h_dbam_to_chip_select;
4059 break;
4060 case 0x13:
4061 /* Richland is only client */
4062 return -ENODEV;
4063 default:
4064 pvt->ctl_name = "F15h";
4065 pvt->f1_id = PCI_DEVICE_ID_AMD_15H_NB_F1;
4066 pvt->f2_id = PCI_DEVICE_ID_AMD_15H_NB_F2;
4067 pvt->ops->dbam_to_cs = f15_dbam_to_chip_select;
4068 break;
4069 }
4070 break;
4071
4072 case 0x16:
4073 switch (pvt->model) {
4074 case 0x30:
4075 pvt->ctl_name = "F16h_M30h";
4076 pvt->f1_id = PCI_DEVICE_ID_AMD_16H_M30H_NB_F1;
4077 pvt->f2_id = PCI_DEVICE_ID_AMD_16H_M30H_NB_F2;
4078 break;
4079 default:
4080 pvt->ctl_name = "F16h";
4081 pvt->f1_id = PCI_DEVICE_ID_AMD_16H_NB_F1;
4082 pvt->f2_id = PCI_DEVICE_ID_AMD_16H_NB_F2;
4083 break;
4084 }
4085 break;
4086
4087 case 0x17:
4088 switch (pvt->model) {
4089 case 0x10 ... 0x2f:
4090 pvt->ctl_name = "F17h_M10h";
4091 break;
4092 case 0x30 ... 0x3f:
4093 pvt->ctl_name = "F17h_M30h";
4094 pvt->max_mcs = 8;
4095 break;
4096 case 0x60 ... 0x6f:
4097 pvt->ctl_name = "F17h_M60h";
4098 break;
4099 case 0x70 ... 0x7f:
4100 pvt->ctl_name = "F17h_M70h";
4101 break;
4102 default:
4103 pvt->ctl_name = "F17h";
4104 break;
4105 }
4106 break;
4107
4108 case 0x18:
4109 pvt->ctl_name = "F18h";
4110 break;
4111
4112 case 0x19:
4113 switch (pvt->model) {
4114 case 0x00 ... 0x0f:
4115 pvt->ctl_name = "F19h";
4116 pvt->max_mcs = 8;
4117 break;
4118 case 0x10 ... 0x1f:
4119 pvt->ctl_name = "F19h_M10h";
4120 pvt->max_mcs = 12;
4121 pvt->flags.zn_regs_v2 = 1;
4122 break;
4123 case 0x20 ... 0x2f:
4124 pvt->ctl_name = "F19h_M20h";
4125 break;
4126 case 0x30 ... 0x3f:
4127 if (pvt->F3->device == PCI_DEVICE_ID_AMD_MI200_DF_F3) {
4128 pvt->ctl_name = "MI200";
4129 pvt->max_mcs = 4;
4130 pvt->ops = &gpu_ops;
4131 } else {
4132 pvt->ctl_name = "F19h_M30h";
4133 pvt->max_mcs = 8;
4134 }
4135 break;
4136 case 0x50 ... 0x5f:
4137 pvt->ctl_name = "F19h_M50h";
4138 break;
4139 case 0x60 ... 0x6f:
4140 pvt->ctl_name = "F19h_M60h";
4141 pvt->flags.zn_regs_v2 = 1;
4142 break;
4143 case 0x70 ... 0x7f:
4144 pvt->ctl_name = "F19h_M70h";
4145 pvt->flags.zn_regs_v2 = 1;
4146 break;
4147 case 0xa0 ... 0xaf:
4148 pvt->ctl_name = "F19h_MA0h";
4149 pvt->max_mcs = 12;
4150 pvt->flags.zn_regs_v2 = 1;
4151 break;
4152 }
4153 break;
4154
4155 case 0x1A:
4156 switch (pvt->model) {
4157 case 0x00 ... 0x1f:
4158 pvt->ctl_name = "F1Ah";
4159 pvt->max_mcs = 12;
4160 pvt->flags.zn_regs_v2 = 1;
4161 break;
4162 case 0x40 ... 0x4f:
4163 pvt->ctl_name = "F1Ah_M40h";
4164 pvt->flags.zn_regs_v2 = 1;
4165 break;
4166 }
4167 break;
4168
4169 default:
4170 amd64_err("Unsupported family!\n");
4171 return -ENODEV;
4172 }
4173
4174 return 0;
4175 }
4176
4177 static const struct attribute_group *amd64_edac_attr_groups[] = {
4178 #ifdef CONFIG_EDAC_DEBUG
4179 &dbg_group,
4180 &inj_group,
4181 #endif
4182 NULL
4183 };
4184
init_one_instance(struct amd64_pvt * pvt)4185 static int init_one_instance(struct amd64_pvt *pvt)
4186 {
4187 struct mem_ctl_info *mci = NULL;
4188 struct edac_mc_layer layers[2];
4189 int ret = -ENOMEM;
4190
4191 /*
4192 * For Heterogeneous family EDAC CHIP_SELECT and CHANNEL layers should
4193 * be swapped to fit into the layers.
4194 */
4195 layers[0].type = EDAC_MC_LAYER_CHIP_SELECT;
4196 layers[0].size = (pvt->F3->device == PCI_DEVICE_ID_AMD_MI200_DF_F3) ?
4197 pvt->max_mcs : pvt->csels[0].b_cnt;
4198 layers[0].is_virt_csrow = true;
4199 layers[1].type = EDAC_MC_LAYER_CHANNEL;
4200 layers[1].size = (pvt->F3->device == PCI_DEVICE_ID_AMD_MI200_DF_F3) ?
4201 pvt->csels[0].b_cnt : pvt->max_mcs;
4202 layers[1].is_virt_csrow = false;
4203
4204 mci = edac_mc_alloc(pvt->mc_node_id, ARRAY_SIZE(layers), layers, 0);
4205 if (!mci)
4206 return ret;
4207
4208 mci->pvt_info = pvt;
4209 mci->pdev = &pvt->F3->dev;
4210
4211 pvt->ops->setup_mci_misc_attrs(mci);
4212
4213 ret = -ENODEV;
4214 if (edac_mc_add_mc_with_groups(mci, amd64_edac_attr_groups)) {
4215 edac_dbg(1, "failed edac_mc_add_mc()\n");
4216 edac_mc_free(mci);
4217 return ret;
4218 }
4219
4220 return 0;
4221 }
4222
instance_has_memory(struct amd64_pvt * pvt)4223 static bool instance_has_memory(struct amd64_pvt *pvt)
4224 {
4225 bool cs_enabled = false;
4226 int cs = 0, dct = 0;
4227
4228 for (dct = 0; dct < pvt->max_mcs; dct++) {
4229 for_each_chip_select(cs, dct, pvt)
4230 cs_enabled |= csrow_enabled(cs, dct, pvt);
4231 }
4232
4233 return cs_enabled;
4234 }
4235
probe_one_instance(unsigned int nid)4236 static int probe_one_instance(unsigned int nid)
4237 {
4238 struct pci_dev *F3 = node_to_amd_nb(nid)->misc;
4239 struct amd64_pvt *pvt = NULL;
4240 struct ecc_settings *s;
4241 int ret;
4242
4243 ret = -ENOMEM;
4244 s = kzalloc(sizeof(struct ecc_settings), GFP_KERNEL);
4245 if (!s)
4246 goto err_out;
4247
4248 ecc_stngs[nid] = s;
4249
4250 pvt = kzalloc(sizeof(struct amd64_pvt), GFP_KERNEL);
4251 if (!pvt)
4252 goto err_settings;
4253
4254 pvt->mc_node_id = nid;
4255 pvt->F3 = F3;
4256
4257 ret = per_family_init(pvt);
4258 if (ret < 0)
4259 goto err_enable;
4260
4261 ret = pvt->ops->hw_info_get(pvt);
4262 if (ret < 0)
4263 goto err_enable;
4264
4265 ret = 0;
4266 if (!instance_has_memory(pvt)) {
4267 amd64_info("Node %d: No DIMMs detected.\n", nid);
4268 goto err_enable;
4269 }
4270
4271 if (!pvt->ops->ecc_enabled(pvt)) {
4272 ret = -ENODEV;
4273
4274 if (!ecc_enable_override)
4275 goto err_enable;
4276
4277 if (boot_cpu_data.x86 >= 0x17) {
4278 amd64_warn("Forcing ECC on is not recommended on newer systems. Please enable ECC in BIOS.");
4279 goto err_enable;
4280 } else
4281 amd64_warn("Forcing ECC on!\n");
4282
4283 if (!enable_ecc_error_reporting(s, nid, F3))
4284 goto err_enable;
4285 }
4286
4287 ret = init_one_instance(pvt);
4288 if (ret < 0) {
4289 amd64_err("Error probing instance: %d\n", nid);
4290
4291 if (boot_cpu_data.x86 < 0x17)
4292 restore_ecc_error_reporting(s, nid, F3);
4293
4294 goto err_enable;
4295 }
4296
4297 amd64_info("%s detected (node %d).\n", pvt->ctl_name, pvt->mc_node_id);
4298
4299 /* Display and decode various registers for debug purposes. */
4300 pvt->ops->dump_misc_regs(pvt);
4301
4302 return ret;
4303
4304 err_enable:
4305 hw_info_put(pvt);
4306 kfree(pvt);
4307
4308 err_settings:
4309 kfree(s);
4310 ecc_stngs[nid] = NULL;
4311
4312 err_out:
4313 return ret;
4314 }
4315
remove_one_instance(unsigned int nid)4316 static void remove_one_instance(unsigned int nid)
4317 {
4318 struct pci_dev *F3 = node_to_amd_nb(nid)->misc;
4319 struct ecc_settings *s = ecc_stngs[nid];
4320 struct mem_ctl_info *mci;
4321 struct amd64_pvt *pvt;
4322
4323 /* Remove from EDAC CORE tracking list */
4324 mci = edac_mc_del_mc(&F3->dev);
4325 if (!mci)
4326 return;
4327
4328 pvt = mci->pvt_info;
4329
4330 restore_ecc_error_reporting(s, nid, F3);
4331
4332 kfree(ecc_stngs[nid]);
4333 ecc_stngs[nid] = NULL;
4334
4335 /* Free the EDAC CORE resources */
4336 mci->pvt_info = NULL;
4337
4338 hw_info_put(pvt);
4339 kfree(pvt);
4340 edac_mc_free(mci);
4341 }
4342
setup_pci_device(void)4343 static void setup_pci_device(void)
4344 {
4345 if (pci_ctl)
4346 return;
4347
4348 pci_ctl = edac_pci_create_generic_ctl(pci_ctl_dev, EDAC_MOD_STR);
4349 if (!pci_ctl) {
4350 pr_warn("%s(): Unable to create PCI control\n", __func__);
4351 pr_warn("%s(): PCI error report via EDAC not set\n", __func__);
4352 }
4353 }
4354
4355 static const struct x86_cpu_id amd64_cpuids[] = {
4356 X86_MATCH_VENDOR_FAM(AMD, 0x0F, NULL),
4357 X86_MATCH_VENDOR_FAM(AMD, 0x10, NULL),
4358 X86_MATCH_VENDOR_FAM(AMD, 0x15, NULL),
4359 X86_MATCH_VENDOR_FAM(AMD, 0x16, NULL),
4360 X86_MATCH_VENDOR_FAM(AMD, 0x17, NULL),
4361 X86_MATCH_VENDOR_FAM(HYGON, 0x18, NULL),
4362 X86_MATCH_VENDOR_FAM(AMD, 0x19, NULL),
4363 X86_MATCH_VENDOR_FAM(AMD, 0x1A, NULL),
4364 { }
4365 };
4366 MODULE_DEVICE_TABLE(x86cpu, amd64_cpuids);
4367
amd64_edac_init(void)4368 static int __init amd64_edac_init(void)
4369 {
4370 const char *owner;
4371 int err = -ENODEV;
4372 int i;
4373
4374 if (ghes_get_devices())
4375 return -EBUSY;
4376
4377 owner = edac_get_owner();
4378 if (owner && strncmp(owner, EDAC_MOD_STR, sizeof(EDAC_MOD_STR)))
4379 return -EBUSY;
4380
4381 if (!x86_match_cpu(amd64_cpuids))
4382 return -ENODEV;
4383
4384 if (!amd_nb_num())
4385 return -ENODEV;
4386
4387 opstate_init();
4388
4389 err = -ENOMEM;
4390 ecc_stngs = kcalloc(amd_nb_num(), sizeof(ecc_stngs[0]), GFP_KERNEL);
4391 if (!ecc_stngs)
4392 goto err_free;
4393
4394 msrs = msrs_alloc();
4395 if (!msrs)
4396 goto err_free;
4397
4398 for (i = 0; i < amd_nb_num(); i++) {
4399 err = probe_one_instance(i);
4400 if (err) {
4401 /* unwind properly */
4402 while (--i >= 0)
4403 remove_one_instance(i);
4404
4405 goto err_pci;
4406 }
4407 }
4408
4409 if (!edac_has_mcs()) {
4410 err = -ENODEV;
4411 goto err_pci;
4412 }
4413
4414 /* register stuff with EDAC MCE */
4415 if (boot_cpu_data.x86 >= 0x17) {
4416 amd_register_ecc_decoder(decode_umc_error);
4417 } else {
4418 amd_register_ecc_decoder(decode_bus_error);
4419 setup_pci_device();
4420 }
4421
4422 #ifdef CONFIG_X86_32
4423 amd64_err("%s on 32-bit is unsupported. USE AT YOUR OWN RISK!\n", EDAC_MOD_STR);
4424 #endif
4425
4426 return 0;
4427
4428 err_pci:
4429 pci_ctl_dev = NULL;
4430
4431 msrs_free(msrs);
4432 msrs = NULL;
4433
4434 err_free:
4435 kfree(ecc_stngs);
4436 ecc_stngs = NULL;
4437
4438 return err;
4439 }
4440
amd64_edac_exit(void)4441 static void __exit amd64_edac_exit(void)
4442 {
4443 int i;
4444
4445 if (pci_ctl)
4446 edac_pci_release_generic_ctl(pci_ctl);
4447
4448 /* unregister from EDAC MCE */
4449 if (boot_cpu_data.x86 >= 0x17)
4450 amd_unregister_ecc_decoder(decode_umc_error);
4451 else
4452 amd_unregister_ecc_decoder(decode_bus_error);
4453
4454 for (i = 0; i < amd_nb_num(); i++)
4455 remove_one_instance(i);
4456
4457 kfree(ecc_stngs);
4458 ecc_stngs = NULL;
4459
4460 pci_ctl_dev = NULL;
4461
4462 msrs_free(msrs);
4463 msrs = NULL;
4464 }
4465
4466 module_init(amd64_edac_init);
4467 module_exit(amd64_edac_exit);
4468
4469 MODULE_LICENSE("GPL");
4470 MODULE_AUTHOR("SoftwareBitMaker: Doug Thompson, Dave Peterson, Thayne Harbaugh; AMD");
4471 MODULE_DESCRIPTION("MC support for AMD64 memory controllers");
4472
4473 module_param(edac_op_state, int, 0444);
4474 MODULE_PARM_DESC(edac_op_state, "EDAC Error Reporting state: 0=Poll,1=NMI");
4475