iwlwifi: pcie: give a meaningful name to interrupt request
[linux-2.6/btrfs-unstable.git] / drivers / edac / amd64_edac.c
blob8c0ec2128907cc6a7cf63a9f6668c86a0cbc8888
1 #include "amd64_edac.h"
2 #include <asm/amd_nb.h>
4 static struct edac_pci_ctl_info *pci_ctl;
6 static int report_gart_errors;
7 module_param(report_gart_errors, int, 0644);
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.
13 static int ecc_enable_override;
14 module_param(ecc_enable_override, int, 0644);
16 static struct msr __percpu *msrs;
18 /* Per-node stuff */
19 static struct ecc_settings **ecc_stngs;
22 * Valid scrub rates for the K8 hardware memory scrubber. We map the scrubbing
23 * bandwidth to a valid bit pattern. The 'set' operation finds the 'matching-
24 * or higher value'.
26 *FIXME: Produce a better mapping/linearisation.
28 static const struct scrubrate {
29 u32 scrubval; /* bit pattern for scrub rate */
30 u32 bandwidth; /* bandwidth consumed (bytes/sec) */
31 } scrubrates[] = {
32 { 0x01, 1600000000UL},
33 { 0x02, 800000000UL},
34 { 0x03, 400000000UL},
35 { 0x04, 200000000UL},
36 { 0x05, 100000000UL},
37 { 0x06, 50000000UL},
38 { 0x07, 25000000UL},
39 { 0x08, 12284069UL},
40 { 0x09, 6274509UL},
41 { 0x0A, 3121951UL},
42 { 0x0B, 1560975UL},
43 { 0x0C, 781440UL},
44 { 0x0D, 390720UL},
45 { 0x0E, 195300UL},
46 { 0x0F, 97650UL},
47 { 0x10, 48854UL},
48 { 0x11, 24427UL},
49 { 0x12, 12213UL},
50 { 0x13, 6101UL},
51 { 0x14, 3051UL},
52 { 0x15, 1523UL},
53 { 0x16, 761UL},
54 { 0x00, 0UL}, /* scrubbing off */
57 int __amd64_read_pci_cfg_dword(struct pci_dev *pdev, int offset,
58 u32 *val, const char *func)
60 int err = 0;
62 err = pci_read_config_dword(pdev, offset, val);
63 if (err)
64 amd64_warn("%s: error reading F%dx%03x.\n",
65 func, PCI_FUNC(pdev->devfn), offset);
67 return err;
70 int __amd64_write_pci_cfg_dword(struct pci_dev *pdev, int offset,
71 u32 val, const char *func)
73 int err = 0;
75 err = pci_write_config_dword(pdev, offset, val);
76 if (err)
77 amd64_warn("%s: error writing to F%dx%03x.\n",
78 func, PCI_FUNC(pdev->devfn), offset);
80 return err;
84 * Select DCT to which PCI cfg accesses are routed
86 static void f15h_select_dct(struct amd64_pvt *pvt, u8 dct)
88 u32 reg = 0;
90 amd64_read_pci_cfg(pvt->F1, DCT_CFG_SEL, &reg);
91 reg &= (pvt->model == 0x30) ? ~3 : ~1;
92 reg |= dct;
93 amd64_write_pci_cfg(pvt->F1, DCT_CFG_SEL, reg);
98 * Depending on the family, F2 DCT reads need special handling:
100 * K8: has a single DCT only and no address offsets >= 0x100
102 * F10h: each DCT has its own set of regs
103 * DCT0 -> F2x040..
104 * DCT1 -> F2x140..
106 * F16h: has only 1 DCT
108 * F15h: we select which DCT we access using F1x10C[DctCfgSel]
110 static inline int amd64_read_dct_pci_cfg(struct amd64_pvt *pvt, u8 dct,
111 int offset, u32 *val)
113 switch (pvt->fam) {
114 case 0xf:
115 if (dct || offset >= 0x100)
116 return -EINVAL;
117 break;
119 case 0x10:
120 if (dct) {
122 * Note: If ganging is enabled, barring the regs
123 * F2x[1,0]98 and F2x[1,0]9C; reads reads to F2x1xx
124 * return 0. (cf. Section 2.8.1 F10h BKDG)
126 if (dct_ganging_enabled(pvt))
127 return 0;
129 offset += 0x100;
131 break;
133 case 0x15:
135 * F15h: F2x1xx addresses do not map explicitly to DCT1.
136 * We should select which DCT we access using F1x10C[DctCfgSel]
138 dct = (dct && pvt->model == 0x30) ? 3 : dct;
139 f15h_select_dct(pvt, dct);
140 break;
142 case 0x16:
143 if (dct)
144 return -EINVAL;
145 break;
147 default:
148 break;
150 return amd64_read_pci_cfg(pvt->F2, offset, val);
154 * Memory scrubber control interface. For K8, memory scrubbing is handled by
155 * hardware and can involve L2 cache, dcache as well as the main memory. With
156 * F10, this is extended to L3 cache scrubbing on CPU models sporting that
157 * functionality.
159 * This causes the "units" for the scrubbing speed to vary from 64 byte blocks
160 * (dram) over to cache lines. This is nasty, so we will use bandwidth in
161 * bytes/sec for the setting.
163 * Currently, we only do dram scrubbing. If the scrubbing is done in software on
164 * other archs, we might not have access to the caches directly.
168 * scan the scrub rate mapping table for a close or matching bandwidth value to
169 * issue. If requested is too big, then use last maximum value found.
171 static int __set_scrub_rate(struct amd64_pvt *pvt, u32 new_bw, u32 min_rate)
173 u32 scrubval;
174 int i;
177 * map the configured rate (new_bw) to a value specific to the AMD64
178 * memory controller and apply to register. Search for the first
179 * bandwidth entry that is greater or equal than the setting requested
180 * and program that. If at last entry, turn off DRAM scrubbing.
182 * If no suitable bandwidth is found, turn off DRAM scrubbing entirely
183 * by falling back to the last element in scrubrates[].
185 for (i = 0; i < ARRAY_SIZE(scrubrates) - 1; i++) {
187 * skip scrub rates which aren't recommended
188 * (see F10 BKDG, F3x58)
190 if (scrubrates[i].scrubval < min_rate)
191 continue;
193 if (scrubrates[i].bandwidth <= new_bw)
194 break;
197 scrubval = scrubrates[i].scrubval;
199 if (pvt->fam == 0x15 && pvt->model == 0x60) {
200 f15h_select_dct(pvt, 0);
201 pci_write_bits32(pvt->F2, F15H_M60H_SCRCTRL, scrubval, 0x001F);
202 f15h_select_dct(pvt, 1);
203 pci_write_bits32(pvt->F2, F15H_M60H_SCRCTRL, scrubval, 0x001F);
204 } else {
205 pci_write_bits32(pvt->F3, SCRCTRL, scrubval, 0x001F);
208 if (scrubval)
209 return scrubrates[i].bandwidth;
211 return 0;
214 static int set_scrub_rate(struct mem_ctl_info *mci, u32 bw)
216 struct amd64_pvt *pvt = mci->pvt_info;
217 u32 min_scrubrate = 0x5;
219 if (pvt->fam == 0xf)
220 min_scrubrate = 0x0;
222 if (pvt->fam == 0x15) {
223 /* Erratum #505 */
224 if (pvt->model < 0x10)
225 f15h_select_dct(pvt, 0);
227 if (pvt->model == 0x60)
228 min_scrubrate = 0x6;
230 return __set_scrub_rate(pvt, bw, min_scrubrate);
233 static int get_scrub_rate(struct mem_ctl_info *mci)
235 struct amd64_pvt *pvt = mci->pvt_info;
236 u32 scrubval = 0;
237 int i, retval = -EINVAL;
239 if (pvt->fam == 0x15) {
240 /* Erratum #505 */
241 if (pvt->model < 0x10)
242 f15h_select_dct(pvt, 0);
244 if (pvt->model == 0x60)
245 amd64_read_pci_cfg(pvt->F2, F15H_M60H_SCRCTRL, &scrubval);
246 } else
247 amd64_read_pci_cfg(pvt->F3, SCRCTRL, &scrubval);
249 scrubval = scrubval & 0x001F;
251 for (i = 0; i < ARRAY_SIZE(scrubrates); i++) {
252 if (scrubrates[i].scrubval == scrubval) {
253 retval = scrubrates[i].bandwidth;
254 break;
257 return retval;
261 * returns true if the SysAddr given by sys_addr matches the
262 * DRAM base/limit associated with node_id
264 static bool base_limit_match(struct amd64_pvt *pvt, u64 sys_addr, u8 nid)
266 u64 addr;
268 /* The K8 treats this as a 40-bit value. However, bits 63-40 will be
269 * all ones if the most significant implemented address bit is 1.
270 * Here we discard bits 63-40. See section 3.4.2 of AMD publication
271 * 24592: AMD x86-64 Architecture Programmer's Manual Volume 1
272 * Application Programming.
274 addr = sys_addr & 0x000000ffffffffffull;
276 return ((addr >= get_dram_base(pvt, nid)) &&
277 (addr <= get_dram_limit(pvt, nid)));
281 * Attempt to map a SysAddr to a node. On success, return a pointer to the
282 * mem_ctl_info structure for the node that the SysAddr maps to.
284 * On failure, return NULL.
286 static struct mem_ctl_info *find_mc_by_sys_addr(struct mem_ctl_info *mci,
287 u64 sys_addr)
289 struct amd64_pvt *pvt;
290 u8 node_id;
291 u32 intlv_en, bits;
294 * Here we use the DRAM Base (section 3.4.4.1) and DRAM Limit (section
295 * 3.4.4.2) registers to map the SysAddr to a node ID.
297 pvt = mci->pvt_info;
300 * The value of this field should be the same for all DRAM Base
301 * registers. Therefore we arbitrarily choose to read it from the
302 * register for node 0.
304 intlv_en = dram_intlv_en(pvt, 0);
306 if (intlv_en == 0) {
307 for (node_id = 0; node_id < DRAM_RANGES; node_id++) {
308 if (base_limit_match(pvt, sys_addr, node_id))
309 goto found;
311 goto err_no_match;
314 if (unlikely((intlv_en != 0x01) &&
315 (intlv_en != 0x03) &&
316 (intlv_en != 0x07))) {
317 amd64_warn("DRAM Base[IntlvEn] junk value: 0x%x, BIOS bug?\n", intlv_en);
318 return NULL;
321 bits = (((u32) sys_addr) >> 12) & intlv_en;
323 for (node_id = 0; ; ) {
324 if ((dram_intlv_sel(pvt, node_id) & intlv_en) == bits)
325 break; /* intlv_sel field matches */
327 if (++node_id >= DRAM_RANGES)
328 goto err_no_match;
331 /* sanity test for sys_addr */
332 if (unlikely(!base_limit_match(pvt, sys_addr, node_id))) {
333 amd64_warn("%s: sys_addr 0x%llx falls outside base/limit address"
334 "range for node %d with node interleaving enabled.\n",
335 __func__, sys_addr, node_id);
336 return NULL;
339 found:
340 return edac_mc_find((int)node_id);
342 err_no_match:
343 edac_dbg(2, "sys_addr 0x%lx doesn't match any node\n",
344 (unsigned long)sys_addr);
346 return NULL;
350 * compute the CS base address of the @csrow on the DRAM controller @dct.
351 * For details see F2x[5C:40] in the processor's BKDG
353 static void get_cs_base_and_mask(struct amd64_pvt *pvt, int csrow, u8 dct,
354 u64 *base, u64 *mask)
356 u64 csbase, csmask, base_bits, mask_bits;
357 u8 addr_shift;
359 if (pvt->fam == 0xf && pvt->ext_model < K8_REV_F) {
360 csbase = pvt->csels[dct].csbases[csrow];
361 csmask = pvt->csels[dct].csmasks[csrow];
362 base_bits = GENMASK_ULL(31, 21) | GENMASK_ULL(15, 9);
363 mask_bits = GENMASK_ULL(29, 21) | GENMASK_ULL(15, 9);
364 addr_shift = 4;
367 * F16h and F15h, models 30h and later need two addr_shift values:
368 * 8 for high and 6 for low (cf. F16h BKDG).
370 } else if (pvt->fam == 0x16 ||
371 (pvt->fam == 0x15 && pvt->model >= 0x30)) {
372 csbase = pvt->csels[dct].csbases[csrow];
373 csmask = pvt->csels[dct].csmasks[csrow >> 1];
375 *base = (csbase & GENMASK_ULL(15, 5)) << 6;
376 *base |= (csbase & GENMASK_ULL(30, 19)) << 8;
378 *mask = ~0ULL;
379 /* poke holes for the csmask */
380 *mask &= ~((GENMASK_ULL(15, 5) << 6) |
381 (GENMASK_ULL(30, 19) << 8));
383 *mask |= (csmask & GENMASK_ULL(15, 5)) << 6;
384 *mask |= (csmask & GENMASK_ULL(30, 19)) << 8;
386 return;
387 } else {
388 csbase = pvt->csels[dct].csbases[csrow];
389 csmask = pvt->csels[dct].csmasks[csrow >> 1];
390 addr_shift = 8;
392 if (pvt->fam == 0x15)
393 base_bits = mask_bits =
394 GENMASK_ULL(30,19) | GENMASK_ULL(13,5);
395 else
396 base_bits = mask_bits =
397 GENMASK_ULL(28,19) | GENMASK_ULL(13,5);
400 *base = (csbase & base_bits) << addr_shift;
402 *mask = ~0ULL;
403 /* poke holes for the csmask */
404 *mask &= ~(mask_bits << addr_shift);
405 /* OR them in */
406 *mask |= (csmask & mask_bits) << addr_shift;
409 #define for_each_chip_select(i, dct, pvt) \
410 for (i = 0; i < pvt->csels[dct].b_cnt; i++)
412 #define chip_select_base(i, dct, pvt) \
413 pvt->csels[dct].csbases[i]
415 #define for_each_chip_select_mask(i, dct, pvt) \
416 for (i = 0; i < pvt->csels[dct].m_cnt; i++)
419 * @input_addr is an InputAddr associated with the node given by mci. Return the
420 * csrow that input_addr maps to, or -1 on failure (no csrow claims input_addr).
422 static int input_addr_to_csrow(struct mem_ctl_info *mci, u64 input_addr)
424 struct amd64_pvt *pvt;
425 int csrow;
426 u64 base, mask;
428 pvt = mci->pvt_info;
430 for_each_chip_select(csrow, 0, pvt) {
431 if (!csrow_enabled(csrow, 0, pvt))
432 continue;
434 get_cs_base_and_mask(pvt, csrow, 0, &base, &mask);
436 mask = ~mask;
438 if ((input_addr & mask) == (base & mask)) {
439 edac_dbg(2, "InputAddr 0x%lx matches csrow %d (node %d)\n",
440 (unsigned long)input_addr, csrow,
441 pvt->mc_node_id);
443 return csrow;
446 edac_dbg(2, "no matching csrow for InputAddr 0x%lx (MC node %d)\n",
447 (unsigned long)input_addr, pvt->mc_node_id);
449 return -1;
453 * Obtain info from the DRAM Hole Address Register (section 3.4.8, pub #26094)
454 * for the node represented by mci. Info is passed back in *hole_base,
455 * *hole_offset, and *hole_size. Function returns 0 if info is valid or 1 if
456 * info is invalid. Info may be invalid for either of the following reasons:
458 * - The revision of the node is not E or greater. In this case, the DRAM Hole
459 * Address Register does not exist.
461 * - The DramHoleValid bit is cleared in the DRAM Hole Address Register,
462 * indicating that its contents are not valid.
464 * The values passed back in *hole_base, *hole_offset, and *hole_size are
465 * complete 32-bit values despite the fact that the bitfields in the DHAR
466 * only represent bits 31-24 of the base and offset values.
468 int amd64_get_dram_hole_info(struct mem_ctl_info *mci, u64 *hole_base,
469 u64 *hole_offset, u64 *hole_size)
471 struct amd64_pvt *pvt = mci->pvt_info;
473 /* only revE and later have the DRAM Hole Address Register */
474 if (pvt->fam == 0xf && pvt->ext_model < K8_REV_E) {
475 edac_dbg(1, " revision %d for node %d does not support DHAR\n",
476 pvt->ext_model, pvt->mc_node_id);
477 return 1;
480 /* valid for Fam10h and above */
481 if (pvt->fam >= 0x10 && !dhar_mem_hoist_valid(pvt)) {
482 edac_dbg(1, " Dram Memory Hoisting is DISABLED on this system\n");
483 return 1;
486 if (!dhar_valid(pvt)) {
487 edac_dbg(1, " Dram Memory Hoisting is DISABLED on this node %d\n",
488 pvt->mc_node_id);
489 return 1;
492 /* This node has Memory Hoisting */
494 /* +------------------+--------------------+--------------------+-----
495 * | memory | DRAM hole | relocated |
496 * | [0, (x - 1)] | [x, 0xffffffff] | addresses from |
497 * | | | DRAM hole |
498 * | | | [0x100000000, |
499 * | | | (0x100000000+ |
500 * | | | (0xffffffff-x))] |
501 * +------------------+--------------------+--------------------+-----
503 * Above is a diagram of physical memory showing the DRAM hole and the
504 * relocated addresses from the DRAM hole. As shown, the DRAM hole
505 * starts at address x (the base address) and extends through address
506 * 0xffffffff. The DRAM Hole Address Register (DHAR) relocates the
507 * addresses in the hole so that they start at 0x100000000.
510 *hole_base = dhar_base(pvt);
511 *hole_size = (1ULL << 32) - *hole_base;
513 *hole_offset = (pvt->fam > 0xf) ? f10_dhar_offset(pvt)
514 : k8_dhar_offset(pvt);
516 edac_dbg(1, " DHAR info for node %d base 0x%lx offset 0x%lx size 0x%lx\n",
517 pvt->mc_node_id, (unsigned long)*hole_base,
518 (unsigned long)*hole_offset, (unsigned long)*hole_size);
520 return 0;
522 EXPORT_SYMBOL_GPL(amd64_get_dram_hole_info);
525 * Return the DramAddr that the SysAddr given by @sys_addr maps to. It is
526 * assumed that sys_addr maps to the node given by mci.
528 * The first part of section 3.4.4 (p. 70) shows how the DRAM Base (section
529 * 3.4.4.1) and DRAM Limit (section 3.4.4.2) registers are used to translate a
530 * SysAddr to a DramAddr. If the DRAM Hole Address Register (DHAR) is enabled,
531 * then it is also involved in translating a SysAddr to a DramAddr. Sections
532 * 3.4.8 and 3.5.8.2 describe the DHAR and how it is used for memory hoisting.
533 * These parts of the documentation are unclear. I interpret them as follows:
535 * When node n receives a SysAddr, it processes the SysAddr as follows:
537 * 1. It extracts the DRAMBase and DRAMLimit values from the DRAM Base and DRAM
538 * Limit registers for node n. If the SysAddr is not within the range
539 * specified by the base and limit values, then node n ignores the Sysaddr
540 * (since it does not map to node n). Otherwise continue to step 2 below.
542 * 2. If the DramHoleValid bit of the DHAR for node n is clear, the DHAR is
543 * disabled so skip to step 3 below. Otherwise see if the SysAddr is within
544 * the range of relocated addresses (starting at 0x100000000) from the DRAM
545 * hole. If not, skip to step 3 below. Else get the value of the
546 * DramHoleOffset field from the DHAR. To obtain the DramAddr, subtract the
547 * offset defined by this value from the SysAddr.
549 * 3. Obtain the base address for node n from the DRAMBase field of the DRAM
550 * Base register for node n. To obtain the DramAddr, subtract the base
551 * address from the SysAddr, as shown near the start of section 3.4.4 (p.70).
553 static u64 sys_addr_to_dram_addr(struct mem_ctl_info *mci, u64 sys_addr)
555 struct amd64_pvt *pvt = mci->pvt_info;
556 u64 dram_base, hole_base, hole_offset, hole_size, dram_addr;
557 int ret;
559 dram_base = get_dram_base(pvt, pvt->mc_node_id);
561 ret = amd64_get_dram_hole_info(mci, &hole_base, &hole_offset,
562 &hole_size);
563 if (!ret) {
564 if ((sys_addr >= (1ULL << 32)) &&
565 (sys_addr < ((1ULL << 32) + hole_size))) {
566 /* use DHAR to translate SysAddr to DramAddr */
567 dram_addr = sys_addr - hole_offset;
569 edac_dbg(2, "using DHAR to translate SysAddr 0x%lx to DramAddr 0x%lx\n",
570 (unsigned long)sys_addr,
571 (unsigned long)dram_addr);
573 return dram_addr;
578 * Translate the SysAddr to a DramAddr as shown near the start of
579 * section 3.4.4 (p. 70). Although sys_addr is a 64-bit value, the k8
580 * only deals with 40-bit values. Therefore we discard bits 63-40 of
581 * sys_addr below. If bit 39 of sys_addr is 1 then the bits we
582 * discard are all 1s. Otherwise the bits we discard are all 0s. See
583 * section 3.4.2 of AMD publication 24592: AMD x86-64 Architecture
584 * Programmer's Manual Volume 1 Application Programming.
586 dram_addr = (sys_addr & GENMASK_ULL(39, 0)) - dram_base;
588 edac_dbg(2, "using DRAM Base register to translate SysAddr 0x%lx to DramAddr 0x%lx\n",
589 (unsigned long)sys_addr, (unsigned long)dram_addr);
590 return dram_addr;
594 * @intlv_en is the value of the IntlvEn field from a DRAM Base register
595 * (section 3.4.4.1). Return the number of bits from a SysAddr that are used
596 * for node interleaving.
598 static int num_node_interleave_bits(unsigned intlv_en)
600 static const int intlv_shift_table[] = { 0, 1, 0, 2, 0, 0, 0, 3 };
601 int n;
603 BUG_ON(intlv_en > 7);
604 n = intlv_shift_table[intlv_en];
605 return n;
608 /* Translate the DramAddr given by @dram_addr to an InputAddr. */
609 static u64 dram_addr_to_input_addr(struct mem_ctl_info *mci, u64 dram_addr)
611 struct amd64_pvt *pvt;
612 int intlv_shift;
613 u64 input_addr;
615 pvt = mci->pvt_info;
618 * See the start of section 3.4.4 (p. 70, BKDG #26094, K8, revA-E)
619 * concerning translating a DramAddr to an InputAddr.
621 intlv_shift = num_node_interleave_bits(dram_intlv_en(pvt, 0));
622 input_addr = ((dram_addr >> intlv_shift) & GENMASK_ULL(35, 12)) +
623 (dram_addr & 0xfff);
625 edac_dbg(2, " Intlv Shift=%d DramAddr=0x%lx maps to InputAddr=0x%lx\n",
626 intlv_shift, (unsigned long)dram_addr,
627 (unsigned long)input_addr);
629 return input_addr;
633 * Translate the SysAddr represented by @sys_addr to an InputAddr. It is
634 * assumed that @sys_addr maps to the node given by mci.
636 static u64 sys_addr_to_input_addr(struct mem_ctl_info *mci, u64 sys_addr)
638 u64 input_addr;
640 input_addr =
641 dram_addr_to_input_addr(mci, sys_addr_to_dram_addr(mci, sys_addr));
643 edac_dbg(2, "SysAddr 0x%lx translates to InputAddr 0x%lx\n",
644 (unsigned long)sys_addr, (unsigned long)input_addr);
646 return input_addr;
649 /* Map the Error address to a PAGE and PAGE OFFSET. */
650 static inline void error_address_to_page_and_offset(u64 error_address,
651 struct err_info *err)
653 err->page = (u32) (error_address >> PAGE_SHIFT);
654 err->offset = ((u32) error_address) & ~PAGE_MASK;
658 * @sys_addr is an error address (a SysAddr) extracted from the MCA NB Address
659 * Low (section 3.6.4.5) and MCA NB Address High (section 3.6.4.6) registers
660 * of a node that detected an ECC memory error. mci represents the node that
661 * the error address maps to (possibly different from the node that detected
662 * the error). Return the number of the csrow that sys_addr maps to, or -1 on
663 * error.
665 static int sys_addr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr)
667 int csrow;
669 csrow = input_addr_to_csrow(mci, sys_addr_to_input_addr(mci, sys_addr));
671 if (csrow == -1)
672 amd64_mc_err(mci, "Failed to translate InputAddr to csrow for "
673 "address 0x%lx\n", (unsigned long)sys_addr);
674 return csrow;
677 static int get_channel_from_ecc_syndrome(struct mem_ctl_info *, u16);
680 * Determine if the DIMMs have ECC enabled. ECC is enabled ONLY if all the DIMMs
681 * are ECC capable.
683 static unsigned long determine_edac_cap(struct amd64_pvt *pvt)
685 u8 bit;
686 unsigned long edac_cap = EDAC_FLAG_NONE;
688 bit = (pvt->fam > 0xf || pvt->ext_model >= K8_REV_F)
689 ? 19
690 : 17;
692 if (pvt->dclr0 & BIT(bit))
693 edac_cap = EDAC_FLAG_SECDED;
695 return edac_cap;
698 static void debug_display_dimm_sizes(struct amd64_pvt *, u8);
700 static void debug_dump_dramcfg_low(struct amd64_pvt *pvt, u32 dclr, int chan)
702 edac_dbg(1, "F2x%d90 (DRAM Cfg Low): 0x%08x\n", chan, dclr);
704 if (pvt->dram_type == MEM_LRDDR3) {
705 u32 dcsm = pvt->csels[chan].csmasks[0];
707 * It's assumed all LRDIMMs in a DCT are going to be of
708 * same 'type' until proven otherwise. So, use a cs
709 * value of '0' here to get dcsm value.
711 edac_dbg(1, " LRDIMM %dx rank multiply\n", (dcsm & 0x3));
714 edac_dbg(1, "All DIMMs support ECC:%s\n",
715 (dclr & BIT(19)) ? "yes" : "no");
718 edac_dbg(1, " PAR/ERR parity: %s\n",
719 (dclr & BIT(8)) ? "enabled" : "disabled");
721 if (pvt->fam == 0x10)
722 edac_dbg(1, " DCT 128bit mode width: %s\n",
723 (dclr & BIT(11)) ? "128b" : "64b");
725 edac_dbg(1, " x4 logical DIMMs present: L0: %s L1: %s L2: %s L3: %s\n",
726 (dclr & BIT(12)) ? "yes" : "no",
727 (dclr & BIT(13)) ? "yes" : "no",
728 (dclr & BIT(14)) ? "yes" : "no",
729 (dclr & BIT(15)) ? "yes" : "no");
732 /* Display and decode various NB registers for debug purposes. */
733 static void dump_misc_regs(struct amd64_pvt *pvt)
735 edac_dbg(1, "F3xE8 (NB Cap): 0x%08x\n", pvt->nbcap);
737 edac_dbg(1, " NB two channel DRAM capable: %s\n",
738 (pvt->nbcap & NBCAP_DCT_DUAL) ? "yes" : "no");
740 edac_dbg(1, " ECC capable: %s, ChipKill ECC capable: %s\n",
741 (pvt->nbcap & NBCAP_SECDED) ? "yes" : "no",
742 (pvt->nbcap & NBCAP_CHIPKILL) ? "yes" : "no");
744 debug_dump_dramcfg_low(pvt, pvt->dclr0, 0);
746 edac_dbg(1, "F3xB0 (Online Spare): 0x%08x\n", pvt->online_spare);
748 edac_dbg(1, "F1xF0 (DRAM Hole Address): 0x%08x, base: 0x%08x, offset: 0x%08x\n",
749 pvt->dhar, dhar_base(pvt),
750 (pvt->fam == 0xf) ? k8_dhar_offset(pvt)
751 : f10_dhar_offset(pvt));
753 edac_dbg(1, " DramHoleValid: %s\n", dhar_valid(pvt) ? "yes" : "no");
755 debug_display_dimm_sizes(pvt, 0);
757 /* everything below this point is Fam10h and above */
758 if (pvt->fam == 0xf)
759 return;
761 debug_display_dimm_sizes(pvt, 1);
763 amd64_info("using %s syndromes.\n", ((pvt->ecc_sym_sz == 8) ? "x8" : "x4"));
765 /* Only if NOT ganged does dclr1 have valid info */
766 if (!dct_ganging_enabled(pvt))
767 debug_dump_dramcfg_low(pvt, pvt->dclr1, 1);
771 * See BKDG, F2x[1,0][5C:40], F2[1,0][6C:60]
773 static void prep_chip_selects(struct amd64_pvt *pvt)
775 if (pvt->fam == 0xf && pvt->ext_model < K8_REV_F) {
776 pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 8;
777 pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 8;
778 } else if (pvt->fam == 0x15 && pvt->model == 0x30) {
779 pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 4;
780 pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 2;
781 } else {
782 pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 8;
783 pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 4;
788 * Function 2 Offset F10_DCSB0; read in the DCS Base and DCS Mask registers
790 static void read_dct_base_mask(struct amd64_pvt *pvt)
792 int cs;
794 prep_chip_selects(pvt);
796 for_each_chip_select(cs, 0, pvt) {
797 int reg0 = DCSB0 + (cs * 4);
798 int reg1 = DCSB1 + (cs * 4);
799 u32 *base0 = &pvt->csels[0].csbases[cs];
800 u32 *base1 = &pvt->csels[1].csbases[cs];
802 if (!amd64_read_dct_pci_cfg(pvt, 0, reg0, base0))
803 edac_dbg(0, " DCSB0[%d]=0x%08x reg: F2x%x\n",
804 cs, *base0, reg0);
806 if (pvt->fam == 0xf)
807 continue;
809 if (!amd64_read_dct_pci_cfg(pvt, 1, reg0, base1))
810 edac_dbg(0, " DCSB1[%d]=0x%08x reg: F2x%x\n",
811 cs, *base1, (pvt->fam == 0x10) ? reg1
812 : reg0);
815 for_each_chip_select_mask(cs, 0, pvt) {
816 int reg0 = DCSM0 + (cs * 4);
817 int reg1 = DCSM1 + (cs * 4);
818 u32 *mask0 = &pvt->csels[0].csmasks[cs];
819 u32 *mask1 = &pvt->csels[1].csmasks[cs];
821 if (!amd64_read_dct_pci_cfg(pvt, 0, reg0, mask0))
822 edac_dbg(0, " DCSM0[%d]=0x%08x reg: F2x%x\n",
823 cs, *mask0, reg0);
825 if (pvt->fam == 0xf)
826 continue;
828 if (!amd64_read_dct_pci_cfg(pvt, 1, reg0, mask1))
829 edac_dbg(0, " DCSM1[%d]=0x%08x reg: F2x%x\n",
830 cs, *mask1, (pvt->fam == 0x10) ? reg1
831 : reg0);
835 static void determine_memory_type(struct amd64_pvt *pvt)
837 u32 dram_ctrl, dcsm;
839 switch (pvt->fam) {
840 case 0xf:
841 if (pvt->ext_model >= K8_REV_F)
842 goto ddr3;
844 pvt->dram_type = (pvt->dclr0 & BIT(18)) ? MEM_DDR : MEM_RDDR;
845 return;
847 case 0x10:
848 if (pvt->dchr0 & DDR3_MODE)
849 goto ddr3;
851 pvt->dram_type = (pvt->dclr0 & BIT(16)) ? MEM_DDR2 : MEM_RDDR2;
852 return;
854 case 0x15:
855 if (pvt->model < 0x60)
856 goto ddr3;
859 * Model 0x60h needs special handling:
861 * We use a Chip Select value of '0' to obtain dcsm.
862 * Theoretically, it is possible to populate LRDIMMs of different
863 * 'Rank' value on a DCT. But this is not the common case. So,
864 * it's reasonable to assume all DIMMs are going to be of same
865 * 'type' until proven otherwise.
867 amd64_read_dct_pci_cfg(pvt, 0, DRAM_CONTROL, &dram_ctrl);
868 dcsm = pvt->csels[0].csmasks[0];
870 if (((dram_ctrl >> 8) & 0x7) == 0x2)
871 pvt->dram_type = MEM_DDR4;
872 else if (pvt->dclr0 & BIT(16))
873 pvt->dram_type = MEM_DDR3;
874 else if (dcsm & 0x3)
875 pvt->dram_type = MEM_LRDDR3;
876 else
877 pvt->dram_type = MEM_RDDR3;
879 return;
881 case 0x16:
882 goto ddr3;
884 default:
885 WARN(1, KERN_ERR "%s: Family??? 0x%x\n", __func__, pvt->fam);
886 pvt->dram_type = MEM_EMPTY;
888 return;
890 ddr3:
891 pvt->dram_type = (pvt->dclr0 & BIT(16)) ? MEM_DDR3 : MEM_RDDR3;
894 /* Get the number of DCT channels the memory controller is using. */
895 static int k8_early_channel_count(struct amd64_pvt *pvt)
897 int flag;
899 if (pvt->ext_model >= K8_REV_F)
900 /* RevF (NPT) and later */
901 flag = pvt->dclr0 & WIDTH_128;
902 else
903 /* RevE and earlier */
904 flag = pvt->dclr0 & REVE_WIDTH_128;
906 /* not used */
907 pvt->dclr1 = 0;
909 return (flag) ? 2 : 1;
912 /* On F10h and later ErrAddr is MC4_ADDR[47:1] */
913 static u64 get_error_address(struct amd64_pvt *pvt, struct mce *m)
915 u16 mce_nid = amd_get_nb_id(m->extcpu);
916 struct mem_ctl_info *mci;
917 u8 start_bit = 1;
918 u8 end_bit = 47;
919 u64 addr;
921 mci = edac_mc_find(mce_nid);
922 if (!mci)
923 return 0;
925 pvt = mci->pvt_info;
927 if (pvt->fam == 0xf) {
928 start_bit = 3;
929 end_bit = 39;
932 addr = m->addr & GENMASK_ULL(end_bit, start_bit);
935 * Erratum 637 workaround
937 if (pvt->fam == 0x15) {
938 u64 cc6_base, tmp_addr;
939 u32 tmp;
940 u8 intlv_en;
942 if ((addr & GENMASK_ULL(47, 24)) >> 24 != 0x00fdf7)
943 return addr;
946 amd64_read_pci_cfg(pvt->F1, DRAM_LOCAL_NODE_LIM, &tmp);
947 intlv_en = tmp >> 21 & 0x7;
949 /* add [47:27] + 3 trailing bits */
950 cc6_base = (tmp & GENMASK_ULL(20, 0)) << 3;
952 /* reverse and add DramIntlvEn */
953 cc6_base |= intlv_en ^ 0x7;
955 /* pin at [47:24] */
956 cc6_base <<= 24;
958 if (!intlv_en)
959 return cc6_base | (addr & GENMASK_ULL(23, 0));
961 amd64_read_pci_cfg(pvt->F1, DRAM_LOCAL_NODE_BASE, &tmp);
963 /* faster log2 */
964 tmp_addr = (addr & GENMASK_ULL(23, 12)) << __fls(intlv_en + 1);
966 /* OR DramIntlvSel into bits [14:12] */
967 tmp_addr |= (tmp & GENMASK_ULL(23, 21)) >> 9;
969 /* add remaining [11:0] bits from original MC4_ADDR */
970 tmp_addr |= addr & GENMASK_ULL(11, 0);
972 return cc6_base | tmp_addr;
975 return addr;
978 static struct pci_dev *pci_get_related_function(unsigned int vendor,
979 unsigned int device,
980 struct pci_dev *related)
982 struct pci_dev *dev = NULL;
984 while ((dev = pci_get_device(vendor, device, dev))) {
985 if (pci_domain_nr(dev->bus) == pci_domain_nr(related->bus) &&
986 (dev->bus->number == related->bus->number) &&
987 (PCI_SLOT(dev->devfn) == PCI_SLOT(related->devfn)))
988 break;
991 return dev;
994 static void read_dram_base_limit_regs(struct amd64_pvt *pvt, unsigned range)
996 struct amd_northbridge *nb;
997 struct pci_dev *f1 = NULL;
998 unsigned int pci_func;
999 int off = range << 3;
1000 u32 llim;
1002 amd64_read_pci_cfg(pvt->F1, DRAM_BASE_LO + off, &pvt->ranges[range].base.lo);
1003 amd64_read_pci_cfg(pvt->F1, DRAM_LIMIT_LO + off, &pvt->ranges[range].lim.lo);
1005 if (pvt->fam == 0xf)
1006 return;
1008 if (!dram_rw(pvt, range))
1009 return;
1011 amd64_read_pci_cfg(pvt->F1, DRAM_BASE_HI + off, &pvt->ranges[range].base.hi);
1012 amd64_read_pci_cfg(pvt->F1, DRAM_LIMIT_HI + off, &pvt->ranges[range].lim.hi);
1014 /* F15h: factor in CC6 save area by reading dst node's limit reg */
1015 if (pvt->fam != 0x15)
1016 return;
1018 nb = node_to_amd_nb(dram_dst_node(pvt, range));
1019 if (WARN_ON(!nb))
1020 return;
1022 if (pvt->model == 0x60)
1023 pci_func = PCI_DEVICE_ID_AMD_15H_M60H_NB_F1;
1024 else if (pvt->model == 0x30)
1025 pci_func = PCI_DEVICE_ID_AMD_15H_M30H_NB_F1;
1026 else
1027 pci_func = PCI_DEVICE_ID_AMD_15H_NB_F1;
1029 f1 = pci_get_related_function(nb->misc->vendor, pci_func, nb->misc);
1030 if (WARN_ON(!f1))
1031 return;
1033 amd64_read_pci_cfg(f1, DRAM_LOCAL_NODE_LIM, &llim);
1035 pvt->ranges[range].lim.lo &= GENMASK_ULL(15, 0);
1037 /* {[39:27],111b} */
1038 pvt->ranges[range].lim.lo |= ((llim & 0x1fff) << 3 | 0x7) << 16;
1040 pvt->ranges[range].lim.hi &= GENMASK_ULL(7, 0);
1042 /* [47:40] */
1043 pvt->ranges[range].lim.hi |= llim >> 13;
1045 pci_dev_put(f1);
1048 static void k8_map_sysaddr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr,
1049 struct err_info *err)
1051 struct amd64_pvt *pvt = mci->pvt_info;
1053 error_address_to_page_and_offset(sys_addr, err);
1056 * Find out which node the error address belongs to. This may be
1057 * different from the node that detected the error.
1059 err->src_mci = find_mc_by_sys_addr(mci, sys_addr);
1060 if (!err->src_mci) {
1061 amd64_mc_err(mci, "failed to map error addr 0x%lx to a node\n",
1062 (unsigned long)sys_addr);
1063 err->err_code = ERR_NODE;
1064 return;
1067 /* Now map the sys_addr to a CSROW */
1068 err->csrow = sys_addr_to_csrow(err->src_mci, sys_addr);
1069 if (err->csrow < 0) {
1070 err->err_code = ERR_CSROW;
1071 return;
1074 /* CHIPKILL enabled */
1075 if (pvt->nbcfg & NBCFG_CHIPKILL) {
1076 err->channel = get_channel_from_ecc_syndrome(mci, err->syndrome);
1077 if (err->channel < 0) {
1079 * Syndrome didn't map, so we don't know which of the
1080 * 2 DIMMs is in error. So we need to ID 'both' of them
1081 * as suspect.
1083 amd64_mc_warn(err->src_mci, "unknown syndrome 0x%04x - "
1084 "possible error reporting race\n",
1085 err->syndrome);
1086 err->err_code = ERR_CHANNEL;
1087 return;
1089 } else {
1091 * non-chipkill ecc mode
1093 * The k8 documentation is unclear about how to determine the
1094 * channel number when using non-chipkill memory. This method
1095 * was obtained from email communication with someone at AMD.
1096 * (Wish the email was placed in this comment - norsk)
1098 err->channel = ((sys_addr & BIT(3)) != 0);
1102 static int ddr2_cs_size(unsigned i, bool dct_width)
1104 unsigned shift = 0;
1106 if (i <= 2)
1107 shift = i;
1108 else if (!(i & 0x1))
1109 shift = i >> 1;
1110 else
1111 shift = (i + 1) >> 1;
1113 return 128 << (shift + !!dct_width);
1116 static int k8_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
1117 unsigned cs_mode, int cs_mask_nr)
1119 u32 dclr = dct ? pvt->dclr1 : pvt->dclr0;
1121 if (pvt->ext_model >= K8_REV_F) {
1122 WARN_ON(cs_mode > 11);
1123 return ddr2_cs_size(cs_mode, dclr & WIDTH_128);
1125 else if (pvt->ext_model >= K8_REV_D) {
1126 unsigned diff;
1127 WARN_ON(cs_mode > 10);
1130 * the below calculation, besides trying to win an obfuscated C
1131 * contest, maps cs_mode values to DIMM chip select sizes. The
1132 * mappings are:
1134 * cs_mode CS size (mb)
1135 * ======= ============
1136 * 0 32
1137 * 1 64
1138 * 2 128
1139 * 3 128
1140 * 4 256
1141 * 5 512
1142 * 6 256
1143 * 7 512
1144 * 8 1024
1145 * 9 1024
1146 * 10 2048
1148 * Basically, it calculates a value with which to shift the
1149 * smallest CS size of 32MB.
1151 * ddr[23]_cs_size have a similar purpose.
1153 diff = cs_mode/3 + (unsigned)(cs_mode > 5);
1155 return 32 << (cs_mode - diff);
1157 else {
1158 WARN_ON(cs_mode > 6);
1159 return 32 << cs_mode;
1164 * Get the number of DCT channels in use.
1166 * Return:
1167 * number of Memory Channels in operation
1168 * Pass back:
1169 * contents of the DCL0_LOW register
1171 static int f1x_early_channel_count(struct amd64_pvt *pvt)
1173 int i, j, channels = 0;
1175 /* On F10h, if we are in 128 bit mode, then we are using 2 channels */
1176 if (pvt->fam == 0x10 && (pvt->dclr0 & WIDTH_128))
1177 return 2;
1180 * Need to check if in unganged mode: In such, there are 2 channels,
1181 * but they are not in 128 bit mode and thus the above 'dclr0' status
1182 * bit will be OFF.
1184 * Need to check DCT0[0] and DCT1[0] to see if only one of them has
1185 * their CSEnable bit on. If so, then SINGLE DIMM case.
1187 edac_dbg(0, "Data width is not 128 bits - need more decoding\n");
1190 * Check DRAM Bank Address Mapping values for each DIMM to see if there
1191 * is more than just one DIMM present in unganged mode. Need to check
1192 * both controllers since DIMMs can be placed in either one.
1194 for (i = 0; i < 2; i++) {
1195 u32 dbam = (i ? pvt->dbam1 : pvt->dbam0);
1197 for (j = 0; j < 4; j++) {
1198 if (DBAM_DIMM(j, dbam) > 0) {
1199 channels++;
1200 break;
1205 if (channels > 2)
1206 channels = 2;
1208 amd64_info("MCT channel count: %d\n", channels);
1210 return channels;
1213 static int ddr3_cs_size(unsigned i, bool dct_width)
1215 unsigned shift = 0;
1216 int cs_size = 0;
1218 if (i == 0 || i == 3 || i == 4)
1219 cs_size = -1;
1220 else if (i <= 2)
1221 shift = i;
1222 else if (i == 12)
1223 shift = 7;
1224 else if (!(i & 0x1))
1225 shift = i >> 1;
1226 else
1227 shift = (i + 1) >> 1;
1229 if (cs_size != -1)
1230 cs_size = (128 * (1 << !!dct_width)) << shift;
1232 return cs_size;
1235 static int ddr3_lrdimm_cs_size(unsigned i, unsigned rank_multiply)
1237 unsigned shift = 0;
1238 int cs_size = 0;
1240 if (i < 4 || i == 6)
1241 cs_size = -1;
1242 else if (i == 12)
1243 shift = 7;
1244 else if (!(i & 0x1))
1245 shift = i >> 1;
1246 else
1247 shift = (i + 1) >> 1;
1249 if (cs_size != -1)
1250 cs_size = rank_multiply * (128 << shift);
1252 return cs_size;
1255 static int ddr4_cs_size(unsigned i)
1257 int cs_size = 0;
1259 if (i == 0)
1260 cs_size = -1;
1261 else if (i == 1)
1262 cs_size = 1024;
1263 else
1264 /* Min cs_size = 1G */
1265 cs_size = 1024 * (1 << (i >> 1));
1267 return cs_size;
1270 static int f10_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
1271 unsigned cs_mode, int cs_mask_nr)
1273 u32 dclr = dct ? pvt->dclr1 : pvt->dclr0;
1275 WARN_ON(cs_mode > 11);
1277 if (pvt->dchr0 & DDR3_MODE || pvt->dchr1 & DDR3_MODE)
1278 return ddr3_cs_size(cs_mode, dclr & WIDTH_128);
1279 else
1280 return ddr2_cs_size(cs_mode, dclr & WIDTH_128);
1284 * F15h supports only 64bit DCT interfaces
1286 static int f15_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
1287 unsigned cs_mode, int cs_mask_nr)
1289 WARN_ON(cs_mode > 12);
1291 return ddr3_cs_size(cs_mode, false);
1294 /* F15h M60h supports DDR4 mapping as well.. */
1295 static int f15_m60h_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
1296 unsigned cs_mode, int cs_mask_nr)
1298 int cs_size;
1299 u32 dcsm = pvt->csels[dct].csmasks[cs_mask_nr];
1301 WARN_ON(cs_mode > 12);
1303 if (pvt->dram_type == MEM_DDR4) {
1304 if (cs_mode > 9)
1305 return -1;
1307 cs_size = ddr4_cs_size(cs_mode);
1308 } else if (pvt->dram_type == MEM_LRDDR3) {
1309 unsigned rank_multiply = dcsm & 0xf;
1311 if (rank_multiply == 3)
1312 rank_multiply = 4;
1313 cs_size = ddr3_lrdimm_cs_size(cs_mode, rank_multiply);
1314 } else {
1315 /* Minimum cs size is 512mb for F15hM60h*/
1316 if (cs_mode == 0x1)
1317 return -1;
1319 cs_size = ddr3_cs_size(cs_mode, false);
1322 return cs_size;
1326 * F16h and F15h model 30h have only limited cs_modes.
1328 static int f16_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
1329 unsigned cs_mode, int cs_mask_nr)
1331 WARN_ON(cs_mode > 12);
1333 if (cs_mode == 6 || cs_mode == 8 ||
1334 cs_mode == 9 || cs_mode == 12)
1335 return -1;
1336 else
1337 return ddr3_cs_size(cs_mode, false);
1340 static void read_dram_ctl_register(struct amd64_pvt *pvt)
1343 if (pvt->fam == 0xf)
1344 return;
1346 if (!amd64_read_pci_cfg(pvt->F2, DCT_SEL_LO, &pvt->dct_sel_lo)) {
1347 edac_dbg(0, "F2x110 (DCTSelLow): 0x%08x, High range addrs at: 0x%x\n",
1348 pvt->dct_sel_lo, dct_sel_baseaddr(pvt));
1350 edac_dbg(0, " DCTs operate in %s mode\n",
1351 (dct_ganging_enabled(pvt) ? "ganged" : "unganged"));
1353 if (!dct_ganging_enabled(pvt))
1354 edac_dbg(0, " Address range split per DCT: %s\n",
1355 (dct_high_range_enabled(pvt) ? "yes" : "no"));
1357 edac_dbg(0, " data interleave for ECC: %s, DRAM cleared since last warm reset: %s\n",
1358 (dct_data_intlv_enabled(pvt) ? "enabled" : "disabled"),
1359 (dct_memory_cleared(pvt) ? "yes" : "no"));
1361 edac_dbg(0, " channel interleave: %s, "
1362 "interleave bits selector: 0x%x\n",
1363 (dct_interleave_enabled(pvt) ? "enabled" : "disabled"),
1364 dct_sel_interleave_addr(pvt));
1367 amd64_read_pci_cfg(pvt->F2, DCT_SEL_HI, &pvt->dct_sel_hi);
1371 * Determine channel (DCT) based on the interleaving mode (see F15h M30h BKDG,
1372 * 2.10.12 Memory Interleaving Modes).
1374 static u8 f15_m30h_determine_channel(struct amd64_pvt *pvt, u64 sys_addr,
1375 u8 intlv_en, int num_dcts_intlv,
1376 u32 dct_sel)
1378 u8 channel = 0;
1379 u8 select;
1381 if (!(intlv_en))
1382 return (u8)(dct_sel);
1384 if (num_dcts_intlv == 2) {
1385 select = (sys_addr >> 8) & 0x3;
1386 channel = select ? 0x3 : 0;
1387 } else if (num_dcts_intlv == 4) {
1388 u8 intlv_addr = dct_sel_interleave_addr(pvt);
1389 switch (intlv_addr) {
1390 case 0x4:
1391 channel = (sys_addr >> 8) & 0x3;
1392 break;
1393 case 0x5:
1394 channel = (sys_addr >> 9) & 0x3;
1395 break;
1398 return channel;
1402 * Determine channel (DCT) based on the interleaving mode: F10h BKDG, 2.8.9 Memory
1403 * Interleaving Modes.
1405 static u8 f1x_determine_channel(struct amd64_pvt *pvt, u64 sys_addr,
1406 bool hi_range_sel, u8 intlv_en)
1408 u8 dct_sel_high = (pvt->dct_sel_lo >> 1) & 1;
1410 if (dct_ganging_enabled(pvt))
1411 return 0;
1413 if (hi_range_sel)
1414 return dct_sel_high;
1417 * see F2x110[DctSelIntLvAddr] - channel interleave mode
1419 if (dct_interleave_enabled(pvt)) {
1420 u8 intlv_addr = dct_sel_interleave_addr(pvt);
1422 /* return DCT select function: 0=DCT0, 1=DCT1 */
1423 if (!intlv_addr)
1424 return sys_addr >> 6 & 1;
1426 if (intlv_addr & 0x2) {
1427 u8 shift = intlv_addr & 0x1 ? 9 : 6;
1428 u32 temp = hweight_long((u32) ((sys_addr >> 16) & 0x1F)) % 2;
1430 return ((sys_addr >> shift) & 1) ^ temp;
1433 return (sys_addr >> (12 + hweight8(intlv_en))) & 1;
1436 if (dct_high_range_enabled(pvt))
1437 return ~dct_sel_high & 1;
1439 return 0;
1442 /* Convert the sys_addr to the normalized DCT address */
1443 static u64 f1x_get_norm_dct_addr(struct amd64_pvt *pvt, u8 range,
1444 u64 sys_addr, bool hi_rng,
1445 u32 dct_sel_base_addr)
1447 u64 chan_off;
1448 u64 dram_base = get_dram_base(pvt, range);
1449 u64 hole_off = f10_dhar_offset(pvt);
1450 u64 dct_sel_base_off = (u64)(pvt->dct_sel_hi & 0xFFFFFC00) << 16;
1452 if (hi_rng) {
1454 * if
1455 * base address of high range is below 4Gb
1456 * (bits [47:27] at [31:11])
1457 * DRAM address space on this DCT is hoisted above 4Gb &&
1458 * sys_addr > 4Gb
1460 * remove hole offset from sys_addr
1461 * else
1462 * remove high range offset from sys_addr
1464 if ((!(dct_sel_base_addr >> 16) ||
1465 dct_sel_base_addr < dhar_base(pvt)) &&
1466 dhar_valid(pvt) &&
1467 (sys_addr >= BIT_64(32)))
1468 chan_off = hole_off;
1469 else
1470 chan_off = dct_sel_base_off;
1471 } else {
1473 * if
1474 * we have a valid hole &&
1475 * sys_addr > 4Gb
1477 * remove hole
1478 * else
1479 * remove dram base to normalize to DCT address
1481 if (dhar_valid(pvt) && (sys_addr >= BIT_64(32)))
1482 chan_off = hole_off;
1483 else
1484 chan_off = dram_base;
1487 return (sys_addr & GENMASK_ULL(47,6)) - (chan_off & GENMASK_ULL(47,23));
1491 * checks if the csrow passed in is marked as SPARED, if so returns the new
1492 * spare row
1494 static int f10_process_possible_spare(struct amd64_pvt *pvt, u8 dct, int csrow)
1496 int tmp_cs;
1498 if (online_spare_swap_done(pvt, dct) &&
1499 csrow == online_spare_bad_dramcs(pvt, dct)) {
1501 for_each_chip_select(tmp_cs, dct, pvt) {
1502 if (chip_select_base(tmp_cs, dct, pvt) & 0x2) {
1503 csrow = tmp_cs;
1504 break;
1508 return csrow;
1512 * Iterate over the DRAM DCT "base" and "mask" registers looking for a
1513 * SystemAddr match on the specified 'ChannelSelect' and 'NodeID'
1515 * Return:
1516 * -EINVAL: NOT FOUND
1517 * 0..csrow = Chip-Select Row
1519 static int f1x_lookup_addr_in_dct(u64 in_addr, u8 nid, u8 dct)
1521 struct mem_ctl_info *mci;
1522 struct amd64_pvt *pvt;
1523 u64 cs_base, cs_mask;
1524 int cs_found = -EINVAL;
1525 int csrow;
1527 mci = edac_mc_find(nid);
1528 if (!mci)
1529 return cs_found;
1531 pvt = mci->pvt_info;
1533 edac_dbg(1, "input addr: 0x%llx, DCT: %d\n", in_addr, dct);
1535 for_each_chip_select(csrow, dct, pvt) {
1536 if (!csrow_enabled(csrow, dct, pvt))
1537 continue;
1539 get_cs_base_and_mask(pvt, csrow, dct, &cs_base, &cs_mask);
1541 edac_dbg(1, " CSROW=%d CSBase=0x%llx CSMask=0x%llx\n",
1542 csrow, cs_base, cs_mask);
1544 cs_mask = ~cs_mask;
1546 edac_dbg(1, " (InputAddr & ~CSMask)=0x%llx (CSBase & ~CSMask)=0x%llx\n",
1547 (in_addr & cs_mask), (cs_base & cs_mask));
1549 if ((in_addr & cs_mask) == (cs_base & cs_mask)) {
1550 if (pvt->fam == 0x15 && pvt->model >= 0x30) {
1551 cs_found = csrow;
1552 break;
1554 cs_found = f10_process_possible_spare(pvt, dct, csrow);
1556 edac_dbg(1, " MATCH csrow=%d\n", cs_found);
1557 break;
1560 return cs_found;
1564 * See F2x10C. Non-interleaved graphics framebuffer memory under the 16G is
1565 * swapped with a region located at the bottom of memory so that the GPU can use
1566 * the interleaved region and thus two channels.
1568 static u64 f1x_swap_interleaved_region(struct amd64_pvt *pvt, u64 sys_addr)
1570 u32 swap_reg, swap_base, swap_limit, rgn_size, tmp_addr;
1572 if (pvt->fam == 0x10) {
1573 /* only revC3 and revE have that feature */
1574 if (pvt->model < 4 || (pvt->model < 0xa && pvt->stepping < 3))
1575 return sys_addr;
1578 amd64_read_pci_cfg(pvt->F2, SWAP_INTLV_REG, &swap_reg);
1580 if (!(swap_reg & 0x1))
1581 return sys_addr;
1583 swap_base = (swap_reg >> 3) & 0x7f;
1584 swap_limit = (swap_reg >> 11) & 0x7f;
1585 rgn_size = (swap_reg >> 20) & 0x7f;
1586 tmp_addr = sys_addr >> 27;
1588 if (!(sys_addr >> 34) &&
1589 (((tmp_addr >= swap_base) &&
1590 (tmp_addr <= swap_limit)) ||
1591 (tmp_addr < rgn_size)))
1592 return sys_addr ^ (u64)swap_base << 27;
1594 return sys_addr;
1597 /* For a given @dram_range, check if @sys_addr falls within it. */
1598 static int f1x_match_to_this_node(struct amd64_pvt *pvt, unsigned range,
1599 u64 sys_addr, int *chan_sel)
1601 int cs_found = -EINVAL;
1602 u64 chan_addr;
1603 u32 dct_sel_base;
1604 u8 channel;
1605 bool high_range = false;
1607 u8 node_id = dram_dst_node(pvt, range);
1608 u8 intlv_en = dram_intlv_en(pvt, range);
1609 u32 intlv_sel = dram_intlv_sel(pvt, range);
1611 edac_dbg(1, "(range %d) SystemAddr= 0x%llx Limit=0x%llx\n",
1612 range, sys_addr, get_dram_limit(pvt, range));
1614 if (dhar_valid(pvt) &&
1615 dhar_base(pvt) <= sys_addr &&
1616 sys_addr < BIT_64(32)) {
1617 amd64_warn("Huh? Address is in the MMIO hole: 0x%016llx\n",
1618 sys_addr);
1619 return -EINVAL;
1622 if (intlv_en && (intlv_sel != ((sys_addr >> 12) & intlv_en)))
1623 return -EINVAL;
1625 sys_addr = f1x_swap_interleaved_region(pvt, sys_addr);
1627 dct_sel_base = dct_sel_baseaddr(pvt);
1630 * check whether addresses >= DctSelBaseAddr[47:27] are to be used to
1631 * select between DCT0 and DCT1.
1633 if (dct_high_range_enabled(pvt) &&
1634 !dct_ganging_enabled(pvt) &&
1635 ((sys_addr >> 27) >= (dct_sel_base >> 11)))
1636 high_range = true;
1638 channel = f1x_determine_channel(pvt, sys_addr, high_range, intlv_en);
1640 chan_addr = f1x_get_norm_dct_addr(pvt, range, sys_addr,
1641 high_range, dct_sel_base);
1643 /* Remove node interleaving, see F1x120 */
1644 if (intlv_en)
1645 chan_addr = ((chan_addr >> (12 + hweight8(intlv_en))) << 12) |
1646 (chan_addr & 0xfff);
1648 /* remove channel interleave */
1649 if (dct_interleave_enabled(pvt) &&
1650 !dct_high_range_enabled(pvt) &&
1651 !dct_ganging_enabled(pvt)) {
1653 if (dct_sel_interleave_addr(pvt) != 1) {
1654 if (dct_sel_interleave_addr(pvt) == 0x3)
1655 /* hash 9 */
1656 chan_addr = ((chan_addr >> 10) << 9) |
1657 (chan_addr & 0x1ff);
1658 else
1659 /* A[6] or hash 6 */
1660 chan_addr = ((chan_addr >> 7) << 6) |
1661 (chan_addr & 0x3f);
1662 } else
1663 /* A[12] */
1664 chan_addr = ((chan_addr >> 13) << 12) |
1665 (chan_addr & 0xfff);
1668 edac_dbg(1, " Normalized DCT addr: 0x%llx\n", chan_addr);
1670 cs_found = f1x_lookup_addr_in_dct(chan_addr, node_id, channel);
1672 if (cs_found >= 0)
1673 *chan_sel = channel;
1675 return cs_found;
1678 static int f15_m30h_match_to_this_node(struct amd64_pvt *pvt, unsigned range,
1679 u64 sys_addr, int *chan_sel)
1681 int cs_found = -EINVAL;
1682 int num_dcts_intlv = 0;
1683 u64 chan_addr, chan_offset;
1684 u64 dct_base, dct_limit;
1685 u32 dct_cont_base_reg, dct_cont_limit_reg, tmp;
1686 u8 channel, alias_channel, leg_mmio_hole, dct_sel, dct_offset_en;
1688 u64 dhar_offset = f10_dhar_offset(pvt);
1689 u8 intlv_addr = dct_sel_interleave_addr(pvt);
1690 u8 node_id = dram_dst_node(pvt, range);
1691 u8 intlv_en = dram_intlv_en(pvt, range);
1693 amd64_read_pci_cfg(pvt->F1, DRAM_CONT_BASE, &dct_cont_base_reg);
1694 amd64_read_pci_cfg(pvt->F1, DRAM_CONT_LIMIT, &dct_cont_limit_reg);
1696 dct_offset_en = (u8) ((dct_cont_base_reg >> 3) & BIT(0));
1697 dct_sel = (u8) ((dct_cont_base_reg >> 4) & 0x7);
1699 edac_dbg(1, "(range %d) SystemAddr= 0x%llx Limit=0x%llx\n",
1700 range, sys_addr, get_dram_limit(pvt, range));
1702 if (!(get_dram_base(pvt, range) <= sys_addr) &&
1703 !(get_dram_limit(pvt, range) >= sys_addr))
1704 return -EINVAL;
1706 if (dhar_valid(pvt) &&
1707 dhar_base(pvt) <= sys_addr &&
1708 sys_addr < BIT_64(32)) {
1709 amd64_warn("Huh? Address is in the MMIO hole: 0x%016llx\n",
1710 sys_addr);
1711 return -EINVAL;
1714 /* Verify sys_addr is within DCT Range. */
1715 dct_base = (u64) dct_sel_baseaddr(pvt);
1716 dct_limit = (dct_cont_limit_reg >> 11) & 0x1FFF;
1718 if (!(dct_cont_base_reg & BIT(0)) &&
1719 !(dct_base <= (sys_addr >> 27) &&
1720 dct_limit >= (sys_addr >> 27)))
1721 return -EINVAL;
1723 /* Verify number of dct's that participate in channel interleaving. */
1724 num_dcts_intlv = (int) hweight8(intlv_en);
1726 if (!(num_dcts_intlv % 2 == 0) || (num_dcts_intlv > 4))
1727 return -EINVAL;
1729 channel = f15_m30h_determine_channel(pvt, sys_addr, intlv_en,
1730 num_dcts_intlv, dct_sel);
1732 /* Verify we stay within the MAX number of channels allowed */
1733 if (channel > 3)
1734 return -EINVAL;
1736 leg_mmio_hole = (u8) (dct_cont_base_reg >> 1 & BIT(0));
1738 /* Get normalized DCT addr */
1739 if (leg_mmio_hole && (sys_addr >= BIT_64(32)))
1740 chan_offset = dhar_offset;
1741 else
1742 chan_offset = dct_base << 27;
1744 chan_addr = sys_addr - chan_offset;
1746 /* remove channel interleave */
1747 if (num_dcts_intlv == 2) {
1748 if (intlv_addr == 0x4)
1749 chan_addr = ((chan_addr >> 9) << 8) |
1750 (chan_addr & 0xff);
1751 else if (intlv_addr == 0x5)
1752 chan_addr = ((chan_addr >> 10) << 9) |
1753 (chan_addr & 0x1ff);
1754 else
1755 return -EINVAL;
1757 } else if (num_dcts_intlv == 4) {
1758 if (intlv_addr == 0x4)
1759 chan_addr = ((chan_addr >> 10) << 8) |
1760 (chan_addr & 0xff);
1761 else if (intlv_addr == 0x5)
1762 chan_addr = ((chan_addr >> 11) << 9) |
1763 (chan_addr & 0x1ff);
1764 else
1765 return -EINVAL;
1768 if (dct_offset_en) {
1769 amd64_read_pci_cfg(pvt->F1,
1770 DRAM_CONT_HIGH_OFF + (int) channel * 4,
1771 &tmp);
1772 chan_addr += (u64) ((tmp >> 11) & 0xfff) << 27;
1775 f15h_select_dct(pvt, channel);
1777 edac_dbg(1, " Normalized DCT addr: 0x%llx\n", chan_addr);
1780 * Find Chip select:
1781 * if channel = 3, then alias it to 1. This is because, in F15 M30h,
1782 * there is support for 4 DCT's, but only 2 are currently functional.
1783 * They are DCT0 and DCT3. But we have read all registers of DCT3 into
1784 * pvt->csels[1]. So we need to use '1' here to get correct info.
1785 * Refer F15 M30h BKDG Section 2.10 and 2.10.3 for clarifications.
1787 alias_channel = (channel == 3) ? 1 : channel;
1789 cs_found = f1x_lookup_addr_in_dct(chan_addr, node_id, alias_channel);
1791 if (cs_found >= 0)
1792 *chan_sel = alias_channel;
1794 return cs_found;
1797 static int f1x_translate_sysaddr_to_cs(struct amd64_pvt *pvt,
1798 u64 sys_addr,
1799 int *chan_sel)
1801 int cs_found = -EINVAL;
1802 unsigned range;
1804 for (range = 0; range < DRAM_RANGES; range++) {
1805 if (!dram_rw(pvt, range))
1806 continue;
1808 if (pvt->fam == 0x15 && pvt->model >= 0x30)
1809 cs_found = f15_m30h_match_to_this_node(pvt, range,
1810 sys_addr,
1811 chan_sel);
1813 else if ((get_dram_base(pvt, range) <= sys_addr) &&
1814 (get_dram_limit(pvt, range) >= sys_addr)) {
1815 cs_found = f1x_match_to_this_node(pvt, range,
1816 sys_addr, chan_sel);
1817 if (cs_found >= 0)
1818 break;
1821 return cs_found;
1825 * For reference see "2.8.5 Routing DRAM Requests" in F10 BKDG. This code maps
1826 * a @sys_addr to NodeID, DCT (channel) and chip select (CSROW).
1828 * The @sys_addr is usually an error address received from the hardware
1829 * (MCX_ADDR).
1831 static void f1x_map_sysaddr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr,
1832 struct err_info *err)
1834 struct amd64_pvt *pvt = mci->pvt_info;
1836 error_address_to_page_and_offset(sys_addr, err);
1838 err->csrow = f1x_translate_sysaddr_to_cs(pvt, sys_addr, &err->channel);
1839 if (err->csrow < 0) {
1840 err->err_code = ERR_CSROW;
1841 return;
1845 * We need the syndromes for channel detection only when we're
1846 * ganged. Otherwise @chan should already contain the channel at
1847 * this point.
1849 if (dct_ganging_enabled(pvt))
1850 err->channel = get_channel_from_ecc_syndrome(mci, err->syndrome);
1854 * debug routine to display the memory sizes of all logical DIMMs and its
1855 * CSROWs
1857 static void debug_display_dimm_sizes(struct amd64_pvt *pvt, u8 ctrl)
1859 int dimm, size0, size1;
1860 u32 *dcsb = ctrl ? pvt->csels[1].csbases : pvt->csels[0].csbases;
1861 u32 dbam = ctrl ? pvt->dbam1 : pvt->dbam0;
1863 if (pvt->fam == 0xf) {
1864 /* K8 families < revF not supported yet */
1865 if (pvt->ext_model < K8_REV_F)
1866 return;
1867 else
1868 WARN_ON(ctrl != 0);
1871 if (pvt->fam == 0x10) {
1872 dbam = (ctrl && !dct_ganging_enabled(pvt)) ? pvt->dbam1
1873 : pvt->dbam0;
1874 dcsb = (ctrl && !dct_ganging_enabled(pvt)) ?
1875 pvt->csels[1].csbases :
1876 pvt->csels[0].csbases;
1877 } else if (ctrl) {
1878 dbam = pvt->dbam0;
1879 dcsb = pvt->csels[1].csbases;
1881 edac_dbg(1, "F2x%d80 (DRAM Bank Address Mapping): 0x%08x\n",
1882 ctrl, dbam);
1884 edac_printk(KERN_DEBUG, EDAC_MC, "DCT%d chip selects:\n", ctrl);
1886 /* Dump memory sizes for DIMM and its CSROWs */
1887 for (dimm = 0; dimm < 4; dimm++) {
1889 size0 = 0;
1890 if (dcsb[dimm*2] & DCSB_CS_ENABLE)
1891 /* For f15m60h, need multiplier for LRDIMM cs_size
1892 * calculation. We pass 'dimm' value to the dbam_to_cs
1893 * mapper so we can find the multiplier from the
1894 * corresponding DCSM.
1896 size0 = pvt->ops->dbam_to_cs(pvt, ctrl,
1897 DBAM_DIMM(dimm, dbam),
1898 dimm);
1900 size1 = 0;
1901 if (dcsb[dimm*2 + 1] & DCSB_CS_ENABLE)
1902 size1 = pvt->ops->dbam_to_cs(pvt, ctrl,
1903 DBAM_DIMM(dimm, dbam),
1904 dimm);
1906 amd64_info(EDAC_MC ": %d: %5dMB %d: %5dMB\n",
1907 dimm * 2, size0,
1908 dimm * 2 + 1, size1);
1912 static struct amd64_family_type family_types[] = {
1913 [K8_CPUS] = {
1914 .ctl_name = "K8",
1915 .f1_id = PCI_DEVICE_ID_AMD_K8_NB_ADDRMAP,
1916 .f2_id = PCI_DEVICE_ID_AMD_K8_NB_MEMCTL,
1917 .ops = {
1918 .early_channel_count = k8_early_channel_count,
1919 .map_sysaddr_to_csrow = k8_map_sysaddr_to_csrow,
1920 .dbam_to_cs = k8_dbam_to_chip_select,
1923 [F10_CPUS] = {
1924 .ctl_name = "F10h",
1925 .f1_id = PCI_DEVICE_ID_AMD_10H_NB_MAP,
1926 .f2_id = PCI_DEVICE_ID_AMD_10H_NB_DRAM,
1927 .ops = {
1928 .early_channel_count = f1x_early_channel_count,
1929 .map_sysaddr_to_csrow = f1x_map_sysaddr_to_csrow,
1930 .dbam_to_cs = f10_dbam_to_chip_select,
1933 [F15_CPUS] = {
1934 .ctl_name = "F15h",
1935 .f1_id = PCI_DEVICE_ID_AMD_15H_NB_F1,
1936 .f2_id = PCI_DEVICE_ID_AMD_15H_NB_F2,
1937 .ops = {
1938 .early_channel_count = f1x_early_channel_count,
1939 .map_sysaddr_to_csrow = f1x_map_sysaddr_to_csrow,
1940 .dbam_to_cs = f15_dbam_to_chip_select,
1943 [F15_M30H_CPUS] = {
1944 .ctl_name = "F15h_M30h",
1945 .f1_id = PCI_DEVICE_ID_AMD_15H_M30H_NB_F1,
1946 .f2_id = PCI_DEVICE_ID_AMD_15H_M30H_NB_F2,
1947 .ops = {
1948 .early_channel_count = f1x_early_channel_count,
1949 .map_sysaddr_to_csrow = f1x_map_sysaddr_to_csrow,
1950 .dbam_to_cs = f16_dbam_to_chip_select,
1953 [F15_M60H_CPUS] = {
1954 .ctl_name = "F15h_M60h",
1955 .f1_id = PCI_DEVICE_ID_AMD_15H_M60H_NB_F1,
1956 .f2_id = PCI_DEVICE_ID_AMD_15H_M60H_NB_F2,
1957 .ops = {
1958 .early_channel_count = f1x_early_channel_count,
1959 .map_sysaddr_to_csrow = f1x_map_sysaddr_to_csrow,
1960 .dbam_to_cs = f15_m60h_dbam_to_chip_select,
1963 [F16_CPUS] = {
1964 .ctl_name = "F16h",
1965 .f1_id = PCI_DEVICE_ID_AMD_16H_NB_F1,
1966 .f2_id = PCI_DEVICE_ID_AMD_16H_NB_F2,
1967 .ops = {
1968 .early_channel_count = f1x_early_channel_count,
1969 .map_sysaddr_to_csrow = f1x_map_sysaddr_to_csrow,
1970 .dbam_to_cs = f16_dbam_to_chip_select,
1973 [F16_M30H_CPUS] = {
1974 .ctl_name = "F16h_M30h",
1975 .f1_id = PCI_DEVICE_ID_AMD_16H_M30H_NB_F1,
1976 .f2_id = PCI_DEVICE_ID_AMD_16H_M30H_NB_F2,
1977 .ops = {
1978 .early_channel_count = f1x_early_channel_count,
1979 .map_sysaddr_to_csrow = f1x_map_sysaddr_to_csrow,
1980 .dbam_to_cs = f16_dbam_to_chip_select,
1986 * These are tables of eigenvectors (one per line) which can be used for the
1987 * construction of the syndrome tables. The modified syndrome search algorithm
1988 * uses those to find the symbol in error and thus the DIMM.
1990 * Algorithm courtesy of Ross LaFetra from AMD.
1992 static const u16 x4_vectors[] = {
1993 0x2f57, 0x1afe, 0x66cc, 0xdd88,
1994 0x11eb, 0x3396, 0x7f4c, 0xeac8,
1995 0x0001, 0x0002, 0x0004, 0x0008,
1996 0x1013, 0x3032, 0x4044, 0x8088,
1997 0x106b, 0x30d6, 0x70fc, 0xe0a8,
1998 0x4857, 0xc4fe, 0x13cc, 0x3288,
1999 0x1ac5, 0x2f4a, 0x5394, 0xa1e8,
2000 0x1f39, 0x251e, 0xbd6c, 0x6bd8,
2001 0x15c1, 0x2a42, 0x89ac, 0x4758,
2002 0x2b03, 0x1602, 0x4f0c, 0xca08,
2003 0x1f07, 0x3a0e, 0x6b04, 0xbd08,
2004 0x8ba7, 0x465e, 0x244c, 0x1cc8,
2005 0x2b87, 0x164e, 0x642c, 0xdc18,
2006 0x40b9, 0x80de, 0x1094, 0x20e8,
2007 0x27db, 0x1eb6, 0x9dac, 0x7b58,
2008 0x11c1, 0x2242, 0x84ac, 0x4c58,
2009 0x1be5, 0x2d7a, 0x5e34, 0xa718,
2010 0x4b39, 0x8d1e, 0x14b4, 0x28d8,
2011 0x4c97, 0xc87e, 0x11fc, 0x33a8,
2012 0x8e97, 0x497e, 0x2ffc, 0x1aa8,
2013 0x16b3, 0x3d62, 0x4f34, 0x8518,
2014 0x1e2f, 0x391a, 0x5cac, 0xf858,
2015 0x1d9f, 0x3b7a, 0x572c, 0xfe18,
2016 0x15f5, 0x2a5a, 0x5264, 0xa3b8,
2017 0x1dbb, 0x3b66, 0x715c, 0xe3f8,
2018 0x4397, 0xc27e, 0x17fc, 0x3ea8,
2019 0x1617, 0x3d3e, 0x6464, 0xb8b8,
2020 0x23ff, 0x12aa, 0xab6c, 0x56d8,
2021 0x2dfb, 0x1ba6, 0x913c, 0x7328,
2022 0x185d, 0x2ca6, 0x7914, 0x9e28,
2023 0x171b, 0x3e36, 0x7d7c, 0xebe8,
2024 0x4199, 0x82ee, 0x19f4, 0x2e58,
2025 0x4807, 0xc40e, 0x130c, 0x3208,
2026 0x1905, 0x2e0a, 0x5804, 0xac08,
2027 0x213f, 0x132a, 0xadfc, 0x5ba8,
2028 0x19a9, 0x2efe, 0xb5cc, 0x6f88,
2031 static const u16 x8_vectors[] = {
2032 0x0145, 0x028a, 0x2374, 0x43c8, 0xa1f0, 0x0520, 0x0a40, 0x1480,
2033 0x0211, 0x0422, 0x0844, 0x1088, 0x01b0, 0x44e0, 0x23c0, 0xed80,
2034 0x1011, 0x0116, 0x022c, 0x0458, 0x08b0, 0x8c60, 0x2740, 0x4e80,
2035 0x0411, 0x0822, 0x1044, 0x0158, 0x02b0, 0x2360, 0x46c0, 0xab80,
2036 0x0811, 0x1022, 0x012c, 0x0258, 0x04b0, 0x4660, 0x8cc0, 0x2780,
2037 0x2071, 0x40e2, 0xa0c4, 0x0108, 0x0210, 0x0420, 0x0840, 0x1080,
2038 0x4071, 0x80e2, 0x0104, 0x0208, 0x0410, 0x0820, 0x1040, 0x2080,
2039 0x8071, 0x0102, 0x0204, 0x0408, 0x0810, 0x1020, 0x2040, 0x4080,
2040 0x019d, 0x03d6, 0x136c, 0x2198, 0x50b0, 0xb2e0, 0x0740, 0x0e80,
2041 0x0189, 0x03ea, 0x072c, 0x0e58, 0x1cb0, 0x56e0, 0x37c0, 0xf580,
2042 0x01fd, 0x0376, 0x06ec, 0x0bb8, 0x1110, 0x2220, 0x4440, 0x8880,
2043 0x0163, 0x02c6, 0x1104, 0x0758, 0x0eb0, 0x2be0, 0x6140, 0xc280,
2044 0x02fd, 0x01c6, 0x0b5c, 0x1108, 0x07b0, 0x25a0, 0x8840, 0x6180,
2045 0x0801, 0x012e, 0x025c, 0x04b8, 0x1370, 0x26e0, 0x57c0, 0xb580,
2046 0x0401, 0x0802, 0x015c, 0x02b8, 0x22b0, 0x13e0, 0x7140, 0xe280,
2047 0x0201, 0x0402, 0x0804, 0x01b8, 0x11b0, 0x31a0, 0x8040, 0x7180,
2048 0x0101, 0x0202, 0x0404, 0x0808, 0x1010, 0x2020, 0x4040, 0x8080,
2049 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
2050 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000,
2053 static int decode_syndrome(u16 syndrome, const u16 *vectors, unsigned num_vecs,
2054 unsigned v_dim)
2056 unsigned int i, err_sym;
2058 for (err_sym = 0; err_sym < num_vecs / v_dim; err_sym++) {
2059 u16 s = syndrome;
2060 unsigned v_idx = err_sym * v_dim;
2061 unsigned v_end = (err_sym + 1) * v_dim;
2063 /* walk over all 16 bits of the syndrome */
2064 for (i = 1; i < (1U << 16); i <<= 1) {
2066 /* if bit is set in that eigenvector... */
2067 if (v_idx < v_end && vectors[v_idx] & i) {
2068 u16 ev_comp = vectors[v_idx++];
2070 /* ... and bit set in the modified syndrome, */
2071 if (s & i) {
2072 /* remove it. */
2073 s ^= ev_comp;
2075 if (!s)
2076 return err_sym;
2079 } else if (s & i)
2080 /* can't get to zero, move to next symbol */
2081 break;
2085 edac_dbg(0, "syndrome(%x) not found\n", syndrome);
2086 return -1;
2089 static int map_err_sym_to_channel(int err_sym, int sym_size)
2091 if (sym_size == 4)
2092 switch (err_sym) {
2093 case 0x20:
2094 case 0x21:
2095 return 0;
2096 break;
2097 case 0x22:
2098 case 0x23:
2099 return 1;
2100 break;
2101 default:
2102 return err_sym >> 4;
2103 break;
2105 /* x8 symbols */
2106 else
2107 switch (err_sym) {
2108 /* imaginary bits not in a DIMM */
2109 case 0x10:
2110 WARN(1, KERN_ERR "Invalid error symbol: 0x%x\n",
2111 err_sym);
2112 return -1;
2113 break;
2115 case 0x11:
2116 return 0;
2117 break;
2118 case 0x12:
2119 return 1;
2120 break;
2121 default:
2122 return err_sym >> 3;
2123 break;
2125 return -1;
2128 static int get_channel_from_ecc_syndrome(struct mem_ctl_info *mci, u16 syndrome)
2130 struct amd64_pvt *pvt = mci->pvt_info;
2131 int err_sym = -1;
2133 if (pvt->ecc_sym_sz == 8)
2134 err_sym = decode_syndrome(syndrome, x8_vectors,
2135 ARRAY_SIZE(x8_vectors),
2136 pvt->ecc_sym_sz);
2137 else if (pvt->ecc_sym_sz == 4)
2138 err_sym = decode_syndrome(syndrome, x4_vectors,
2139 ARRAY_SIZE(x4_vectors),
2140 pvt->ecc_sym_sz);
2141 else {
2142 amd64_warn("Illegal syndrome type: %u\n", pvt->ecc_sym_sz);
2143 return err_sym;
2146 return map_err_sym_to_channel(err_sym, pvt->ecc_sym_sz);
2149 static void __log_bus_error(struct mem_ctl_info *mci, struct err_info *err,
2150 u8 ecc_type)
2152 enum hw_event_mc_err_type err_type;
2153 const char *string;
2155 if (ecc_type == 2)
2156 err_type = HW_EVENT_ERR_CORRECTED;
2157 else if (ecc_type == 1)
2158 err_type = HW_EVENT_ERR_UNCORRECTED;
2159 else {
2160 WARN(1, "Something is rotten in the state of Denmark.\n");
2161 return;
2164 switch (err->err_code) {
2165 case DECODE_OK:
2166 string = "";
2167 break;
2168 case ERR_NODE:
2169 string = "Failed to map error addr to a node";
2170 break;
2171 case ERR_CSROW:
2172 string = "Failed to map error addr to a csrow";
2173 break;
2174 case ERR_CHANNEL:
2175 string = "unknown syndrome - possible error reporting race";
2176 break;
2177 default:
2178 string = "WTF error";
2179 break;
2182 edac_mc_handle_error(err_type, mci, 1,
2183 err->page, err->offset, err->syndrome,
2184 err->csrow, err->channel, -1,
2185 string, "");
2188 static inline void decode_bus_error(int node_id, struct mce *m)
2190 struct mem_ctl_info *mci;
2191 struct amd64_pvt *pvt;
2192 u8 ecc_type = (m->status >> 45) & 0x3;
2193 u8 xec = XEC(m->status, 0x1f);
2194 u16 ec = EC(m->status);
2195 u64 sys_addr;
2196 struct err_info err;
2198 mci = edac_mc_find(node_id);
2199 if (!mci)
2200 return;
2202 pvt = mci->pvt_info;
2204 /* Bail out early if this was an 'observed' error */
2205 if (PP(ec) == NBSL_PP_OBS)
2206 return;
2208 /* Do only ECC errors */
2209 if (xec && xec != F10_NBSL_EXT_ERR_ECC)
2210 return;
2212 memset(&err, 0, sizeof(err));
2214 sys_addr = get_error_address(pvt, m);
2216 if (ecc_type == 2)
2217 err.syndrome = extract_syndrome(m->status);
2219 pvt->ops->map_sysaddr_to_csrow(mci, sys_addr, &err);
2221 __log_bus_error(mci, &err, ecc_type);
2225 * Use pvt->F3 which contains the F3 CPU PCI device to get the related
2226 * F1 (AddrMap) and F2 (Dct) devices. Return negative value on error.
2228 static int reserve_mc_sibling_devs(struct amd64_pvt *pvt, u16 f1_id, u16 f2_id)
2230 /* Reserve the ADDRESS MAP Device */
2231 pvt->F1 = pci_get_related_function(pvt->F3->vendor, f1_id, pvt->F3);
2232 if (!pvt->F1) {
2233 amd64_err("error address map device not found: "
2234 "vendor %x device 0x%x (broken BIOS?)\n",
2235 PCI_VENDOR_ID_AMD, f1_id);
2236 return -ENODEV;
2239 /* Reserve the DCT Device */
2240 pvt->F2 = pci_get_related_function(pvt->F3->vendor, f2_id, pvt->F3);
2241 if (!pvt->F2) {
2242 pci_dev_put(pvt->F1);
2243 pvt->F1 = NULL;
2245 amd64_err("error F2 device not found: "
2246 "vendor %x device 0x%x (broken BIOS?)\n",
2247 PCI_VENDOR_ID_AMD, f2_id);
2249 return -ENODEV;
2251 edac_dbg(1, "F1: %s\n", pci_name(pvt->F1));
2252 edac_dbg(1, "F2: %s\n", pci_name(pvt->F2));
2253 edac_dbg(1, "F3: %s\n", pci_name(pvt->F3));
2255 return 0;
2258 static void free_mc_sibling_devs(struct amd64_pvt *pvt)
2260 pci_dev_put(pvt->F1);
2261 pci_dev_put(pvt->F2);
2265 * Retrieve the hardware registers of the memory controller (this includes the
2266 * 'Address Map' and 'Misc' device regs)
2268 static void read_mc_regs(struct amd64_pvt *pvt)
2270 unsigned range;
2271 u64 msr_val;
2272 u32 tmp;
2275 * Retrieve TOP_MEM and TOP_MEM2; no masking off of reserved bits since
2276 * those are Read-As-Zero
2278 rdmsrl(MSR_K8_TOP_MEM1, pvt->top_mem);
2279 edac_dbg(0, " TOP_MEM: 0x%016llx\n", pvt->top_mem);
2281 /* check first whether TOP_MEM2 is enabled */
2282 rdmsrl(MSR_K8_SYSCFG, msr_val);
2283 if (msr_val & (1U << 21)) {
2284 rdmsrl(MSR_K8_TOP_MEM2, pvt->top_mem2);
2285 edac_dbg(0, " TOP_MEM2: 0x%016llx\n", pvt->top_mem2);
2286 } else
2287 edac_dbg(0, " TOP_MEM2 disabled\n");
2289 amd64_read_pci_cfg(pvt->F3, NBCAP, &pvt->nbcap);
2291 read_dram_ctl_register(pvt);
2293 for (range = 0; range < DRAM_RANGES; range++) {
2294 u8 rw;
2296 /* read settings for this DRAM range */
2297 read_dram_base_limit_regs(pvt, range);
2299 rw = dram_rw(pvt, range);
2300 if (!rw)
2301 continue;
2303 edac_dbg(1, " DRAM range[%d], base: 0x%016llx; limit: 0x%016llx\n",
2304 range,
2305 get_dram_base(pvt, range),
2306 get_dram_limit(pvt, range));
2308 edac_dbg(1, " IntlvEn=%s; Range access: %s%s IntlvSel=%d DstNode=%d\n",
2309 dram_intlv_en(pvt, range) ? "Enabled" : "Disabled",
2310 (rw & 0x1) ? "R" : "-",
2311 (rw & 0x2) ? "W" : "-",
2312 dram_intlv_sel(pvt, range),
2313 dram_dst_node(pvt, range));
2316 read_dct_base_mask(pvt);
2318 amd64_read_pci_cfg(pvt->F1, DHAR, &pvt->dhar);
2319 amd64_read_dct_pci_cfg(pvt, 0, DBAM0, &pvt->dbam0);
2321 amd64_read_pci_cfg(pvt->F3, F10_ONLINE_SPARE, &pvt->online_spare);
2323 amd64_read_dct_pci_cfg(pvt, 0, DCLR0, &pvt->dclr0);
2324 amd64_read_dct_pci_cfg(pvt, 0, DCHR0, &pvt->dchr0);
2326 if (!dct_ganging_enabled(pvt)) {
2327 amd64_read_dct_pci_cfg(pvt, 1, DCLR0, &pvt->dclr1);
2328 amd64_read_dct_pci_cfg(pvt, 1, DCHR0, &pvt->dchr1);
2331 pvt->ecc_sym_sz = 4;
2332 determine_memory_type(pvt);
2333 edac_dbg(1, " DIMM type: %s\n", edac_mem_types[pvt->dram_type]);
2335 if (pvt->fam >= 0x10) {
2336 amd64_read_pci_cfg(pvt->F3, EXT_NB_MCA_CFG, &tmp);
2337 /* F16h has only DCT0, so no need to read dbam1 */
2338 if (pvt->fam != 0x16)
2339 amd64_read_dct_pci_cfg(pvt, 1, DBAM0, &pvt->dbam1);
2341 /* F10h, revD and later can do x8 ECC too */
2342 if ((pvt->fam > 0x10 || pvt->model > 7) && tmp & BIT(25))
2343 pvt->ecc_sym_sz = 8;
2345 dump_misc_regs(pvt);
2349 * NOTE: CPU Revision Dependent code
2351 * Input:
2352 * @csrow_nr ChipSelect Row Number (0..NUM_CHIPSELECTS-1)
2353 * k8 private pointer to -->
2354 * DRAM Bank Address mapping register
2355 * node_id
2356 * DCL register where dual_channel_active is
2358 * The DBAM register consists of 4 sets of 4 bits each definitions:
2360 * Bits: CSROWs
2361 * 0-3 CSROWs 0 and 1
2362 * 4-7 CSROWs 2 and 3
2363 * 8-11 CSROWs 4 and 5
2364 * 12-15 CSROWs 6 and 7
2366 * Values range from: 0 to 15
2367 * The meaning of the values depends on CPU revision and dual-channel state,
2368 * see relevant BKDG more info.
2370 * The memory controller provides for total of only 8 CSROWs in its current
2371 * architecture. Each "pair" of CSROWs normally represents just one DIMM in
2372 * single channel or two (2) DIMMs in dual channel mode.
2374 * The following code logic collapses the various tables for CSROW based on CPU
2375 * revision.
2377 * Returns:
2378 * The number of PAGE_SIZE pages on the specified CSROW number it
2379 * encompasses
2382 static u32 get_csrow_nr_pages(struct amd64_pvt *pvt, u8 dct, int csrow_nr)
2384 u32 cs_mode, nr_pages;
2385 u32 dbam = dct ? pvt->dbam1 : pvt->dbam0;
2389 * The math on this doesn't look right on the surface because x/2*4 can
2390 * be simplified to x*2 but this expression makes use of the fact that
2391 * it is integral math where 1/2=0. This intermediate value becomes the
2392 * number of bits to shift the DBAM register to extract the proper CSROW
2393 * field.
2395 cs_mode = DBAM_DIMM(csrow_nr / 2, dbam);
2397 nr_pages = pvt->ops->dbam_to_cs(pvt, dct, cs_mode, (csrow_nr / 2))
2398 << (20 - PAGE_SHIFT);
2400 edac_dbg(0, "csrow: %d, channel: %d, DBAM idx: %d\n",
2401 csrow_nr, dct, cs_mode);
2402 edac_dbg(0, "nr_pages/channel: %u\n", nr_pages);
2404 return nr_pages;
2408 * Initialize the array of csrow attribute instances, based on the values
2409 * from pci config hardware registers.
2411 static int init_csrows(struct mem_ctl_info *mci)
2413 struct amd64_pvt *pvt = mci->pvt_info;
2414 struct csrow_info *csrow;
2415 struct dimm_info *dimm;
2416 enum edac_type edac_mode;
2417 int i, j, empty = 1;
2418 int nr_pages = 0;
2419 u32 val;
2421 amd64_read_pci_cfg(pvt->F3, NBCFG, &val);
2423 pvt->nbcfg = val;
2425 edac_dbg(0, "node %d, NBCFG=0x%08x[ChipKillEccCap: %d|DramEccEn: %d]\n",
2426 pvt->mc_node_id, val,
2427 !!(val & NBCFG_CHIPKILL), !!(val & NBCFG_ECC_ENABLE));
2430 * We iterate over DCT0 here but we look at DCT1 in parallel, if needed.
2432 for_each_chip_select(i, 0, pvt) {
2433 bool row_dct0 = !!csrow_enabled(i, 0, pvt);
2434 bool row_dct1 = false;
2436 if (pvt->fam != 0xf)
2437 row_dct1 = !!csrow_enabled(i, 1, pvt);
2439 if (!row_dct0 && !row_dct1)
2440 continue;
2442 csrow = mci->csrows[i];
2443 empty = 0;
2445 edac_dbg(1, "MC node: %d, csrow: %d\n",
2446 pvt->mc_node_id, i);
2448 if (row_dct0) {
2449 nr_pages = get_csrow_nr_pages(pvt, 0, i);
2450 csrow->channels[0]->dimm->nr_pages = nr_pages;
2453 /* K8 has only one DCT */
2454 if (pvt->fam != 0xf && row_dct1) {
2455 int row_dct1_pages = get_csrow_nr_pages(pvt, 1, i);
2457 csrow->channels[1]->dimm->nr_pages = row_dct1_pages;
2458 nr_pages += row_dct1_pages;
2461 edac_dbg(1, "Total csrow%d pages: %u\n", i, nr_pages);
2464 * determine whether CHIPKILL or JUST ECC or NO ECC is operating
2466 if (pvt->nbcfg & NBCFG_ECC_ENABLE)
2467 edac_mode = (pvt->nbcfg & NBCFG_CHIPKILL) ?
2468 EDAC_S4ECD4ED : EDAC_SECDED;
2469 else
2470 edac_mode = EDAC_NONE;
2472 for (j = 0; j < pvt->channel_count; j++) {
2473 dimm = csrow->channels[j]->dimm;
2474 dimm->mtype = pvt->dram_type;
2475 dimm->edac_mode = edac_mode;
2479 return empty;
2482 /* get all cores on this DCT */
2483 static void get_cpus_on_this_dct_cpumask(struct cpumask *mask, u16 nid)
2485 int cpu;
2487 for_each_online_cpu(cpu)
2488 if (amd_get_nb_id(cpu) == nid)
2489 cpumask_set_cpu(cpu, mask);
2492 /* check MCG_CTL on all the cpus on this node */
2493 static bool nb_mce_bank_enabled_on_node(u16 nid)
2495 cpumask_var_t mask;
2496 int cpu, nbe;
2497 bool ret = false;
2499 if (!zalloc_cpumask_var(&mask, GFP_KERNEL)) {
2500 amd64_warn("%s: Error allocating mask\n", __func__);
2501 return false;
2504 get_cpus_on_this_dct_cpumask(mask, nid);
2506 rdmsr_on_cpus(mask, MSR_IA32_MCG_CTL, msrs);
2508 for_each_cpu(cpu, mask) {
2509 struct msr *reg = per_cpu_ptr(msrs, cpu);
2510 nbe = reg->l & MSR_MCGCTL_NBE;
2512 edac_dbg(0, "core: %u, MCG_CTL: 0x%llx, NB MSR is %s\n",
2513 cpu, reg->q,
2514 (nbe ? "enabled" : "disabled"));
2516 if (!nbe)
2517 goto out;
2519 ret = true;
2521 out:
2522 free_cpumask_var(mask);
2523 return ret;
2526 static int toggle_ecc_err_reporting(struct ecc_settings *s, u16 nid, bool on)
2528 cpumask_var_t cmask;
2529 int cpu;
2531 if (!zalloc_cpumask_var(&cmask, GFP_KERNEL)) {
2532 amd64_warn("%s: error allocating mask\n", __func__);
2533 return false;
2536 get_cpus_on_this_dct_cpumask(cmask, nid);
2538 rdmsr_on_cpus(cmask, MSR_IA32_MCG_CTL, msrs);
2540 for_each_cpu(cpu, cmask) {
2542 struct msr *reg = per_cpu_ptr(msrs, cpu);
2544 if (on) {
2545 if (reg->l & MSR_MCGCTL_NBE)
2546 s->flags.nb_mce_enable = 1;
2548 reg->l |= MSR_MCGCTL_NBE;
2549 } else {
2551 * Turn off NB MCE reporting only when it was off before
2553 if (!s->flags.nb_mce_enable)
2554 reg->l &= ~MSR_MCGCTL_NBE;
2557 wrmsr_on_cpus(cmask, MSR_IA32_MCG_CTL, msrs);
2559 free_cpumask_var(cmask);
2561 return 0;
2564 static bool enable_ecc_error_reporting(struct ecc_settings *s, u16 nid,
2565 struct pci_dev *F3)
2567 bool ret = true;
2568 u32 value, mask = 0x3; /* UECC/CECC enable */
2570 if (toggle_ecc_err_reporting(s, nid, ON)) {
2571 amd64_warn("Error enabling ECC reporting over MCGCTL!\n");
2572 return false;
2575 amd64_read_pci_cfg(F3, NBCTL, &value);
2577 s->old_nbctl = value & mask;
2578 s->nbctl_valid = true;
2580 value |= mask;
2581 amd64_write_pci_cfg(F3, NBCTL, value);
2583 amd64_read_pci_cfg(F3, NBCFG, &value);
2585 edac_dbg(0, "1: node %d, NBCFG=0x%08x[DramEccEn: %d]\n",
2586 nid, value, !!(value & NBCFG_ECC_ENABLE));
2588 if (!(value & NBCFG_ECC_ENABLE)) {
2589 amd64_warn("DRAM ECC disabled on this node, enabling...\n");
2591 s->flags.nb_ecc_prev = 0;
2593 /* Attempt to turn on DRAM ECC Enable */
2594 value |= NBCFG_ECC_ENABLE;
2595 amd64_write_pci_cfg(F3, NBCFG, value);
2597 amd64_read_pci_cfg(F3, NBCFG, &value);
2599 if (!(value & NBCFG_ECC_ENABLE)) {
2600 amd64_warn("Hardware rejected DRAM ECC enable,"
2601 "check memory DIMM configuration.\n");
2602 ret = false;
2603 } else {
2604 amd64_info("Hardware accepted DRAM ECC Enable\n");
2606 } else {
2607 s->flags.nb_ecc_prev = 1;
2610 edac_dbg(0, "2: node %d, NBCFG=0x%08x[DramEccEn: %d]\n",
2611 nid, value, !!(value & NBCFG_ECC_ENABLE));
2613 return ret;
2616 static void restore_ecc_error_reporting(struct ecc_settings *s, u16 nid,
2617 struct pci_dev *F3)
2619 u32 value, mask = 0x3; /* UECC/CECC enable */
2622 if (!s->nbctl_valid)
2623 return;
2625 amd64_read_pci_cfg(F3, NBCTL, &value);
2626 value &= ~mask;
2627 value |= s->old_nbctl;
2629 amd64_write_pci_cfg(F3, NBCTL, value);
2631 /* restore previous BIOS DRAM ECC "off" setting we force-enabled */
2632 if (!s->flags.nb_ecc_prev) {
2633 amd64_read_pci_cfg(F3, NBCFG, &value);
2634 value &= ~NBCFG_ECC_ENABLE;
2635 amd64_write_pci_cfg(F3, NBCFG, value);
2638 /* restore the NB Enable MCGCTL bit */
2639 if (toggle_ecc_err_reporting(s, nid, OFF))
2640 amd64_warn("Error restoring NB MCGCTL settings!\n");
2644 * EDAC requires that the BIOS have ECC enabled before
2645 * taking over the processing of ECC errors. A command line
2646 * option allows to force-enable hardware ECC later in
2647 * enable_ecc_error_reporting().
2649 static const char *ecc_msg =
2650 "ECC disabled in the BIOS or no ECC capability, module will not load.\n"
2651 " Either enable ECC checking or force module loading by setting "
2652 "'ecc_enable_override'.\n"
2653 " (Note that use of the override may cause unknown side effects.)\n";
2655 static bool ecc_enabled(struct pci_dev *F3, u16 nid)
2657 u32 value;
2658 u8 ecc_en = 0;
2659 bool nb_mce_en = false;
2661 amd64_read_pci_cfg(F3, NBCFG, &value);
2663 ecc_en = !!(value & NBCFG_ECC_ENABLE);
2664 amd64_info("DRAM ECC %s.\n", (ecc_en ? "enabled" : "disabled"));
2666 nb_mce_en = nb_mce_bank_enabled_on_node(nid);
2667 if (!nb_mce_en)
2668 amd64_notice("NB MCE bank disabled, set MSR "
2669 "0x%08x[4] on node %d to enable.\n",
2670 MSR_IA32_MCG_CTL, nid);
2672 if (!ecc_en || !nb_mce_en) {
2673 amd64_notice("%s", ecc_msg);
2674 return false;
2676 return true;
2679 static void setup_mci_misc_attrs(struct mem_ctl_info *mci,
2680 struct amd64_family_type *fam)
2682 struct amd64_pvt *pvt = mci->pvt_info;
2684 mci->mtype_cap = MEM_FLAG_DDR2 | MEM_FLAG_RDDR2;
2685 mci->edac_ctl_cap = EDAC_FLAG_NONE;
2687 if (pvt->nbcap & NBCAP_SECDED)
2688 mci->edac_ctl_cap |= EDAC_FLAG_SECDED;
2690 if (pvt->nbcap & NBCAP_CHIPKILL)
2691 mci->edac_ctl_cap |= EDAC_FLAG_S4ECD4ED;
2693 mci->edac_cap = determine_edac_cap(pvt);
2694 mci->mod_name = EDAC_MOD_STR;
2695 mci->mod_ver = EDAC_AMD64_VERSION;
2696 mci->ctl_name = fam->ctl_name;
2697 mci->dev_name = pci_name(pvt->F2);
2698 mci->ctl_page_to_phys = NULL;
2700 /* memory scrubber interface */
2701 mci->set_sdram_scrub_rate = set_scrub_rate;
2702 mci->get_sdram_scrub_rate = get_scrub_rate;
2706 * returns a pointer to the family descriptor on success, NULL otherwise.
2708 static struct amd64_family_type *per_family_init(struct amd64_pvt *pvt)
2710 struct amd64_family_type *fam_type = NULL;
2712 pvt->ext_model = boot_cpu_data.x86_model >> 4;
2713 pvt->stepping = boot_cpu_data.x86_mask;
2714 pvt->model = boot_cpu_data.x86_model;
2715 pvt->fam = boot_cpu_data.x86;
2717 switch (pvt->fam) {
2718 case 0xf:
2719 fam_type = &family_types[K8_CPUS];
2720 pvt->ops = &family_types[K8_CPUS].ops;
2721 break;
2723 case 0x10:
2724 fam_type = &family_types[F10_CPUS];
2725 pvt->ops = &family_types[F10_CPUS].ops;
2726 break;
2728 case 0x15:
2729 if (pvt->model == 0x30) {
2730 fam_type = &family_types[F15_M30H_CPUS];
2731 pvt->ops = &family_types[F15_M30H_CPUS].ops;
2732 break;
2733 } else if (pvt->model == 0x60) {
2734 fam_type = &family_types[F15_M60H_CPUS];
2735 pvt->ops = &family_types[F15_M60H_CPUS].ops;
2736 break;
2739 fam_type = &family_types[F15_CPUS];
2740 pvt->ops = &family_types[F15_CPUS].ops;
2741 break;
2743 case 0x16:
2744 if (pvt->model == 0x30) {
2745 fam_type = &family_types[F16_M30H_CPUS];
2746 pvt->ops = &family_types[F16_M30H_CPUS].ops;
2747 break;
2749 fam_type = &family_types[F16_CPUS];
2750 pvt->ops = &family_types[F16_CPUS].ops;
2751 break;
2753 default:
2754 amd64_err("Unsupported family!\n");
2755 return NULL;
2758 amd64_info("%s %sdetected (node %d).\n", fam_type->ctl_name,
2759 (pvt->fam == 0xf ?
2760 (pvt->ext_model >= K8_REV_F ? "revF or later "
2761 : "revE or earlier ")
2762 : ""), pvt->mc_node_id);
2763 return fam_type;
2766 static const struct attribute_group *amd64_edac_attr_groups[] = {
2767 #ifdef CONFIG_EDAC_DEBUG
2768 &amd64_edac_dbg_group,
2769 #endif
2770 #ifdef CONFIG_EDAC_AMD64_ERROR_INJECTION
2771 &amd64_edac_inj_group,
2772 #endif
2773 NULL
2776 static int init_one_instance(unsigned int nid)
2778 struct pci_dev *F3 = node_to_amd_nb(nid)->misc;
2779 struct amd64_family_type *fam_type = NULL;
2780 struct mem_ctl_info *mci = NULL;
2781 struct edac_mc_layer layers[2];
2782 struct amd64_pvt *pvt = NULL;
2783 int err = 0, ret;
2785 ret = -ENOMEM;
2786 pvt = kzalloc(sizeof(struct amd64_pvt), GFP_KERNEL);
2787 if (!pvt)
2788 goto err_ret;
2790 pvt->mc_node_id = nid;
2791 pvt->F3 = F3;
2793 ret = -EINVAL;
2794 fam_type = per_family_init(pvt);
2795 if (!fam_type)
2796 goto err_free;
2798 ret = -ENODEV;
2799 err = reserve_mc_sibling_devs(pvt, fam_type->f1_id, fam_type->f2_id);
2800 if (err)
2801 goto err_free;
2803 read_mc_regs(pvt);
2806 * We need to determine how many memory channels there are. Then use
2807 * that information for calculating the size of the dynamic instance
2808 * tables in the 'mci' structure.
2810 ret = -EINVAL;
2811 pvt->channel_count = pvt->ops->early_channel_count(pvt);
2812 if (pvt->channel_count < 0)
2813 goto err_siblings;
2815 ret = -ENOMEM;
2816 layers[0].type = EDAC_MC_LAYER_CHIP_SELECT;
2817 layers[0].size = pvt->csels[0].b_cnt;
2818 layers[0].is_virt_csrow = true;
2819 layers[1].type = EDAC_MC_LAYER_CHANNEL;
2822 * Always allocate two channels since we can have setups with DIMMs on
2823 * only one channel. Also, this simplifies handling later for the price
2824 * of a couple of KBs tops.
2826 layers[1].size = 2;
2827 layers[1].is_virt_csrow = false;
2829 mci = edac_mc_alloc(nid, ARRAY_SIZE(layers), layers, 0);
2830 if (!mci)
2831 goto err_siblings;
2833 mci->pvt_info = pvt;
2834 mci->pdev = &pvt->F3->dev;
2836 setup_mci_misc_attrs(mci, fam_type);
2838 if (init_csrows(mci))
2839 mci->edac_cap = EDAC_FLAG_NONE;
2841 ret = -ENODEV;
2842 if (edac_mc_add_mc_with_groups(mci, amd64_edac_attr_groups)) {
2843 edac_dbg(1, "failed edac_mc_add_mc()\n");
2844 goto err_add_mc;
2847 /* register stuff with EDAC MCE */
2848 if (report_gart_errors)
2849 amd_report_gart_errors(true);
2851 amd_register_ecc_decoder(decode_bus_error);
2853 return 0;
2855 err_add_mc:
2856 edac_mc_free(mci);
2858 err_siblings:
2859 free_mc_sibling_devs(pvt);
2861 err_free:
2862 kfree(pvt);
2864 err_ret:
2865 return ret;
2868 static int probe_one_instance(unsigned int nid)
2870 struct pci_dev *F3 = node_to_amd_nb(nid)->misc;
2871 struct ecc_settings *s;
2872 int ret;
2874 ret = -ENOMEM;
2875 s = kzalloc(sizeof(struct ecc_settings), GFP_KERNEL);
2876 if (!s)
2877 goto err_out;
2879 ecc_stngs[nid] = s;
2881 if (!ecc_enabled(F3, nid)) {
2882 ret = -ENODEV;
2884 if (!ecc_enable_override)
2885 goto err_enable;
2887 amd64_warn("Forcing ECC on!\n");
2889 if (!enable_ecc_error_reporting(s, nid, F3))
2890 goto err_enable;
2893 ret = init_one_instance(nid);
2894 if (ret < 0) {
2895 amd64_err("Error probing instance: %d\n", nid);
2896 restore_ecc_error_reporting(s, nid, F3);
2899 return ret;
2901 err_enable:
2902 kfree(s);
2903 ecc_stngs[nid] = NULL;
2905 err_out:
2906 return ret;
2909 static void remove_one_instance(unsigned int nid)
2911 struct pci_dev *F3 = node_to_amd_nb(nid)->misc;
2912 struct ecc_settings *s = ecc_stngs[nid];
2913 struct mem_ctl_info *mci;
2914 struct amd64_pvt *pvt;
2916 mci = find_mci_by_dev(&F3->dev);
2917 WARN_ON(!mci);
2919 /* Remove from EDAC CORE tracking list */
2920 mci = edac_mc_del_mc(&F3->dev);
2921 if (!mci)
2922 return;
2924 pvt = mci->pvt_info;
2926 restore_ecc_error_reporting(s, nid, F3);
2928 free_mc_sibling_devs(pvt);
2930 /* unregister from EDAC MCE */
2931 amd_report_gart_errors(false);
2932 amd_unregister_ecc_decoder(decode_bus_error);
2934 kfree(ecc_stngs[nid]);
2935 ecc_stngs[nid] = NULL;
2937 /* Free the EDAC CORE resources */
2938 mci->pvt_info = NULL;
2940 kfree(pvt);
2941 edac_mc_free(mci);
2944 static void setup_pci_device(void)
2946 struct mem_ctl_info *mci;
2947 struct amd64_pvt *pvt;
2949 if (pci_ctl)
2950 return;
2952 mci = edac_mc_find(0);
2953 if (!mci)
2954 return;
2956 pvt = mci->pvt_info;
2957 pci_ctl = edac_pci_create_generic_ctl(&pvt->F2->dev, EDAC_MOD_STR);
2958 if (!pci_ctl) {
2959 pr_warn("%s(): Unable to create PCI control\n", __func__);
2960 pr_warn("%s(): PCI error report via EDAC not set\n", __func__);
2964 static int __init amd64_edac_init(void)
2966 int err = -ENODEV;
2967 int i;
2969 if (amd_cache_northbridges() < 0)
2970 goto err_ret;
2972 opstate_init();
2974 err = -ENOMEM;
2975 ecc_stngs = kzalloc(amd_nb_num() * sizeof(ecc_stngs[0]), GFP_KERNEL);
2976 if (!ecc_stngs)
2977 goto err_free;
2979 msrs = msrs_alloc();
2980 if (!msrs)
2981 goto err_free;
2983 for (i = 0; i < amd_nb_num(); i++)
2984 if (probe_one_instance(i)) {
2985 /* unwind properly */
2986 while (--i >= 0)
2987 remove_one_instance(i);
2989 goto err_pci;
2992 setup_pci_device();
2994 #ifdef CONFIG_X86_32
2995 amd64_err("%s on 32-bit is unsupported. USE AT YOUR OWN RISK!\n", EDAC_MOD_STR);
2996 #endif
2998 printk(KERN_INFO "AMD64 EDAC driver v%s\n", EDAC_AMD64_VERSION);
3000 return 0;
3002 err_pci:
3003 msrs_free(msrs);
3004 msrs = NULL;
3006 err_free:
3007 kfree(ecc_stngs);
3008 ecc_stngs = NULL;
3010 err_ret:
3011 return err;
3014 static void __exit amd64_edac_exit(void)
3016 int i;
3018 if (pci_ctl)
3019 edac_pci_release_generic_ctl(pci_ctl);
3021 for (i = 0; i < amd_nb_num(); i++)
3022 remove_one_instance(i);
3024 kfree(ecc_stngs);
3025 ecc_stngs = NULL;
3027 msrs_free(msrs);
3028 msrs = NULL;
3031 module_init(amd64_edac_init);
3032 module_exit(amd64_edac_exit);
3034 MODULE_LICENSE("GPL");
3035 MODULE_AUTHOR("SoftwareBitMaker: Doug Thompson, "
3036 "Dave Peterson, Thayne Harbaugh");
3037 MODULE_DESCRIPTION("MC support for AMD64 memory controllers - "
3038 EDAC_AMD64_VERSION);
3040 module_param(edac_op_state, int, 0444);
3041 MODULE_PARM_DESC(edac_op_state, "EDAC Error Reporting state: 0=Poll,1=NMI");