]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blob - drivers/edac/amd64_edac.c
Merge tag 'vfio-v3.18-rc1' of git://github.com/awilliam/linux-vfio
[mirror_ubuntu-jammy-kernel.git] / drivers / edac / amd64_edac.c
1 #include "amd64_edac.h"
2 #include <asm/amd_nb.h>
3
4 static struct edac_pci_ctl_info *pci_ctl;
5
6 static int report_gart_errors;
7 module_param(report_gart_errors, int, 0644);
8
9 /*
10 * Set by command line parameter. If BIOS has enabled the ECC, this override is
11 * cleared to prevent re-enabling the hardware by this driver.
12 */
13 static int ecc_enable_override;
14 module_param(ecc_enable_override, int, 0644);
15
16 static struct msr __percpu *msrs;
17
18 /*
19 * count successfully initialized driver instances for setup_pci_device()
20 */
21 static atomic_t drv_instances = ATOMIC_INIT(0);
22
23 /* Per-node driver instances */
24 static struct mem_ctl_info **mcis;
25 static struct ecc_settings **ecc_stngs;
26
27 /*
28 * Valid scrub rates for the K8 hardware memory scrubber. We map the scrubbing
29 * bandwidth to a valid bit pattern. The 'set' operation finds the 'matching-
30 * or higher value'.
31 *
32 *FIXME: Produce a better mapping/linearisation.
33 */
34 static const struct scrubrate {
35 u32 scrubval; /* bit pattern for scrub rate */
36 u32 bandwidth; /* bandwidth consumed (bytes/sec) */
37 } scrubrates[] = {
38 { 0x01, 1600000000UL},
39 { 0x02, 800000000UL},
40 { 0x03, 400000000UL},
41 { 0x04, 200000000UL},
42 { 0x05, 100000000UL},
43 { 0x06, 50000000UL},
44 { 0x07, 25000000UL},
45 { 0x08, 12284069UL},
46 { 0x09, 6274509UL},
47 { 0x0A, 3121951UL},
48 { 0x0B, 1560975UL},
49 { 0x0C, 781440UL},
50 { 0x0D, 390720UL},
51 { 0x0E, 195300UL},
52 { 0x0F, 97650UL},
53 { 0x10, 48854UL},
54 { 0x11, 24427UL},
55 { 0x12, 12213UL},
56 { 0x13, 6101UL},
57 { 0x14, 3051UL},
58 { 0x15, 1523UL},
59 { 0x16, 761UL},
60 { 0x00, 0UL}, /* scrubbing off */
61 };
62
63 int __amd64_read_pci_cfg_dword(struct pci_dev *pdev, int offset,
64 u32 *val, const char *func)
65 {
66 int err = 0;
67
68 err = pci_read_config_dword(pdev, offset, val);
69 if (err)
70 amd64_warn("%s: error reading F%dx%03x.\n",
71 func, PCI_FUNC(pdev->devfn), offset);
72
73 return err;
74 }
75
76 int __amd64_write_pci_cfg_dword(struct pci_dev *pdev, int offset,
77 u32 val, const char *func)
78 {
79 int err = 0;
80
81 err = pci_write_config_dword(pdev, offset, val);
82 if (err)
83 amd64_warn("%s: error writing to F%dx%03x.\n",
84 func, PCI_FUNC(pdev->devfn), offset);
85
86 return err;
87 }
88
89 /*
90 * Select DCT to which PCI cfg accesses are routed
91 */
92 static void f15h_select_dct(struct amd64_pvt *pvt, u8 dct)
93 {
94 u32 reg = 0;
95
96 amd64_read_pci_cfg(pvt->F1, DCT_CFG_SEL, &reg);
97 reg &= (pvt->model == 0x30) ? ~3 : ~1;
98 reg |= dct;
99 amd64_write_pci_cfg(pvt->F1, DCT_CFG_SEL, reg);
100 }
101
102 /*
103 *
104 * Depending on the family, F2 DCT reads need special handling:
105 *
106 * K8: has a single DCT only and no address offsets >= 0x100
107 *
108 * F10h: each DCT has its own set of regs
109 * DCT0 -> F2x040..
110 * DCT1 -> F2x140..
111 *
112 * F16h: has only 1 DCT
113 *
114 * F15h: we select which DCT we access using F1x10C[DctCfgSel]
115 */
116 static inline int amd64_read_dct_pci_cfg(struct amd64_pvt *pvt, u8 dct,
117 int offset, u32 *val)
118 {
119 switch (pvt->fam) {
120 case 0xf:
121 if (dct || offset >= 0x100)
122 return -EINVAL;
123 break;
124
125 case 0x10:
126 if (dct) {
127 /*
128 * Note: If ganging is enabled, barring the regs
129 * F2x[1,0]98 and F2x[1,0]9C; reads reads to F2x1xx
130 * return 0. (cf. Section 2.8.1 F10h BKDG)
131 */
132 if (dct_ganging_enabled(pvt))
133 return 0;
134
135 offset += 0x100;
136 }
137 break;
138
139 case 0x15:
140 /*
141 * F15h: F2x1xx addresses do not map explicitly to DCT1.
142 * We should select which DCT we access using F1x10C[DctCfgSel]
143 */
144 dct = (dct && pvt->model == 0x30) ? 3 : dct;
145 f15h_select_dct(pvt, dct);
146 break;
147
148 case 0x16:
149 if (dct)
150 return -EINVAL;
151 break;
152
153 default:
154 break;
155 }
156 return amd64_read_pci_cfg(pvt->F2, offset, val);
157 }
158
159 /*
160 * Memory scrubber control interface. For K8, memory scrubbing is handled by
161 * hardware and can involve L2 cache, dcache as well as the main memory. With
162 * F10, this is extended to L3 cache scrubbing on CPU models sporting that
163 * functionality.
164 *
165 * This causes the "units" for the scrubbing speed to vary from 64 byte blocks
166 * (dram) over to cache lines. This is nasty, so we will use bandwidth in
167 * bytes/sec for the setting.
168 *
169 * Currently, we only do dram scrubbing. If the scrubbing is done in software on
170 * other archs, we might not have access to the caches directly.
171 */
172
173 /*
174 * scan the scrub rate mapping table for a close or matching bandwidth value to
175 * issue. If requested is too big, then use last maximum value found.
176 */
177 static int __set_scrub_rate(struct pci_dev *ctl, u32 new_bw, u32 min_rate)
178 {
179 u32 scrubval;
180 int i;
181
182 /*
183 * map the configured rate (new_bw) to a value specific to the AMD64
184 * memory controller and apply to register. Search for the first
185 * bandwidth entry that is greater or equal than the setting requested
186 * and program that. If at last entry, turn off DRAM scrubbing.
187 *
188 * If no suitable bandwidth is found, turn off DRAM scrubbing entirely
189 * by falling back to the last element in scrubrates[].
190 */
191 for (i = 0; i < ARRAY_SIZE(scrubrates) - 1; i++) {
192 /*
193 * skip scrub rates which aren't recommended
194 * (see F10 BKDG, F3x58)
195 */
196 if (scrubrates[i].scrubval < min_rate)
197 continue;
198
199 if (scrubrates[i].bandwidth <= new_bw)
200 break;
201 }
202
203 scrubval = scrubrates[i].scrubval;
204
205 pci_write_bits32(ctl, SCRCTRL, scrubval, 0x001F);
206
207 if (scrubval)
208 return scrubrates[i].bandwidth;
209
210 return 0;
211 }
212
213 static int set_scrub_rate(struct mem_ctl_info *mci, u32 bw)
214 {
215 struct amd64_pvt *pvt = mci->pvt_info;
216 u32 min_scrubrate = 0x5;
217
218 if (pvt->fam == 0xf)
219 min_scrubrate = 0x0;
220
221 /* Erratum #505 */
222 if (pvt->fam == 0x15 && pvt->model < 0x10)
223 f15h_select_dct(pvt, 0);
224
225 return __set_scrub_rate(pvt->F3, bw, min_scrubrate);
226 }
227
228 static int get_scrub_rate(struct mem_ctl_info *mci)
229 {
230 struct amd64_pvt *pvt = mci->pvt_info;
231 u32 scrubval = 0;
232 int i, retval = -EINVAL;
233
234 /* Erratum #505 */
235 if (pvt->fam == 0x15 && pvt->model < 0x10)
236 f15h_select_dct(pvt, 0);
237
238 amd64_read_pci_cfg(pvt->F3, SCRCTRL, &scrubval);
239
240 scrubval = scrubval & 0x001F;
241
242 for (i = 0; i < ARRAY_SIZE(scrubrates); i++) {
243 if (scrubrates[i].scrubval == scrubval) {
244 retval = scrubrates[i].bandwidth;
245 break;
246 }
247 }
248 return retval;
249 }
250
251 /*
252 * returns true if the SysAddr given by sys_addr matches the
253 * DRAM base/limit associated with node_id
254 */
255 static bool base_limit_match(struct amd64_pvt *pvt, u64 sys_addr, u8 nid)
256 {
257 u64 addr;
258
259 /* The K8 treats this as a 40-bit value. However, bits 63-40 will be
260 * all ones if the most significant implemented address bit is 1.
261 * Here we discard bits 63-40. See section 3.4.2 of AMD publication
262 * 24592: AMD x86-64 Architecture Programmer's Manual Volume 1
263 * Application Programming.
264 */
265 addr = sys_addr & 0x000000ffffffffffull;
266
267 return ((addr >= get_dram_base(pvt, nid)) &&
268 (addr <= get_dram_limit(pvt, nid)));
269 }
270
271 /*
272 * Attempt to map a SysAddr to a node. On success, return a pointer to the
273 * mem_ctl_info structure for the node that the SysAddr maps to.
274 *
275 * On failure, return NULL.
276 */
277 static struct mem_ctl_info *find_mc_by_sys_addr(struct mem_ctl_info *mci,
278 u64 sys_addr)
279 {
280 struct amd64_pvt *pvt;
281 u8 node_id;
282 u32 intlv_en, bits;
283
284 /*
285 * Here we use the DRAM Base (section 3.4.4.1) and DRAM Limit (section
286 * 3.4.4.2) registers to map the SysAddr to a node ID.
287 */
288 pvt = mci->pvt_info;
289
290 /*
291 * The value of this field should be the same for all DRAM Base
292 * registers. Therefore we arbitrarily choose to read it from the
293 * register for node 0.
294 */
295 intlv_en = dram_intlv_en(pvt, 0);
296
297 if (intlv_en == 0) {
298 for (node_id = 0; node_id < DRAM_RANGES; node_id++) {
299 if (base_limit_match(pvt, sys_addr, node_id))
300 goto found;
301 }
302 goto err_no_match;
303 }
304
305 if (unlikely((intlv_en != 0x01) &&
306 (intlv_en != 0x03) &&
307 (intlv_en != 0x07))) {
308 amd64_warn("DRAM Base[IntlvEn] junk value: 0x%x, BIOS bug?\n", intlv_en);
309 return NULL;
310 }
311
312 bits = (((u32) sys_addr) >> 12) & intlv_en;
313
314 for (node_id = 0; ; ) {
315 if ((dram_intlv_sel(pvt, node_id) & intlv_en) == bits)
316 break; /* intlv_sel field matches */
317
318 if (++node_id >= DRAM_RANGES)
319 goto err_no_match;
320 }
321
322 /* sanity test for sys_addr */
323 if (unlikely(!base_limit_match(pvt, sys_addr, node_id))) {
324 amd64_warn("%s: sys_addr 0x%llx falls outside base/limit address"
325 "range for node %d with node interleaving enabled.\n",
326 __func__, sys_addr, node_id);
327 return NULL;
328 }
329
330 found:
331 return edac_mc_find((int)node_id);
332
333 err_no_match:
334 edac_dbg(2, "sys_addr 0x%lx doesn't match any node\n",
335 (unsigned long)sys_addr);
336
337 return NULL;
338 }
339
340 /*
341 * compute the CS base address of the @csrow on the DRAM controller @dct.
342 * For details see F2x[5C:40] in the processor's BKDG
343 */
344 static void get_cs_base_and_mask(struct amd64_pvt *pvt, int csrow, u8 dct,
345 u64 *base, u64 *mask)
346 {
347 u64 csbase, csmask, base_bits, mask_bits;
348 u8 addr_shift;
349
350 if (pvt->fam == 0xf && pvt->ext_model < K8_REV_F) {
351 csbase = pvt->csels[dct].csbases[csrow];
352 csmask = pvt->csels[dct].csmasks[csrow];
353 base_bits = GENMASK_ULL(31, 21) | GENMASK_ULL(15, 9);
354 mask_bits = GENMASK_ULL(29, 21) | GENMASK_ULL(15, 9);
355 addr_shift = 4;
356
357 /*
358 * F16h and F15h, models 30h and later need two addr_shift values:
359 * 8 for high and 6 for low (cf. F16h BKDG).
360 */
361 } else if (pvt->fam == 0x16 ||
362 (pvt->fam == 0x15 && pvt->model >= 0x30)) {
363 csbase = pvt->csels[dct].csbases[csrow];
364 csmask = pvt->csels[dct].csmasks[csrow >> 1];
365
366 *base = (csbase & GENMASK_ULL(15, 5)) << 6;
367 *base |= (csbase & GENMASK_ULL(30, 19)) << 8;
368
369 *mask = ~0ULL;
370 /* poke holes for the csmask */
371 *mask &= ~((GENMASK_ULL(15, 5) << 6) |
372 (GENMASK_ULL(30, 19) << 8));
373
374 *mask |= (csmask & GENMASK_ULL(15, 5)) << 6;
375 *mask |= (csmask & GENMASK_ULL(30, 19)) << 8;
376
377 return;
378 } else {
379 csbase = pvt->csels[dct].csbases[csrow];
380 csmask = pvt->csels[dct].csmasks[csrow >> 1];
381 addr_shift = 8;
382
383 if (pvt->fam == 0x15)
384 base_bits = mask_bits =
385 GENMASK_ULL(30,19) | GENMASK_ULL(13,5);
386 else
387 base_bits = mask_bits =
388 GENMASK_ULL(28,19) | GENMASK_ULL(13,5);
389 }
390
391 *base = (csbase & base_bits) << addr_shift;
392
393 *mask = ~0ULL;
394 /* poke holes for the csmask */
395 *mask &= ~(mask_bits << addr_shift);
396 /* OR them in */
397 *mask |= (csmask & mask_bits) << addr_shift;
398 }
399
400 #define for_each_chip_select(i, dct, pvt) \
401 for (i = 0; i < pvt->csels[dct].b_cnt; i++)
402
403 #define chip_select_base(i, dct, pvt) \
404 pvt->csels[dct].csbases[i]
405
406 #define for_each_chip_select_mask(i, dct, pvt) \
407 for (i = 0; i < pvt->csels[dct].m_cnt; i++)
408
409 /*
410 * @input_addr is an InputAddr associated with the node given by mci. Return the
411 * csrow that input_addr maps to, or -1 on failure (no csrow claims input_addr).
412 */
413 static int input_addr_to_csrow(struct mem_ctl_info *mci, u64 input_addr)
414 {
415 struct amd64_pvt *pvt;
416 int csrow;
417 u64 base, mask;
418
419 pvt = mci->pvt_info;
420
421 for_each_chip_select(csrow, 0, pvt) {
422 if (!csrow_enabled(csrow, 0, pvt))
423 continue;
424
425 get_cs_base_and_mask(pvt, csrow, 0, &base, &mask);
426
427 mask = ~mask;
428
429 if ((input_addr & mask) == (base & mask)) {
430 edac_dbg(2, "InputAddr 0x%lx matches csrow %d (node %d)\n",
431 (unsigned long)input_addr, csrow,
432 pvt->mc_node_id);
433
434 return csrow;
435 }
436 }
437 edac_dbg(2, "no matching csrow for InputAddr 0x%lx (MC node %d)\n",
438 (unsigned long)input_addr, pvt->mc_node_id);
439
440 return -1;
441 }
442
443 /*
444 * Obtain info from the DRAM Hole Address Register (section 3.4.8, pub #26094)
445 * for the node represented by mci. Info is passed back in *hole_base,
446 * *hole_offset, and *hole_size. Function returns 0 if info is valid or 1 if
447 * info is invalid. Info may be invalid for either of the following reasons:
448 *
449 * - The revision of the node is not E or greater. In this case, the DRAM Hole
450 * Address Register does not exist.
451 *
452 * - The DramHoleValid bit is cleared in the DRAM Hole Address Register,
453 * indicating that its contents are not valid.
454 *
455 * The values passed back in *hole_base, *hole_offset, and *hole_size are
456 * complete 32-bit values despite the fact that the bitfields in the DHAR
457 * only represent bits 31-24 of the base and offset values.
458 */
459 int amd64_get_dram_hole_info(struct mem_ctl_info *mci, u64 *hole_base,
460 u64 *hole_offset, u64 *hole_size)
461 {
462 struct amd64_pvt *pvt = mci->pvt_info;
463
464 /* only revE and later have the DRAM Hole Address Register */
465 if (pvt->fam == 0xf && pvt->ext_model < K8_REV_E) {
466 edac_dbg(1, " revision %d for node %d does not support DHAR\n",
467 pvt->ext_model, pvt->mc_node_id);
468 return 1;
469 }
470
471 /* valid for Fam10h and above */
472 if (pvt->fam >= 0x10 && !dhar_mem_hoist_valid(pvt)) {
473 edac_dbg(1, " Dram Memory Hoisting is DISABLED on this system\n");
474 return 1;
475 }
476
477 if (!dhar_valid(pvt)) {
478 edac_dbg(1, " Dram Memory Hoisting is DISABLED on this node %d\n",
479 pvt->mc_node_id);
480 return 1;
481 }
482
483 /* This node has Memory Hoisting */
484
485 /* +------------------+--------------------+--------------------+-----
486 * | memory | DRAM hole | relocated |
487 * | [0, (x - 1)] | [x, 0xffffffff] | addresses from |
488 * | | | DRAM hole |
489 * | | | [0x100000000, |
490 * | | | (0x100000000+ |
491 * | | | (0xffffffff-x))] |
492 * +------------------+--------------------+--------------------+-----
493 *
494 * Above is a diagram of physical memory showing the DRAM hole and the
495 * relocated addresses from the DRAM hole. As shown, the DRAM hole
496 * starts at address x (the base address) and extends through address
497 * 0xffffffff. The DRAM Hole Address Register (DHAR) relocates the
498 * addresses in the hole so that they start at 0x100000000.
499 */
500
501 *hole_base = dhar_base(pvt);
502 *hole_size = (1ULL << 32) - *hole_base;
503
504 *hole_offset = (pvt->fam > 0xf) ? f10_dhar_offset(pvt)
505 : k8_dhar_offset(pvt);
506
507 edac_dbg(1, " DHAR info for node %d base 0x%lx offset 0x%lx size 0x%lx\n",
508 pvt->mc_node_id, (unsigned long)*hole_base,
509 (unsigned long)*hole_offset, (unsigned long)*hole_size);
510
511 return 0;
512 }
513 EXPORT_SYMBOL_GPL(amd64_get_dram_hole_info);
514
515 /*
516 * Return the DramAddr that the SysAddr given by @sys_addr maps to. It is
517 * assumed that sys_addr maps to the node given by mci.
518 *
519 * The first part of section 3.4.4 (p. 70) shows how the DRAM Base (section
520 * 3.4.4.1) and DRAM Limit (section 3.4.4.2) registers are used to translate a
521 * SysAddr to a DramAddr. If the DRAM Hole Address Register (DHAR) is enabled,
522 * then it is also involved in translating a SysAddr to a DramAddr. Sections
523 * 3.4.8 and 3.5.8.2 describe the DHAR and how it is used for memory hoisting.
524 * These parts of the documentation are unclear. I interpret them as follows:
525 *
526 * When node n receives a SysAddr, it processes the SysAddr as follows:
527 *
528 * 1. It extracts the DRAMBase and DRAMLimit values from the DRAM Base and DRAM
529 * Limit registers for node n. If the SysAddr is not within the range
530 * specified by the base and limit values, then node n ignores the Sysaddr
531 * (since it does not map to node n). Otherwise continue to step 2 below.
532 *
533 * 2. If the DramHoleValid bit of the DHAR for node n is clear, the DHAR is
534 * disabled so skip to step 3 below. Otherwise see if the SysAddr is within
535 * the range of relocated addresses (starting at 0x100000000) from the DRAM
536 * hole. If not, skip to step 3 below. Else get the value of the
537 * DramHoleOffset field from the DHAR. To obtain the DramAddr, subtract the
538 * offset defined by this value from the SysAddr.
539 *
540 * 3. Obtain the base address for node n from the DRAMBase field of the DRAM
541 * Base register for node n. To obtain the DramAddr, subtract the base
542 * address from the SysAddr, as shown near the start of section 3.4.4 (p.70).
543 */
544 static u64 sys_addr_to_dram_addr(struct mem_ctl_info *mci, u64 sys_addr)
545 {
546 struct amd64_pvt *pvt = mci->pvt_info;
547 u64 dram_base, hole_base, hole_offset, hole_size, dram_addr;
548 int ret;
549
550 dram_base = get_dram_base(pvt, pvt->mc_node_id);
551
552 ret = amd64_get_dram_hole_info(mci, &hole_base, &hole_offset,
553 &hole_size);
554 if (!ret) {
555 if ((sys_addr >= (1ULL << 32)) &&
556 (sys_addr < ((1ULL << 32) + hole_size))) {
557 /* use DHAR to translate SysAddr to DramAddr */
558 dram_addr = sys_addr - hole_offset;
559
560 edac_dbg(2, "using DHAR to translate SysAddr 0x%lx to DramAddr 0x%lx\n",
561 (unsigned long)sys_addr,
562 (unsigned long)dram_addr);
563
564 return dram_addr;
565 }
566 }
567
568 /*
569 * Translate the SysAddr to a DramAddr as shown near the start of
570 * section 3.4.4 (p. 70). Although sys_addr is a 64-bit value, the k8
571 * only deals with 40-bit values. Therefore we discard bits 63-40 of
572 * sys_addr below. If bit 39 of sys_addr is 1 then the bits we
573 * discard are all 1s. Otherwise the bits we discard are all 0s. See
574 * section 3.4.2 of AMD publication 24592: AMD x86-64 Architecture
575 * Programmer's Manual Volume 1 Application Programming.
576 */
577 dram_addr = (sys_addr & GENMASK_ULL(39, 0)) - dram_base;
578
579 edac_dbg(2, "using DRAM Base register to translate SysAddr 0x%lx to DramAddr 0x%lx\n",
580 (unsigned long)sys_addr, (unsigned long)dram_addr);
581 return dram_addr;
582 }
583
584 /*
585 * @intlv_en is the value of the IntlvEn field from a DRAM Base register
586 * (section 3.4.4.1). Return the number of bits from a SysAddr that are used
587 * for node interleaving.
588 */
589 static int num_node_interleave_bits(unsigned intlv_en)
590 {
591 static const int intlv_shift_table[] = { 0, 1, 0, 2, 0, 0, 0, 3 };
592 int n;
593
594 BUG_ON(intlv_en > 7);
595 n = intlv_shift_table[intlv_en];
596 return n;
597 }
598
599 /* Translate the DramAddr given by @dram_addr to an InputAddr. */
600 static u64 dram_addr_to_input_addr(struct mem_ctl_info *mci, u64 dram_addr)
601 {
602 struct amd64_pvt *pvt;
603 int intlv_shift;
604 u64 input_addr;
605
606 pvt = mci->pvt_info;
607
608 /*
609 * See the start of section 3.4.4 (p. 70, BKDG #26094, K8, revA-E)
610 * concerning translating a DramAddr to an InputAddr.
611 */
612 intlv_shift = num_node_interleave_bits(dram_intlv_en(pvt, 0));
613 input_addr = ((dram_addr >> intlv_shift) & GENMASK_ULL(35, 12)) +
614 (dram_addr & 0xfff);
615
616 edac_dbg(2, " Intlv Shift=%d DramAddr=0x%lx maps to InputAddr=0x%lx\n",
617 intlv_shift, (unsigned long)dram_addr,
618 (unsigned long)input_addr);
619
620 return input_addr;
621 }
622
623 /*
624 * Translate the SysAddr represented by @sys_addr to an InputAddr. It is
625 * assumed that @sys_addr maps to the node given by mci.
626 */
627 static u64 sys_addr_to_input_addr(struct mem_ctl_info *mci, u64 sys_addr)
628 {
629 u64 input_addr;
630
631 input_addr =
632 dram_addr_to_input_addr(mci, sys_addr_to_dram_addr(mci, sys_addr));
633
634 edac_dbg(2, "SysAdddr 0x%lx translates to InputAddr 0x%lx\n",
635 (unsigned long)sys_addr, (unsigned long)input_addr);
636
637 return input_addr;
638 }
639
640 /* Map the Error address to a PAGE and PAGE OFFSET. */
641 static inline void error_address_to_page_and_offset(u64 error_address,
642 struct err_info *err)
643 {
644 err->page = (u32) (error_address >> PAGE_SHIFT);
645 err->offset = ((u32) error_address) & ~PAGE_MASK;
646 }
647
648 /*
649 * @sys_addr is an error address (a SysAddr) extracted from the MCA NB Address
650 * Low (section 3.6.4.5) and MCA NB Address High (section 3.6.4.6) registers
651 * of a node that detected an ECC memory error. mci represents the node that
652 * the error address maps to (possibly different from the node that detected
653 * the error). Return the number of the csrow that sys_addr maps to, or -1 on
654 * error.
655 */
656 static int sys_addr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr)
657 {
658 int csrow;
659
660 csrow = input_addr_to_csrow(mci, sys_addr_to_input_addr(mci, sys_addr));
661
662 if (csrow == -1)
663 amd64_mc_err(mci, "Failed to translate InputAddr to csrow for "
664 "address 0x%lx\n", (unsigned long)sys_addr);
665 return csrow;
666 }
667
668 static int get_channel_from_ecc_syndrome(struct mem_ctl_info *, u16);
669
670 /*
671 * Determine if the DIMMs have ECC enabled. ECC is enabled ONLY if all the DIMMs
672 * are ECC capable.
673 */
674 static unsigned long determine_edac_cap(struct amd64_pvt *pvt)
675 {
676 u8 bit;
677 unsigned long edac_cap = EDAC_FLAG_NONE;
678
679 bit = (pvt->fam > 0xf || pvt->ext_model >= K8_REV_F)
680 ? 19
681 : 17;
682
683 if (pvt->dclr0 & BIT(bit))
684 edac_cap = EDAC_FLAG_SECDED;
685
686 return edac_cap;
687 }
688
689 static void debug_display_dimm_sizes(struct amd64_pvt *, u8);
690
691 static void debug_dump_dramcfg_low(struct amd64_pvt *pvt, u32 dclr, int chan)
692 {
693 edac_dbg(1, "F2x%d90 (DRAM Cfg Low): 0x%08x\n", chan, dclr);
694
695 edac_dbg(1, " DIMM type: %sbuffered; all DIMMs support ECC: %s\n",
696 (dclr & BIT(16)) ? "un" : "",
697 (dclr & BIT(19)) ? "yes" : "no");
698
699 edac_dbg(1, " PAR/ERR parity: %s\n",
700 (dclr & BIT(8)) ? "enabled" : "disabled");
701
702 if (pvt->fam == 0x10)
703 edac_dbg(1, " DCT 128bit mode width: %s\n",
704 (dclr & BIT(11)) ? "128b" : "64b");
705
706 edac_dbg(1, " x4 logical DIMMs present: L0: %s L1: %s L2: %s L3: %s\n",
707 (dclr & BIT(12)) ? "yes" : "no",
708 (dclr & BIT(13)) ? "yes" : "no",
709 (dclr & BIT(14)) ? "yes" : "no",
710 (dclr & BIT(15)) ? "yes" : "no");
711 }
712
713 /* Display and decode various NB registers for debug purposes. */
714 static void dump_misc_regs(struct amd64_pvt *pvt)
715 {
716 edac_dbg(1, "F3xE8 (NB Cap): 0x%08x\n", pvt->nbcap);
717
718 edac_dbg(1, " NB two channel DRAM capable: %s\n",
719 (pvt->nbcap & NBCAP_DCT_DUAL) ? "yes" : "no");
720
721 edac_dbg(1, " ECC capable: %s, ChipKill ECC capable: %s\n",
722 (pvt->nbcap & NBCAP_SECDED) ? "yes" : "no",
723 (pvt->nbcap & NBCAP_CHIPKILL) ? "yes" : "no");
724
725 debug_dump_dramcfg_low(pvt, pvt->dclr0, 0);
726
727 edac_dbg(1, "F3xB0 (Online Spare): 0x%08x\n", pvt->online_spare);
728
729 edac_dbg(1, "F1xF0 (DRAM Hole Address): 0x%08x, base: 0x%08x, offset: 0x%08x\n",
730 pvt->dhar, dhar_base(pvt),
731 (pvt->fam == 0xf) ? k8_dhar_offset(pvt)
732 : f10_dhar_offset(pvt));
733
734 edac_dbg(1, " DramHoleValid: %s\n", dhar_valid(pvt) ? "yes" : "no");
735
736 debug_display_dimm_sizes(pvt, 0);
737
738 /* everything below this point is Fam10h and above */
739 if (pvt->fam == 0xf)
740 return;
741
742 debug_display_dimm_sizes(pvt, 1);
743
744 amd64_info("using %s syndromes.\n", ((pvt->ecc_sym_sz == 8) ? "x8" : "x4"));
745
746 /* Only if NOT ganged does dclr1 have valid info */
747 if (!dct_ganging_enabled(pvt))
748 debug_dump_dramcfg_low(pvt, pvt->dclr1, 1);
749 }
750
751 /*
752 * See BKDG, F2x[1,0][5C:40], F2[1,0][6C:60]
753 */
754 static void prep_chip_selects(struct amd64_pvt *pvt)
755 {
756 if (pvt->fam == 0xf && pvt->ext_model < K8_REV_F) {
757 pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 8;
758 pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 8;
759 } else if (pvt->fam == 0x15 && pvt->model >= 0x30) {
760 pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 4;
761 pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 2;
762 } else {
763 pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 8;
764 pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 4;
765 }
766 }
767
768 /*
769 * Function 2 Offset F10_DCSB0; read in the DCS Base and DCS Mask registers
770 */
771 static void read_dct_base_mask(struct amd64_pvt *pvt)
772 {
773 int cs;
774
775 prep_chip_selects(pvt);
776
777 for_each_chip_select(cs, 0, pvt) {
778 int reg0 = DCSB0 + (cs * 4);
779 int reg1 = DCSB1 + (cs * 4);
780 u32 *base0 = &pvt->csels[0].csbases[cs];
781 u32 *base1 = &pvt->csels[1].csbases[cs];
782
783 if (!amd64_read_dct_pci_cfg(pvt, 0, reg0, base0))
784 edac_dbg(0, " DCSB0[%d]=0x%08x reg: F2x%x\n",
785 cs, *base0, reg0);
786
787 if (pvt->fam == 0xf)
788 continue;
789
790 if (!amd64_read_dct_pci_cfg(pvt, 1, reg0, base1))
791 edac_dbg(0, " DCSB1[%d]=0x%08x reg: F2x%x\n",
792 cs, *base1, (pvt->fam == 0x10) ? reg1
793 : reg0);
794 }
795
796 for_each_chip_select_mask(cs, 0, pvt) {
797 int reg0 = DCSM0 + (cs * 4);
798 int reg1 = DCSM1 + (cs * 4);
799 u32 *mask0 = &pvt->csels[0].csmasks[cs];
800 u32 *mask1 = &pvt->csels[1].csmasks[cs];
801
802 if (!amd64_read_dct_pci_cfg(pvt, 0, reg0, mask0))
803 edac_dbg(0, " DCSM0[%d]=0x%08x reg: F2x%x\n",
804 cs, *mask0, reg0);
805
806 if (pvt->fam == 0xf)
807 continue;
808
809 if (!amd64_read_dct_pci_cfg(pvt, 1, reg0, mask1))
810 edac_dbg(0, " DCSM1[%d]=0x%08x reg: F2x%x\n",
811 cs, *mask1, (pvt->fam == 0x10) ? reg1
812 : reg0);
813 }
814 }
815
816 static enum mem_type determine_memory_type(struct amd64_pvt *pvt, int cs)
817 {
818 enum mem_type type;
819
820 /* F15h supports only DDR3 */
821 if (pvt->fam >= 0x15)
822 type = (pvt->dclr0 & BIT(16)) ? MEM_DDR3 : MEM_RDDR3;
823 else if (pvt->fam == 0x10 || pvt->ext_model >= K8_REV_F) {
824 if (pvt->dchr0 & DDR3_MODE)
825 type = (pvt->dclr0 & BIT(16)) ? MEM_DDR3 : MEM_RDDR3;
826 else
827 type = (pvt->dclr0 & BIT(16)) ? MEM_DDR2 : MEM_RDDR2;
828 } else {
829 type = (pvt->dclr0 & BIT(18)) ? MEM_DDR : MEM_RDDR;
830 }
831
832 amd64_info("CS%d: %s\n", cs, edac_mem_types[type]);
833
834 return type;
835 }
836
837 /* Get the number of DCT channels the memory controller is using. */
838 static int k8_early_channel_count(struct amd64_pvt *pvt)
839 {
840 int flag;
841
842 if (pvt->ext_model >= K8_REV_F)
843 /* RevF (NPT) and later */
844 flag = pvt->dclr0 & WIDTH_128;
845 else
846 /* RevE and earlier */
847 flag = pvt->dclr0 & REVE_WIDTH_128;
848
849 /* not used */
850 pvt->dclr1 = 0;
851
852 return (flag) ? 2 : 1;
853 }
854
855 /* On F10h and later ErrAddr is MC4_ADDR[47:1] */
856 static u64 get_error_address(struct amd64_pvt *pvt, struct mce *m)
857 {
858 u64 addr;
859 u8 start_bit = 1;
860 u8 end_bit = 47;
861
862 if (pvt->fam == 0xf) {
863 start_bit = 3;
864 end_bit = 39;
865 }
866
867 addr = m->addr & GENMASK_ULL(end_bit, start_bit);
868
869 /*
870 * Erratum 637 workaround
871 */
872 if (pvt->fam == 0x15) {
873 struct amd64_pvt *pvt;
874 u64 cc6_base, tmp_addr;
875 u32 tmp;
876 u16 mce_nid;
877 u8 intlv_en;
878
879 if ((addr & GENMASK_ULL(47, 24)) >> 24 != 0x00fdf7)
880 return addr;
881
882 mce_nid = amd_get_nb_id(m->extcpu);
883 pvt = mcis[mce_nid]->pvt_info;
884
885 amd64_read_pci_cfg(pvt->F1, DRAM_LOCAL_NODE_LIM, &tmp);
886 intlv_en = tmp >> 21 & 0x7;
887
888 /* add [47:27] + 3 trailing bits */
889 cc6_base = (tmp & GENMASK_ULL(20, 0)) << 3;
890
891 /* reverse and add DramIntlvEn */
892 cc6_base |= intlv_en ^ 0x7;
893
894 /* pin at [47:24] */
895 cc6_base <<= 24;
896
897 if (!intlv_en)
898 return cc6_base | (addr & GENMASK_ULL(23, 0));
899
900 amd64_read_pci_cfg(pvt->F1, DRAM_LOCAL_NODE_BASE, &tmp);
901
902 /* faster log2 */
903 tmp_addr = (addr & GENMASK_ULL(23, 12)) << __fls(intlv_en + 1);
904
905 /* OR DramIntlvSel into bits [14:12] */
906 tmp_addr |= (tmp & GENMASK_ULL(23, 21)) >> 9;
907
908 /* add remaining [11:0] bits from original MC4_ADDR */
909 tmp_addr |= addr & GENMASK_ULL(11, 0);
910
911 return cc6_base | tmp_addr;
912 }
913
914 return addr;
915 }
916
917 static struct pci_dev *pci_get_related_function(unsigned int vendor,
918 unsigned int device,
919 struct pci_dev *related)
920 {
921 struct pci_dev *dev = NULL;
922
923 while ((dev = pci_get_device(vendor, device, dev))) {
924 if (pci_domain_nr(dev->bus) == pci_domain_nr(related->bus) &&
925 (dev->bus->number == related->bus->number) &&
926 (PCI_SLOT(dev->devfn) == PCI_SLOT(related->devfn)))
927 break;
928 }
929
930 return dev;
931 }
932
933 static void read_dram_base_limit_regs(struct amd64_pvt *pvt, unsigned range)
934 {
935 struct amd_northbridge *nb;
936 struct pci_dev *f1 = NULL;
937 unsigned int pci_func;
938 int off = range << 3;
939 u32 llim;
940
941 amd64_read_pci_cfg(pvt->F1, DRAM_BASE_LO + off, &pvt->ranges[range].base.lo);
942 amd64_read_pci_cfg(pvt->F1, DRAM_LIMIT_LO + off, &pvt->ranges[range].lim.lo);
943
944 if (pvt->fam == 0xf)
945 return;
946
947 if (!dram_rw(pvt, range))
948 return;
949
950 amd64_read_pci_cfg(pvt->F1, DRAM_BASE_HI + off, &pvt->ranges[range].base.hi);
951 amd64_read_pci_cfg(pvt->F1, DRAM_LIMIT_HI + off, &pvt->ranges[range].lim.hi);
952
953 /* F15h: factor in CC6 save area by reading dst node's limit reg */
954 if (pvt->fam != 0x15)
955 return;
956
957 nb = node_to_amd_nb(dram_dst_node(pvt, range));
958 if (WARN_ON(!nb))
959 return;
960
961 pci_func = (pvt->model == 0x30) ? PCI_DEVICE_ID_AMD_15H_M30H_NB_F1
962 : PCI_DEVICE_ID_AMD_15H_NB_F1;
963
964 f1 = pci_get_related_function(nb->misc->vendor, pci_func, nb->misc);
965 if (WARN_ON(!f1))
966 return;
967
968 amd64_read_pci_cfg(f1, DRAM_LOCAL_NODE_LIM, &llim);
969
970 pvt->ranges[range].lim.lo &= GENMASK_ULL(15, 0);
971
972 /* {[39:27],111b} */
973 pvt->ranges[range].lim.lo |= ((llim & 0x1fff) << 3 | 0x7) << 16;
974
975 pvt->ranges[range].lim.hi &= GENMASK_ULL(7, 0);
976
977 /* [47:40] */
978 pvt->ranges[range].lim.hi |= llim >> 13;
979
980 pci_dev_put(f1);
981 }
982
983 static void k8_map_sysaddr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr,
984 struct err_info *err)
985 {
986 struct amd64_pvt *pvt = mci->pvt_info;
987
988 error_address_to_page_and_offset(sys_addr, err);
989
990 /*
991 * Find out which node the error address belongs to. This may be
992 * different from the node that detected the error.
993 */
994 err->src_mci = find_mc_by_sys_addr(mci, sys_addr);
995 if (!err->src_mci) {
996 amd64_mc_err(mci, "failed to map error addr 0x%lx to a node\n",
997 (unsigned long)sys_addr);
998 err->err_code = ERR_NODE;
999 return;
1000 }
1001
1002 /* Now map the sys_addr to a CSROW */
1003 err->csrow = sys_addr_to_csrow(err->src_mci, sys_addr);
1004 if (err->csrow < 0) {
1005 err->err_code = ERR_CSROW;
1006 return;
1007 }
1008
1009 /* CHIPKILL enabled */
1010 if (pvt->nbcfg & NBCFG_CHIPKILL) {
1011 err->channel = get_channel_from_ecc_syndrome(mci, err->syndrome);
1012 if (err->channel < 0) {
1013 /*
1014 * Syndrome didn't map, so we don't know which of the
1015 * 2 DIMMs is in error. So we need to ID 'both' of them
1016 * as suspect.
1017 */
1018 amd64_mc_warn(err->src_mci, "unknown syndrome 0x%04x - "
1019 "possible error reporting race\n",
1020 err->syndrome);
1021 err->err_code = ERR_CHANNEL;
1022 return;
1023 }
1024 } else {
1025 /*
1026 * non-chipkill ecc mode
1027 *
1028 * The k8 documentation is unclear about how to determine the
1029 * channel number when using non-chipkill memory. This method
1030 * was obtained from email communication with someone at AMD.
1031 * (Wish the email was placed in this comment - norsk)
1032 */
1033 err->channel = ((sys_addr & BIT(3)) != 0);
1034 }
1035 }
1036
1037 static int ddr2_cs_size(unsigned i, bool dct_width)
1038 {
1039 unsigned shift = 0;
1040
1041 if (i <= 2)
1042 shift = i;
1043 else if (!(i & 0x1))
1044 shift = i >> 1;
1045 else
1046 shift = (i + 1) >> 1;
1047
1048 return 128 << (shift + !!dct_width);
1049 }
1050
1051 static int k8_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
1052 unsigned cs_mode)
1053 {
1054 u32 dclr = dct ? pvt->dclr1 : pvt->dclr0;
1055
1056 if (pvt->ext_model >= K8_REV_F) {
1057 WARN_ON(cs_mode > 11);
1058 return ddr2_cs_size(cs_mode, dclr & WIDTH_128);
1059 }
1060 else if (pvt->ext_model >= K8_REV_D) {
1061 unsigned diff;
1062 WARN_ON(cs_mode > 10);
1063
1064 /*
1065 * the below calculation, besides trying to win an obfuscated C
1066 * contest, maps cs_mode values to DIMM chip select sizes. The
1067 * mappings are:
1068 *
1069 * cs_mode CS size (mb)
1070 * ======= ============
1071 * 0 32
1072 * 1 64
1073 * 2 128
1074 * 3 128
1075 * 4 256
1076 * 5 512
1077 * 6 256
1078 * 7 512
1079 * 8 1024
1080 * 9 1024
1081 * 10 2048
1082 *
1083 * Basically, it calculates a value with which to shift the
1084 * smallest CS size of 32MB.
1085 *
1086 * ddr[23]_cs_size have a similar purpose.
1087 */
1088 diff = cs_mode/3 + (unsigned)(cs_mode > 5);
1089
1090 return 32 << (cs_mode - diff);
1091 }
1092 else {
1093 WARN_ON(cs_mode > 6);
1094 return 32 << cs_mode;
1095 }
1096 }
1097
1098 /*
1099 * Get the number of DCT channels in use.
1100 *
1101 * Return:
1102 * number of Memory Channels in operation
1103 * Pass back:
1104 * contents of the DCL0_LOW register
1105 */
1106 static int f1x_early_channel_count(struct amd64_pvt *pvt)
1107 {
1108 int i, j, channels = 0;
1109
1110 /* On F10h, if we are in 128 bit mode, then we are using 2 channels */
1111 if (pvt->fam == 0x10 && (pvt->dclr0 & WIDTH_128))
1112 return 2;
1113
1114 /*
1115 * Need to check if in unganged mode: In such, there are 2 channels,
1116 * but they are not in 128 bit mode and thus the above 'dclr0' status
1117 * bit will be OFF.
1118 *
1119 * Need to check DCT0[0] and DCT1[0] to see if only one of them has
1120 * their CSEnable bit on. If so, then SINGLE DIMM case.
1121 */
1122 edac_dbg(0, "Data width is not 128 bits - need more decoding\n");
1123
1124 /*
1125 * Check DRAM Bank Address Mapping values for each DIMM to see if there
1126 * is more than just one DIMM present in unganged mode. Need to check
1127 * both controllers since DIMMs can be placed in either one.
1128 */
1129 for (i = 0; i < 2; i++) {
1130 u32 dbam = (i ? pvt->dbam1 : pvt->dbam0);
1131
1132 for (j = 0; j < 4; j++) {
1133 if (DBAM_DIMM(j, dbam) > 0) {
1134 channels++;
1135 break;
1136 }
1137 }
1138 }
1139
1140 if (channels > 2)
1141 channels = 2;
1142
1143 amd64_info("MCT channel count: %d\n", channels);
1144
1145 return channels;
1146 }
1147
1148 static int ddr3_cs_size(unsigned i, bool dct_width)
1149 {
1150 unsigned shift = 0;
1151 int cs_size = 0;
1152
1153 if (i == 0 || i == 3 || i == 4)
1154 cs_size = -1;
1155 else if (i <= 2)
1156 shift = i;
1157 else if (i == 12)
1158 shift = 7;
1159 else if (!(i & 0x1))
1160 shift = i >> 1;
1161 else
1162 shift = (i + 1) >> 1;
1163
1164 if (cs_size != -1)
1165 cs_size = (128 * (1 << !!dct_width)) << shift;
1166
1167 return cs_size;
1168 }
1169
1170 static int f10_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
1171 unsigned cs_mode)
1172 {
1173 u32 dclr = dct ? pvt->dclr1 : pvt->dclr0;
1174
1175 WARN_ON(cs_mode > 11);
1176
1177 if (pvt->dchr0 & DDR3_MODE || pvt->dchr1 & DDR3_MODE)
1178 return ddr3_cs_size(cs_mode, dclr & WIDTH_128);
1179 else
1180 return ddr2_cs_size(cs_mode, dclr & WIDTH_128);
1181 }
1182
1183 /*
1184 * F15h supports only 64bit DCT interfaces
1185 */
1186 static int f15_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
1187 unsigned cs_mode)
1188 {
1189 WARN_ON(cs_mode > 12);
1190
1191 return ddr3_cs_size(cs_mode, false);
1192 }
1193
1194 /*
1195 * F16h and F15h model 30h have only limited cs_modes.
1196 */
1197 static int f16_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
1198 unsigned cs_mode)
1199 {
1200 WARN_ON(cs_mode > 12);
1201
1202 if (cs_mode == 6 || cs_mode == 8 ||
1203 cs_mode == 9 || cs_mode == 12)
1204 return -1;
1205 else
1206 return ddr3_cs_size(cs_mode, false);
1207 }
1208
1209 static void read_dram_ctl_register(struct amd64_pvt *pvt)
1210 {
1211
1212 if (pvt->fam == 0xf)
1213 return;
1214
1215 if (!amd64_read_pci_cfg(pvt->F2, DCT_SEL_LO, &pvt->dct_sel_lo)) {
1216 edac_dbg(0, "F2x110 (DCTSelLow): 0x%08x, High range addrs at: 0x%x\n",
1217 pvt->dct_sel_lo, dct_sel_baseaddr(pvt));
1218
1219 edac_dbg(0, " DCTs operate in %s mode\n",
1220 (dct_ganging_enabled(pvt) ? "ganged" : "unganged"));
1221
1222 if (!dct_ganging_enabled(pvt))
1223 edac_dbg(0, " Address range split per DCT: %s\n",
1224 (dct_high_range_enabled(pvt) ? "yes" : "no"));
1225
1226 edac_dbg(0, " data interleave for ECC: %s, DRAM cleared since last warm reset: %s\n",
1227 (dct_data_intlv_enabled(pvt) ? "enabled" : "disabled"),
1228 (dct_memory_cleared(pvt) ? "yes" : "no"));
1229
1230 edac_dbg(0, " channel interleave: %s, "
1231 "interleave bits selector: 0x%x\n",
1232 (dct_interleave_enabled(pvt) ? "enabled" : "disabled"),
1233 dct_sel_interleave_addr(pvt));
1234 }
1235
1236 amd64_read_pci_cfg(pvt->F2, DCT_SEL_HI, &pvt->dct_sel_hi);
1237 }
1238
1239 /*
1240 * Determine channel (DCT) based on the interleaving mode (see F15h M30h BKDG,
1241 * 2.10.12 Memory Interleaving Modes).
1242 */
1243 static u8 f15_m30h_determine_channel(struct amd64_pvt *pvt, u64 sys_addr,
1244 u8 intlv_en, int num_dcts_intlv,
1245 u32 dct_sel)
1246 {
1247 u8 channel = 0;
1248 u8 select;
1249
1250 if (!(intlv_en))
1251 return (u8)(dct_sel);
1252
1253 if (num_dcts_intlv == 2) {
1254 select = (sys_addr >> 8) & 0x3;
1255 channel = select ? 0x3 : 0;
1256 } else if (num_dcts_intlv == 4) {
1257 u8 intlv_addr = dct_sel_interleave_addr(pvt);
1258 switch (intlv_addr) {
1259 case 0x4:
1260 channel = (sys_addr >> 8) & 0x3;
1261 break;
1262 case 0x5:
1263 channel = (sys_addr >> 9) & 0x3;
1264 break;
1265 }
1266 }
1267 return channel;
1268 }
1269
1270 /*
1271 * Determine channel (DCT) based on the interleaving mode: F10h BKDG, 2.8.9 Memory
1272 * Interleaving Modes.
1273 */
1274 static u8 f1x_determine_channel(struct amd64_pvt *pvt, u64 sys_addr,
1275 bool hi_range_sel, u8 intlv_en)
1276 {
1277 u8 dct_sel_high = (pvt->dct_sel_lo >> 1) & 1;
1278
1279 if (dct_ganging_enabled(pvt))
1280 return 0;
1281
1282 if (hi_range_sel)
1283 return dct_sel_high;
1284
1285 /*
1286 * see F2x110[DctSelIntLvAddr] - channel interleave mode
1287 */
1288 if (dct_interleave_enabled(pvt)) {
1289 u8 intlv_addr = dct_sel_interleave_addr(pvt);
1290
1291 /* return DCT select function: 0=DCT0, 1=DCT1 */
1292 if (!intlv_addr)
1293 return sys_addr >> 6 & 1;
1294
1295 if (intlv_addr & 0x2) {
1296 u8 shift = intlv_addr & 0x1 ? 9 : 6;
1297 u32 temp = hweight_long((u32) ((sys_addr >> 16) & 0x1F)) % 2;
1298
1299 return ((sys_addr >> shift) & 1) ^ temp;
1300 }
1301
1302 return (sys_addr >> (12 + hweight8(intlv_en))) & 1;
1303 }
1304
1305 if (dct_high_range_enabled(pvt))
1306 return ~dct_sel_high & 1;
1307
1308 return 0;
1309 }
1310
1311 /* Convert the sys_addr to the normalized DCT address */
1312 static u64 f1x_get_norm_dct_addr(struct amd64_pvt *pvt, u8 range,
1313 u64 sys_addr, bool hi_rng,
1314 u32 dct_sel_base_addr)
1315 {
1316 u64 chan_off;
1317 u64 dram_base = get_dram_base(pvt, range);
1318 u64 hole_off = f10_dhar_offset(pvt);
1319 u64 dct_sel_base_off = (pvt->dct_sel_hi & 0xFFFFFC00) << 16;
1320
1321 if (hi_rng) {
1322 /*
1323 * if
1324 * base address of high range is below 4Gb
1325 * (bits [47:27] at [31:11])
1326 * DRAM address space on this DCT is hoisted above 4Gb &&
1327 * sys_addr > 4Gb
1328 *
1329 * remove hole offset from sys_addr
1330 * else
1331 * remove high range offset from sys_addr
1332 */
1333 if ((!(dct_sel_base_addr >> 16) ||
1334 dct_sel_base_addr < dhar_base(pvt)) &&
1335 dhar_valid(pvt) &&
1336 (sys_addr >= BIT_64(32)))
1337 chan_off = hole_off;
1338 else
1339 chan_off = dct_sel_base_off;
1340 } else {
1341 /*
1342 * if
1343 * we have a valid hole &&
1344 * sys_addr > 4Gb
1345 *
1346 * remove hole
1347 * else
1348 * remove dram base to normalize to DCT address
1349 */
1350 if (dhar_valid(pvt) && (sys_addr >= BIT_64(32)))
1351 chan_off = hole_off;
1352 else
1353 chan_off = dram_base;
1354 }
1355
1356 return (sys_addr & GENMASK_ULL(47,6)) - (chan_off & GENMASK_ULL(47,23));
1357 }
1358
1359 /*
1360 * checks if the csrow passed in is marked as SPARED, if so returns the new
1361 * spare row
1362 */
1363 static int f10_process_possible_spare(struct amd64_pvt *pvt, u8 dct, int csrow)
1364 {
1365 int tmp_cs;
1366
1367 if (online_spare_swap_done(pvt, dct) &&
1368 csrow == online_spare_bad_dramcs(pvt, dct)) {
1369
1370 for_each_chip_select(tmp_cs, dct, pvt) {
1371 if (chip_select_base(tmp_cs, dct, pvt) & 0x2) {
1372 csrow = tmp_cs;
1373 break;
1374 }
1375 }
1376 }
1377 return csrow;
1378 }
1379
1380 /*
1381 * Iterate over the DRAM DCT "base" and "mask" registers looking for a
1382 * SystemAddr match on the specified 'ChannelSelect' and 'NodeID'
1383 *
1384 * Return:
1385 * -EINVAL: NOT FOUND
1386 * 0..csrow = Chip-Select Row
1387 */
1388 static int f1x_lookup_addr_in_dct(u64 in_addr, u8 nid, u8 dct)
1389 {
1390 struct mem_ctl_info *mci;
1391 struct amd64_pvt *pvt;
1392 u64 cs_base, cs_mask;
1393 int cs_found = -EINVAL;
1394 int csrow;
1395
1396 mci = mcis[nid];
1397 if (!mci)
1398 return cs_found;
1399
1400 pvt = mci->pvt_info;
1401
1402 edac_dbg(1, "input addr: 0x%llx, DCT: %d\n", in_addr, dct);
1403
1404 for_each_chip_select(csrow, dct, pvt) {
1405 if (!csrow_enabled(csrow, dct, pvt))
1406 continue;
1407
1408 get_cs_base_and_mask(pvt, csrow, dct, &cs_base, &cs_mask);
1409
1410 edac_dbg(1, " CSROW=%d CSBase=0x%llx CSMask=0x%llx\n",
1411 csrow, cs_base, cs_mask);
1412
1413 cs_mask = ~cs_mask;
1414
1415 edac_dbg(1, " (InputAddr & ~CSMask)=0x%llx (CSBase & ~CSMask)=0x%llx\n",
1416 (in_addr & cs_mask), (cs_base & cs_mask));
1417
1418 if ((in_addr & cs_mask) == (cs_base & cs_mask)) {
1419 if (pvt->fam == 0x15 && pvt->model >= 0x30) {
1420 cs_found = csrow;
1421 break;
1422 }
1423 cs_found = f10_process_possible_spare(pvt, dct, csrow);
1424
1425 edac_dbg(1, " MATCH csrow=%d\n", cs_found);
1426 break;
1427 }
1428 }
1429 return cs_found;
1430 }
1431
1432 /*
1433 * See F2x10C. Non-interleaved graphics framebuffer memory under the 16G is
1434 * swapped with a region located at the bottom of memory so that the GPU can use
1435 * the interleaved region and thus two channels.
1436 */
1437 static u64 f1x_swap_interleaved_region(struct amd64_pvt *pvt, u64 sys_addr)
1438 {
1439 u32 swap_reg, swap_base, swap_limit, rgn_size, tmp_addr;
1440
1441 if (pvt->fam == 0x10) {
1442 /* only revC3 and revE have that feature */
1443 if (pvt->model < 4 || (pvt->model < 0xa && pvt->stepping < 3))
1444 return sys_addr;
1445 }
1446
1447 amd64_read_pci_cfg(pvt->F2, SWAP_INTLV_REG, &swap_reg);
1448
1449 if (!(swap_reg & 0x1))
1450 return sys_addr;
1451
1452 swap_base = (swap_reg >> 3) & 0x7f;
1453 swap_limit = (swap_reg >> 11) & 0x7f;
1454 rgn_size = (swap_reg >> 20) & 0x7f;
1455 tmp_addr = sys_addr >> 27;
1456
1457 if (!(sys_addr >> 34) &&
1458 (((tmp_addr >= swap_base) &&
1459 (tmp_addr <= swap_limit)) ||
1460 (tmp_addr < rgn_size)))
1461 return sys_addr ^ (u64)swap_base << 27;
1462
1463 return sys_addr;
1464 }
1465
1466 /* For a given @dram_range, check if @sys_addr falls within it. */
1467 static int f1x_match_to_this_node(struct amd64_pvt *pvt, unsigned range,
1468 u64 sys_addr, int *chan_sel)
1469 {
1470 int cs_found = -EINVAL;
1471 u64 chan_addr;
1472 u32 dct_sel_base;
1473 u8 channel;
1474 bool high_range = false;
1475
1476 u8 node_id = dram_dst_node(pvt, range);
1477 u8 intlv_en = dram_intlv_en(pvt, range);
1478 u32 intlv_sel = dram_intlv_sel(pvt, range);
1479
1480 edac_dbg(1, "(range %d) SystemAddr= 0x%llx Limit=0x%llx\n",
1481 range, sys_addr, get_dram_limit(pvt, range));
1482
1483 if (dhar_valid(pvt) &&
1484 dhar_base(pvt) <= sys_addr &&
1485 sys_addr < BIT_64(32)) {
1486 amd64_warn("Huh? Address is in the MMIO hole: 0x%016llx\n",
1487 sys_addr);
1488 return -EINVAL;
1489 }
1490
1491 if (intlv_en && (intlv_sel != ((sys_addr >> 12) & intlv_en)))
1492 return -EINVAL;
1493
1494 sys_addr = f1x_swap_interleaved_region(pvt, sys_addr);
1495
1496 dct_sel_base = dct_sel_baseaddr(pvt);
1497
1498 /*
1499 * check whether addresses >= DctSelBaseAddr[47:27] are to be used to
1500 * select between DCT0 and DCT1.
1501 */
1502 if (dct_high_range_enabled(pvt) &&
1503 !dct_ganging_enabled(pvt) &&
1504 ((sys_addr >> 27) >= (dct_sel_base >> 11)))
1505 high_range = true;
1506
1507 channel = f1x_determine_channel(pvt, sys_addr, high_range, intlv_en);
1508
1509 chan_addr = f1x_get_norm_dct_addr(pvt, range, sys_addr,
1510 high_range, dct_sel_base);
1511
1512 /* Remove node interleaving, see F1x120 */
1513 if (intlv_en)
1514 chan_addr = ((chan_addr >> (12 + hweight8(intlv_en))) << 12) |
1515 (chan_addr & 0xfff);
1516
1517 /* remove channel interleave */
1518 if (dct_interleave_enabled(pvt) &&
1519 !dct_high_range_enabled(pvt) &&
1520 !dct_ganging_enabled(pvt)) {
1521
1522 if (dct_sel_interleave_addr(pvt) != 1) {
1523 if (dct_sel_interleave_addr(pvt) == 0x3)
1524 /* hash 9 */
1525 chan_addr = ((chan_addr >> 10) << 9) |
1526 (chan_addr & 0x1ff);
1527 else
1528 /* A[6] or hash 6 */
1529 chan_addr = ((chan_addr >> 7) << 6) |
1530 (chan_addr & 0x3f);
1531 } else
1532 /* A[12] */
1533 chan_addr = ((chan_addr >> 13) << 12) |
1534 (chan_addr & 0xfff);
1535 }
1536
1537 edac_dbg(1, " Normalized DCT addr: 0x%llx\n", chan_addr);
1538
1539 cs_found = f1x_lookup_addr_in_dct(chan_addr, node_id, channel);
1540
1541 if (cs_found >= 0)
1542 *chan_sel = channel;
1543
1544 return cs_found;
1545 }
1546
1547 static int f15_m30h_match_to_this_node(struct amd64_pvt *pvt, unsigned range,
1548 u64 sys_addr, int *chan_sel)
1549 {
1550 int cs_found = -EINVAL;
1551 int num_dcts_intlv = 0;
1552 u64 chan_addr, chan_offset;
1553 u64 dct_base, dct_limit;
1554 u32 dct_cont_base_reg, dct_cont_limit_reg, tmp;
1555 u8 channel, alias_channel, leg_mmio_hole, dct_sel, dct_offset_en;
1556
1557 u64 dhar_offset = f10_dhar_offset(pvt);
1558 u8 intlv_addr = dct_sel_interleave_addr(pvt);
1559 u8 node_id = dram_dst_node(pvt, range);
1560 u8 intlv_en = dram_intlv_en(pvt, range);
1561
1562 amd64_read_pci_cfg(pvt->F1, DRAM_CONT_BASE, &dct_cont_base_reg);
1563 amd64_read_pci_cfg(pvt->F1, DRAM_CONT_LIMIT, &dct_cont_limit_reg);
1564
1565 dct_offset_en = (u8) ((dct_cont_base_reg >> 3) & BIT(0));
1566 dct_sel = (u8) ((dct_cont_base_reg >> 4) & 0x7);
1567
1568 edac_dbg(1, "(range %d) SystemAddr= 0x%llx Limit=0x%llx\n",
1569 range, sys_addr, get_dram_limit(pvt, range));
1570
1571 if (!(get_dram_base(pvt, range) <= sys_addr) &&
1572 !(get_dram_limit(pvt, range) >= sys_addr))
1573 return -EINVAL;
1574
1575 if (dhar_valid(pvt) &&
1576 dhar_base(pvt) <= sys_addr &&
1577 sys_addr < BIT_64(32)) {
1578 amd64_warn("Huh? Address is in the MMIO hole: 0x%016llx\n",
1579 sys_addr);
1580 return -EINVAL;
1581 }
1582
1583 /* Verify sys_addr is within DCT Range. */
1584 dct_base = (u64) dct_sel_baseaddr(pvt);
1585 dct_limit = (dct_cont_limit_reg >> 11) & 0x1FFF;
1586
1587 if (!(dct_cont_base_reg & BIT(0)) &&
1588 !(dct_base <= (sys_addr >> 27) &&
1589 dct_limit >= (sys_addr >> 27)))
1590 return -EINVAL;
1591
1592 /* Verify number of dct's that participate in channel interleaving. */
1593 num_dcts_intlv = (int) hweight8(intlv_en);
1594
1595 if (!(num_dcts_intlv % 2 == 0) || (num_dcts_intlv > 4))
1596 return -EINVAL;
1597
1598 channel = f15_m30h_determine_channel(pvt, sys_addr, intlv_en,
1599 num_dcts_intlv, dct_sel);
1600
1601 /* Verify we stay within the MAX number of channels allowed */
1602 if (channel > 3)
1603 return -EINVAL;
1604
1605 leg_mmio_hole = (u8) (dct_cont_base_reg >> 1 & BIT(0));
1606
1607 /* Get normalized DCT addr */
1608 if (leg_mmio_hole && (sys_addr >= BIT_64(32)))
1609 chan_offset = dhar_offset;
1610 else
1611 chan_offset = dct_base << 27;
1612
1613 chan_addr = sys_addr - chan_offset;
1614
1615 /* remove channel interleave */
1616 if (num_dcts_intlv == 2) {
1617 if (intlv_addr == 0x4)
1618 chan_addr = ((chan_addr >> 9) << 8) |
1619 (chan_addr & 0xff);
1620 else if (intlv_addr == 0x5)
1621 chan_addr = ((chan_addr >> 10) << 9) |
1622 (chan_addr & 0x1ff);
1623 else
1624 return -EINVAL;
1625
1626 } else if (num_dcts_intlv == 4) {
1627 if (intlv_addr == 0x4)
1628 chan_addr = ((chan_addr >> 10) << 8) |
1629 (chan_addr & 0xff);
1630 else if (intlv_addr == 0x5)
1631 chan_addr = ((chan_addr >> 11) << 9) |
1632 (chan_addr & 0x1ff);
1633 else
1634 return -EINVAL;
1635 }
1636
1637 if (dct_offset_en) {
1638 amd64_read_pci_cfg(pvt->F1,
1639 DRAM_CONT_HIGH_OFF + (int) channel * 4,
1640 &tmp);
1641 chan_addr += (u64) ((tmp >> 11) & 0xfff) << 27;
1642 }
1643
1644 f15h_select_dct(pvt, channel);
1645
1646 edac_dbg(1, " Normalized DCT addr: 0x%llx\n", chan_addr);
1647
1648 /*
1649 * Find Chip select:
1650 * if channel = 3, then alias it to 1. This is because, in F15 M30h,
1651 * there is support for 4 DCT's, but only 2 are currently functional.
1652 * They are DCT0 and DCT3. But we have read all registers of DCT3 into
1653 * pvt->csels[1]. So we need to use '1' here to get correct info.
1654 * Refer F15 M30h BKDG Section 2.10 and 2.10.3 for clarifications.
1655 */
1656 alias_channel = (channel == 3) ? 1 : channel;
1657
1658 cs_found = f1x_lookup_addr_in_dct(chan_addr, node_id, alias_channel);
1659
1660 if (cs_found >= 0)
1661 *chan_sel = alias_channel;
1662
1663 return cs_found;
1664 }
1665
1666 static int f1x_translate_sysaddr_to_cs(struct amd64_pvt *pvt,
1667 u64 sys_addr,
1668 int *chan_sel)
1669 {
1670 int cs_found = -EINVAL;
1671 unsigned range;
1672
1673 for (range = 0; range < DRAM_RANGES; range++) {
1674 if (!dram_rw(pvt, range))
1675 continue;
1676
1677 if (pvt->fam == 0x15 && pvt->model >= 0x30)
1678 cs_found = f15_m30h_match_to_this_node(pvt, range,
1679 sys_addr,
1680 chan_sel);
1681
1682 else if ((get_dram_base(pvt, range) <= sys_addr) &&
1683 (get_dram_limit(pvt, range) >= sys_addr)) {
1684 cs_found = f1x_match_to_this_node(pvt, range,
1685 sys_addr, chan_sel);
1686 if (cs_found >= 0)
1687 break;
1688 }
1689 }
1690 return cs_found;
1691 }
1692
1693 /*
1694 * For reference see "2.8.5 Routing DRAM Requests" in F10 BKDG. This code maps
1695 * a @sys_addr to NodeID, DCT (channel) and chip select (CSROW).
1696 *
1697 * The @sys_addr is usually an error address received from the hardware
1698 * (MCX_ADDR).
1699 */
1700 static void f1x_map_sysaddr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr,
1701 struct err_info *err)
1702 {
1703 struct amd64_pvt *pvt = mci->pvt_info;
1704
1705 error_address_to_page_and_offset(sys_addr, err);
1706
1707 err->csrow = f1x_translate_sysaddr_to_cs(pvt, sys_addr, &err->channel);
1708 if (err->csrow < 0) {
1709 err->err_code = ERR_CSROW;
1710 return;
1711 }
1712
1713 /*
1714 * We need the syndromes for channel detection only when we're
1715 * ganged. Otherwise @chan should already contain the channel at
1716 * this point.
1717 */
1718 if (dct_ganging_enabled(pvt))
1719 err->channel = get_channel_from_ecc_syndrome(mci, err->syndrome);
1720 }
1721
1722 /*
1723 * debug routine to display the memory sizes of all logical DIMMs and its
1724 * CSROWs
1725 */
1726 static void debug_display_dimm_sizes(struct amd64_pvt *pvt, u8 ctrl)
1727 {
1728 int dimm, size0, size1;
1729 u32 *dcsb = ctrl ? pvt->csels[1].csbases : pvt->csels[0].csbases;
1730 u32 dbam = ctrl ? pvt->dbam1 : pvt->dbam0;
1731
1732 if (pvt->fam == 0xf) {
1733 /* K8 families < revF not supported yet */
1734 if (pvt->ext_model < K8_REV_F)
1735 return;
1736 else
1737 WARN_ON(ctrl != 0);
1738 }
1739
1740 if (pvt->fam == 0x10) {
1741 dbam = (ctrl && !dct_ganging_enabled(pvt)) ? pvt->dbam1
1742 : pvt->dbam0;
1743 dcsb = (ctrl && !dct_ganging_enabled(pvt)) ?
1744 pvt->csels[1].csbases :
1745 pvt->csels[0].csbases;
1746 } else if (ctrl) {
1747 dbam = pvt->dbam0;
1748 dcsb = pvt->csels[1].csbases;
1749 }
1750 edac_dbg(1, "F2x%d80 (DRAM Bank Address Mapping): 0x%08x\n",
1751 ctrl, dbam);
1752
1753 edac_printk(KERN_DEBUG, EDAC_MC, "DCT%d chip selects:\n", ctrl);
1754
1755 /* Dump memory sizes for DIMM and its CSROWs */
1756 for (dimm = 0; dimm < 4; dimm++) {
1757
1758 size0 = 0;
1759 if (dcsb[dimm*2] & DCSB_CS_ENABLE)
1760 size0 = pvt->ops->dbam_to_cs(pvt, ctrl,
1761 DBAM_DIMM(dimm, dbam));
1762
1763 size1 = 0;
1764 if (dcsb[dimm*2 + 1] & DCSB_CS_ENABLE)
1765 size1 = pvt->ops->dbam_to_cs(pvt, ctrl,
1766 DBAM_DIMM(dimm, dbam));
1767
1768 amd64_info(EDAC_MC ": %d: %5dMB %d: %5dMB\n",
1769 dimm * 2, size0,
1770 dimm * 2 + 1, size1);
1771 }
1772 }
1773
1774 static struct amd64_family_type family_types[] = {
1775 [K8_CPUS] = {
1776 .ctl_name = "K8",
1777 .f1_id = PCI_DEVICE_ID_AMD_K8_NB_ADDRMAP,
1778 .f3_id = PCI_DEVICE_ID_AMD_K8_NB_MISC,
1779 .ops = {
1780 .early_channel_count = k8_early_channel_count,
1781 .map_sysaddr_to_csrow = k8_map_sysaddr_to_csrow,
1782 .dbam_to_cs = k8_dbam_to_chip_select,
1783 }
1784 },
1785 [F10_CPUS] = {
1786 .ctl_name = "F10h",
1787 .f1_id = PCI_DEVICE_ID_AMD_10H_NB_MAP,
1788 .f3_id = PCI_DEVICE_ID_AMD_10H_NB_MISC,
1789 .ops = {
1790 .early_channel_count = f1x_early_channel_count,
1791 .map_sysaddr_to_csrow = f1x_map_sysaddr_to_csrow,
1792 .dbam_to_cs = f10_dbam_to_chip_select,
1793 }
1794 },
1795 [F15_CPUS] = {
1796 .ctl_name = "F15h",
1797 .f1_id = PCI_DEVICE_ID_AMD_15H_NB_F1,
1798 .f3_id = PCI_DEVICE_ID_AMD_15H_NB_F3,
1799 .ops = {
1800 .early_channel_count = f1x_early_channel_count,
1801 .map_sysaddr_to_csrow = f1x_map_sysaddr_to_csrow,
1802 .dbam_to_cs = f15_dbam_to_chip_select,
1803 }
1804 },
1805 [F15_M30H_CPUS] = {
1806 .ctl_name = "F15h_M30h",
1807 .f1_id = PCI_DEVICE_ID_AMD_15H_M30H_NB_F1,
1808 .f3_id = PCI_DEVICE_ID_AMD_15H_M30H_NB_F3,
1809 .ops = {
1810 .early_channel_count = f1x_early_channel_count,
1811 .map_sysaddr_to_csrow = f1x_map_sysaddr_to_csrow,
1812 .dbam_to_cs = f16_dbam_to_chip_select,
1813 }
1814 },
1815 [F16_CPUS] = {
1816 .ctl_name = "F16h",
1817 .f1_id = PCI_DEVICE_ID_AMD_16H_NB_F1,
1818 .f3_id = PCI_DEVICE_ID_AMD_16H_NB_F3,
1819 .ops = {
1820 .early_channel_count = f1x_early_channel_count,
1821 .map_sysaddr_to_csrow = f1x_map_sysaddr_to_csrow,
1822 .dbam_to_cs = f16_dbam_to_chip_select,
1823 }
1824 },
1825 [F16_M30H_CPUS] = {
1826 .ctl_name = "F16h_M30h",
1827 .f1_id = PCI_DEVICE_ID_AMD_16H_M30H_NB_F1,
1828 .f3_id = PCI_DEVICE_ID_AMD_16H_M30H_NB_F3,
1829 .ops = {
1830 .early_channel_count = f1x_early_channel_count,
1831 .map_sysaddr_to_csrow = f1x_map_sysaddr_to_csrow,
1832 .dbam_to_cs = f16_dbam_to_chip_select,
1833 }
1834 },
1835 };
1836
1837 /*
1838 * These are tables of eigenvectors (one per line) which can be used for the
1839 * construction of the syndrome tables. The modified syndrome search algorithm
1840 * uses those to find the symbol in error and thus the DIMM.
1841 *
1842 * Algorithm courtesy of Ross LaFetra from AMD.
1843 */
1844 static const u16 x4_vectors[] = {
1845 0x2f57, 0x1afe, 0x66cc, 0xdd88,
1846 0x11eb, 0x3396, 0x7f4c, 0xeac8,
1847 0x0001, 0x0002, 0x0004, 0x0008,
1848 0x1013, 0x3032, 0x4044, 0x8088,
1849 0x106b, 0x30d6, 0x70fc, 0xe0a8,
1850 0x4857, 0xc4fe, 0x13cc, 0x3288,
1851 0x1ac5, 0x2f4a, 0x5394, 0xa1e8,
1852 0x1f39, 0x251e, 0xbd6c, 0x6bd8,
1853 0x15c1, 0x2a42, 0x89ac, 0x4758,
1854 0x2b03, 0x1602, 0x4f0c, 0xca08,
1855 0x1f07, 0x3a0e, 0x6b04, 0xbd08,
1856 0x8ba7, 0x465e, 0x244c, 0x1cc8,
1857 0x2b87, 0x164e, 0x642c, 0xdc18,
1858 0x40b9, 0x80de, 0x1094, 0x20e8,
1859 0x27db, 0x1eb6, 0x9dac, 0x7b58,
1860 0x11c1, 0x2242, 0x84ac, 0x4c58,
1861 0x1be5, 0x2d7a, 0x5e34, 0xa718,
1862 0x4b39, 0x8d1e, 0x14b4, 0x28d8,
1863 0x4c97, 0xc87e, 0x11fc, 0x33a8,
1864 0x8e97, 0x497e, 0x2ffc, 0x1aa8,
1865 0x16b3, 0x3d62, 0x4f34, 0x8518,
1866 0x1e2f, 0x391a, 0x5cac, 0xf858,
1867 0x1d9f, 0x3b7a, 0x572c, 0xfe18,
1868 0x15f5, 0x2a5a, 0x5264, 0xa3b8,
1869 0x1dbb, 0x3b66, 0x715c, 0xe3f8,
1870 0x4397, 0xc27e, 0x17fc, 0x3ea8,
1871 0x1617, 0x3d3e, 0x6464, 0xb8b8,
1872 0x23ff, 0x12aa, 0xab6c, 0x56d8,
1873 0x2dfb, 0x1ba6, 0x913c, 0x7328,
1874 0x185d, 0x2ca6, 0x7914, 0x9e28,
1875 0x171b, 0x3e36, 0x7d7c, 0xebe8,
1876 0x4199, 0x82ee, 0x19f4, 0x2e58,
1877 0x4807, 0xc40e, 0x130c, 0x3208,
1878 0x1905, 0x2e0a, 0x5804, 0xac08,
1879 0x213f, 0x132a, 0xadfc, 0x5ba8,
1880 0x19a9, 0x2efe, 0xb5cc, 0x6f88,
1881 };
1882
1883 static const u16 x8_vectors[] = {
1884 0x0145, 0x028a, 0x2374, 0x43c8, 0xa1f0, 0x0520, 0x0a40, 0x1480,
1885 0x0211, 0x0422, 0x0844, 0x1088, 0x01b0, 0x44e0, 0x23c0, 0xed80,
1886 0x1011, 0x0116, 0x022c, 0x0458, 0x08b0, 0x8c60, 0x2740, 0x4e80,
1887 0x0411, 0x0822, 0x1044, 0x0158, 0x02b0, 0x2360, 0x46c0, 0xab80,
1888 0x0811, 0x1022, 0x012c, 0x0258, 0x04b0, 0x4660, 0x8cc0, 0x2780,
1889 0x2071, 0x40e2, 0xa0c4, 0x0108, 0x0210, 0x0420, 0x0840, 0x1080,
1890 0x4071, 0x80e2, 0x0104, 0x0208, 0x0410, 0x0820, 0x1040, 0x2080,
1891 0x8071, 0x0102, 0x0204, 0x0408, 0x0810, 0x1020, 0x2040, 0x4080,
1892 0x019d, 0x03d6, 0x136c, 0x2198, 0x50b0, 0xb2e0, 0x0740, 0x0e80,
1893 0x0189, 0x03ea, 0x072c, 0x0e58, 0x1cb0, 0x56e0, 0x37c0, 0xf580,
1894 0x01fd, 0x0376, 0x06ec, 0x0bb8, 0x1110, 0x2220, 0x4440, 0x8880,
1895 0x0163, 0x02c6, 0x1104, 0x0758, 0x0eb0, 0x2be0, 0x6140, 0xc280,
1896 0x02fd, 0x01c6, 0x0b5c, 0x1108, 0x07b0, 0x25a0, 0x8840, 0x6180,
1897 0x0801, 0x012e, 0x025c, 0x04b8, 0x1370, 0x26e0, 0x57c0, 0xb580,
1898 0x0401, 0x0802, 0x015c, 0x02b8, 0x22b0, 0x13e0, 0x7140, 0xe280,
1899 0x0201, 0x0402, 0x0804, 0x01b8, 0x11b0, 0x31a0, 0x8040, 0x7180,
1900 0x0101, 0x0202, 0x0404, 0x0808, 0x1010, 0x2020, 0x4040, 0x8080,
1901 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
1902 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000,
1903 };
1904
1905 static int decode_syndrome(u16 syndrome, const u16 *vectors, unsigned num_vecs,
1906 unsigned v_dim)
1907 {
1908 unsigned int i, err_sym;
1909
1910 for (err_sym = 0; err_sym < num_vecs / v_dim; err_sym++) {
1911 u16 s = syndrome;
1912 unsigned v_idx = err_sym * v_dim;
1913 unsigned v_end = (err_sym + 1) * v_dim;
1914
1915 /* walk over all 16 bits of the syndrome */
1916 for (i = 1; i < (1U << 16); i <<= 1) {
1917
1918 /* if bit is set in that eigenvector... */
1919 if (v_idx < v_end && vectors[v_idx] & i) {
1920 u16 ev_comp = vectors[v_idx++];
1921
1922 /* ... and bit set in the modified syndrome, */
1923 if (s & i) {
1924 /* remove it. */
1925 s ^= ev_comp;
1926
1927 if (!s)
1928 return err_sym;
1929 }
1930
1931 } else if (s & i)
1932 /* can't get to zero, move to next symbol */
1933 break;
1934 }
1935 }
1936
1937 edac_dbg(0, "syndrome(%x) not found\n", syndrome);
1938 return -1;
1939 }
1940
1941 static int map_err_sym_to_channel(int err_sym, int sym_size)
1942 {
1943 if (sym_size == 4)
1944 switch (err_sym) {
1945 case 0x20:
1946 case 0x21:
1947 return 0;
1948 break;
1949 case 0x22:
1950 case 0x23:
1951 return 1;
1952 break;
1953 default:
1954 return err_sym >> 4;
1955 break;
1956 }
1957 /* x8 symbols */
1958 else
1959 switch (err_sym) {
1960 /* imaginary bits not in a DIMM */
1961 case 0x10:
1962 WARN(1, KERN_ERR "Invalid error symbol: 0x%x\n",
1963 err_sym);
1964 return -1;
1965 break;
1966
1967 case 0x11:
1968 return 0;
1969 break;
1970 case 0x12:
1971 return 1;
1972 break;
1973 default:
1974 return err_sym >> 3;
1975 break;
1976 }
1977 return -1;
1978 }
1979
1980 static int get_channel_from_ecc_syndrome(struct mem_ctl_info *mci, u16 syndrome)
1981 {
1982 struct amd64_pvt *pvt = mci->pvt_info;
1983 int err_sym = -1;
1984
1985 if (pvt->ecc_sym_sz == 8)
1986 err_sym = decode_syndrome(syndrome, x8_vectors,
1987 ARRAY_SIZE(x8_vectors),
1988 pvt->ecc_sym_sz);
1989 else if (pvt->ecc_sym_sz == 4)
1990 err_sym = decode_syndrome(syndrome, x4_vectors,
1991 ARRAY_SIZE(x4_vectors),
1992 pvt->ecc_sym_sz);
1993 else {
1994 amd64_warn("Illegal syndrome type: %u\n", pvt->ecc_sym_sz);
1995 return err_sym;
1996 }
1997
1998 return map_err_sym_to_channel(err_sym, pvt->ecc_sym_sz);
1999 }
2000
2001 static void __log_bus_error(struct mem_ctl_info *mci, struct err_info *err,
2002 u8 ecc_type)
2003 {
2004 enum hw_event_mc_err_type err_type;
2005 const char *string;
2006
2007 if (ecc_type == 2)
2008 err_type = HW_EVENT_ERR_CORRECTED;
2009 else if (ecc_type == 1)
2010 err_type = HW_EVENT_ERR_UNCORRECTED;
2011 else {
2012 WARN(1, "Something is rotten in the state of Denmark.\n");
2013 return;
2014 }
2015
2016 switch (err->err_code) {
2017 case DECODE_OK:
2018 string = "";
2019 break;
2020 case ERR_NODE:
2021 string = "Failed to map error addr to a node";
2022 break;
2023 case ERR_CSROW:
2024 string = "Failed to map error addr to a csrow";
2025 break;
2026 case ERR_CHANNEL:
2027 string = "unknown syndrome - possible error reporting race";
2028 break;
2029 default:
2030 string = "WTF error";
2031 break;
2032 }
2033
2034 edac_mc_handle_error(err_type, mci, 1,
2035 err->page, err->offset, err->syndrome,
2036 err->csrow, err->channel, -1,
2037 string, "");
2038 }
2039
2040 static inline void decode_bus_error(int node_id, struct mce *m)
2041 {
2042 struct mem_ctl_info *mci = mcis[node_id];
2043 struct amd64_pvt *pvt = mci->pvt_info;
2044 u8 ecc_type = (m->status >> 45) & 0x3;
2045 u8 xec = XEC(m->status, 0x1f);
2046 u16 ec = EC(m->status);
2047 u64 sys_addr;
2048 struct err_info err;
2049
2050 /* Bail out early if this was an 'observed' error */
2051 if (PP(ec) == NBSL_PP_OBS)
2052 return;
2053
2054 /* Do only ECC errors */
2055 if (xec && xec != F10_NBSL_EXT_ERR_ECC)
2056 return;
2057
2058 memset(&err, 0, sizeof(err));
2059
2060 sys_addr = get_error_address(pvt, m);
2061
2062 if (ecc_type == 2)
2063 err.syndrome = extract_syndrome(m->status);
2064
2065 pvt->ops->map_sysaddr_to_csrow(mci, sys_addr, &err);
2066
2067 __log_bus_error(mci, &err, ecc_type);
2068 }
2069
2070 /*
2071 * Use pvt->F2 which contains the F2 CPU PCI device to get the related
2072 * F1 (AddrMap) and F3 (Misc) devices. Return negative value on error.
2073 */
2074 static int reserve_mc_sibling_devs(struct amd64_pvt *pvt, u16 f1_id, u16 f3_id)
2075 {
2076 /* Reserve the ADDRESS MAP Device */
2077 pvt->F1 = pci_get_related_function(pvt->F2->vendor, f1_id, pvt->F2);
2078 if (!pvt->F1) {
2079 amd64_err("error address map device not found: "
2080 "vendor %x device 0x%x (broken BIOS?)\n",
2081 PCI_VENDOR_ID_AMD, f1_id);
2082 return -ENODEV;
2083 }
2084
2085 /* Reserve the MISC Device */
2086 pvt->F3 = pci_get_related_function(pvt->F2->vendor, f3_id, pvt->F2);
2087 if (!pvt->F3) {
2088 pci_dev_put(pvt->F1);
2089 pvt->F1 = NULL;
2090
2091 amd64_err("error F3 device not found: "
2092 "vendor %x device 0x%x (broken BIOS?)\n",
2093 PCI_VENDOR_ID_AMD, f3_id);
2094
2095 return -ENODEV;
2096 }
2097 edac_dbg(1, "F1: %s\n", pci_name(pvt->F1));
2098 edac_dbg(1, "F2: %s\n", pci_name(pvt->F2));
2099 edac_dbg(1, "F3: %s\n", pci_name(pvt->F3));
2100
2101 return 0;
2102 }
2103
2104 static void free_mc_sibling_devs(struct amd64_pvt *pvt)
2105 {
2106 pci_dev_put(pvt->F1);
2107 pci_dev_put(pvt->F3);
2108 }
2109
2110 /*
2111 * Retrieve the hardware registers of the memory controller (this includes the
2112 * 'Address Map' and 'Misc' device regs)
2113 */
2114 static void read_mc_regs(struct amd64_pvt *pvt)
2115 {
2116 unsigned range;
2117 u64 msr_val;
2118 u32 tmp;
2119
2120 /*
2121 * Retrieve TOP_MEM and TOP_MEM2; no masking off of reserved bits since
2122 * those are Read-As-Zero
2123 */
2124 rdmsrl(MSR_K8_TOP_MEM1, pvt->top_mem);
2125 edac_dbg(0, " TOP_MEM: 0x%016llx\n", pvt->top_mem);
2126
2127 /* check first whether TOP_MEM2 is enabled */
2128 rdmsrl(MSR_K8_SYSCFG, msr_val);
2129 if (msr_val & (1U << 21)) {
2130 rdmsrl(MSR_K8_TOP_MEM2, pvt->top_mem2);
2131 edac_dbg(0, " TOP_MEM2: 0x%016llx\n", pvt->top_mem2);
2132 } else
2133 edac_dbg(0, " TOP_MEM2 disabled\n");
2134
2135 amd64_read_pci_cfg(pvt->F3, NBCAP, &pvt->nbcap);
2136
2137 read_dram_ctl_register(pvt);
2138
2139 for (range = 0; range < DRAM_RANGES; range++) {
2140 u8 rw;
2141
2142 /* read settings for this DRAM range */
2143 read_dram_base_limit_regs(pvt, range);
2144
2145 rw = dram_rw(pvt, range);
2146 if (!rw)
2147 continue;
2148
2149 edac_dbg(1, " DRAM range[%d], base: 0x%016llx; limit: 0x%016llx\n",
2150 range,
2151 get_dram_base(pvt, range),
2152 get_dram_limit(pvt, range));
2153
2154 edac_dbg(1, " IntlvEn=%s; Range access: %s%s IntlvSel=%d DstNode=%d\n",
2155 dram_intlv_en(pvt, range) ? "Enabled" : "Disabled",
2156 (rw & 0x1) ? "R" : "-",
2157 (rw & 0x2) ? "W" : "-",
2158 dram_intlv_sel(pvt, range),
2159 dram_dst_node(pvt, range));
2160 }
2161
2162 read_dct_base_mask(pvt);
2163
2164 amd64_read_pci_cfg(pvt->F1, DHAR, &pvt->dhar);
2165 amd64_read_dct_pci_cfg(pvt, 0, DBAM0, &pvt->dbam0);
2166
2167 amd64_read_pci_cfg(pvt->F3, F10_ONLINE_SPARE, &pvt->online_spare);
2168
2169 amd64_read_dct_pci_cfg(pvt, 0, DCLR0, &pvt->dclr0);
2170 amd64_read_dct_pci_cfg(pvt, 0, DCHR0, &pvt->dchr0);
2171
2172 if (!dct_ganging_enabled(pvt)) {
2173 amd64_read_dct_pci_cfg(pvt, 1, DCLR0, &pvt->dclr1);
2174 amd64_read_dct_pci_cfg(pvt, 1, DCHR0, &pvt->dchr1);
2175 }
2176
2177 pvt->ecc_sym_sz = 4;
2178
2179 if (pvt->fam >= 0x10) {
2180 amd64_read_pci_cfg(pvt->F3, EXT_NB_MCA_CFG, &tmp);
2181 /* F16h has only DCT0, so no need to read dbam1 */
2182 if (pvt->fam != 0x16)
2183 amd64_read_dct_pci_cfg(pvt, 1, DBAM0, &pvt->dbam1);
2184
2185 /* F10h, revD and later can do x8 ECC too */
2186 if ((pvt->fam > 0x10 || pvt->model > 7) && tmp & BIT(25))
2187 pvt->ecc_sym_sz = 8;
2188 }
2189 dump_misc_regs(pvt);
2190 }
2191
2192 /*
2193 * NOTE: CPU Revision Dependent code
2194 *
2195 * Input:
2196 * @csrow_nr ChipSelect Row Number (0..NUM_CHIPSELECTS-1)
2197 * k8 private pointer to -->
2198 * DRAM Bank Address mapping register
2199 * node_id
2200 * DCL register where dual_channel_active is
2201 *
2202 * The DBAM register consists of 4 sets of 4 bits each definitions:
2203 *
2204 * Bits: CSROWs
2205 * 0-3 CSROWs 0 and 1
2206 * 4-7 CSROWs 2 and 3
2207 * 8-11 CSROWs 4 and 5
2208 * 12-15 CSROWs 6 and 7
2209 *
2210 * Values range from: 0 to 15
2211 * The meaning of the values depends on CPU revision and dual-channel state,
2212 * see relevant BKDG more info.
2213 *
2214 * The memory controller provides for total of only 8 CSROWs in its current
2215 * architecture. Each "pair" of CSROWs normally represents just one DIMM in
2216 * single channel or two (2) DIMMs in dual channel mode.
2217 *
2218 * The following code logic collapses the various tables for CSROW based on CPU
2219 * revision.
2220 *
2221 * Returns:
2222 * The number of PAGE_SIZE pages on the specified CSROW number it
2223 * encompasses
2224 *
2225 */
2226 static u32 get_csrow_nr_pages(struct amd64_pvt *pvt, u8 dct, int csrow_nr)
2227 {
2228 u32 cs_mode, nr_pages;
2229 u32 dbam = dct ? pvt->dbam1 : pvt->dbam0;
2230
2231
2232 /*
2233 * The math on this doesn't look right on the surface because x/2*4 can
2234 * be simplified to x*2 but this expression makes use of the fact that
2235 * it is integral math where 1/2=0. This intermediate value becomes the
2236 * number of bits to shift the DBAM register to extract the proper CSROW
2237 * field.
2238 */
2239 cs_mode = DBAM_DIMM(csrow_nr / 2, dbam);
2240
2241 nr_pages = pvt->ops->dbam_to_cs(pvt, dct, cs_mode) << (20 - PAGE_SHIFT);
2242
2243 edac_dbg(0, "csrow: %d, channel: %d, DBAM idx: %d\n",
2244 csrow_nr, dct, cs_mode);
2245 edac_dbg(0, "nr_pages/channel: %u\n", nr_pages);
2246
2247 return nr_pages;
2248 }
2249
2250 /*
2251 * Initialize the array of csrow attribute instances, based on the values
2252 * from pci config hardware registers.
2253 */
2254 static int init_csrows(struct mem_ctl_info *mci)
2255 {
2256 struct amd64_pvt *pvt = mci->pvt_info;
2257 struct csrow_info *csrow;
2258 struct dimm_info *dimm;
2259 enum edac_type edac_mode;
2260 enum mem_type mtype;
2261 int i, j, empty = 1;
2262 int nr_pages = 0;
2263 u32 val;
2264
2265 amd64_read_pci_cfg(pvt->F3, NBCFG, &val);
2266
2267 pvt->nbcfg = val;
2268
2269 edac_dbg(0, "node %d, NBCFG=0x%08x[ChipKillEccCap: %d|DramEccEn: %d]\n",
2270 pvt->mc_node_id, val,
2271 !!(val & NBCFG_CHIPKILL), !!(val & NBCFG_ECC_ENABLE));
2272
2273 /*
2274 * We iterate over DCT0 here but we look at DCT1 in parallel, if needed.
2275 */
2276 for_each_chip_select(i, 0, pvt) {
2277 bool row_dct0 = !!csrow_enabled(i, 0, pvt);
2278 bool row_dct1 = false;
2279
2280 if (pvt->fam != 0xf)
2281 row_dct1 = !!csrow_enabled(i, 1, pvt);
2282
2283 if (!row_dct0 && !row_dct1)
2284 continue;
2285
2286 csrow = mci->csrows[i];
2287 empty = 0;
2288
2289 edac_dbg(1, "MC node: %d, csrow: %d\n",
2290 pvt->mc_node_id, i);
2291
2292 if (row_dct0) {
2293 nr_pages = get_csrow_nr_pages(pvt, 0, i);
2294 csrow->channels[0]->dimm->nr_pages = nr_pages;
2295 }
2296
2297 /* K8 has only one DCT */
2298 if (pvt->fam != 0xf && row_dct1) {
2299 int row_dct1_pages = get_csrow_nr_pages(pvt, 1, i);
2300
2301 csrow->channels[1]->dimm->nr_pages = row_dct1_pages;
2302 nr_pages += row_dct1_pages;
2303 }
2304
2305 mtype = determine_memory_type(pvt, i);
2306
2307 edac_dbg(1, "Total csrow%d pages: %u\n", i, nr_pages);
2308
2309 /*
2310 * determine whether CHIPKILL or JUST ECC or NO ECC is operating
2311 */
2312 if (pvt->nbcfg & NBCFG_ECC_ENABLE)
2313 edac_mode = (pvt->nbcfg & NBCFG_CHIPKILL) ?
2314 EDAC_S4ECD4ED : EDAC_SECDED;
2315 else
2316 edac_mode = EDAC_NONE;
2317
2318 for (j = 0; j < pvt->channel_count; j++) {
2319 dimm = csrow->channels[j]->dimm;
2320 dimm->mtype = mtype;
2321 dimm->edac_mode = edac_mode;
2322 }
2323 }
2324
2325 return empty;
2326 }
2327
2328 /* get all cores on this DCT */
2329 static void get_cpus_on_this_dct_cpumask(struct cpumask *mask, u16 nid)
2330 {
2331 int cpu;
2332
2333 for_each_online_cpu(cpu)
2334 if (amd_get_nb_id(cpu) == nid)
2335 cpumask_set_cpu(cpu, mask);
2336 }
2337
2338 /* check MCG_CTL on all the cpus on this node */
2339 static bool nb_mce_bank_enabled_on_node(u16 nid)
2340 {
2341 cpumask_var_t mask;
2342 int cpu, nbe;
2343 bool ret = false;
2344
2345 if (!zalloc_cpumask_var(&mask, GFP_KERNEL)) {
2346 amd64_warn("%s: Error allocating mask\n", __func__);
2347 return false;
2348 }
2349
2350 get_cpus_on_this_dct_cpumask(mask, nid);
2351
2352 rdmsr_on_cpus(mask, MSR_IA32_MCG_CTL, msrs);
2353
2354 for_each_cpu(cpu, mask) {
2355 struct msr *reg = per_cpu_ptr(msrs, cpu);
2356 nbe = reg->l & MSR_MCGCTL_NBE;
2357
2358 edac_dbg(0, "core: %u, MCG_CTL: 0x%llx, NB MSR is %s\n",
2359 cpu, reg->q,
2360 (nbe ? "enabled" : "disabled"));
2361
2362 if (!nbe)
2363 goto out;
2364 }
2365 ret = true;
2366
2367 out:
2368 free_cpumask_var(mask);
2369 return ret;
2370 }
2371
2372 static int toggle_ecc_err_reporting(struct ecc_settings *s, u16 nid, bool on)
2373 {
2374 cpumask_var_t cmask;
2375 int cpu;
2376
2377 if (!zalloc_cpumask_var(&cmask, GFP_KERNEL)) {
2378 amd64_warn("%s: error allocating mask\n", __func__);
2379 return false;
2380 }
2381
2382 get_cpus_on_this_dct_cpumask(cmask, nid);
2383
2384 rdmsr_on_cpus(cmask, MSR_IA32_MCG_CTL, msrs);
2385
2386 for_each_cpu(cpu, cmask) {
2387
2388 struct msr *reg = per_cpu_ptr(msrs, cpu);
2389
2390 if (on) {
2391 if (reg->l & MSR_MCGCTL_NBE)
2392 s->flags.nb_mce_enable = 1;
2393
2394 reg->l |= MSR_MCGCTL_NBE;
2395 } else {
2396 /*
2397 * Turn off NB MCE reporting only when it was off before
2398 */
2399 if (!s->flags.nb_mce_enable)
2400 reg->l &= ~MSR_MCGCTL_NBE;
2401 }
2402 }
2403 wrmsr_on_cpus(cmask, MSR_IA32_MCG_CTL, msrs);
2404
2405 free_cpumask_var(cmask);
2406
2407 return 0;
2408 }
2409
2410 static bool enable_ecc_error_reporting(struct ecc_settings *s, u16 nid,
2411 struct pci_dev *F3)
2412 {
2413 bool ret = true;
2414 u32 value, mask = 0x3; /* UECC/CECC enable */
2415
2416 if (toggle_ecc_err_reporting(s, nid, ON)) {
2417 amd64_warn("Error enabling ECC reporting over MCGCTL!\n");
2418 return false;
2419 }
2420
2421 amd64_read_pci_cfg(F3, NBCTL, &value);
2422
2423 s->old_nbctl = value & mask;
2424 s->nbctl_valid = true;
2425
2426 value |= mask;
2427 amd64_write_pci_cfg(F3, NBCTL, value);
2428
2429 amd64_read_pci_cfg(F3, NBCFG, &value);
2430
2431 edac_dbg(0, "1: node %d, NBCFG=0x%08x[DramEccEn: %d]\n",
2432 nid, value, !!(value & NBCFG_ECC_ENABLE));
2433
2434 if (!(value & NBCFG_ECC_ENABLE)) {
2435 amd64_warn("DRAM ECC disabled on this node, enabling...\n");
2436
2437 s->flags.nb_ecc_prev = 0;
2438
2439 /* Attempt to turn on DRAM ECC Enable */
2440 value |= NBCFG_ECC_ENABLE;
2441 amd64_write_pci_cfg(F3, NBCFG, value);
2442
2443 amd64_read_pci_cfg(F3, NBCFG, &value);
2444
2445 if (!(value & NBCFG_ECC_ENABLE)) {
2446 amd64_warn("Hardware rejected DRAM ECC enable,"
2447 "check memory DIMM configuration.\n");
2448 ret = false;
2449 } else {
2450 amd64_info("Hardware accepted DRAM ECC Enable\n");
2451 }
2452 } else {
2453 s->flags.nb_ecc_prev = 1;
2454 }
2455
2456 edac_dbg(0, "2: node %d, NBCFG=0x%08x[DramEccEn: %d]\n",
2457 nid, value, !!(value & NBCFG_ECC_ENABLE));
2458
2459 return ret;
2460 }
2461
2462 static void restore_ecc_error_reporting(struct ecc_settings *s, u16 nid,
2463 struct pci_dev *F3)
2464 {
2465 u32 value, mask = 0x3; /* UECC/CECC enable */
2466
2467
2468 if (!s->nbctl_valid)
2469 return;
2470
2471 amd64_read_pci_cfg(F3, NBCTL, &value);
2472 value &= ~mask;
2473 value |= s->old_nbctl;
2474
2475 amd64_write_pci_cfg(F3, NBCTL, value);
2476
2477 /* restore previous BIOS DRAM ECC "off" setting we force-enabled */
2478 if (!s->flags.nb_ecc_prev) {
2479 amd64_read_pci_cfg(F3, NBCFG, &value);
2480 value &= ~NBCFG_ECC_ENABLE;
2481 amd64_write_pci_cfg(F3, NBCFG, value);
2482 }
2483
2484 /* restore the NB Enable MCGCTL bit */
2485 if (toggle_ecc_err_reporting(s, nid, OFF))
2486 amd64_warn("Error restoring NB MCGCTL settings!\n");
2487 }
2488
2489 /*
2490 * EDAC requires that the BIOS have ECC enabled before
2491 * taking over the processing of ECC errors. A command line
2492 * option allows to force-enable hardware ECC later in
2493 * enable_ecc_error_reporting().
2494 */
2495 static const char *ecc_msg =
2496 "ECC disabled in the BIOS or no ECC capability, module will not load.\n"
2497 " Either enable ECC checking or force module loading by setting "
2498 "'ecc_enable_override'.\n"
2499 " (Note that use of the override may cause unknown side effects.)\n";
2500
2501 static bool ecc_enabled(struct pci_dev *F3, u16 nid)
2502 {
2503 u32 value;
2504 u8 ecc_en = 0;
2505 bool nb_mce_en = false;
2506
2507 amd64_read_pci_cfg(F3, NBCFG, &value);
2508
2509 ecc_en = !!(value & NBCFG_ECC_ENABLE);
2510 amd64_info("DRAM ECC %s.\n", (ecc_en ? "enabled" : "disabled"));
2511
2512 nb_mce_en = nb_mce_bank_enabled_on_node(nid);
2513 if (!nb_mce_en)
2514 amd64_notice("NB MCE bank disabled, set MSR "
2515 "0x%08x[4] on node %d to enable.\n",
2516 MSR_IA32_MCG_CTL, nid);
2517
2518 if (!ecc_en || !nb_mce_en) {
2519 amd64_notice("%s", ecc_msg);
2520 return false;
2521 }
2522 return true;
2523 }
2524
2525 static int set_mc_sysfs_attrs(struct mem_ctl_info *mci)
2526 {
2527 struct amd64_pvt *pvt = mci->pvt_info;
2528 int rc;
2529
2530 rc = amd64_create_sysfs_dbg_files(mci);
2531 if (rc < 0)
2532 return rc;
2533
2534 if (pvt->fam >= 0x10) {
2535 rc = amd64_create_sysfs_inject_files(mci);
2536 if (rc < 0)
2537 return rc;
2538 }
2539
2540 return 0;
2541 }
2542
2543 static void del_mc_sysfs_attrs(struct mem_ctl_info *mci)
2544 {
2545 struct amd64_pvt *pvt = mci->pvt_info;
2546
2547 amd64_remove_sysfs_dbg_files(mci);
2548
2549 if (pvt->fam >= 0x10)
2550 amd64_remove_sysfs_inject_files(mci);
2551 }
2552
2553 static void setup_mci_misc_attrs(struct mem_ctl_info *mci,
2554 struct amd64_family_type *fam)
2555 {
2556 struct amd64_pvt *pvt = mci->pvt_info;
2557
2558 mci->mtype_cap = MEM_FLAG_DDR2 | MEM_FLAG_RDDR2;
2559 mci->edac_ctl_cap = EDAC_FLAG_NONE;
2560
2561 if (pvt->nbcap & NBCAP_SECDED)
2562 mci->edac_ctl_cap |= EDAC_FLAG_SECDED;
2563
2564 if (pvt->nbcap & NBCAP_CHIPKILL)
2565 mci->edac_ctl_cap |= EDAC_FLAG_S4ECD4ED;
2566
2567 mci->edac_cap = determine_edac_cap(pvt);
2568 mci->mod_name = EDAC_MOD_STR;
2569 mci->mod_ver = EDAC_AMD64_VERSION;
2570 mci->ctl_name = fam->ctl_name;
2571 mci->dev_name = pci_name(pvt->F2);
2572 mci->ctl_page_to_phys = NULL;
2573
2574 /* memory scrubber interface */
2575 mci->set_sdram_scrub_rate = set_scrub_rate;
2576 mci->get_sdram_scrub_rate = get_scrub_rate;
2577 }
2578
2579 /*
2580 * returns a pointer to the family descriptor on success, NULL otherwise.
2581 */
2582 static struct amd64_family_type *per_family_init(struct amd64_pvt *pvt)
2583 {
2584 struct amd64_family_type *fam_type = NULL;
2585
2586 pvt->ext_model = boot_cpu_data.x86_model >> 4;
2587 pvt->stepping = boot_cpu_data.x86_mask;
2588 pvt->model = boot_cpu_data.x86_model;
2589 pvt->fam = boot_cpu_data.x86;
2590
2591 switch (pvt->fam) {
2592 case 0xf:
2593 fam_type = &family_types[K8_CPUS];
2594 pvt->ops = &family_types[K8_CPUS].ops;
2595 break;
2596
2597 case 0x10:
2598 fam_type = &family_types[F10_CPUS];
2599 pvt->ops = &family_types[F10_CPUS].ops;
2600 break;
2601
2602 case 0x15:
2603 if (pvt->model == 0x30) {
2604 fam_type = &family_types[F15_M30H_CPUS];
2605 pvt->ops = &family_types[F15_M30H_CPUS].ops;
2606 break;
2607 }
2608
2609 fam_type = &family_types[F15_CPUS];
2610 pvt->ops = &family_types[F15_CPUS].ops;
2611 break;
2612
2613 case 0x16:
2614 if (pvt->model == 0x30) {
2615 fam_type = &family_types[F16_M30H_CPUS];
2616 pvt->ops = &family_types[F16_M30H_CPUS].ops;
2617 break;
2618 }
2619 fam_type = &family_types[F16_CPUS];
2620 pvt->ops = &family_types[F16_CPUS].ops;
2621 break;
2622
2623 default:
2624 amd64_err("Unsupported family!\n");
2625 return NULL;
2626 }
2627
2628 amd64_info("%s %sdetected (node %d).\n", fam_type->ctl_name,
2629 (pvt->fam == 0xf ?
2630 (pvt->ext_model >= K8_REV_F ? "revF or later "
2631 : "revE or earlier ")
2632 : ""), pvt->mc_node_id);
2633 return fam_type;
2634 }
2635
2636 static int init_one_instance(struct pci_dev *F2)
2637 {
2638 struct amd64_pvt *pvt = NULL;
2639 struct amd64_family_type *fam_type = NULL;
2640 struct mem_ctl_info *mci = NULL;
2641 struct edac_mc_layer layers[2];
2642 int err = 0, ret;
2643 u16 nid = amd_get_node_id(F2);
2644
2645 ret = -ENOMEM;
2646 pvt = kzalloc(sizeof(struct amd64_pvt), GFP_KERNEL);
2647 if (!pvt)
2648 goto err_ret;
2649
2650 pvt->mc_node_id = nid;
2651 pvt->F2 = F2;
2652
2653 ret = -EINVAL;
2654 fam_type = per_family_init(pvt);
2655 if (!fam_type)
2656 goto err_free;
2657
2658 ret = -ENODEV;
2659 err = reserve_mc_sibling_devs(pvt, fam_type->f1_id, fam_type->f3_id);
2660 if (err)
2661 goto err_free;
2662
2663 read_mc_regs(pvt);
2664
2665 /*
2666 * We need to determine how many memory channels there are. Then use
2667 * that information for calculating the size of the dynamic instance
2668 * tables in the 'mci' structure.
2669 */
2670 ret = -EINVAL;
2671 pvt->channel_count = pvt->ops->early_channel_count(pvt);
2672 if (pvt->channel_count < 0)
2673 goto err_siblings;
2674
2675 ret = -ENOMEM;
2676 layers[0].type = EDAC_MC_LAYER_CHIP_SELECT;
2677 layers[0].size = pvt->csels[0].b_cnt;
2678 layers[0].is_virt_csrow = true;
2679 layers[1].type = EDAC_MC_LAYER_CHANNEL;
2680
2681 /*
2682 * Always allocate two channels since we can have setups with DIMMs on
2683 * only one channel. Also, this simplifies handling later for the price
2684 * of a couple of KBs tops.
2685 */
2686 layers[1].size = 2;
2687 layers[1].is_virt_csrow = false;
2688
2689 mci = edac_mc_alloc(nid, ARRAY_SIZE(layers), layers, 0);
2690 if (!mci)
2691 goto err_siblings;
2692
2693 mci->pvt_info = pvt;
2694 mci->pdev = &pvt->F2->dev;
2695
2696 setup_mci_misc_attrs(mci, fam_type);
2697
2698 if (init_csrows(mci))
2699 mci->edac_cap = EDAC_FLAG_NONE;
2700
2701 ret = -ENODEV;
2702 if (edac_mc_add_mc(mci)) {
2703 edac_dbg(1, "failed edac_mc_add_mc()\n");
2704 goto err_add_mc;
2705 }
2706 if (set_mc_sysfs_attrs(mci)) {
2707 edac_dbg(1, "failed edac_mc_add_mc()\n");
2708 goto err_add_sysfs;
2709 }
2710
2711 /* register stuff with EDAC MCE */
2712 if (report_gart_errors)
2713 amd_report_gart_errors(true);
2714
2715 amd_register_ecc_decoder(decode_bus_error);
2716
2717 mcis[nid] = mci;
2718
2719 atomic_inc(&drv_instances);
2720
2721 return 0;
2722
2723 err_add_sysfs:
2724 edac_mc_del_mc(mci->pdev);
2725 err_add_mc:
2726 edac_mc_free(mci);
2727
2728 err_siblings:
2729 free_mc_sibling_devs(pvt);
2730
2731 err_free:
2732 kfree(pvt);
2733
2734 err_ret:
2735 return ret;
2736 }
2737
2738 static int probe_one_instance(struct pci_dev *pdev,
2739 const struct pci_device_id *mc_type)
2740 {
2741 u16 nid = amd_get_node_id(pdev);
2742 struct pci_dev *F3 = node_to_amd_nb(nid)->misc;
2743 struct ecc_settings *s;
2744 int ret = 0;
2745
2746 ret = pci_enable_device(pdev);
2747 if (ret < 0) {
2748 edac_dbg(0, "ret=%d\n", ret);
2749 return -EIO;
2750 }
2751
2752 ret = -ENOMEM;
2753 s = kzalloc(sizeof(struct ecc_settings), GFP_KERNEL);
2754 if (!s)
2755 goto err_out;
2756
2757 ecc_stngs[nid] = s;
2758
2759 if (!ecc_enabled(F3, nid)) {
2760 ret = -ENODEV;
2761
2762 if (!ecc_enable_override)
2763 goto err_enable;
2764
2765 amd64_warn("Forcing ECC on!\n");
2766
2767 if (!enable_ecc_error_reporting(s, nid, F3))
2768 goto err_enable;
2769 }
2770
2771 ret = init_one_instance(pdev);
2772 if (ret < 0) {
2773 amd64_err("Error probing instance: %d\n", nid);
2774 restore_ecc_error_reporting(s, nid, F3);
2775 }
2776
2777 return ret;
2778
2779 err_enable:
2780 kfree(s);
2781 ecc_stngs[nid] = NULL;
2782
2783 err_out:
2784 return ret;
2785 }
2786
2787 static void remove_one_instance(struct pci_dev *pdev)
2788 {
2789 struct mem_ctl_info *mci;
2790 struct amd64_pvt *pvt;
2791 u16 nid = amd_get_node_id(pdev);
2792 struct pci_dev *F3 = node_to_amd_nb(nid)->misc;
2793 struct ecc_settings *s = ecc_stngs[nid];
2794
2795 mci = find_mci_by_dev(&pdev->dev);
2796 WARN_ON(!mci);
2797
2798 del_mc_sysfs_attrs(mci);
2799 /* Remove from EDAC CORE tracking list */
2800 mci = edac_mc_del_mc(&pdev->dev);
2801 if (!mci)
2802 return;
2803
2804 pvt = mci->pvt_info;
2805
2806 restore_ecc_error_reporting(s, nid, F3);
2807
2808 free_mc_sibling_devs(pvt);
2809
2810 /* unregister from EDAC MCE */
2811 amd_report_gart_errors(false);
2812 amd_unregister_ecc_decoder(decode_bus_error);
2813
2814 kfree(ecc_stngs[nid]);
2815 ecc_stngs[nid] = NULL;
2816
2817 /* Free the EDAC CORE resources */
2818 mci->pvt_info = NULL;
2819 mcis[nid] = NULL;
2820
2821 kfree(pvt);
2822 edac_mc_free(mci);
2823 }
2824
2825 /*
2826 * This table is part of the interface for loading drivers for PCI devices. The
2827 * PCI core identifies what devices are on a system during boot, and then
2828 * inquiry this table to see if this driver is for a given device found.
2829 */
2830 static const struct pci_device_id amd64_pci_table[] = {
2831 {
2832 .vendor = PCI_VENDOR_ID_AMD,
2833 .device = PCI_DEVICE_ID_AMD_K8_NB_MEMCTL,
2834 .subvendor = PCI_ANY_ID,
2835 .subdevice = PCI_ANY_ID,
2836 .class = 0,
2837 .class_mask = 0,
2838 },
2839 {
2840 .vendor = PCI_VENDOR_ID_AMD,
2841 .device = PCI_DEVICE_ID_AMD_10H_NB_DRAM,
2842 .subvendor = PCI_ANY_ID,
2843 .subdevice = PCI_ANY_ID,
2844 .class = 0,
2845 .class_mask = 0,
2846 },
2847 {
2848 .vendor = PCI_VENDOR_ID_AMD,
2849 .device = PCI_DEVICE_ID_AMD_15H_NB_F2,
2850 .subvendor = PCI_ANY_ID,
2851 .subdevice = PCI_ANY_ID,
2852 .class = 0,
2853 .class_mask = 0,
2854 },
2855 {
2856 .vendor = PCI_VENDOR_ID_AMD,
2857 .device = PCI_DEVICE_ID_AMD_15H_M30H_NB_F2,
2858 .subvendor = PCI_ANY_ID,
2859 .subdevice = PCI_ANY_ID,
2860 .class = 0,
2861 .class_mask = 0,
2862 },
2863 {
2864 .vendor = PCI_VENDOR_ID_AMD,
2865 .device = PCI_DEVICE_ID_AMD_16H_NB_F2,
2866 .subvendor = PCI_ANY_ID,
2867 .subdevice = PCI_ANY_ID,
2868 .class = 0,
2869 .class_mask = 0,
2870 },
2871 {
2872 .vendor = PCI_VENDOR_ID_AMD,
2873 .device = PCI_DEVICE_ID_AMD_16H_M30H_NB_F2,
2874 .subvendor = PCI_ANY_ID,
2875 .subdevice = PCI_ANY_ID,
2876 .class = 0,
2877 .class_mask = 0,
2878 },
2879
2880 {0, }
2881 };
2882 MODULE_DEVICE_TABLE(pci, amd64_pci_table);
2883
2884 static struct pci_driver amd64_pci_driver = {
2885 .name = EDAC_MOD_STR,
2886 .probe = probe_one_instance,
2887 .remove = remove_one_instance,
2888 .id_table = amd64_pci_table,
2889 };
2890
2891 static void setup_pci_device(void)
2892 {
2893 struct mem_ctl_info *mci;
2894 struct amd64_pvt *pvt;
2895
2896 if (pci_ctl)
2897 return;
2898
2899 mci = mcis[0];
2900 if (!mci)
2901 return;
2902
2903 pvt = mci->pvt_info;
2904 pci_ctl = edac_pci_create_generic_ctl(&pvt->F2->dev, EDAC_MOD_STR);
2905 if (!pci_ctl) {
2906 pr_warn("%s(): Unable to create PCI control\n", __func__);
2907 pr_warn("%s(): PCI error report via EDAC not set\n", __func__);
2908 }
2909 }
2910
2911 static int __init amd64_edac_init(void)
2912 {
2913 int err = -ENODEV;
2914
2915 printk(KERN_INFO "AMD64 EDAC driver v%s\n", EDAC_AMD64_VERSION);
2916
2917 opstate_init();
2918
2919 if (amd_cache_northbridges() < 0)
2920 goto err_ret;
2921
2922 err = -ENOMEM;
2923 mcis = kzalloc(amd_nb_num() * sizeof(mcis[0]), GFP_KERNEL);
2924 ecc_stngs = kzalloc(amd_nb_num() * sizeof(ecc_stngs[0]), GFP_KERNEL);
2925 if (!(mcis && ecc_stngs))
2926 goto err_free;
2927
2928 msrs = msrs_alloc();
2929 if (!msrs)
2930 goto err_free;
2931
2932 err = pci_register_driver(&amd64_pci_driver);
2933 if (err)
2934 goto err_pci;
2935
2936 err = -ENODEV;
2937 if (!atomic_read(&drv_instances))
2938 goto err_no_instances;
2939
2940 setup_pci_device();
2941 return 0;
2942
2943 err_no_instances:
2944 pci_unregister_driver(&amd64_pci_driver);
2945
2946 err_pci:
2947 msrs_free(msrs);
2948 msrs = NULL;
2949
2950 err_free:
2951 kfree(mcis);
2952 mcis = NULL;
2953
2954 kfree(ecc_stngs);
2955 ecc_stngs = NULL;
2956
2957 err_ret:
2958 return err;
2959 }
2960
2961 static void __exit amd64_edac_exit(void)
2962 {
2963 if (pci_ctl)
2964 edac_pci_release_generic_ctl(pci_ctl);
2965
2966 pci_unregister_driver(&amd64_pci_driver);
2967
2968 kfree(ecc_stngs);
2969 ecc_stngs = NULL;
2970
2971 kfree(mcis);
2972 mcis = NULL;
2973
2974 msrs_free(msrs);
2975 msrs = NULL;
2976 }
2977
2978 module_init(amd64_edac_init);
2979 module_exit(amd64_edac_exit);
2980
2981 MODULE_LICENSE("GPL");
2982 MODULE_AUTHOR("SoftwareBitMaker: Doug Thompson, "
2983 "Dave Peterson, Thayne Harbaugh");
2984 MODULE_DESCRIPTION("MC support for AMD64 memory controllers - "
2985 EDAC_AMD64_VERSION);
2986
2987 module_param(edac_op_state, int, 0444);
2988 MODULE_PARM_DESC(edac_op_state, "EDAC Error Reporting state: 0=Poll,1=NMI");