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);
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;
19 * count successfully initialized driver instances for setup_pci_device()
21 static atomic_t drv_instances = ATOMIC_INIT(0);
24 static struct ecc_settings **ecc_stngs;
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-
31 *FIXME: Produce a better mapping/linearisation.
33 static const struct scrubrate {
34 u32 scrubval; /* bit pattern for scrub rate */
35 u32 bandwidth; /* bandwidth consumed (bytes/sec) */
37 { 0x01, 1600000000UL},
59 { 0x00, 0UL}, /* scrubbing off */
62 int __amd64_read_pci_cfg_dword(struct pci_dev *pdev, int offset,
63 u32 *val, const char *func)
67 err = pci_read_config_dword(pdev, offset, val);
69 amd64_warn("%s: error reading F%dx%03x.\n",
70 func, PCI_FUNC(pdev->devfn), offset);
75 int __amd64_write_pci_cfg_dword(struct pci_dev *pdev, int offset,
76 u32 val, const char *func)
80 err = pci_write_config_dword(pdev, offset, val);
82 amd64_warn("%s: error writing to F%dx%03x.\n",
83 func, PCI_FUNC(pdev->devfn), offset);
89 * Select DCT to which PCI cfg accesses are routed
91 static void f15h_select_dct(struct amd64_pvt *pvt, u8 dct)
95 amd64_read_pci_cfg(pvt->F1, DCT_CFG_SEL, ®);
96 reg &= (pvt->model == 0x30) ? ~3 : ~1;
98 amd64_write_pci_cfg(pvt->F1, DCT_CFG_SEL, reg);
103 * Depending on the family, F2 DCT reads need special handling:
105 * K8: has a single DCT only and no address offsets >= 0x100
107 * F10h: each DCT has its own set of regs
111 * F16h: has only 1 DCT
113 * F15h: we select which DCT we access using F1x10C[DctCfgSel]
115 static inline int amd64_read_dct_pci_cfg(struct amd64_pvt *pvt, u8 dct,
116 int offset, u32 *val)
120 if (dct || offset >= 0x100)
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)
131 if (dct_ganging_enabled(pvt))
140 * F15h: F2x1xx addresses do not map explicitly to DCT1.
141 * We should select which DCT we access using F1x10C[DctCfgSel]
143 dct = (dct && pvt->model == 0x30) ? 3 : dct;
144 f15h_select_dct(pvt, dct);
155 return amd64_read_pci_cfg(pvt->F2, offset, val);
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
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.
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.
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.
176 static int __set_scrub_rate(struct amd64_pvt *pvt, u32 new_bw, u32 min_rate)
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.
187 * If no suitable bandwidth is found, turn off DRAM scrubbing entirely
188 * by falling back to the last element in scrubrates[].
190 for (i = 0; i < ARRAY_SIZE(scrubrates) - 1; i++) {
192 * skip scrub rates which aren't recommended
193 * (see F10 BKDG, F3x58)
195 if (scrubrates[i].scrubval < min_rate)
198 if (scrubrates[i].bandwidth <= new_bw)
202 scrubval = scrubrates[i].scrubval;
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);
210 pci_write_bits32(pvt->F3, SCRCTRL, scrubval, 0x001F);
214 return scrubrates[i].bandwidth;
219 static int set_scrub_rate(struct mem_ctl_info *mci, u32 bw)
221 struct amd64_pvt *pvt = mci->pvt_info;
222 u32 min_scrubrate = 0x5;
227 if (pvt->fam == 0x15) {
229 if (pvt->model < 0x10)
230 f15h_select_dct(pvt, 0);
232 if (pvt->model == 0x60)
235 return __set_scrub_rate(pvt, bw, min_scrubrate);
238 static int get_scrub_rate(struct mem_ctl_info *mci)
240 struct amd64_pvt *pvt = mci->pvt_info;
242 int i, retval = -EINVAL;
244 if (pvt->fam == 0x15) {
246 if (pvt->model < 0x10)
247 f15h_select_dct(pvt, 0);
249 if (pvt->model == 0x60)
250 amd64_read_pci_cfg(pvt->F2, F15H_M60H_SCRCTRL, &scrubval);
252 amd64_read_pci_cfg(pvt->F3, SCRCTRL, &scrubval);
254 amd64_read_pci_cfg(pvt->F3, SCRCTRL, &scrubval);
256 scrubval = scrubval & 0x001F;
258 for (i = 0; i < ARRAY_SIZE(scrubrates); i++) {
259 if (scrubrates[i].scrubval == scrubval) {
260 retval = scrubrates[i].bandwidth;
268 * returns true if the SysAddr given by sys_addr matches the
269 * DRAM base/limit associated with node_id
271 static bool base_limit_match(struct amd64_pvt *pvt, u64 sys_addr, u8 nid)
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.
281 addr = sys_addr & 0x000000ffffffffffull;
283 return ((addr >= get_dram_base(pvt, nid)) &&
284 (addr <= get_dram_limit(pvt, nid)));
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.
291 * On failure, return NULL.
293 static struct mem_ctl_info *find_mc_by_sys_addr(struct mem_ctl_info *mci,
296 struct amd64_pvt *pvt;
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.
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.
311 intlv_en = dram_intlv_en(pvt, 0);
314 for (node_id = 0; node_id < DRAM_RANGES; node_id++) {
315 if (base_limit_match(pvt, sys_addr, node_id))
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);
328 bits = (((u32) sys_addr) >> 12) & intlv_en;
330 for (node_id = 0; ; ) {
331 if ((dram_intlv_sel(pvt, node_id) & intlv_en) == bits)
332 break; /* intlv_sel field matches */
334 if (++node_id >= DRAM_RANGES)
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);
347 return edac_mc_find((int)node_id);
350 edac_dbg(2, "sys_addr 0x%lx doesn't match any node\n",
351 (unsigned long)sys_addr);
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
360 static void get_cs_base_and_mask(struct amd64_pvt *pvt, int csrow, u8 dct,
361 u64 *base, u64 *mask)
363 u64 csbase, csmask, base_bits, mask_bits;
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);
374 * F16h and F15h, models 30h and later need two addr_shift values:
375 * 8 for high and 6 for low (cf. F16h BKDG).
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];
382 *base = (csbase & GENMASK_ULL(15, 5)) << 6;
383 *base |= (csbase & GENMASK_ULL(30, 19)) << 8;
386 /* poke holes for the csmask */
387 *mask &= ~((GENMASK_ULL(15, 5) << 6) |
388 (GENMASK_ULL(30, 19) << 8));
390 *mask |= (csmask & GENMASK_ULL(15, 5)) << 6;
391 *mask |= (csmask & GENMASK_ULL(30, 19)) << 8;
395 csbase = pvt->csels[dct].csbases[csrow];
396 csmask = pvt->csels[dct].csmasks[csrow >> 1];
399 if (pvt->fam == 0x15)
400 base_bits = mask_bits =
401 GENMASK_ULL(30,19) | GENMASK_ULL(13,5);
403 base_bits = mask_bits =
404 GENMASK_ULL(28,19) | GENMASK_ULL(13,5);
407 *base = (csbase & base_bits) << addr_shift;
410 /* poke holes for the csmask */
411 *mask &= ~(mask_bits << addr_shift);
413 *mask |= (csmask & mask_bits) << addr_shift;
416 #define for_each_chip_select(i, dct, pvt) \
417 for (i = 0; i < pvt->csels[dct].b_cnt; i++)
419 #define chip_select_base(i, dct, pvt) \
420 pvt->csels[dct].csbases[i]
422 #define for_each_chip_select_mask(i, dct, pvt) \
423 for (i = 0; i < pvt->csels[dct].m_cnt; i++)
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).
429 static int input_addr_to_csrow(struct mem_ctl_info *mci, u64 input_addr)
431 struct amd64_pvt *pvt;
437 for_each_chip_select(csrow, 0, pvt) {
438 if (!csrow_enabled(csrow, 0, pvt))
441 get_cs_base_and_mask(pvt, csrow, 0, &base, &mask);
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,
453 edac_dbg(2, "no matching csrow for InputAddr 0x%lx (MC node %d)\n",
454 (unsigned long)input_addr, pvt->mc_node_id);
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:
465 * - The revision of the node is not E or greater. In this case, the DRAM Hole
466 * Address Register does not exist.
468 * - The DramHoleValid bit is cleared in the DRAM Hole Address Register,
469 * indicating that its contents are not valid.
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.
475 int amd64_get_dram_hole_info(struct mem_ctl_info *mci, u64 *hole_base,
476 u64 *hole_offset, u64 *hole_size)
478 struct amd64_pvt *pvt = mci->pvt_info;
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);
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");
493 if (!dhar_valid(pvt)) {
494 edac_dbg(1, " Dram Memory Hoisting is DISABLED on this node %d\n",
499 /* This node has Memory Hoisting */
501 /* +------------------+--------------------+--------------------+-----
502 * | memory | DRAM hole | relocated |
503 * | [0, (x - 1)] | [x, 0xffffffff] | addresses from |
505 * | | | [0x100000000, |
506 * | | | (0x100000000+ |
507 * | | | (0xffffffff-x))] |
508 * +------------------+--------------------+--------------------+-----
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.
517 *hole_base = dhar_base(pvt);
518 *hole_size = (1ULL << 32) - *hole_base;
520 *hole_offset = (pvt->fam > 0xf) ? f10_dhar_offset(pvt)
521 : k8_dhar_offset(pvt);
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);
529 EXPORT_SYMBOL_GPL(amd64_get_dram_hole_info);
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.
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:
542 * When node n receives a SysAddr, it processes the SysAddr as follows:
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.
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.
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).
560 static u64 sys_addr_to_dram_addr(struct mem_ctl_info *mci, u64 sys_addr)
562 struct amd64_pvt *pvt = mci->pvt_info;
563 u64 dram_base, hole_base, hole_offset, hole_size, dram_addr;
566 dram_base = get_dram_base(pvt, pvt->mc_node_id);
568 ret = amd64_get_dram_hole_info(mci, &hole_base, &hole_offset,
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;
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);
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.
593 dram_addr = (sys_addr & GENMASK_ULL(39, 0)) - dram_base;
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);
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.
605 static int num_node_interleave_bits(unsigned intlv_en)
607 static const int intlv_shift_table[] = { 0, 1, 0, 2, 0, 0, 0, 3 };
610 BUG_ON(intlv_en > 7);
611 n = intlv_shift_table[intlv_en];
615 /* Translate the DramAddr given by @dram_addr to an InputAddr. */
616 static u64 dram_addr_to_input_addr(struct mem_ctl_info *mci, u64 dram_addr)
618 struct amd64_pvt *pvt;
625 * See the start of section 3.4.4 (p. 70, BKDG #26094, K8, revA-E)
626 * concerning translating a DramAddr to an InputAddr.
628 intlv_shift = num_node_interleave_bits(dram_intlv_en(pvt, 0));
629 input_addr = ((dram_addr >> intlv_shift) & GENMASK_ULL(35, 12)) +
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);
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.
643 static u64 sys_addr_to_input_addr(struct mem_ctl_info *mci, u64 sys_addr)
648 dram_addr_to_input_addr(mci, sys_addr_to_dram_addr(mci, sys_addr));
650 edac_dbg(2, "SysAdddr 0x%lx translates to InputAddr 0x%lx\n",
651 (unsigned long)sys_addr, (unsigned long)input_addr);
656 /* Map the Error address to a PAGE and PAGE OFFSET. */
657 static inline void error_address_to_page_and_offset(u64 error_address,
658 struct err_info *err)
660 err->page = (u32) (error_address >> PAGE_SHIFT);
661 err->offset = ((u32) error_address) & ~PAGE_MASK;
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
672 static int sys_addr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr)
676 csrow = input_addr_to_csrow(mci, sys_addr_to_input_addr(mci, sys_addr));
679 amd64_mc_err(mci, "Failed to translate InputAddr to csrow for "
680 "address 0x%lx\n", (unsigned long)sys_addr);
684 static int get_channel_from_ecc_syndrome(struct mem_ctl_info *, u16);
687 * Determine if the DIMMs have ECC enabled. ECC is enabled ONLY if all the DIMMs
690 static unsigned long determine_edac_cap(struct amd64_pvt *pvt)
693 unsigned long edac_cap = EDAC_FLAG_NONE;
695 bit = (pvt->fam > 0xf || pvt->ext_model >= K8_REV_F)
699 if (pvt->dclr0 & BIT(bit))
700 edac_cap = EDAC_FLAG_SECDED;
705 static void debug_display_dimm_sizes(struct amd64_pvt *, u8);
707 static void debug_dump_dramcfg_low(struct amd64_pvt *pvt, u32 dclr, int chan)
709 edac_dbg(1, "F2x%d90 (DRAM Cfg Low): 0x%08x\n", chan, dclr);
711 if (pvt->dram_type == MEM_LRDDR3) {
712 u32 dcsm = pvt->csels[chan].csmasks[0];
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.
718 edac_dbg(1, " LRDIMM %dx rank multiply\n", (dcsm & 0x3));
721 edac_dbg(1, "All DIMMs support ECC:%s\n",
722 (dclr & BIT(19)) ? "yes" : "no");
725 edac_dbg(1, " PAR/ERR parity: %s\n",
726 (dclr & BIT(8)) ? "enabled" : "disabled");
728 if (pvt->fam == 0x10)
729 edac_dbg(1, " DCT 128bit mode width: %s\n",
730 (dclr & BIT(11)) ? "128b" : "64b");
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");
739 /* Display and decode various NB registers for debug purposes. */
740 static void dump_misc_regs(struct amd64_pvt *pvt)
742 edac_dbg(1, "F3xE8 (NB Cap): 0x%08x\n", pvt->nbcap);
744 edac_dbg(1, " NB two channel DRAM capable: %s\n",
745 (pvt->nbcap & NBCAP_DCT_DUAL) ? "yes" : "no");
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");
751 debug_dump_dramcfg_low(pvt, pvt->dclr0, 0);
753 edac_dbg(1, "F3xB0 (Online Spare): 0x%08x\n", pvt->online_spare);
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));
760 edac_dbg(1, " DramHoleValid: %s\n", dhar_valid(pvt) ? "yes" : "no");
762 debug_display_dimm_sizes(pvt, 0);
764 /* everything below this point is Fam10h and above */
768 debug_display_dimm_sizes(pvt, 1);
770 amd64_info("using %s syndromes.\n", ((pvt->ecc_sym_sz == 8) ? "x8" : "x4"));
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);
778 * See BKDG, F2x[1,0][5C:40], F2[1,0][6C:60]
780 static void prep_chip_selects(struct amd64_pvt *pvt)
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;
789 pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 8;
790 pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 4;
795 * Function 2 Offset F10_DCSB0; read in the DCS Base and DCS Mask registers
797 static void read_dct_base_mask(struct amd64_pvt *pvt)
801 prep_chip_selects(pvt);
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];
809 if (!amd64_read_dct_pci_cfg(pvt, 0, reg0, base0))
810 edac_dbg(0, " DCSB0[%d]=0x%08x reg: F2x%x\n",
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
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];
828 if (!amd64_read_dct_pci_cfg(pvt, 0, reg0, mask0))
829 edac_dbg(0, " DCSM0[%d]=0x%08x reg: F2x%x\n",
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
842 static void determine_memory_type(struct amd64_pvt *pvt)
848 if (pvt->ext_model >= K8_REV_F)
851 pvt->dram_type = (pvt->dclr0 & BIT(18)) ? MEM_DDR : MEM_RDDR;
855 if (pvt->dchr0 & DDR3_MODE)
858 pvt->dram_type = (pvt->dclr0 & BIT(16)) ? MEM_DDR2 : MEM_RDDR2;
862 if (pvt->model < 0x60)
866 * Model 0x60h needs special handling:
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.
874 amd64_read_dct_pci_cfg(pvt, 0, DRAM_CONTROL, &dram_ctrl);
875 dcsm = pvt->csels[0].csmasks[0];
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;
882 pvt->dram_type = MEM_LRDDR3;
884 pvt->dram_type = MEM_RDDR3;
892 WARN(1, KERN_ERR "%s: Family??? 0x%x\n", __func__, pvt->fam);
893 pvt->dram_type = MEM_EMPTY;
898 pvt->dram_type = (pvt->dclr0 & BIT(16)) ? MEM_DDR3 : MEM_RDDR3;
901 /* Get the number of DCT channels the memory controller is using. */
902 static int k8_early_channel_count(struct amd64_pvt *pvt)
906 if (pvt->ext_model >= K8_REV_F)
907 /* RevF (NPT) and later */
908 flag = pvt->dclr0 & WIDTH_128;
910 /* RevE and earlier */
911 flag = pvt->dclr0 & REVE_WIDTH_128;
916 return (flag) ? 2 : 1;
919 /* On F10h and later ErrAddr is MC4_ADDR[47:1] */
920 static u64 get_error_address(struct amd64_pvt *pvt, struct mce *m)
922 u16 mce_nid = amd_get_nb_id(m->extcpu);
923 struct mem_ctl_info *mci;
928 mci = edac_mc_find(mce_nid);
934 if (pvt->fam == 0xf) {
939 addr = m->addr & GENMASK_ULL(end_bit, start_bit);
942 * Erratum 637 workaround
944 if (pvt->fam == 0x15) {
945 u64 cc6_base, tmp_addr;
949 if ((addr & GENMASK_ULL(47, 24)) >> 24 != 0x00fdf7)
953 amd64_read_pci_cfg(pvt->F1, DRAM_LOCAL_NODE_LIM, &tmp);
954 intlv_en = tmp >> 21 & 0x7;
956 /* add [47:27] + 3 trailing bits */
957 cc6_base = (tmp & GENMASK_ULL(20, 0)) << 3;
959 /* reverse and add DramIntlvEn */
960 cc6_base |= intlv_en ^ 0x7;
966 return cc6_base | (addr & GENMASK_ULL(23, 0));
968 amd64_read_pci_cfg(pvt->F1, DRAM_LOCAL_NODE_BASE, &tmp);
971 tmp_addr = (addr & GENMASK_ULL(23, 12)) << __fls(intlv_en + 1);
973 /* OR DramIntlvSel into bits [14:12] */
974 tmp_addr |= (tmp & GENMASK_ULL(23, 21)) >> 9;
976 /* add remaining [11:0] bits from original MC4_ADDR */
977 tmp_addr |= addr & GENMASK_ULL(11, 0);
979 return cc6_base | tmp_addr;
985 static struct pci_dev *pci_get_related_function(unsigned int vendor,
987 struct pci_dev *related)
989 struct pci_dev *dev = NULL;
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)))
1001 static void read_dram_base_limit_regs(struct amd64_pvt *pvt, unsigned range)
1003 struct amd_northbridge *nb;
1004 struct pci_dev *f1 = NULL;
1005 unsigned int pci_func;
1006 int off = range << 3;
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);
1012 if (pvt->fam == 0xf)
1015 if (!dram_rw(pvt, range))
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);
1021 /* F15h: factor in CC6 save area by reading dst node's limit reg */
1022 if (pvt->fam != 0x15)
1025 nb = node_to_amd_nb(dram_dst_node(pvt, range));
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;
1034 pci_func = PCI_DEVICE_ID_AMD_15H_NB_F1;
1036 f1 = pci_get_related_function(nb->misc->vendor, pci_func, nb->misc);
1040 amd64_read_pci_cfg(f1, DRAM_LOCAL_NODE_LIM, &llim);
1042 pvt->ranges[range].lim.lo &= GENMASK_ULL(15, 0);
1044 /* {[39:27],111b} */
1045 pvt->ranges[range].lim.lo |= ((llim & 0x1fff) << 3 | 0x7) << 16;
1047 pvt->ranges[range].lim.hi &= GENMASK_ULL(7, 0);
1050 pvt->ranges[range].lim.hi |= llim >> 13;
1055 static void k8_map_sysaddr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr,
1056 struct err_info *err)
1058 struct amd64_pvt *pvt = mci->pvt_info;
1060 error_address_to_page_and_offset(sys_addr, err);
1063 * Find out which node the error address belongs to. This may be
1064 * different from the node that detected the error.
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;
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;
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) {
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
1090 amd64_mc_warn(err->src_mci, "unknown syndrome 0x%04x - "
1091 "possible error reporting race\n",
1093 err->err_code = ERR_CHANNEL;
1098 * non-chipkill ecc mode
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)
1105 err->channel = ((sys_addr & BIT(3)) != 0);
1109 static int ddr2_cs_size(unsigned i, bool dct_width)
1115 else if (!(i & 0x1))
1118 shift = (i + 1) >> 1;
1120 return 128 << (shift + !!dct_width);
1123 static int k8_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
1124 unsigned cs_mode, int cs_mask_nr)
1126 u32 dclr = dct ? pvt->dclr1 : pvt->dclr0;
1128 if (pvt->ext_model >= K8_REV_F) {
1129 WARN_ON(cs_mode > 11);
1130 return ddr2_cs_size(cs_mode, dclr & WIDTH_128);
1132 else if (pvt->ext_model >= K8_REV_D) {
1134 WARN_ON(cs_mode > 10);
1137 * the below calculation, besides trying to win an obfuscated C
1138 * contest, maps cs_mode values to DIMM chip select sizes. The
1141 * cs_mode CS size (mb)
1142 * ======= ============
1155 * Basically, it calculates a value with which to shift the
1156 * smallest CS size of 32MB.
1158 * ddr[23]_cs_size have a similar purpose.
1160 diff = cs_mode/3 + (unsigned)(cs_mode > 5);
1162 return 32 << (cs_mode - diff);
1165 WARN_ON(cs_mode > 6);
1166 return 32 << cs_mode;
1171 * Get the number of DCT channels in use.
1174 * number of Memory Channels in operation
1176 * contents of the DCL0_LOW register
1178 static int f1x_early_channel_count(struct amd64_pvt *pvt)
1180 int i, j, channels = 0;
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))
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
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.
1194 edac_dbg(0, "Data width is not 128 bits - need more decoding\n");
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.
1201 for (i = 0; i < 2; i++) {
1202 u32 dbam = (i ? pvt->dbam1 : pvt->dbam0);
1204 for (j = 0; j < 4; j++) {
1205 if (DBAM_DIMM(j, dbam) > 0) {
1215 amd64_info("MCT channel count: %d\n", channels);
1220 static int ddr3_cs_size(unsigned i, bool dct_width)
1225 if (i == 0 || i == 3 || i == 4)
1231 else if (!(i & 0x1))
1234 shift = (i + 1) >> 1;
1237 cs_size = (128 * (1 << !!dct_width)) << shift;
1242 static int ddr3_lrdimm_cs_size(unsigned i, unsigned rank_multiply)
1247 if (i < 4 || i == 6)
1251 else if (!(i & 0x1))
1254 shift = (i + 1) >> 1;
1257 cs_size = rank_multiply * (128 << shift);
1262 static int ddr4_cs_size(unsigned i)
1271 /* Min cs_size = 1G */
1272 cs_size = 1024 * (1 << (i >> 1));
1277 static int f10_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
1278 unsigned cs_mode, int cs_mask_nr)
1280 u32 dclr = dct ? pvt->dclr1 : pvt->dclr0;
1282 WARN_ON(cs_mode > 11);
1284 if (pvt->dchr0 & DDR3_MODE || pvt->dchr1 & DDR3_MODE)
1285 return ddr3_cs_size(cs_mode, dclr & WIDTH_128);
1287 return ddr2_cs_size(cs_mode, dclr & WIDTH_128);
1291 * F15h supports only 64bit DCT interfaces
1293 static int f15_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
1294 unsigned cs_mode, int cs_mask_nr)
1296 WARN_ON(cs_mode > 12);
1298 return ddr3_cs_size(cs_mode, false);
1301 /* F15h M60h supports DDR4 mapping as well.. */
1302 static int f15_m60h_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
1303 unsigned cs_mode, int cs_mask_nr)
1306 u32 dcsm = pvt->csels[dct].csmasks[cs_mask_nr];
1308 WARN_ON(cs_mode > 12);
1310 if (pvt->dram_type == MEM_DDR4) {
1314 cs_size = ddr4_cs_size(cs_mode);
1315 } else if (pvt->dram_type == MEM_LRDDR3) {
1316 unsigned rank_multiply = dcsm & 0xf;
1318 if (rank_multiply == 3)
1320 cs_size = ddr3_lrdimm_cs_size(cs_mode, rank_multiply);
1322 /* Minimum cs size is 512mb for F15hM60h*/
1326 cs_size = ddr3_cs_size(cs_mode, false);
1333 * F16h and F15h model 30h have only limited cs_modes.
1335 static int f16_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct,
1336 unsigned cs_mode, int cs_mask_nr)
1338 WARN_ON(cs_mode > 12);
1340 if (cs_mode == 6 || cs_mode == 8 ||
1341 cs_mode == 9 || cs_mode == 12)
1344 return ddr3_cs_size(cs_mode, false);
1347 static void read_dram_ctl_register(struct amd64_pvt *pvt)
1350 if (pvt->fam == 0xf)
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));
1357 edac_dbg(0, " DCTs operate in %s mode\n",
1358 (dct_ganging_enabled(pvt) ? "ganged" : "unganged"));
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"));
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"));
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));
1374 amd64_read_pci_cfg(pvt->F2, DCT_SEL_HI, &pvt->dct_sel_hi);
1378 * Determine channel (DCT) based on the interleaving mode (see F15h M30h BKDG,
1379 * 2.10.12 Memory Interleaving Modes).
1381 static u8 f15_m30h_determine_channel(struct amd64_pvt *pvt, u64 sys_addr,
1382 u8 intlv_en, int num_dcts_intlv,
1389 return (u8)(dct_sel);
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) {
1398 channel = (sys_addr >> 8) & 0x3;
1401 channel = (sys_addr >> 9) & 0x3;
1409 * Determine channel (DCT) based on the interleaving mode: F10h BKDG, 2.8.9 Memory
1410 * Interleaving Modes.
1412 static u8 f1x_determine_channel(struct amd64_pvt *pvt, u64 sys_addr,
1413 bool hi_range_sel, u8 intlv_en)
1415 u8 dct_sel_high = (pvt->dct_sel_lo >> 1) & 1;
1417 if (dct_ganging_enabled(pvt))
1421 return dct_sel_high;
1424 * see F2x110[DctSelIntLvAddr] - channel interleave mode
1426 if (dct_interleave_enabled(pvt)) {
1427 u8 intlv_addr = dct_sel_interleave_addr(pvt);
1429 /* return DCT select function: 0=DCT0, 1=DCT1 */
1431 return sys_addr >> 6 & 1;
1433 if (intlv_addr & 0x2) {
1434 u8 shift = intlv_addr & 0x1 ? 9 : 6;
1435 u32 temp = hweight_long((u32) ((sys_addr >> 16) & 0x1F)) % 2;
1437 return ((sys_addr >> shift) & 1) ^ temp;
1440 return (sys_addr >> (12 + hweight8(intlv_en))) & 1;
1443 if (dct_high_range_enabled(pvt))
1444 return ~dct_sel_high & 1;
1449 /* Convert the sys_addr to the normalized DCT address */
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)
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;
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 &&
1467 * remove hole offset from sys_addr
1469 * remove high range offset from sys_addr
1471 if ((!(dct_sel_base_addr >> 16) ||
1472 dct_sel_base_addr < dhar_base(pvt)) &&
1474 (sys_addr >= BIT_64(32)))
1475 chan_off = hole_off;
1477 chan_off = dct_sel_base_off;
1481 * we have a valid hole &&
1486 * remove dram base to normalize to DCT address
1488 if (dhar_valid(pvt) && (sys_addr >= BIT_64(32)))
1489 chan_off = hole_off;
1491 chan_off = dram_base;
1494 return (sys_addr & GENMASK_ULL(47,6)) - (chan_off & GENMASK_ULL(47,23));
1498 * checks if the csrow passed in is marked as SPARED, if so returns the new
1501 static int f10_process_possible_spare(struct amd64_pvt *pvt, u8 dct, int csrow)
1505 if (online_spare_swap_done(pvt, dct) &&
1506 csrow == online_spare_bad_dramcs(pvt, dct)) {
1508 for_each_chip_select(tmp_cs, dct, pvt) {
1509 if (chip_select_base(tmp_cs, dct, pvt) & 0x2) {
1519 * Iterate over the DRAM DCT "base" and "mask" registers looking for a
1520 * SystemAddr match on the specified 'ChannelSelect' and 'NodeID'
1523 * -EINVAL: NOT FOUND
1524 * 0..csrow = Chip-Select Row
1526 static int f1x_lookup_addr_in_dct(u64 in_addr, u8 nid, u8 dct)
1528 struct mem_ctl_info *mci;
1529 struct amd64_pvt *pvt;
1530 u64 cs_base, cs_mask;
1531 int cs_found = -EINVAL;
1534 mci = edac_mc_find(nid);
1538 pvt = mci->pvt_info;
1540 edac_dbg(1, "input addr: 0x%llx, DCT: %d\n", in_addr, dct);
1542 for_each_chip_select(csrow, dct, pvt) {
1543 if (!csrow_enabled(csrow, dct, pvt))
1546 get_cs_base_and_mask(pvt, csrow, dct, &cs_base, &cs_mask);
1548 edac_dbg(1, " CSROW=%d CSBase=0x%llx CSMask=0x%llx\n",
1549 csrow, cs_base, cs_mask);
1553 edac_dbg(1, " (InputAddr & ~CSMask)=0x%llx (CSBase & ~CSMask)=0x%llx\n",
1554 (in_addr & cs_mask), (cs_base & cs_mask));
1556 if ((in_addr & cs_mask) == (cs_base & cs_mask)) {
1557 if (pvt->fam == 0x15 && pvt->model >= 0x30) {
1561 cs_found = f10_process_possible_spare(pvt, dct, csrow);
1563 edac_dbg(1, " MATCH csrow=%d\n", cs_found);
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.
1575 static u64 f1x_swap_interleaved_region(struct amd64_pvt *pvt, u64 sys_addr)
1577 u32 swap_reg, swap_base, swap_limit, rgn_size, tmp_addr;
1579 if (pvt->fam == 0x10) {
1580 /* only revC3 and revE have that feature */
1581 if (pvt->model < 4 || (pvt->model < 0xa && pvt->stepping < 3))
1585 amd64_read_pci_cfg(pvt->F2, SWAP_INTLV_REG, &swap_reg);
1587 if (!(swap_reg & 0x1))
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;
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;
1604 /* For a given @dram_range, check if @sys_addr falls within it. */
1605 static int f1x_match_to_this_node(struct amd64_pvt *pvt, unsigned range,
1606 u64 sys_addr, int *chan_sel)
1608 int cs_found = -EINVAL;
1612 bool high_range = false;
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);
1618 edac_dbg(1, "(range %d) SystemAddr= 0x%llx Limit=0x%llx\n",
1619 range, sys_addr, get_dram_limit(pvt, range));
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",
1629 if (intlv_en && (intlv_sel != ((sys_addr >> 12) & intlv_en)))
1632 sys_addr = f1x_swap_interleaved_region(pvt, sys_addr);
1634 dct_sel_base = dct_sel_baseaddr(pvt);
1637 * check whether addresses >= DctSelBaseAddr[47:27] are to be used to
1638 * select between DCT0 and DCT1.
1640 if (dct_high_range_enabled(pvt) &&
1641 !dct_ganging_enabled(pvt) &&
1642 ((sys_addr >> 27) >= (dct_sel_base >> 11)))
1645 channel = f1x_determine_channel(pvt, sys_addr, high_range, intlv_en);
1647 chan_addr = f1x_get_norm_dct_addr(pvt, range, sys_addr,
1648 high_range, dct_sel_base);
1650 /* Remove node interleaving, see F1x120 */
1652 chan_addr = ((chan_addr >> (12 + hweight8(intlv_en))) << 12) |
1653 (chan_addr & 0xfff);
1655 /* remove channel interleave */
1656 if (dct_interleave_enabled(pvt) &&
1657 !dct_high_range_enabled(pvt) &&
1658 !dct_ganging_enabled(pvt)) {
1660 if (dct_sel_interleave_addr(pvt) != 1) {
1661 if (dct_sel_interleave_addr(pvt) == 0x3)
1663 chan_addr = ((chan_addr >> 10) << 9) |
1664 (chan_addr & 0x1ff);
1666 /* A[6] or hash 6 */
1667 chan_addr = ((chan_addr >> 7) << 6) |
1671 chan_addr = ((chan_addr >> 13) << 12) |
1672 (chan_addr & 0xfff);
1675 edac_dbg(1, " Normalized DCT addr: 0x%llx\n", chan_addr);
1677 cs_found = f1x_lookup_addr_in_dct(chan_addr, node_id, channel);
1680 *chan_sel = channel;
1685 static int f15_m30h_match_to_this_node(struct amd64_pvt *pvt, unsigned range,
1686 u64 sys_addr, int *chan_sel)
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;
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);
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);
1703 dct_offset_en = (u8) ((dct_cont_base_reg >> 3) & BIT(0));
1704 dct_sel = (u8) ((dct_cont_base_reg >> 4) & 0x7);
1706 edac_dbg(1, "(range %d) SystemAddr= 0x%llx Limit=0x%llx\n",
1707 range, sys_addr, get_dram_limit(pvt, range));
1709 if (!(get_dram_base(pvt, range) <= sys_addr) &&
1710 !(get_dram_limit(pvt, range) >= sys_addr))
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",
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;
1725 if (!(dct_cont_base_reg & BIT(0)) &&
1726 !(dct_base <= (sys_addr >> 27) &&
1727 dct_limit >= (sys_addr >> 27)))
1730 /* Verify number of dct's that participate in channel interleaving. */
1731 num_dcts_intlv = (int) hweight8(intlv_en);
1733 if (!(num_dcts_intlv % 2 == 0) || (num_dcts_intlv > 4))
1736 channel = f15_m30h_determine_channel(pvt, sys_addr, intlv_en,
1737 num_dcts_intlv, dct_sel);
1739 /* Verify we stay within the MAX number of channels allowed */
1743 leg_mmio_hole = (u8) (dct_cont_base_reg >> 1 & BIT(0));
1745 /* Get normalized DCT addr */
1746 if (leg_mmio_hole && (sys_addr >= BIT_64(32)))
1747 chan_offset = dhar_offset;
1749 chan_offset = dct_base << 27;
1751 chan_addr = sys_addr - chan_offset;
1753 /* remove channel interleave */
1754 if (num_dcts_intlv == 2) {
1755 if (intlv_addr == 0x4)
1756 chan_addr = ((chan_addr >> 9) << 8) |
1758 else if (intlv_addr == 0x5)
1759 chan_addr = ((chan_addr >> 10) << 9) |
1760 (chan_addr & 0x1ff);
1764 } else if (num_dcts_intlv == 4) {
1765 if (intlv_addr == 0x4)
1766 chan_addr = ((chan_addr >> 10) << 8) |
1768 else if (intlv_addr == 0x5)
1769 chan_addr = ((chan_addr >> 11) << 9) |
1770 (chan_addr & 0x1ff);
1775 if (dct_offset_en) {
1776 amd64_read_pci_cfg(pvt->F1,
1777 DRAM_CONT_HIGH_OFF + (int) channel * 4,
1779 chan_addr += (u64) ((tmp >> 11) & 0xfff) << 27;
1782 f15h_select_dct(pvt, channel);
1784 edac_dbg(1, " Normalized DCT addr: 0x%llx\n", chan_addr);
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.
1794 alias_channel = (channel == 3) ? 1 : channel;
1796 cs_found = f1x_lookup_addr_in_dct(chan_addr, node_id, alias_channel);
1799 *chan_sel = alias_channel;
1804 static int f1x_translate_sysaddr_to_cs(struct amd64_pvt *pvt,
1808 int cs_found = -EINVAL;
1811 for (range = 0; range < DRAM_RANGES; range++) {
1812 if (!dram_rw(pvt, range))
1815 if (pvt->fam == 0x15 && pvt->model >= 0x30)
1816 cs_found = f15_m30h_match_to_this_node(pvt, range,
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);
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).
1835 * The @sys_addr is usually an error address received from the hardware
1838 static void f1x_map_sysaddr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr,
1839 struct err_info *err)
1841 struct amd64_pvt *pvt = mci->pvt_info;
1843 error_address_to_page_and_offset(sys_addr, err);
1845 err->csrow = f1x_translate_sysaddr_to_cs(pvt, sys_addr, &err->channel);
1846 if (err->csrow < 0) {
1847 err->err_code = ERR_CSROW;
1852 * We need the syndromes for channel detection only when we're
1853 * ganged. Otherwise @chan should already contain the channel at
1856 if (dct_ganging_enabled(pvt))
1857 err->channel = get_channel_from_ecc_syndrome(mci, err->syndrome);
1861 * debug routine to display the memory sizes of all logical DIMMs and its
1864 static void debug_display_dimm_sizes(struct amd64_pvt *pvt, u8 ctrl)
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;
1870 if (pvt->fam == 0xf) {
1871 /* K8 families < revF not supported yet */
1872 if (pvt->ext_model < K8_REV_F)
1878 if (pvt->fam == 0x10) {
1879 dbam = (ctrl && !dct_ganging_enabled(pvt)) ? pvt->dbam1
1881 dcsb = (ctrl && !dct_ganging_enabled(pvt)) ?
1882 pvt->csels[1].csbases :
1883 pvt->csels[0].csbases;
1886 dcsb = pvt->csels[1].csbases;
1888 edac_dbg(1, "F2x%d80 (DRAM Bank Address Mapping): 0x%08x\n",
1891 edac_printk(KERN_DEBUG, EDAC_MC, "DCT%d chip selects:\n", ctrl);
1893 /* Dump memory sizes for DIMM and its CSROWs */
1894 for (dimm = 0; dimm < 4; dimm++) {
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.
1903 size0 = pvt->ops->dbam_to_cs(pvt, ctrl,
1904 DBAM_DIMM(dimm, dbam),
1908 if (dcsb[dimm*2 + 1] & DCSB_CS_ENABLE)
1909 size1 = pvt->ops->dbam_to_cs(pvt, ctrl,
1910 DBAM_DIMM(dimm, dbam),
1913 amd64_info(EDAC_MC ": %d: %5dMB %d: %5dMB\n",
1915 dimm * 2 + 1, size1);
1919 static struct amd64_family_type family_types[] = {
1922 .f1_id = PCI_DEVICE_ID_AMD_K8_NB_ADDRMAP,
1923 .f3_id = PCI_DEVICE_ID_AMD_K8_NB_MISC,
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,
1932 .f1_id = PCI_DEVICE_ID_AMD_10H_NB_MAP,
1933 .f3_id = PCI_DEVICE_ID_AMD_10H_NB_MISC,
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,
1942 .f1_id = PCI_DEVICE_ID_AMD_15H_NB_F1,
1943 .f3_id = PCI_DEVICE_ID_AMD_15H_NB_F3,
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,
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,
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,
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,
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,
1972 .f1_id = PCI_DEVICE_ID_AMD_16H_NB_F1,
1973 .f3_id = PCI_DEVICE_ID_AMD_16H_NB_F3,
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,
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,
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,
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.
1997 * Algorithm courtesy of Ross LaFetra from AMD.
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,
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,
2060 static int decode_syndrome(u16 syndrome, const u16 *vectors, unsigned num_vecs,
2063 unsigned int i, err_sym;
2065 for (err_sym = 0; err_sym < num_vecs / v_dim; err_sym++) {
2067 unsigned v_idx = err_sym * v_dim;
2068 unsigned v_end = (err_sym + 1) * v_dim;
2070 /* walk over all 16 bits of the syndrome */
2071 for (i = 1; i < (1U << 16); i <<= 1) {
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++];
2077 /* ... and bit set in the modified syndrome, */
2087 /* can't get to zero, move to next symbol */
2092 edac_dbg(0, "syndrome(%x) not found\n", syndrome);
2096 static int map_err_sym_to_channel(int err_sym, int sym_size)
2109 return err_sym >> 4;
2115 /* imaginary bits not in a DIMM */
2117 WARN(1, KERN_ERR "Invalid error symbol: 0x%x\n",
2129 return err_sym >> 3;
2135 static int get_channel_from_ecc_syndrome(struct mem_ctl_info *mci, u16 syndrome)
2137 struct amd64_pvt *pvt = mci->pvt_info;
2140 if (pvt->ecc_sym_sz == 8)
2141 err_sym = decode_syndrome(syndrome, x8_vectors,
2142 ARRAY_SIZE(x8_vectors),
2144 else if (pvt->ecc_sym_sz == 4)
2145 err_sym = decode_syndrome(syndrome, x4_vectors,
2146 ARRAY_SIZE(x4_vectors),
2149 amd64_warn("Illegal syndrome type: %u\n", pvt->ecc_sym_sz);
2153 return map_err_sym_to_channel(err_sym, pvt->ecc_sym_sz);
2156 static void __log_bus_error(struct mem_ctl_info *mci, struct err_info *err,
2159 enum hw_event_mc_err_type err_type;
2163 err_type = HW_EVENT_ERR_CORRECTED;
2164 else if (ecc_type == 1)
2165 err_type = HW_EVENT_ERR_UNCORRECTED;
2167 WARN(1, "Something is rotten in the state of Denmark.\n");
2171 switch (err->err_code) {
2176 string = "Failed to map error addr to a node";
2179 string = "Failed to map error addr to a csrow";
2182 string = "unknown syndrome - possible error reporting race";
2185 string = "WTF error";
2189 edac_mc_handle_error(err_type, mci, 1,
2190 err->page, err->offset, err->syndrome,
2191 err->csrow, err->channel, -1,
2195 static inline void decode_bus_error(int node_id, struct mce *m)
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);
2203 struct err_info err;
2205 mci = edac_mc_find(node_id);
2209 pvt = mci->pvt_info;
2211 /* Bail out early if this was an 'observed' error */
2212 if (PP(ec) == NBSL_PP_OBS)
2215 /* Do only ECC errors */
2216 if (xec && xec != F10_NBSL_EXT_ERR_ECC)
2219 memset(&err, 0, sizeof(err));
2221 sys_addr = get_error_address(pvt, m);
2224 err.syndrome = extract_syndrome(m->status);
2226 pvt->ops->map_sysaddr_to_csrow(mci, sys_addr, &err);
2228 __log_bus_error(mci, &err, ecc_type);
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.
2235 static int reserve_mc_sibling_devs(struct amd64_pvt *pvt, u16 f1_id, u16 f3_id)
2237 /* Reserve the ADDRESS MAP Device */
2238 pvt->F1 = pci_get_related_function(pvt->F2->vendor, f1_id, pvt->F2);
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);
2246 /* Reserve the MISC Device */
2247 pvt->F3 = pci_get_related_function(pvt->F2->vendor, f3_id, pvt->F2);
2249 pci_dev_put(pvt->F1);
2252 amd64_err("error F3 device not found: "
2253 "vendor %x device 0x%x (broken BIOS?)\n",
2254 PCI_VENDOR_ID_AMD, f3_id);
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));
2265 static void free_mc_sibling_devs(struct amd64_pvt *pvt)
2267 pci_dev_put(pvt->F1);
2268 pci_dev_put(pvt->F3);
2272 * Retrieve the hardware registers of the memory controller (this includes the
2273 * 'Address Map' and 'Misc' device regs)
2275 static void read_mc_regs(struct amd64_pvt *pvt)
2282 * Retrieve TOP_MEM and TOP_MEM2; no masking off of reserved bits since
2283 * those are Read-As-Zero
2285 rdmsrl(MSR_K8_TOP_MEM1, pvt->top_mem);
2286 edac_dbg(0, " TOP_MEM: 0x%016llx\n", pvt->top_mem);
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);
2294 edac_dbg(0, " TOP_MEM2 disabled\n");
2296 amd64_read_pci_cfg(pvt->F3, NBCAP, &pvt->nbcap);
2298 read_dram_ctl_register(pvt);
2300 for (range = 0; range < DRAM_RANGES; range++) {
2303 /* read settings for this DRAM range */
2304 read_dram_base_limit_regs(pvt, range);
2306 rw = dram_rw(pvt, range);
2310 edac_dbg(1, " DRAM range[%d], base: 0x%016llx; limit: 0x%016llx\n",
2312 get_dram_base(pvt, range),
2313 get_dram_limit(pvt, range));
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));
2323 read_dct_base_mask(pvt);
2325 amd64_read_pci_cfg(pvt->F1, DHAR, &pvt->dhar);
2326 amd64_read_dct_pci_cfg(pvt, 0, DBAM0, &pvt->dbam0);
2328 amd64_read_pci_cfg(pvt->F3, F10_ONLINE_SPARE, &pvt->online_spare);
2330 amd64_read_dct_pci_cfg(pvt, 0, DCLR0, &pvt->dclr0);
2331 amd64_read_dct_pci_cfg(pvt, 0, DCHR0, &pvt->dchr0);
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);
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]);
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);
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;
2352 dump_misc_regs(pvt);
2356 * NOTE: CPU Revision Dependent code
2359 * @csrow_nr ChipSelect Row Number (0..NUM_CHIPSELECTS-1)
2360 * k8 private pointer to -->
2361 * DRAM Bank Address mapping register
2363 * DCL register where dual_channel_active is
2365 * The DBAM register consists of 4 sets of 4 bits each definitions:
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
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.
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.
2381 * The following code logic collapses the various tables for CSROW based on CPU
2385 * The number of PAGE_SIZE pages on the specified CSROW number it
2389 static u32 get_csrow_nr_pages(struct amd64_pvt *pvt, u8 dct, int csrow_nr)
2391 u32 cs_mode, nr_pages;
2392 u32 dbam = dct ? pvt->dbam1 : pvt->dbam0;
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
2402 cs_mode = DBAM_DIMM(csrow_nr / 2, dbam);
2404 nr_pages = pvt->ops->dbam_to_cs(pvt, dct, cs_mode, (csrow_nr / 2))
2405 << (20 - PAGE_SHIFT);
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);
2415 * Initialize the array of csrow attribute instances, based on the values
2416 * from pci config hardware registers.
2418 static int init_csrows(struct mem_ctl_info *mci)
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;
2428 amd64_read_pci_cfg(pvt->F3, NBCFG, &val);
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));
2437 * We iterate over DCT0 here but we look at DCT1 in parallel, if needed.
2439 for_each_chip_select(i, 0, pvt) {
2440 bool row_dct0 = !!csrow_enabled(i, 0, pvt);
2441 bool row_dct1 = false;
2443 if (pvt->fam != 0xf)
2444 row_dct1 = !!csrow_enabled(i, 1, pvt);
2446 if (!row_dct0 && !row_dct1)
2449 csrow = mci->csrows[i];
2452 edac_dbg(1, "MC node: %d, csrow: %d\n",
2453 pvt->mc_node_id, i);
2456 nr_pages = get_csrow_nr_pages(pvt, 0, i);
2457 csrow->channels[0]->dimm->nr_pages = nr_pages;
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);
2464 csrow->channels[1]->dimm->nr_pages = row_dct1_pages;
2465 nr_pages += row_dct1_pages;
2468 edac_dbg(1, "Total csrow%d pages: %u\n", i, nr_pages);
2471 * determine whether CHIPKILL or JUST ECC or NO ECC is operating
2473 if (pvt->nbcfg & NBCFG_ECC_ENABLE)
2474 edac_mode = (pvt->nbcfg & NBCFG_CHIPKILL) ?
2475 EDAC_S4ECD4ED : EDAC_SECDED;
2477 edac_mode = EDAC_NONE;
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;
2489 /* get all cores on this DCT */
2490 static void get_cpus_on_this_dct_cpumask(struct cpumask *mask, u16 nid)
2494 for_each_online_cpu(cpu)
2495 if (amd_get_nb_id(cpu) == nid)
2496 cpumask_set_cpu(cpu, mask);
2499 /* check MCG_CTL on all the cpus on this node */
2500 static bool nb_mce_bank_enabled_on_node(u16 nid)
2506 if (!zalloc_cpumask_var(&mask, GFP_KERNEL)) {
2507 amd64_warn("%s: Error allocating mask\n", __func__);
2511 get_cpus_on_this_dct_cpumask(mask, nid);
2513 rdmsr_on_cpus(mask, MSR_IA32_MCG_CTL, msrs);
2515 for_each_cpu(cpu, mask) {
2516 struct msr *reg = per_cpu_ptr(msrs, cpu);
2517 nbe = reg->l & MSR_MCGCTL_NBE;
2519 edac_dbg(0, "core: %u, MCG_CTL: 0x%llx, NB MSR is %s\n",
2521 (nbe ? "enabled" : "disabled"));
2529 free_cpumask_var(mask);
2533 static int toggle_ecc_err_reporting(struct ecc_settings *s, u16 nid, bool on)
2535 cpumask_var_t cmask;
2538 if (!zalloc_cpumask_var(&cmask, GFP_KERNEL)) {
2539 amd64_warn("%s: error allocating mask\n", __func__);
2543 get_cpus_on_this_dct_cpumask(cmask, nid);
2545 rdmsr_on_cpus(cmask, MSR_IA32_MCG_CTL, msrs);
2547 for_each_cpu(cpu, cmask) {
2549 struct msr *reg = per_cpu_ptr(msrs, cpu);
2552 if (reg->l & MSR_MCGCTL_NBE)
2553 s->flags.nb_mce_enable = 1;
2555 reg->l |= MSR_MCGCTL_NBE;
2558 * Turn off NB MCE reporting only when it was off before
2560 if (!s->flags.nb_mce_enable)
2561 reg->l &= ~MSR_MCGCTL_NBE;
2564 wrmsr_on_cpus(cmask, MSR_IA32_MCG_CTL, msrs);
2566 free_cpumask_var(cmask);
2571 static bool enable_ecc_error_reporting(struct ecc_settings *s, u16 nid,
2575 u32 value, mask = 0x3; /* UECC/CECC enable */
2577 if (toggle_ecc_err_reporting(s, nid, ON)) {
2578 amd64_warn("Error enabling ECC reporting over MCGCTL!\n");
2582 amd64_read_pci_cfg(F3, NBCTL, &value);
2584 s->old_nbctl = value & mask;
2585 s->nbctl_valid = true;
2588 amd64_write_pci_cfg(F3, NBCTL, value);
2590 amd64_read_pci_cfg(F3, NBCFG, &value);
2592 edac_dbg(0, "1: node %d, NBCFG=0x%08x[DramEccEn: %d]\n",
2593 nid, value, !!(value & NBCFG_ECC_ENABLE));
2595 if (!(value & NBCFG_ECC_ENABLE)) {
2596 amd64_warn("DRAM ECC disabled on this node, enabling...\n");
2598 s->flags.nb_ecc_prev = 0;
2600 /* Attempt to turn on DRAM ECC Enable */
2601 value |= NBCFG_ECC_ENABLE;
2602 amd64_write_pci_cfg(F3, NBCFG, value);
2604 amd64_read_pci_cfg(F3, NBCFG, &value);
2606 if (!(value & NBCFG_ECC_ENABLE)) {
2607 amd64_warn("Hardware rejected DRAM ECC enable,"
2608 "check memory DIMM configuration.\n");
2611 amd64_info("Hardware accepted DRAM ECC Enable\n");
2614 s->flags.nb_ecc_prev = 1;
2617 edac_dbg(0, "2: node %d, NBCFG=0x%08x[DramEccEn: %d]\n",
2618 nid, value, !!(value & NBCFG_ECC_ENABLE));
2623 static void restore_ecc_error_reporting(struct ecc_settings *s, u16 nid,
2626 u32 value, mask = 0x3; /* UECC/CECC enable */
2629 if (!s->nbctl_valid)
2632 amd64_read_pci_cfg(F3, NBCTL, &value);
2634 value |= s->old_nbctl;
2636 amd64_write_pci_cfg(F3, NBCTL, value);
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);
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");
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().
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";
2662 static bool ecc_enabled(struct pci_dev *F3, u16 nid)
2666 bool nb_mce_en = false;
2668 amd64_read_pci_cfg(F3, NBCFG, &value);
2670 ecc_en = !!(value & NBCFG_ECC_ENABLE);
2671 amd64_info("DRAM ECC %s.\n", (ecc_en ? "enabled" : "disabled"));
2673 nb_mce_en = nb_mce_bank_enabled_on_node(nid);
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);
2679 if (!ecc_en || !nb_mce_en) {
2680 amd64_notice("%s", ecc_msg);
2686 static void setup_mci_misc_attrs(struct mem_ctl_info *mci,
2687 struct amd64_family_type *fam)
2689 struct amd64_pvt *pvt = mci->pvt_info;
2691 mci->mtype_cap = MEM_FLAG_DDR2 | MEM_FLAG_RDDR2;
2692 mci->edac_ctl_cap = EDAC_FLAG_NONE;
2694 if (pvt->nbcap & NBCAP_SECDED)
2695 mci->edac_ctl_cap |= EDAC_FLAG_SECDED;
2697 if (pvt->nbcap & NBCAP_CHIPKILL)
2698 mci->edac_ctl_cap |= EDAC_FLAG_S4ECD4ED;
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;
2707 /* memory scrubber interface */
2708 mci->set_sdram_scrub_rate = set_scrub_rate;
2709 mci->get_sdram_scrub_rate = get_scrub_rate;
2713 * returns a pointer to the family descriptor on success, NULL otherwise.
2715 static struct amd64_family_type *per_family_init(struct amd64_pvt *pvt)
2717 struct amd64_family_type *fam_type = NULL;
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;
2726 fam_type = &family_types[K8_CPUS];
2727 pvt->ops = &family_types[K8_CPUS].ops;
2731 fam_type = &family_types[F10_CPUS];
2732 pvt->ops = &family_types[F10_CPUS].ops;
2736 if (pvt->model == 0x30) {
2737 fam_type = &family_types[F15_M30H_CPUS];
2738 pvt->ops = &family_types[F15_M30H_CPUS].ops;
2740 } else if (pvt->model == 0x60) {
2741 fam_type = &family_types[F15_M60H_CPUS];
2742 pvt->ops = &family_types[F15_M60H_CPUS].ops;
2746 fam_type = &family_types[F15_CPUS];
2747 pvt->ops = &family_types[F15_CPUS].ops;
2751 if (pvt->model == 0x30) {
2752 fam_type = &family_types[F16_M30H_CPUS];
2753 pvt->ops = &family_types[F16_M30H_CPUS].ops;
2756 fam_type = &family_types[F16_CPUS];
2757 pvt->ops = &family_types[F16_CPUS].ops;
2761 amd64_err("Unsupported family!\n");
2765 amd64_info("%s %sdetected (node %d).\n", fam_type->ctl_name,
2767 (pvt->ext_model >= K8_REV_F ? "revF or later "
2768 : "revE or earlier ")
2769 : ""), pvt->mc_node_id);
2773 static const struct attribute_group *amd64_edac_attr_groups[] = {
2774 #ifdef CONFIG_EDAC_DEBUG
2775 &amd64_edac_dbg_group,
2777 #ifdef CONFIG_EDAC_AMD64_ERROR_INJECTION
2778 &amd64_edac_inj_group,
2783 static int init_one_instance(struct pci_dev *F2)
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];
2790 u16 nid = amd_pci_dev_to_node_id(F2);
2793 pvt = kzalloc(sizeof(struct amd64_pvt), GFP_KERNEL);
2797 pvt->mc_node_id = nid;
2801 fam_type = per_family_init(pvt);
2806 err = reserve_mc_sibling_devs(pvt, fam_type->f1_id, fam_type->f3_id);
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.
2818 pvt->channel_count = pvt->ops->early_channel_count(pvt);
2819 if (pvt->channel_count < 0)
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;
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.
2834 layers[1].is_virt_csrow = false;
2836 mci = edac_mc_alloc(nid, ARRAY_SIZE(layers), layers, 0);
2840 mci->pvt_info = pvt;
2841 mci->pdev = &pvt->F2->dev;
2843 setup_mci_misc_attrs(mci, fam_type);
2845 if (init_csrows(mci))
2846 mci->edac_cap = EDAC_FLAG_NONE;
2849 if (edac_mc_add_mc_with_groups(mci, amd64_edac_attr_groups)) {
2850 edac_dbg(1, "failed edac_mc_add_mc()\n");
2854 /* register stuff with EDAC MCE */
2855 if (report_gart_errors)
2856 amd_report_gart_errors(true);
2858 amd_register_ecc_decoder(decode_bus_error);
2860 atomic_inc(&drv_instances);
2868 free_mc_sibling_devs(pvt);
2877 static int probe_one_instance(struct pci_dev *pdev,
2878 const struct pci_device_id *mc_type)
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;
2885 ret = pci_enable_device(pdev);
2887 edac_dbg(0, "ret=%d\n", ret);
2892 s = kzalloc(sizeof(struct ecc_settings), GFP_KERNEL);
2898 if (!ecc_enabled(F3, nid)) {
2901 if (!ecc_enable_override)
2904 amd64_warn("Forcing ECC on!\n");
2906 if (!enable_ecc_error_reporting(s, nid, F3))
2910 ret = init_one_instance(pdev);
2912 amd64_err("Error probing instance: %d\n", nid);
2913 restore_ecc_error_reporting(s, nid, F3);
2920 ecc_stngs[nid] = NULL;
2926 static void remove_one_instance(struct pci_dev *pdev)
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];
2934 mci = find_mci_by_dev(&pdev->dev);
2937 /* Remove from EDAC CORE tracking list */
2938 mci = edac_mc_del_mc(&pdev->dev);
2942 pvt = mci->pvt_info;
2944 restore_ecc_error_reporting(s, nid, F3);
2946 free_mc_sibling_devs(pvt);
2948 /* unregister from EDAC MCE */
2949 amd_report_gart_errors(false);
2950 amd_unregister_ecc_decoder(decode_bus_error);
2952 kfree(ecc_stngs[nid]);
2953 ecc_stngs[nid] = NULL;
2955 /* Free the EDAC CORE resources */
2956 mci->pvt_info = NULL;
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.
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) },
2977 MODULE_DEVICE_TABLE(pci, amd64_pci_table);
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,
2987 static void setup_pci_device(void)
2989 struct mem_ctl_info *mci;
2990 struct amd64_pvt *pvt;
2995 mci = edac_mc_find(0);
2999 pvt = mci->pvt_info;
3000 pci_ctl = edac_pci_create_generic_ctl(&pvt->F2->dev, EDAC_MOD_STR);
3002 pr_warn("%s(): Unable to create PCI control\n", __func__);
3003 pr_warn("%s(): PCI error report via EDAC not set\n", __func__);
3007 static int __init amd64_edac_init(void)
3011 printk(KERN_INFO "AMD64 EDAC driver v%s\n", EDAC_AMD64_VERSION);
3015 if (amd_cache_northbridges() < 0)
3019 ecc_stngs = kzalloc(amd_nb_num() * sizeof(ecc_stngs[0]), GFP_KERNEL);
3023 msrs = msrs_alloc();
3027 err = pci_register_driver(&amd64_pci_driver);
3032 if (!atomic_read(&drv_instances))
3033 goto err_no_instances;
3037 #ifdef CONFIG_X86_32
3038 amd64_err("%s on 32-bit is unsupported. USE AT YOUR OWN RISK!\n", EDAC_MOD_STR);
3044 pci_unregister_driver(&amd64_pci_driver);
3058 static void __exit amd64_edac_exit(void)
3061 edac_pci_release_generic_ctl(pci_ctl);
3063 pci_unregister_driver(&amd64_pci_driver);
3072 module_init(amd64_edac_init);
3073 module_exit(amd64_edac_exit);
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);
3081 module_param(edac_op_state, int, 0444);
3082 MODULE_PARM_DESC(edac_op_state, "EDAC Error Reporting state: 0=Poll,1=NMI");