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