1 // SPDX-License-Identifier: GPL-2.0-only 2 #include "amd64_edac.h" 3 #include <asm/amd_nb.h> 4 5 static struct edac_pci_ctl_info *pci_ctl; 6 7 /* 8 * Set by command line parameter. If BIOS has enabled the ECC, this override is 9 * cleared to prevent re-enabling the hardware by this driver. 10 */ 11 static int ecc_enable_override; 12 module_param(ecc_enable_override, int, 0644); 13 14 static struct msr __percpu *msrs; 15 16 static struct amd64_family_type *fam_type; 17 18 static inline u32 get_umc_reg(u32 reg) 19 { 20 if (!fam_type->flags.zn_regs_v2) 21 return reg; 22 23 switch (reg) { 24 case UMCCH_ADDR_CFG: return UMCCH_ADDR_CFG_DDR5; 25 case UMCCH_ADDR_MASK_SEC: return UMCCH_ADDR_MASK_SEC_DDR5; 26 case UMCCH_DIMM_CFG: return UMCCH_DIMM_CFG_DDR5; 27 } 28 29 WARN_ONCE(1, "%s: unknown register 0x%x", __func__, reg); 30 return 0; 31 } 32 33 /* Per-node stuff */ 34 static struct ecc_settings **ecc_stngs; 35 36 /* Device for the PCI component */ 37 static struct device *pci_ctl_dev; 38 39 /* 40 * Valid scrub rates for the K8 hardware memory scrubber. We map the scrubbing 41 * bandwidth to a valid bit pattern. The 'set' operation finds the 'matching- 42 * or higher value'. 43 * 44 *FIXME: Produce a better mapping/linearisation. 45 */ 46 static const struct scrubrate { 47 u32 scrubval; /* bit pattern for scrub rate */ 48 u32 bandwidth; /* bandwidth consumed (bytes/sec) */ 49 } scrubrates[] = { 50 { 0x01, 1600000000UL}, 51 { 0x02, 800000000UL}, 52 { 0x03, 400000000UL}, 53 { 0x04, 200000000UL}, 54 { 0x05, 100000000UL}, 55 { 0x06, 50000000UL}, 56 { 0x07, 25000000UL}, 57 { 0x08, 12284069UL}, 58 { 0x09, 6274509UL}, 59 { 0x0A, 3121951UL}, 60 { 0x0B, 1560975UL}, 61 { 0x0C, 781440UL}, 62 { 0x0D, 390720UL}, 63 { 0x0E, 195300UL}, 64 { 0x0F, 97650UL}, 65 { 0x10, 48854UL}, 66 { 0x11, 24427UL}, 67 { 0x12, 12213UL}, 68 { 0x13, 6101UL}, 69 { 0x14, 3051UL}, 70 { 0x15, 1523UL}, 71 { 0x16, 761UL}, 72 { 0x00, 0UL}, /* scrubbing off */ 73 }; 74 75 int __amd64_read_pci_cfg_dword(struct pci_dev *pdev, int offset, 76 u32 *val, const char *func) 77 { 78 int err = 0; 79 80 err = pci_read_config_dword(pdev, offset, val); 81 if (err) 82 amd64_warn("%s: error reading F%dx%03x.\n", 83 func, PCI_FUNC(pdev->devfn), offset); 84 85 return err; 86 } 87 88 int __amd64_write_pci_cfg_dword(struct pci_dev *pdev, int offset, 89 u32 val, const char *func) 90 { 91 int err = 0; 92 93 err = pci_write_config_dword(pdev, offset, val); 94 if (err) 95 amd64_warn("%s: error writing to F%dx%03x.\n", 96 func, PCI_FUNC(pdev->devfn), offset); 97 98 return err; 99 } 100 101 /* 102 * Select DCT to which PCI cfg accesses are routed 103 */ 104 static void f15h_select_dct(struct amd64_pvt *pvt, u8 dct) 105 { 106 u32 reg = 0; 107 108 amd64_read_pci_cfg(pvt->F1, DCT_CFG_SEL, ®); 109 reg &= (pvt->model == 0x30) ? ~3 : ~1; 110 reg |= dct; 111 amd64_write_pci_cfg(pvt->F1, DCT_CFG_SEL, reg); 112 } 113 114 /* 115 * 116 * Depending on the family, F2 DCT reads need special handling: 117 * 118 * K8: has a single DCT only and no address offsets >= 0x100 119 * 120 * F10h: each DCT has its own set of regs 121 * DCT0 -> F2x040.. 122 * DCT1 -> F2x140.. 123 * 124 * F16h: has only 1 DCT 125 * 126 * F15h: we select which DCT we access using F1x10C[DctCfgSel] 127 */ 128 static inline int amd64_read_dct_pci_cfg(struct amd64_pvt *pvt, u8 dct, 129 int offset, u32 *val) 130 { 131 switch (pvt->fam) { 132 case 0xf: 133 if (dct || offset >= 0x100) 134 return -EINVAL; 135 break; 136 137 case 0x10: 138 if (dct) { 139 /* 140 * Note: If ganging is enabled, barring the regs 141 * F2x[1,0]98 and F2x[1,0]9C; reads reads to F2x1xx 142 * return 0. (cf. Section 2.8.1 F10h BKDG) 143 */ 144 if (dct_ganging_enabled(pvt)) 145 return 0; 146 147 offset += 0x100; 148 } 149 break; 150 151 case 0x15: 152 /* 153 * F15h: F2x1xx addresses do not map explicitly to DCT1. 154 * We should select which DCT we access using F1x10C[DctCfgSel] 155 */ 156 dct = (dct && pvt->model == 0x30) ? 3 : dct; 157 f15h_select_dct(pvt, dct); 158 break; 159 160 case 0x16: 161 if (dct) 162 return -EINVAL; 163 break; 164 165 default: 166 break; 167 } 168 return amd64_read_pci_cfg(pvt->F2, offset, val); 169 } 170 171 /* 172 * Memory scrubber control interface. For K8, memory scrubbing is handled by 173 * hardware and can involve L2 cache, dcache as well as the main memory. With 174 * F10, this is extended to L3 cache scrubbing on CPU models sporting that 175 * functionality. 176 * 177 * This causes the "units" for the scrubbing speed to vary from 64 byte blocks 178 * (dram) over to cache lines. This is nasty, so we will use bandwidth in 179 * bytes/sec for the setting. 180 * 181 * Currently, we only do dram scrubbing. If the scrubbing is done in software on 182 * other archs, we might not have access to the caches directly. 183 */ 184 185 /* 186 * Scan the scrub rate mapping table for a close or matching bandwidth value to 187 * issue. If requested is too big, then use last maximum value found. 188 */ 189 static int __set_scrub_rate(struct amd64_pvt *pvt, u32 new_bw, u32 min_rate) 190 { 191 u32 scrubval; 192 int i; 193 194 /* 195 * map the configured rate (new_bw) to a value specific to the AMD64 196 * memory controller and apply to register. Search for the first 197 * bandwidth entry that is greater or equal than the setting requested 198 * and program that. If at last entry, turn off DRAM scrubbing. 199 * 200 * If no suitable bandwidth is found, turn off DRAM scrubbing entirely 201 * by falling back to the last element in scrubrates[]. 202 */ 203 for (i = 0; i < ARRAY_SIZE(scrubrates) - 1; i++) { 204 /* 205 * skip scrub rates which aren't recommended 206 * (see F10 BKDG, F3x58) 207 */ 208 if (scrubrates[i].scrubval < min_rate) 209 continue; 210 211 if (scrubrates[i].bandwidth <= new_bw) 212 break; 213 } 214 215 scrubval = scrubrates[i].scrubval; 216 217 if (pvt->fam == 0x15 && pvt->model == 0x60) { 218 f15h_select_dct(pvt, 0); 219 pci_write_bits32(pvt->F2, F15H_M60H_SCRCTRL, scrubval, 0x001F); 220 f15h_select_dct(pvt, 1); 221 pci_write_bits32(pvt->F2, F15H_M60H_SCRCTRL, scrubval, 0x001F); 222 } else { 223 pci_write_bits32(pvt->F3, SCRCTRL, scrubval, 0x001F); 224 } 225 226 if (scrubval) 227 return scrubrates[i].bandwidth; 228 229 return 0; 230 } 231 232 static int set_scrub_rate(struct mem_ctl_info *mci, u32 bw) 233 { 234 struct amd64_pvt *pvt = mci->pvt_info; 235 u32 min_scrubrate = 0x5; 236 237 if (pvt->fam == 0xf) 238 min_scrubrate = 0x0; 239 240 if (pvt->fam == 0x15) { 241 /* Erratum #505 */ 242 if (pvt->model < 0x10) 243 f15h_select_dct(pvt, 0); 244 245 if (pvt->model == 0x60) 246 min_scrubrate = 0x6; 247 } 248 return __set_scrub_rate(pvt, bw, min_scrubrate); 249 } 250 251 static int get_scrub_rate(struct mem_ctl_info *mci) 252 { 253 struct amd64_pvt *pvt = mci->pvt_info; 254 int i, retval = -EINVAL; 255 u32 scrubval = 0; 256 257 if (pvt->fam == 0x15) { 258 /* Erratum #505 */ 259 if (pvt->model < 0x10) 260 f15h_select_dct(pvt, 0); 261 262 if (pvt->model == 0x60) 263 amd64_read_pci_cfg(pvt->F2, F15H_M60H_SCRCTRL, &scrubval); 264 else 265 amd64_read_pci_cfg(pvt->F3, SCRCTRL, &scrubval); 266 } else { 267 amd64_read_pci_cfg(pvt->F3, SCRCTRL, &scrubval); 268 } 269 270 scrubval = scrubval & 0x001F; 271 272 for (i = 0; i < ARRAY_SIZE(scrubrates); i++) { 273 if (scrubrates[i].scrubval == scrubval) { 274 retval = scrubrates[i].bandwidth; 275 break; 276 } 277 } 278 return retval; 279 } 280 281 /* 282 * returns true if the SysAddr given by sys_addr matches the 283 * DRAM base/limit associated with node_id 284 */ 285 static bool base_limit_match(struct amd64_pvt *pvt, u64 sys_addr, u8 nid) 286 { 287 u64 addr; 288 289 /* The K8 treats this as a 40-bit value. However, bits 63-40 will be 290 * all ones if the most significant implemented address bit is 1. 291 * Here we discard bits 63-40. See section 3.4.2 of AMD publication 292 * 24592: AMD x86-64 Architecture Programmer's Manual Volume 1 293 * Application Programming. 294 */ 295 addr = sys_addr & 0x000000ffffffffffull; 296 297 return ((addr >= get_dram_base(pvt, nid)) && 298 (addr <= get_dram_limit(pvt, nid))); 299 } 300 301 /* 302 * Attempt to map a SysAddr to a node. On success, return a pointer to the 303 * mem_ctl_info structure for the node that the SysAddr maps to. 304 * 305 * On failure, return NULL. 306 */ 307 static struct mem_ctl_info *find_mc_by_sys_addr(struct mem_ctl_info *mci, 308 u64 sys_addr) 309 { 310 struct amd64_pvt *pvt; 311 u8 node_id; 312 u32 intlv_en, bits; 313 314 /* 315 * Here we use the DRAM Base (section 3.4.4.1) and DRAM Limit (section 316 * 3.4.4.2) registers to map the SysAddr to a node ID. 317 */ 318 pvt = mci->pvt_info; 319 320 /* 321 * The value of this field should be the same for all DRAM Base 322 * registers. Therefore we arbitrarily choose to read it from the 323 * register for node 0. 324 */ 325 intlv_en = dram_intlv_en(pvt, 0); 326 327 if (intlv_en == 0) { 328 for (node_id = 0; node_id < DRAM_RANGES; node_id++) { 329 if (base_limit_match(pvt, sys_addr, node_id)) 330 goto found; 331 } 332 goto err_no_match; 333 } 334 335 if (unlikely((intlv_en != 0x01) && 336 (intlv_en != 0x03) && 337 (intlv_en != 0x07))) { 338 amd64_warn("DRAM Base[IntlvEn] junk value: 0x%x, BIOS bug?\n", intlv_en); 339 return NULL; 340 } 341 342 bits = (((u32) sys_addr) >> 12) & intlv_en; 343 344 for (node_id = 0; ; ) { 345 if ((dram_intlv_sel(pvt, node_id) & intlv_en) == bits) 346 break; /* intlv_sel field matches */ 347 348 if (++node_id >= DRAM_RANGES) 349 goto err_no_match; 350 } 351 352 /* sanity test for sys_addr */ 353 if (unlikely(!base_limit_match(pvt, sys_addr, node_id))) { 354 amd64_warn("%s: sys_addr 0x%llx falls outside base/limit address" 355 "range for node %d with node interleaving enabled.\n", 356 __func__, sys_addr, node_id); 357 return NULL; 358 } 359 360 found: 361 return edac_mc_find((int)node_id); 362 363 err_no_match: 364 edac_dbg(2, "sys_addr 0x%lx doesn't match any node\n", 365 (unsigned long)sys_addr); 366 367 return NULL; 368 } 369 370 /* 371 * compute the CS base address of the @csrow on the DRAM controller @dct. 372 * For details see F2x[5C:40] in the processor's BKDG 373 */ 374 static void get_cs_base_and_mask(struct amd64_pvt *pvt, int csrow, u8 dct, 375 u64 *base, u64 *mask) 376 { 377 u64 csbase, csmask, base_bits, mask_bits; 378 u8 addr_shift; 379 380 if (pvt->fam == 0xf && pvt->ext_model < K8_REV_F) { 381 csbase = pvt->csels[dct].csbases[csrow]; 382 csmask = pvt->csels[dct].csmasks[csrow]; 383 base_bits = GENMASK_ULL(31, 21) | GENMASK_ULL(15, 9); 384 mask_bits = GENMASK_ULL(29, 21) | GENMASK_ULL(15, 9); 385 addr_shift = 4; 386 387 /* 388 * F16h and F15h, models 30h and later need two addr_shift values: 389 * 8 for high and 6 for low (cf. F16h BKDG). 390 */ 391 } else if (pvt->fam == 0x16 || 392 (pvt->fam == 0x15 && pvt->model >= 0x30)) { 393 csbase = pvt->csels[dct].csbases[csrow]; 394 csmask = pvt->csels[dct].csmasks[csrow >> 1]; 395 396 *base = (csbase & GENMASK_ULL(15, 5)) << 6; 397 *base |= (csbase & GENMASK_ULL(30, 19)) << 8; 398 399 *mask = ~0ULL; 400 /* poke holes for the csmask */ 401 *mask &= ~((GENMASK_ULL(15, 5) << 6) | 402 (GENMASK_ULL(30, 19) << 8)); 403 404 *mask |= (csmask & GENMASK_ULL(15, 5)) << 6; 405 *mask |= (csmask & GENMASK_ULL(30, 19)) << 8; 406 407 return; 408 } else { 409 csbase = pvt->csels[dct].csbases[csrow]; 410 csmask = pvt->csels[dct].csmasks[csrow >> 1]; 411 addr_shift = 8; 412 413 if (pvt->fam == 0x15) 414 base_bits = mask_bits = 415 GENMASK_ULL(30,19) | GENMASK_ULL(13,5); 416 else 417 base_bits = mask_bits = 418 GENMASK_ULL(28,19) | GENMASK_ULL(13,5); 419 } 420 421 *base = (csbase & base_bits) << addr_shift; 422 423 *mask = ~0ULL; 424 /* poke holes for the csmask */ 425 *mask &= ~(mask_bits << addr_shift); 426 /* OR them in */ 427 *mask |= (csmask & mask_bits) << addr_shift; 428 } 429 430 #define for_each_chip_select(i, dct, pvt) \ 431 for (i = 0; i < pvt->csels[dct].b_cnt; i++) 432 433 #define chip_select_base(i, dct, pvt) \ 434 pvt->csels[dct].csbases[i] 435 436 #define for_each_chip_select_mask(i, dct, pvt) \ 437 for (i = 0; i < pvt->csels[dct].m_cnt; i++) 438 439 #define for_each_umc(i) \ 440 for (i = 0; i < fam_type->max_mcs; i++) 441 442 /* 443 * @input_addr is an InputAddr associated with the node given by mci. Return the 444 * csrow that input_addr maps to, or -1 on failure (no csrow claims input_addr). 445 */ 446 static int input_addr_to_csrow(struct mem_ctl_info *mci, u64 input_addr) 447 { 448 struct amd64_pvt *pvt; 449 int csrow; 450 u64 base, mask; 451 452 pvt = mci->pvt_info; 453 454 for_each_chip_select(csrow, 0, pvt) { 455 if (!csrow_enabled(csrow, 0, pvt)) 456 continue; 457 458 get_cs_base_and_mask(pvt, csrow, 0, &base, &mask); 459 460 mask = ~mask; 461 462 if ((input_addr & mask) == (base & mask)) { 463 edac_dbg(2, "InputAddr 0x%lx matches csrow %d (node %d)\n", 464 (unsigned long)input_addr, csrow, 465 pvt->mc_node_id); 466 467 return csrow; 468 } 469 } 470 edac_dbg(2, "no matching csrow for InputAddr 0x%lx (MC node %d)\n", 471 (unsigned long)input_addr, pvt->mc_node_id); 472 473 return -1; 474 } 475 476 /* 477 * Obtain info from the DRAM Hole Address Register (section 3.4.8, pub #26094) 478 * for the node represented by mci. Info is passed back in *hole_base, 479 * *hole_offset, and *hole_size. Function returns 0 if info is valid or 1 if 480 * info is invalid. Info may be invalid for either of the following reasons: 481 * 482 * - The revision of the node is not E or greater. In this case, the DRAM Hole 483 * Address Register does not exist. 484 * 485 * - The DramHoleValid bit is cleared in the DRAM Hole Address Register, 486 * indicating that its contents are not valid. 487 * 488 * The values passed back in *hole_base, *hole_offset, and *hole_size are 489 * complete 32-bit values despite the fact that the bitfields in the DHAR 490 * only represent bits 31-24 of the base and offset values. 491 */ 492 static int get_dram_hole_info(struct mem_ctl_info *mci, u64 *hole_base, 493 u64 *hole_offset, u64 *hole_size) 494 { 495 struct amd64_pvt *pvt = mci->pvt_info; 496 497 /* only revE and later have the DRAM Hole Address Register */ 498 if (pvt->fam == 0xf && pvt->ext_model < K8_REV_E) { 499 edac_dbg(1, " revision %d for node %d does not support DHAR\n", 500 pvt->ext_model, pvt->mc_node_id); 501 return 1; 502 } 503 504 /* valid for Fam10h and above */ 505 if (pvt->fam >= 0x10 && !dhar_mem_hoist_valid(pvt)) { 506 edac_dbg(1, " Dram Memory Hoisting is DISABLED on this system\n"); 507 return 1; 508 } 509 510 if (!dhar_valid(pvt)) { 511 edac_dbg(1, " Dram Memory Hoisting is DISABLED on this node %d\n", 512 pvt->mc_node_id); 513 return 1; 514 } 515 516 /* This node has Memory Hoisting */ 517 518 /* +------------------+--------------------+--------------------+----- 519 * | memory | DRAM hole | relocated | 520 * | [0, (x - 1)] | [x, 0xffffffff] | addresses from | 521 * | | | DRAM hole | 522 * | | | [0x100000000, | 523 * | | | (0x100000000+ | 524 * | | | (0xffffffff-x))] | 525 * +------------------+--------------------+--------------------+----- 526 * 527 * Above is a diagram of physical memory showing the DRAM hole and the 528 * relocated addresses from the DRAM hole. As shown, the DRAM hole 529 * starts at address x (the base address) and extends through address 530 * 0xffffffff. The DRAM Hole Address Register (DHAR) relocates the 531 * addresses in the hole so that they start at 0x100000000. 532 */ 533 534 *hole_base = dhar_base(pvt); 535 *hole_size = (1ULL << 32) - *hole_base; 536 537 *hole_offset = (pvt->fam > 0xf) ? f10_dhar_offset(pvt) 538 : k8_dhar_offset(pvt); 539 540 edac_dbg(1, " DHAR info for node %d base 0x%lx offset 0x%lx size 0x%lx\n", 541 pvt->mc_node_id, (unsigned long)*hole_base, 542 (unsigned long)*hole_offset, (unsigned long)*hole_size); 543 544 return 0; 545 } 546 547 #ifdef CONFIG_EDAC_DEBUG 548 #define EDAC_DCT_ATTR_SHOW(reg) \ 549 static ssize_t reg##_show(struct device *dev, \ 550 struct device_attribute *mattr, char *data) \ 551 { \ 552 struct mem_ctl_info *mci = to_mci(dev); \ 553 struct amd64_pvt *pvt = mci->pvt_info; \ 554 \ 555 return sprintf(data, "0x%016llx\n", (u64)pvt->reg); \ 556 } 557 558 EDAC_DCT_ATTR_SHOW(dhar); 559 EDAC_DCT_ATTR_SHOW(dbam0); 560 EDAC_DCT_ATTR_SHOW(top_mem); 561 EDAC_DCT_ATTR_SHOW(top_mem2); 562 563 static ssize_t dram_hole_show(struct device *dev, struct device_attribute *mattr, 564 char *data) 565 { 566 struct mem_ctl_info *mci = to_mci(dev); 567 568 u64 hole_base = 0; 569 u64 hole_offset = 0; 570 u64 hole_size = 0; 571 572 get_dram_hole_info(mci, &hole_base, &hole_offset, &hole_size); 573 574 return sprintf(data, "%llx %llx %llx\n", hole_base, hole_offset, 575 hole_size); 576 } 577 578 /* 579 * update NUM_DBG_ATTRS in case you add new members 580 */ 581 static DEVICE_ATTR(dhar, S_IRUGO, dhar_show, NULL); 582 static DEVICE_ATTR(dbam, S_IRUGO, dbam0_show, NULL); 583 static DEVICE_ATTR(topmem, S_IRUGO, top_mem_show, NULL); 584 static DEVICE_ATTR(topmem2, S_IRUGO, top_mem2_show, NULL); 585 static DEVICE_ATTR_RO(dram_hole); 586 587 static struct attribute *dbg_attrs[] = { 588 &dev_attr_dhar.attr, 589 &dev_attr_dbam.attr, 590 &dev_attr_topmem.attr, 591 &dev_attr_topmem2.attr, 592 &dev_attr_dram_hole.attr, 593 NULL 594 }; 595 596 static const struct attribute_group dbg_group = { 597 .attrs = dbg_attrs, 598 }; 599 600 static ssize_t inject_section_show(struct device *dev, 601 struct device_attribute *mattr, char *buf) 602 { 603 struct mem_ctl_info *mci = to_mci(dev); 604 struct amd64_pvt *pvt = mci->pvt_info; 605 return sprintf(buf, "0x%x\n", pvt->injection.section); 606 } 607 608 /* 609 * store error injection section value which refers to one of 4 16-byte sections 610 * within a 64-byte cacheline 611 * 612 * range: 0..3 613 */ 614 static ssize_t inject_section_store(struct device *dev, 615 struct device_attribute *mattr, 616 const char *data, size_t count) 617 { 618 struct mem_ctl_info *mci = to_mci(dev); 619 struct amd64_pvt *pvt = mci->pvt_info; 620 unsigned long value; 621 int ret; 622 623 ret = kstrtoul(data, 10, &value); 624 if (ret < 0) 625 return ret; 626 627 if (value > 3) { 628 amd64_warn("%s: invalid section 0x%lx\n", __func__, value); 629 return -EINVAL; 630 } 631 632 pvt->injection.section = (u32) value; 633 return count; 634 } 635 636 static ssize_t inject_word_show(struct device *dev, 637 struct device_attribute *mattr, char *buf) 638 { 639 struct mem_ctl_info *mci = to_mci(dev); 640 struct amd64_pvt *pvt = mci->pvt_info; 641 return sprintf(buf, "0x%x\n", pvt->injection.word); 642 } 643 644 /* 645 * store error injection word value which refers to one of 9 16-bit word of the 646 * 16-byte (128-bit + ECC bits) section 647 * 648 * range: 0..8 649 */ 650 static ssize_t inject_word_store(struct device *dev, 651 struct device_attribute *mattr, 652 const char *data, size_t count) 653 { 654 struct mem_ctl_info *mci = to_mci(dev); 655 struct amd64_pvt *pvt = mci->pvt_info; 656 unsigned long value; 657 int ret; 658 659 ret = kstrtoul(data, 10, &value); 660 if (ret < 0) 661 return ret; 662 663 if (value > 8) { 664 amd64_warn("%s: invalid word 0x%lx\n", __func__, value); 665 return -EINVAL; 666 } 667 668 pvt->injection.word = (u32) value; 669 return count; 670 } 671 672 static ssize_t inject_ecc_vector_show(struct device *dev, 673 struct device_attribute *mattr, 674 char *buf) 675 { 676 struct mem_ctl_info *mci = to_mci(dev); 677 struct amd64_pvt *pvt = mci->pvt_info; 678 return sprintf(buf, "0x%x\n", pvt->injection.bit_map); 679 } 680 681 /* 682 * store 16 bit error injection vector which enables injecting errors to the 683 * corresponding bit within the error injection word above. When used during a 684 * DRAM ECC read, it holds the contents of the of the DRAM ECC bits. 685 */ 686 static ssize_t inject_ecc_vector_store(struct device *dev, 687 struct device_attribute *mattr, 688 const char *data, size_t count) 689 { 690 struct mem_ctl_info *mci = to_mci(dev); 691 struct amd64_pvt *pvt = mci->pvt_info; 692 unsigned long value; 693 int ret; 694 695 ret = kstrtoul(data, 16, &value); 696 if (ret < 0) 697 return ret; 698 699 if (value & 0xFFFF0000) { 700 amd64_warn("%s: invalid EccVector: 0x%lx\n", __func__, value); 701 return -EINVAL; 702 } 703 704 pvt->injection.bit_map = (u32) value; 705 return count; 706 } 707 708 /* 709 * Do a DRAM ECC read. Assemble staged values in the pvt area, format into 710 * fields needed by the injection registers and read the NB Array Data Port. 711 */ 712 static ssize_t inject_read_store(struct device *dev, 713 struct device_attribute *mattr, 714 const char *data, size_t count) 715 { 716 struct mem_ctl_info *mci = to_mci(dev); 717 struct amd64_pvt *pvt = mci->pvt_info; 718 unsigned long value; 719 u32 section, word_bits; 720 int ret; 721 722 ret = kstrtoul(data, 10, &value); 723 if (ret < 0) 724 return ret; 725 726 /* Form value to choose 16-byte section of cacheline */ 727 section = F10_NB_ARRAY_DRAM | SET_NB_ARRAY_ADDR(pvt->injection.section); 728 729 amd64_write_pci_cfg(pvt->F3, F10_NB_ARRAY_ADDR, section); 730 731 word_bits = SET_NB_DRAM_INJECTION_READ(pvt->injection); 732 733 /* Issue 'word' and 'bit' along with the READ request */ 734 amd64_write_pci_cfg(pvt->F3, F10_NB_ARRAY_DATA, word_bits); 735 736 edac_dbg(0, "section=0x%x word_bits=0x%x\n", section, word_bits); 737 738 return count; 739 } 740 741 /* 742 * Do a DRAM ECC write. Assemble staged values in the pvt area and format into 743 * fields needed by the injection registers. 744 */ 745 static ssize_t inject_write_store(struct device *dev, 746 struct device_attribute *mattr, 747 const char *data, size_t count) 748 { 749 struct mem_ctl_info *mci = to_mci(dev); 750 struct amd64_pvt *pvt = mci->pvt_info; 751 u32 section, word_bits, tmp; 752 unsigned long value; 753 int ret; 754 755 ret = kstrtoul(data, 10, &value); 756 if (ret < 0) 757 return ret; 758 759 /* Form value to choose 16-byte section of cacheline */ 760 section = F10_NB_ARRAY_DRAM | SET_NB_ARRAY_ADDR(pvt->injection.section); 761 762 amd64_write_pci_cfg(pvt->F3, F10_NB_ARRAY_ADDR, section); 763 764 word_bits = SET_NB_DRAM_INJECTION_WRITE(pvt->injection); 765 766 pr_notice_once("Don't forget to decrease MCE polling interval in\n" 767 "/sys/bus/machinecheck/devices/machinecheck<CPUNUM>/check_interval\n" 768 "so that you can get the error report faster.\n"); 769 770 on_each_cpu(disable_caches, NULL, 1); 771 772 /* Issue 'word' and 'bit' along with the READ request */ 773 amd64_write_pci_cfg(pvt->F3, F10_NB_ARRAY_DATA, word_bits); 774 775 retry: 776 /* wait until injection happens */ 777 amd64_read_pci_cfg(pvt->F3, F10_NB_ARRAY_DATA, &tmp); 778 if (tmp & F10_NB_ARR_ECC_WR_REQ) { 779 cpu_relax(); 780 goto retry; 781 } 782 783 on_each_cpu(enable_caches, NULL, 1); 784 785 edac_dbg(0, "section=0x%x word_bits=0x%x\n", section, word_bits); 786 787 return count; 788 } 789 790 /* 791 * update NUM_INJ_ATTRS in case you add new members 792 */ 793 794 static DEVICE_ATTR_RW(inject_section); 795 static DEVICE_ATTR_RW(inject_word); 796 static DEVICE_ATTR_RW(inject_ecc_vector); 797 static DEVICE_ATTR_WO(inject_write); 798 static DEVICE_ATTR_WO(inject_read); 799 800 static struct attribute *inj_attrs[] = { 801 &dev_attr_inject_section.attr, 802 &dev_attr_inject_word.attr, 803 &dev_attr_inject_ecc_vector.attr, 804 &dev_attr_inject_write.attr, 805 &dev_attr_inject_read.attr, 806 NULL 807 }; 808 809 static umode_t inj_is_visible(struct kobject *kobj, struct attribute *attr, int idx) 810 { 811 struct device *dev = kobj_to_dev(kobj); 812 struct mem_ctl_info *mci = container_of(dev, struct mem_ctl_info, dev); 813 struct amd64_pvt *pvt = mci->pvt_info; 814 815 /* Families which have that injection hw */ 816 if (pvt->fam >= 0x10 && pvt->fam <= 0x16) 817 return attr->mode; 818 819 return 0; 820 } 821 822 static const struct attribute_group inj_group = { 823 .attrs = inj_attrs, 824 .is_visible = inj_is_visible, 825 }; 826 #endif /* CONFIG_EDAC_DEBUG */ 827 828 /* 829 * Return the DramAddr that the SysAddr given by @sys_addr maps to. It is 830 * assumed that sys_addr maps to the node given by mci. 831 * 832 * The first part of section 3.4.4 (p. 70) shows how the DRAM Base (section 833 * 3.4.4.1) and DRAM Limit (section 3.4.4.2) registers are used to translate a 834 * SysAddr to a DramAddr. If the DRAM Hole Address Register (DHAR) is enabled, 835 * then it is also involved in translating a SysAddr to a DramAddr. Sections 836 * 3.4.8 and 3.5.8.2 describe the DHAR and how it is used for memory hoisting. 837 * These parts of the documentation are unclear. I interpret them as follows: 838 * 839 * When node n receives a SysAddr, it processes the SysAddr as follows: 840 * 841 * 1. It extracts the DRAMBase and DRAMLimit values from the DRAM Base and DRAM 842 * Limit registers for node n. If the SysAddr is not within the range 843 * specified by the base and limit values, then node n ignores the Sysaddr 844 * (since it does not map to node n). Otherwise continue to step 2 below. 845 * 846 * 2. If the DramHoleValid bit of the DHAR for node n is clear, the DHAR is 847 * disabled so skip to step 3 below. Otherwise see if the SysAddr is within 848 * the range of relocated addresses (starting at 0x100000000) from the DRAM 849 * hole. If not, skip to step 3 below. Else get the value of the 850 * DramHoleOffset field from the DHAR. To obtain the DramAddr, subtract the 851 * offset defined by this value from the SysAddr. 852 * 853 * 3. Obtain the base address for node n from the DRAMBase field of the DRAM 854 * Base register for node n. To obtain the DramAddr, subtract the base 855 * address from the SysAddr, as shown near the start of section 3.4.4 (p.70). 856 */ 857 static u64 sys_addr_to_dram_addr(struct mem_ctl_info *mci, u64 sys_addr) 858 { 859 struct amd64_pvt *pvt = mci->pvt_info; 860 u64 dram_base, hole_base, hole_offset, hole_size, dram_addr; 861 int ret; 862 863 dram_base = get_dram_base(pvt, pvt->mc_node_id); 864 865 ret = get_dram_hole_info(mci, &hole_base, &hole_offset, &hole_size); 866 if (!ret) { 867 if ((sys_addr >= (1ULL << 32)) && 868 (sys_addr < ((1ULL << 32) + hole_size))) { 869 /* use DHAR to translate SysAddr to DramAddr */ 870 dram_addr = sys_addr - hole_offset; 871 872 edac_dbg(2, "using DHAR to translate SysAddr 0x%lx to DramAddr 0x%lx\n", 873 (unsigned long)sys_addr, 874 (unsigned long)dram_addr); 875 876 return dram_addr; 877 } 878 } 879 880 /* 881 * Translate the SysAddr to a DramAddr as shown near the start of 882 * section 3.4.4 (p. 70). Although sys_addr is a 64-bit value, the k8 883 * only deals with 40-bit values. Therefore we discard bits 63-40 of 884 * sys_addr below. If bit 39 of sys_addr is 1 then the bits we 885 * discard are all 1s. Otherwise the bits we discard are all 0s. See 886 * section 3.4.2 of AMD publication 24592: AMD x86-64 Architecture 887 * Programmer's Manual Volume 1 Application Programming. 888 */ 889 dram_addr = (sys_addr & GENMASK_ULL(39, 0)) - dram_base; 890 891 edac_dbg(2, "using DRAM Base register to translate SysAddr 0x%lx to DramAddr 0x%lx\n", 892 (unsigned long)sys_addr, (unsigned long)dram_addr); 893 return dram_addr; 894 } 895 896 /* 897 * @intlv_en is the value of the IntlvEn field from a DRAM Base register 898 * (section 3.4.4.1). Return the number of bits from a SysAddr that are used 899 * for node interleaving. 900 */ 901 static int num_node_interleave_bits(unsigned intlv_en) 902 { 903 static const int intlv_shift_table[] = { 0, 1, 0, 2, 0, 0, 0, 3 }; 904 int n; 905 906 BUG_ON(intlv_en > 7); 907 n = intlv_shift_table[intlv_en]; 908 return n; 909 } 910 911 /* Translate the DramAddr given by @dram_addr to an InputAddr. */ 912 static u64 dram_addr_to_input_addr(struct mem_ctl_info *mci, u64 dram_addr) 913 { 914 struct amd64_pvt *pvt; 915 int intlv_shift; 916 u64 input_addr; 917 918 pvt = mci->pvt_info; 919 920 /* 921 * See the start of section 3.4.4 (p. 70, BKDG #26094, K8, revA-E) 922 * concerning translating a DramAddr to an InputAddr. 923 */ 924 intlv_shift = num_node_interleave_bits(dram_intlv_en(pvt, 0)); 925 input_addr = ((dram_addr >> intlv_shift) & GENMASK_ULL(35, 12)) + 926 (dram_addr & 0xfff); 927 928 edac_dbg(2, " Intlv Shift=%d DramAddr=0x%lx maps to InputAddr=0x%lx\n", 929 intlv_shift, (unsigned long)dram_addr, 930 (unsigned long)input_addr); 931 932 return input_addr; 933 } 934 935 /* 936 * Translate the SysAddr represented by @sys_addr to an InputAddr. It is 937 * assumed that @sys_addr maps to the node given by mci. 938 */ 939 static u64 sys_addr_to_input_addr(struct mem_ctl_info *mci, u64 sys_addr) 940 { 941 u64 input_addr; 942 943 input_addr = 944 dram_addr_to_input_addr(mci, sys_addr_to_dram_addr(mci, sys_addr)); 945 946 edac_dbg(2, "SysAddr 0x%lx translates to InputAddr 0x%lx\n", 947 (unsigned long)sys_addr, (unsigned long)input_addr); 948 949 return input_addr; 950 } 951 952 /* Map the Error address to a PAGE and PAGE OFFSET. */ 953 static inline void error_address_to_page_and_offset(u64 error_address, 954 struct err_info *err) 955 { 956 err->page = (u32) (error_address >> PAGE_SHIFT); 957 err->offset = ((u32) error_address) & ~PAGE_MASK; 958 } 959 960 /* 961 * @sys_addr is an error address (a SysAddr) extracted from the MCA NB Address 962 * Low (section 3.6.4.5) and MCA NB Address High (section 3.6.4.6) registers 963 * of a node that detected an ECC memory error. mci represents the node that 964 * the error address maps to (possibly different from the node that detected 965 * the error). Return the number of the csrow that sys_addr maps to, or -1 on 966 * error. 967 */ 968 static int sys_addr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr) 969 { 970 int csrow; 971 972 csrow = input_addr_to_csrow(mci, sys_addr_to_input_addr(mci, sys_addr)); 973 974 if (csrow == -1) 975 amd64_mc_err(mci, "Failed to translate InputAddr to csrow for " 976 "address 0x%lx\n", (unsigned long)sys_addr); 977 return csrow; 978 } 979 980 /* Protect the PCI config register pairs used for DF indirect access. */ 981 static DEFINE_MUTEX(df_indirect_mutex); 982 983 /* 984 * Data Fabric Indirect Access uses FICAA/FICAD. 985 * 986 * Fabric Indirect Configuration Access Address (FICAA): Constructed based 987 * on the device's Instance Id and the PCI function and register offset of 988 * the desired register. 989 * 990 * Fabric Indirect Configuration Access Data (FICAD): There are FICAD LO 991 * and FICAD HI registers but so far we only need the LO register. 992 * 993 * Use Instance Id 0xFF to indicate a broadcast read. 994 */ 995 #define DF_BROADCAST 0xFF 996 static int __df_indirect_read(u16 node, u8 func, u16 reg, u8 instance_id, u32 *lo) 997 { 998 struct pci_dev *F4; 999 u32 ficaa; 1000 int err = -ENODEV; 1001 1002 if (node >= amd_nb_num()) 1003 goto out; 1004 1005 F4 = node_to_amd_nb(node)->link; 1006 if (!F4) 1007 goto out; 1008 1009 ficaa = (instance_id == DF_BROADCAST) ? 0 : 1; 1010 ficaa |= reg & 0x3FC; 1011 ficaa |= (func & 0x7) << 11; 1012 ficaa |= instance_id << 16; 1013 1014 mutex_lock(&df_indirect_mutex); 1015 1016 err = pci_write_config_dword(F4, 0x5C, ficaa); 1017 if (err) { 1018 pr_warn("Error writing DF Indirect FICAA, FICAA=0x%x\n", ficaa); 1019 goto out_unlock; 1020 } 1021 1022 err = pci_read_config_dword(F4, 0x98, lo); 1023 if (err) 1024 pr_warn("Error reading DF Indirect FICAD LO, FICAA=0x%x.\n", ficaa); 1025 1026 out_unlock: 1027 mutex_unlock(&df_indirect_mutex); 1028 1029 out: 1030 return err; 1031 } 1032 1033 static int df_indirect_read_instance(u16 node, u8 func, u16 reg, u8 instance_id, u32 *lo) 1034 { 1035 return __df_indirect_read(node, func, reg, instance_id, lo); 1036 } 1037 1038 static int df_indirect_read_broadcast(u16 node, u8 func, u16 reg, u32 *lo) 1039 { 1040 return __df_indirect_read(node, func, reg, DF_BROADCAST, lo); 1041 } 1042 1043 struct addr_ctx { 1044 u64 ret_addr; 1045 u32 tmp; 1046 u16 nid; 1047 u8 inst_id; 1048 }; 1049 1050 static int umc_normaddr_to_sysaddr(u64 norm_addr, u16 nid, u8 umc, u64 *sys_addr) 1051 { 1052 u64 dram_base_addr, dram_limit_addr, dram_hole_base; 1053 1054 u8 die_id_shift, die_id_mask, socket_id_shift, socket_id_mask; 1055 u8 intlv_num_dies, intlv_num_chan, intlv_num_sockets; 1056 u8 intlv_addr_sel, intlv_addr_bit; 1057 u8 num_intlv_bits, hashed_bit; 1058 u8 lgcy_mmio_hole_en, base = 0; 1059 u8 cs_mask, cs_id = 0; 1060 bool hash_enabled = false; 1061 1062 struct addr_ctx ctx; 1063 1064 memset(&ctx, 0, sizeof(ctx)); 1065 1066 /* Start from the normalized address */ 1067 ctx.ret_addr = norm_addr; 1068 1069 ctx.nid = nid; 1070 ctx.inst_id = umc; 1071 1072 /* Read D18F0x1B4 (DramOffset), check if base 1 is used. */ 1073 if (df_indirect_read_instance(nid, 0, 0x1B4, umc, &ctx.tmp)) 1074 goto out_err; 1075 1076 /* Remove HiAddrOffset from normalized address, if enabled: */ 1077 if (ctx.tmp & BIT(0)) { 1078 u64 hi_addr_offset = (ctx.tmp & GENMASK_ULL(31, 20)) << 8; 1079 1080 if (norm_addr >= hi_addr_offset) { 1081 ctx.ret_addr -= hi_addr_offset; 1082 base = 1; 1083 } 1084 } 1085 1086 /* Read D18F0x110 (DramBaseAddress). */ 1087 if (df_indirect_read_instance(nid, 0, 0x110 + (8 * base), umc, &ctx.tmp)) 1088 goto out_err; 1089 1090 /* Check if address range is valid. */ 1091 if (!(ctx.tmp & BIT(0))) { 1092 pr_err("%s: Invalid DramBaseAddress range: 0x%x.\n", 1093 __func__, ctx.tmp); 1094 goto out_err; 1095 } 1096 1097 lgcy_mmio_hole_en = ctx.tmp & BIT(1); 1098 intlv_num_chan = (ctx.tmp >> 4) & 0xF; 1099 intlv_addr_sel = (ctx.tmp >> 8) & 0x7; 1100 dram_base_addr = (ctx.tmp & GENMASK_ULL(31, 12)) << 16; 1101 1102 /* {0, 1, 2, 3} map to address bits {8, 9, 10, 11} respectively */ 1103 if (intlv_addr_sel > 3) { 1104 pr_err("%s: Invalid interleave address select %d.\n", 1105 __func__, intlv_addr_sel); 1106 goto out_err; 1107 } 1108 1109 /* Read D18F0x114 (DramLimitAddress). */ 1110 if (df_indirect_read_instance(nid, 0, 0x114 + (8 * base), umc, &ctx.tmp)) 1111 goto out_err; 1112 1113 intlv_num_sockets = (ctx.tmp >> 8) & 0x1; 1114 intlv_num_dies = (ctx.tmp >> 10) & 0x3; 1115 dram_limit_addr = ((ctx.tmp & GENMASK_ULL(31, 12)) << 16) | GENMASK_ULL(27, 0); 1116 1117 intlv_addr_bit = intlv_addr_sel + 8; 1118 1119 /* Re-use intlv_num_chan by setting it equal to log2(#channels) */ 1120 switch (intlv_num_chan) { 1121 case 0: intlv_num_chan = 0; break; 1122 case 1: intlv_num_chan = 1; break; 1123 case 3: intlv_num_chan = 2; break; 1124 case 5: intlv_num_chan = 3; break; 1125 case 7: intlv_num_chan = 4; break; 1126 1127 case 8: intlv_num_chan = 1; 1128 hash_enabled = true; 1129 break; 1130 default: 1131 pr_err("%s: Invalid number of interleaved channels %d.\n", 1132 __func__, intlv_num_chan); 1133 goto out_err; 1134 } 1135 1136 num_intlv_bits = intlv_num_chan; 1137 1138 if (intlv_num_dies > 2) { 1139 pr_err("%s: Invalid number of interleaved nodes/dies %d.\n", 1140 __func__, intlv_num_dies); 1141 goto out_err; 1142 } 1143 1144 num_intlv_bits += intlv_num_dies; 1145 1146 /* Add a bit if sockets are interleaved. */ 1147 num_intlv_bits += intlv_num_sockets; 1148 1149 /* Assert num_intlv_bits <= 4 */ 1150 if (num_intlv_bits > 4) { 1151 pr_err("%s: Invalid interleave bits %d.\n", 1152 __func__, num_intlv_bits); 1153 goto out_err; 1154 } 1155 1156 if (num_intlv_bits > 0) { 1157 u64 temp_addr_x, temp_addr_i, temp_addr_y; 1158 u8 die_id_bit, sock_id_bit, cs_fabric_id; 1159 1160 /* 1161 * Read FabricBlockInstanceInformation3_CS[BlockFabricID]. 1162 * This is the fabric id for this coherent slave. Use 1163 * umc/channel# as instance id of the coherent slave 1164 * for FICAA. 1165 */ 1166 if (df_indirect_read_instance(nid, 0, 0x50, umc, &ctx.tmp)) 1167 goto out_err; 1168 1169 cs_fabric_id = (ctx.tmp >> 8) & 0xFF; 1170 die_id_bit = 0; 1171 1172 /* If interleaved over more than 1 channel: */ 1173 if (intlv_num_chan) { 1174 die_id_bit = intlv_num_chan; 1175 cs_mask = (1 << die_id_bit) - 1; 1176 cs_id = cs_fabric_id & cs_mask; 1177 } 1178 1179 sock_id_bit = die_id_bit; 1180 1181 /* Read D18F1x208 (SystemFabricIdMask). */ 1182 if (intlv_num_dies || intlv_num_sockets) 1183 if (df_indirect_read_broadcast(nid, 1, 0x208, &ctx.tmp)) 1184 goto out_err; 1185 1186 /* If interleaved over more than 1 die. */ 1187 if (intlv_num_dies) { 1188 sock_id_bit = die_id_bit + intlv_num_dies; 1189 die_id_shift = (ctx.tmp >> 24) & 0xF; 1190 die_id_mask = (ctx.tmp >> 8) & 0xFF; 1191 1192 cs_id |= ((cs_fabric_id & die_id_mask) >> die_id_shift) << die_id_bit; 1193 } 1194 1195 /* If interleaved over more than 1 socket. */ 1196 if (intlv_num_sockets) { 1197 socket_id_shift = (ctx.tmp >> 28) & 0xF; 1198 socket_id_mask = (ctx.tmp >> 16) & 0xFF; 1199 1200 cs_id |= ((cs_fabric_id & socket_id_mask) >> socket_id_shift) << sock_id_bit; 1201 } 1202 1203 /* 1204 * The pre-interleaved address consists of XXXXXXIIIYYYYY 1205 * where III is the ID for this CS, and XXXXXXYYYYY are the 1206 * address bits from the post-interleaved address. 1207 * "num_intlv_bits" has been calculated to tell us how many "I" 1208 * bits there are. "intlv_addr_bit" tells us how many "Y" bits 1209 * there are (where "I" starts). 1210 */ 1211 temp_addr_y = ctx.ret_addr & GENMASK_ULL(intlv_addr_bit - 1, 0); 1212 temp_addr_i = (cs_id << intlv_addr_bit); 1213 temp_addr_x = (ctx.ret_addr & GENMASK_ULL(63, intlv_addr_bit)) << num_intlv_bits; 1214 ctx.ret_addr = temp_addr_x | temp_addr_i | temp_addr_y; 1215 } 1216 1217 /* Add dram base address */ 1218 ctx.ret_addr += dram_base_addr; 1219 1220 /* If legacy MMIO hole enabled */ 1221 if (lgcy_mmio_hole_en) { 1222 if (df_indirect_read_broadcast(nid, 0, 0x104, &ctx.tmp)) 1223 goto out_err; 1224 1225 dram_hole_base = ctx.tmp & GENMASK(31, 24); 1226 if (ctx.ret_addr >= dram_hole_base) 1227 ctx.ret_addr += (BIT_ULL(32) - dram_hole_base); 1228 } 1229 1230 if (hash_enabled) { 1231 /* Save some parentheses and grab ls-bit at the end. */ 1232 hashed_bit = (ctx.ret_addr >> 12) ^ 1233 (ctx.ret_addr >> 18) ^ 1234 (ctx.ret_addr >> 21) ^ 1235 (ctx.ret_addr >> 30) ^ 1236 cs_id; 1237 1238 hashed_bit &= BIT(0); 1239 1240 if (hashed_bit != ((ctx.ret_addr >> intlv_addr_bit) & BIT(0))) 1241 ctx.ret_addr ^= BIT(intlv_addr_bit); 1242 } 1243 1244 /* Is calculated system address is above DRAM limit address? */ 1245 if (ctx.ret_addr > dram_limit_addr) 1246 goto out_err; 1247 1248 *sys_addr = ctx.ret_addr; 1249 return 0; 1250 1251 out_err: 1252 return -EINVAL; 1253 } 1254 1255 static int get_channel_from_ecc_syndrome(struct mem_ctl_info *, u16); 1256 1257 /* 1258 * Determine if the DIMMs have ECC enabled. ECC is enabled ONLY if all the DIMMs 1259 * are ECC capable. 1260 */ 1261 static unsigned long determine_edac_cap(struct amd64_pvt *pvt) 1262 { 1263 unsigned long edac_cap = EDAC_FLAG_NONE; 1264 u8 bit; 1265 1266 if (pvt->umc) { 1267 u8 i, umc_en_mask = 0, dimm_ecc_en_mask = 0; 1268 1269 for_each_umc(i) { 1270 if (!(pvt->umc[i].sdp_ctrl & UMC_SDP_INIT)) 1271 continue; 1272 1273 umc_en_mask |= BIT(i); 1274 1275 /* UMC Configuration bit 12 (DimmEccEn) */ 1276 if (pvt->umc[i].umc_cfg & BIT(12)) 1277 dimm_ecc_en_mask |= BIT(i); 1278 } 1279 1280 if (umc_en_mask == dimm_ecc_en_mask) 1281 edac_cap = EDAC_FLAG_SECDED; 1282 } else { 1283 bit = (pvt->fam > 0xf || pvt->ext_model >= K8_REV_F) 1284 ? 19 1285 : 17; 1286 1287 if (pvt->dclr0 & BIT(bit)) 1288 edac_cap = EDAC_FLAG_SECDED; 1289 } 1290 1291 return edac_cap; 1292 } 1293 1294 static void debug_display_dimm_sizes(struct amd64_pvt *, u8); 1295 1296 static void debug_dump_dramcfg_low(struct amd64_pvt *pvt, u32 dclr, int chan) 1297 { 1298 edac_dbg(1, "F2x%d90 (DRAM Cfg Low): 0x%08x\n", chan, dclr); 1299 1300 if (pvt->dram_type == MEM_LRDDR3) { 1301 u32 dcsm = pvt->csels[chan].csmasks[0]; 1302 /* 1303 * It's assumed all LRDIMMs in a DCT are going to be of 1304 * same 'type' until proven otherwise. So, use a cs 1305 * value of '0' here to get dcsm value. 1306 */ 1307 edac_dbg(1, " LRDIMM %dx rank multiply\n", (dcsm & 0x3)); 1308 } 1309 1310 edac_dbg(1, "All DIMMs support ECC:%s\n", 1311 (dclr & BIT(19)) ? "yes" : "no"); 1312 1313 1314 edac_dbg(1, " PAR/ERR parity: %s\n", 1315 (dclr & BIT(8)) ? "enabled" : "disabled"); 1316 1317 if (pvt->fam == 0x10) 1318 edac_dbg(1, " DCT 128bit mode width: %s\n", 1319 (dclr & BIT(11)) ? "128b" : "64b"); 1320 1321 edac_dbg(1, " x4 logical DIMMs present: L0: %s L1: %s L2: %s L3: %s\n", 1322 (dclr & BIT(12)) ? "yes" : "no", 1323 (dclr & BIT(13)) ? "yes" : "no", 1324 (dclr & BIT(14)) ? "yes" : "no", 1325 (dclr & BIT(15)) ? "yes" : "no"); 1326 } 1327 1328 #define CS_EVEN_PRIMARY BIT(0) 1329 #define CS_ODD_PRIMARY BIT(1) 1330 #define CS_EVEN_SECONDARY BIT(2) 1331 #define CS_ODD_SECONDARY BIT(3) 1332 #define CS_3R_INTERLEAVE BIT(4) 1333 1334 #define CS_EVEN (CS_EVEN_PRIMARY | CS_EVEN_SECONDARY) 1335 #define CS_ODD (CS_ODD_PRIMARY | CS_ODD_SECONDARY) 1336 1337 static int f17_get_cs_mode(int dimm, u8 ctrl, struct amd64_pvt *pvt) 1338 { 1339 u8 base, count = 0; 1340 int cs_mode = 0; 1341 1342 if (csrow_enabled(2 * dimm, ctrl, pvt)) 1343 cs_mode |= CS_EVEN_PRIMARY; 1344 1345 if (csrow_enabled(2 * dimm + 1, ctrl, pvt)) 1346 cs_mode |= CS_ODD_PRIMARY; 1347 1348 /* Asymmetric dual-rank DIMM support. */ 1349 if (csrow_sec_enabled(2 * dimm + 1, ctrl, pvt)) 1350 cs_mode |= CS_ODD_SECONDARY; 1351 1352 /* 1353 * 3 Rank inteleaving support. 1354 * There should be only three bases enabled and their two masks should 1355 * be equal. 1356 */ 1357 for_each_chip_select(base, ctrl, pvt) 1358 count += csrow_enabled(base, ctrl, pvt); 1359 1360 if (count == 3 && 1361 pvt->csels[ctrl].csmasks[0] == pvt->csels[ctrl].csmasks[1]) { 1362 edac_dbg(1, "3R interleaving in use.\n"); 1363 cs_mode |= CS_3R_INTERLEAVE; 1364 } 1365 1366 return cs_mode; 1367 } 1368 1369 static void debug_display_dimm_sizes_df(struct amd64_pvt *pvt, u8 ctrl) 1370 { 1371 int dimm, size0, size1, cs0, cs1, cs_mode; 1372 1373 edac_printk(KERN_DEBUG, EDAC_MC, "UMC%d chip selects:\n", ctrl); 1374 1375 for (dimm = 0; dimm < 2; dimm++) { 1376 cs0 = dimm * 2; 1377 cs1 = dimm * 2 + 1; 1378 1379 cs_mode = f17_get_cs_mode(dimm, ctrl, pvt); 1380 1381 size0 = pvt->ops->dbam_to_cs(pvt, ctrl, cs_mode, cs0); 1382 size1 = pvt->ops->dbam_to_cs(pvt, ctrl, cs_mode, cs1); 1383 1384 amd64_info(EDAC_MC ": %d: %5dMB %d: %5dMB\n", 1385 cs0, size0, 1386 cs1, size1); 1387 } 1388 } 1389 1390 static void __dump_misc_regs_df(struct amd64_pvt *pvt) 1391 { 1392 struct amd64_umc *umc; 1393 u32 i, tmp, umc_base; 1394 1395 for_each_umc(i) { 1396 umc_base = get_umc_base(i); 1397 umc = &pvt->umc[i]; 1398 1399 edac_dbg(1, "UMC%d DIMM cfg: 0x%x\n", i, umc->dimm_cfg); 1400 edac_dbg(1, "UMC%d UMC cfg: 0x%x\n", i, umc->umc_cfg); 1401 edac_dbg(1, "UMC%d SDP ctrl: 0x%x\n", i, umc->sdp_ctrl); 1402 edac_dbg(1, "UMC%d ECC ctrl: 0x%x\n", i, umc->ecc_ctrl); 1403 1404 amd_smn_read(pvt->mc_node_id, umc_base + UMCCH_ECC_BAD_SYMBOL, &tmp); 1405 edac_dbg(1, "UMC%d ECC bad symbol: 0x%x\n", i, tmp); 1406 1407 amd_smn_read(pvt->mc_node_id, umc_base + UMCCH_UMC_CAP, &tmp); 1408 edac_dbg(1, "UMC%d UMC cap: 0x%x\n", i, tmp); 1409 edac_dbg(1, "UMC%d UMC cap high: 0x%x\n", i, umc->umc_cap_hi); 1410 1411 edac_dbg(1, "UMC%d ECC capable: %s, ChipKill ECC capable: %s\n", 1412 i, (umc->umc_cap_hi & BIT(30)) ? "yes" : "no", 1413 (umc->umc_cap_hi & BIT(31)) ? "yes" : "no"); 1414 edac_dbg(1, "UMC%d All DIMMs support ECC: %s\n", 1415 i, (umc->umc_cfg & BIT(12)) ? "yes" : "no"); 1416 edac_dbg(1, "UMC%d x4 DIMMs present: %s\n", 1417 i, (umc->dimm_cfg & BIT(6)) ? "yes" : "no"); 1418 edac_dbg(1, "UMC%d x16 DIMMs present: %s\n", 1419 i, (umc->dimm_cfg & BIT(7)) ? "yes" : "no"); 1420 1421 if (umc->dram_type == MEM_LRDDR4 || umc->dram_type == MEM_LRDDR5) { 1422 amd_smn_read(pvt->mc_node_id, 1423 umc_base + get_umc_reg(UMCCH_ADDR_CFG), 1424 &tmp); 1425 edac_dbg(1, "UMC%d LRDIMM %dx rank multiply\n", 1426 i, 1 << ((tmp >> 4) & 0x3)); 1427 } 1428 1429 debug_display_dimm_sizes_df(pvt, i); 1430 } 1431 } 1432 1433 /* Display and decode various NB registers for debug purposes. */ 1434 static void __dump_misc_regs(struct amd64_pvt *pvt) 1435 { 1436 edac_dbg(1, "F3xE8 (NB Cap): 0x%08x\n", pvt->nbcap); 1437 1438 edac_dbg(1, " NB two channel DRAM capable: %s\n", 1439 (pvt->nbcap & NBCAP_DCT_DUAL) ? "yes" : "no"); 1440 1441 edac_dbg(1, " ECC capable: %s, ChipKill ECC capable: %s\n", 1442 (pvt->nbcap & NBCAP_SECDED) ? "yes" : "no", 1443 (pvt->nbcap & NBCAP_CHIPKILL) ? "yes" : "no"); 1444 1445 debug_dump_dramcfg_low(pvt, pvt->dclr0, 0); 1446 1447 edac_dbg(1, "F3xB0 (Online Spare): 0x%08x\n", pvt->online_spare); 1448 1449 edac_dbg(1, "F1xF0 (DRAM Hole Address): 0x%08x, base: 0x%08x, offset: 0x%08x\n", 1450 pvt->dhar, dhar_base(pvt), 1451 (pvt->fam == 0xf) ? k8_dhar_offset(pvt) 1452 : f10_dhar_offset(pvt)); 1453 1454 debug_display_dimm_sizes(pvt, 0); 1455 1456 /* everything below this point is Fam10h and above */ 1457 if (pvt->fam == 0xf) 1458 return; 1459 1460 debug_display_dimm_sizes(pvt, 1); 1461 1462 /* Only if NOT ganged does dclr1 have valid info */ 1463 if (!dct_ganging_enabled(pvt)) 1464 debug_dump_dramcfg_low(pvt, pvt->dclr1, 1); 1465 1466 edac_dbg(1, " DramHoleValid: %s\n", dhar_valid(pvt) ? "yes" : "no"); 1467 } 1468 1469 /* Display and decode various NB registers for debug purposes. */ 1470 static void dump_misc_regs(struct amd64_pvt *pvt) 1471 { 1472 if (pvt->umc) 1473 __dump_misc_regs_df(pvt); 1474 else 1475 __dump_misc_regs(pvt); 1476 1477 amd64_info("using x%u syndromes.\n", pvt->ecc_sym_sz); 1478 } 1479 1480 /* 1481 * See BKDG, F2x[1,0][5C:40], F2[1,0][6C:60] 1482 */ 1483 static void prep_chip_selects(struct amd64_pvt *pvt) 1484 { 1485 if (pvt->fam == 0xf && pvt->ext_model < K8_REV_F) { 1486 pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 8; 1487 pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 8; 1488 } else if (pvt->fam == 0x15 && pvt->model == 0x30) { 1489 pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 4; 1490 pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 2; 1491 } else if (pvt->fam >= 0x17) { 1492 int umc; 1493 1494 for_each_umc(umc) { 1495 pvt->csels[umc].b_cnt = 4; 1496 pvt->csels[umc].m_cnt = fam_type->flags.zn_regs_v2 ? 4 : 2; 1497 } 1498 1499 } else { 1500 pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 8; 1501 pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 4; 1502 } 1503 } 1504 1505 static void read_umc_base_mask(struct amd64_pvt *pvt) 1506 { 1507 u32 umc_base_reg, umc_base_reg_sec; 1508 u32 umc_mask_reg, umc_mask_reg_sec; 1509 u32 base_reg, base_reg_sec; 1510 u32 mask_reg, mask_reg_sec; 1511 u32 *base, *base_sec; 1512 u32 *mask, *mask_sec; 1513 int cs, umc; 1514 1515 for_each_umc(umc) { 1516 umc_base_reg = get_umc_base(umc) + UMCCH_BASE_ADDR; 1517 umc_base_reg_sec = get_umc_base(umc) + UMCCH_BASE_ADDR_SEC; 1518 1519 for_each_chip_select(cs, umc, pvt) { 1520 base = &pvt->csels[umc].csbases[cs]; 1521 base_sec = &pvt->csels[umc].csbases_sec[cs]; 1522 1523 base_reg = umc_base_reg + (cs * 4); 1524 base_reg_sec = umc_base_reg_sec + (cs * 4); 1525 1526 if (!amd_smn_read(pvt->mc_node_id, base_reg, base)) 1527 edac_dbg(0, " DCSB%d[%d]=0x%08x reg: 0x%x\n", 1528 umc, cs, *base, base_reg); 1529 1530 if (!amd_smn_read(pvt->mc_node_id, base_reg_sec, base_sec)) 1531 edac_dbg(0, " DCSB_SEC%d[%d]=0x%08x reg: 0x%x\n", 1532 umc, cs, *base_sec, base_reg_sec); 1533 } 1534 1535 umc_mask_reg = get_umc_base(umc) + UMCCH_ADDR_MASK; 1536 umc_mask_reg_sec = get_umc_base(umc) + get_umc_reg(UMCCH_ADDR_MASK_SEC); 1537 1538 for_each_chip_select_mask(cs, umc, pvt) { 1539 mask = &pvt->csels[umc].csmasks[cs]; 1540 mask_sec = &pvt->csels[umc].csmasks_sec[cs]; 1541 1542 mask_reg = umc_mask_reg + (cs * 4); 1543 mask_reg_sec = umc_mask_reg_sec + (cs * 4); 1544 1545 if (!amd_smn_read(pvt->mc_node_id, mask_reg, mask)) 1546 edac_dbg(0, " DCSM%d[%d]=0x%08x reg: 0x%x\n", 1547 umc, cs, *mask, mask_reg); 1548 1549 if (!amd_smn_read(pvt->mc_node_id, mask_reg_sec, mask_sec)) 1550 edac_dbg(0, " DCSM_SEC%d[%d]=0x%08x reg: 0x%x\n", 1551 umc, cs, *mask_sec, mask_reg_sec); 1552 } 1553 } 1554 } 1555 1556 /* 1557 * Function 2 Offset F10_DCSB0; read in the DCS Base and DCS Mask registers 1558 */ 1559 static void read_dct_base_mask(struct amd64_pvt *pvt) 1560 { 1561 int cs; 1562 1563 prep_chip_selects(pvt); 1564 1565 if (pvt->umc) 1566 return read_umc_base_mask(pvt); 1567 1568 for_each_chip_select(cs, 0, pvt) { 1569 int reg0 = DCSB0 + (cs * 4); 1570 int reg1 = DCSB1 + (cs * 4); 1571 u32 *base0 = &pvt->csels[0].csbases[cs]; 1572 u32 *base1 = &pvt->csels[1].csbases[cs]; 1573 1574 if (!amd64_read_dct_pci_cfg(pvt, 0, reg0, base0)) 1575 edac_dbg(0, " DCSB0[%d]=0x%08x reg: F2x%x\n", 1576 cs, *base0, reg0); 1577 1578 if (pvt->fam == 0xf) 1579 continue; 1580 1581 if (!amd64_read_dct_pci_cfg(pvt, 1, reg0, base1)) 1582 edac_dbg(0, " DCSB1[%d]=0x%08x reg: F2x%x\n", 1583 cs, *base1, (pvt->fam == 0x10) ? reg1 1584 : reg0); 1585 } 1586 1587 for_each_chip_select_mask(cs, 0, pvt) { 1588 int reg0 = DCSM0 + (cs * 4); 1589 int reg1 = DCSM1 + (cs * 4); 1590 u32 *mask0 = &pvt->csels[0].csmasks[cs]; 1591 u32 *mask1 = &pvt->csels[1].csmasks[cs]; 1592 1593 if (!amd64_read_dct_pci_cfg(pvt, 0, reg0, mask0)) 1594 edac_dbg(0, " DCSM0[%d]=0x%08x reg: F2x%x\n", 1595 cs, *mask0, reg0); 1596 1597 if (pvt->fam == 0xf) 1598 continue; 1599 1600 if (!amd64_read_dct_pci_cfg(pvt, 1, reg0, mask1)) 1601 edac_dbg(0, " DCSM1[%d]=0x%08x reg: F2x%x\n", 1602 cs, *mask1, (pvt->fam == 0x10) ? reg1 1603 : reg0); 1604 } 1605 } 1606 1607 static void determine_memory_type_df(struct amd64_pvt *pvt) 1608 { 1609 struct amd64_umc *umc; 1610 u32 i; 1611 1612 for_each_umc(i) { 1613 umc = &pvt->umc[i]; 1614 1615 if (!(umc->sdp_ctrl & UMC_SDP_INIT)) { 1616 umc->dram_type = MEM_EMPTY; 1617 continue; 1618 } 1619 1620 /* 1621 * Check if the system supports the "DDR Type" field in UMC Config 1622 * and has DDR5 DIMMs in use. 1623 */ 1624 if (fam_type->flags.zn_regs_v2 && ((umc->umc_cfg & GENMASK(2, 0)) == 0x1)) { 1625 if (umc->dimm_cfg & BIT(5)) 1626 umc->dram_type = MEM_LRDDR5; 1627 else if (umc->dimm_cfg & BIT(4)) 1628 umc->dram_type = MEM_RDDR5; 1629 else 1630 umc->dram_type = MEM_DDR5; 1631 } else { 1632 if (umc->dimm_cfg & BIT(5)) 1633 umc->dram_type = MEM_LRDDR4; 1634 else if (umc->dimm_cfg & BIT(4)) 1635 umc->dram_type = MEM_RDDR4; 1636 else 1637 umc->dram_type = MEM_DDR4; 1638 } 1639 1640 edac_dbg(1, " UMC%d DIMM type: %s\n", i, edac_mem_types[umc->dram_type]); 1641 } 1642 } 1643 1644 static void determine_memory_type(struct amd64_pvt *pvt) 1645 { 1646 u32 dram_ctrl, dcsm; 1647 1648 if (pvt->umc) 1649 return determine_memory_type_df(pvt); 1650 1651 switch (pvt->fam) { 1652 case 0xf: 1653 if (pvt->ext_model >= K8_REV_F) 1654 goto ddr3; 1655 1656 pvt->dram_type = (pvt->dclr0 & BIT(18)) ? MEM_DDR : MEM_RDDR; 1657 return; 1658 1659 case 0x10: 1660 if (pvt->dchr0 & DDR3_MODE) 1661 goto ddr3; 1662 1663 pvt->dram_type = (pvt->dclr0 & BIT(16)) ? MEM_DDR2 : MEM_RDDR2; 1664 return; 1665 1666 case 0x15: 1667 if (pvt->model < 0x60) 1668 goto ddr3; 1669 1670 /* 1671 * Model 0x60h needs special handling: 1672 * 1673 * We use a Chip Select value of '0' to obtain dcsm. 1674 * Theoretically, it is possible to populate LRDIMMs of different 1675 * 'Rank' value on a DCT. But this is not the common case. So, 1676 * it's reasonable to assume all DIMMs are going to be of same 1677 * 'type' until proven otherwise. 1678 */ 1679 amd64_read_dct_pci_cfg(pvt, 0, DRAM_CONTROL, &dram_ctrl); 1680 dcsm = pvt->csels[0].csmasks[0]; 1681 1682 if (((dram_ctrl >> 8) & 0x7) == 0x2) 1683 pvt->dram_type = MEM_DDR4; 1684 else if (pvt->dclr0 & BIT(16)) 1685 pvt->dram_type = MEM_DDR3; 1686 else if (dcsm & 0x3) 1687 pvt->dram_type = MEM_LRDDR3; 1688 else 1689 pvt->dram_type = MEM_RDDR3; 1690 1691 return; 1692 1693 case 0x16: 1694 goto ddr3; 1695 1696 default: 1697 WARN(1, KERN_ERR "%s: Family??? 0x%x\n", __func__, pvt->fam); 1698 pvt->dram_type = MEM_EMPTY; 1699 } 1700 return; 1701 1702 ddr3: 1703 pvt->dram_type = (pvt->dclr0 & BIT(16)) ? MEM_DDR3 : MEM_RDDR3; 1704 } 1705 1706 /* On F10h and later ErrAddr is MC4_ADDR[47:1] */ 1707 static u64 get_error_address(struct amd64_pvt *pvt, struct mce *m) 1708 { 1709 u16 mce_nid = topology_die_id(m->extcpu); 1710 struct mem_ctl_info *mci; 1711 u8 start_bit = 1; 1712 u8 end_bit = 47; 1713 u64 addr; 1714 1715 mci = edac_mc_find(mce_nid); 1716 if (!mci) 1717 return 0; 1718 1719 pvt = mci->pvt_info; 1720 1721 if (pvt->fam == 0xf) { 1722 start_bit = 3; 1723 end_bit = 39; 1724 } 1725 1726 addr = m->addr & GENMASK_ULL(end_bit, start_bit); 1727 1728 /* 1729 * Erratum 637 workaround 1730 */ 1731 if (pvt->fam == 0x15) { 1732 u64 cc6_base, tmp_addr; 1733 u32 tmp; 1734 u8 intlv_en; 1735 1736 if ((addr & GENMASK_ULL(47, 24)) >> 24 != 0x00fdf7) 1737 return addr; 1738 1739 1740 amd64_read_pci_cfg(pvt->F1, DRAM_LOCAL_NODE_LIM, &tmp); 1741 intlv_en = tmp >> 21 & 0x7; 1742 1743 /* add [47:27] + 3 trailing bits */ 1744 cc6_base = (tmp & GENMASK_ULL(20, 0)) << 3; 1745 1746 /* reverse and add DramIntlvEn */ 1747 cc6_base |= intlv_en ^ 0x7; 1748 1749 /* pin at [47:24] */ 1750 cc6_base <<= 24; 1751 1752 if (!intlv_en) 1753 return cc6_base | (addr & GENMASK_ULL(23, 0)); 1754 1755 amd64_read_pci_cfg(pvt->F1, DRAM_LOCAL_NODE_BASE, &tmp); 1756 1757 /* faster log2 */ 1758 tmp_addr = (addr & GENMASK_ULL(23, 12)) << __fls(intlv_en + 1); 1759 1760 /* OR DramIntlvSel into bits [14:12] */ 1761 tmp_addr |= (tmp & GENMASK_ULL(23, 21)) >> 9; 1762 1763 /* add remaining [11:0] bits from original MC4_ADDR */ 1764 tmp_addr |= addr & GENMASK_ULL(11, 0); 1765 1766 return cc6_base | tmp_addr; 1767 } 1768 1769 return addr; 1770 } 1771 1772 static struct pci_dev *pci_get_related_function(unsigned int vendor, 1773 unsigned int device, 1774 struct pci_dev *related) 1775 { 1776 struct pci_dev *dev = NULL; 1777 1778 while ((dev = pci_get_device(vendor, device, dev))) { 1779 if (pci_domain_nr(dev->bus) == pci_domain_nr(related->bus) && 1780 (dev->bus->number == related->bus->number) && 1781 (PCI_SLOT(dev->devfn) == PCI_SLOT(related->devfn))) 1782 break; 1783 } 1784 1785 return dev; 1786 } 1787 1788 static void read_dram_base_limit_regs(struct amd64_pvt *pvt, unsigned range) 1789 { 1790 struct amd_northbridge *nb; 1791 struct pci_dev *f1 = NULL; 1792 unsigned int pci_func; 1793 int off = range << 3; 1794 u32 llim; 1795 1796 amd64_read_pci_cfg(pvt->F1, DRAM_BASE_LO + off, &pvt->ranges[range].base.lo); 1797 amd64_read_pci_cfg(pvt->F1, DRAM_LIMIT_LO + off, &pvt->ranges[range].lim.lo); 1798 1799 if (pvt->fam == 0xf) 1800 return; 1801 1802 if (!dram_rw(pvt, range)) 1803 return; 1804 1805 amd64_read_pci_cfg(pvt->F1, DRAM_BASE_HI + off, &pvt->ranges[range].base.hi); 1806 amd64_read_pci_cfg(pvt->F1, DRAM_LIMIT_HI + off, &pvt->ranges[range].lim.hi); 1807 1808 /* F15h: factor in CC6 save area by reading dst node's limit reg */ 1809 if (pvt->fam != 0x15) 1810 return; 1811 1812 nb = node_to_amd_nb(dram_dst_node(pvt, range)); 1813 if (WARN_ON(!nb)) 1814 return; 1815 1816 if (pvt->model == 0x60) 1817 pci_func = PCI_DEVICE_ID_AMD_15H_M60H_NB_F1; 1818 else if (pvt->model == 0x30) 1819 pci_func = PCI_DEVICE_ID_AMD_15H_M30H_NB_F1; 1820 else 1821 pci_func = PCI_DEVICE_ID_AMD_15H_NB_F1; 1822 1823 f1 = pci_get_related_function(nb->misc->vendor, pci_func, nb->misc); 1824 if (WARN_ON(!f1)) 1825 return; 1826 1827 amd64_read_pci_cfg(f1, DRAM_LOCAL_NODE_LIM, &llim); 1828 1829 pvt->ranges[range].lim.lo &= GENMASK_ULL(15, 0); 1830 1831 /* {[39:27],111b} */ 1832 pvt->ranges[range].lim.lo |= ((llim & 0x1fff) << 3 | 0x7) << 16; 1833 1834 pvt->ranges[range].lim.hi &= GENMASK_ULL(7, 0); 1835 1836 /* [47:40] */ 1837 pvt->ranges[range].lim.hi |= llim >> 13; 1838 1839 pci_dev_put(f1); 1840 } 1841 1842 static void k8_map_sysaddr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr, 1843 struct err_info *err) 1844 { 1845 struct amd64_pvt *pvt = mci->pvt_info; 1846 1847 error_address_to_page_and_offset(sys_addr, err); 1848 1849 /* 1850 * Find out which node the error address belongs to. This may be 1851 * different from the node that detected the error. 1852 */ 1853 err->src_mci = find_mc_by_sys_addr(mci, sys_addr); 1854 if (!err->src_mci) { 1855 amd64_mc_err(mci, "failed to map error addr 0x%lx to a node\n", 1856 (unsigned long)sys_addr); 1857 err->err_code = ERR_NODE; 1858 return; 1859 } 1860 1861 /* Now map the sys_addr to a CSROW */ 1862 err->csrow = sys_addr_to_csrow(err->src_mci, sys_addr); 1863 if (err->csrow < 0) { 1864 err->err_code = ERR_CSROW; 1865 return; 1866 } 1867 1868 /* CHIPKILL enabled */ 1869 if (pvt->nbcfg & NBCFG_CHIPKILL) { 1870 err->channel = get_channel_from_ecc_syndrome(mci, err->syndrome); 1871 if (err->channel < 0) { 1872 /* 1873 * Syndrome didn't map, so we don't know which of the 1874 * 2 DIMMs is in error. So we need to ID 'both' of them 1875 * as suspect. 1876 */ 1877 amd64_mc_warn(err->src_mci, "unknown syndrome 0x%04x - " 1878 "possible error reporting race\n", 1879 err->syndrome); 1880 err->err_code = ERR_CHANNEL; 1881 return; 1882 } 1883 } else { 1884 /* 1885 * non-chipkill ecc mode 1886 * 1887 * The k8 documentation is unclear about how to determine the 1888 * channel number when using non-chipkill memory. This method 1889 * was obtained from email communication with someone at AMD. 1890 * (Wish the email was placed in this comment - norsk) 1891 */ 1892 err->channel = ((sys_addr & BIT(3)) != 0); 1893 } 1894 } 1895 1896 static int ddr2_cs_size(unsigned i, bool dct_width) 1897 { 1898 unsigned shift = 0; 1899 1900 if (i <= 2) 1901 shift = i; 1902 else if (!(i & 0x1)) 1903 shift = i >> 1; 1904 else 1905 shift = (i + 1) >> 1; 1906 1907 return 128 << (shift + !!dct_width); 1908 } 1909 1910 static int k8_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct, 1911 unsigned cs_mode, int cs_mask_nr) 1912 { 1913 u32 dclr = dct ? pvt->dclr1 : pvt->dclr0; 1914 1915 if (pvt->ext_model >= K8_REV_F) { 1916 WARN_ON(cs_mode > 11); 1917 return ddr2_cs_size(cs_mode, dclr & WIDTH_128); 1918 } 1919 else if (pvt->ext_model >= K8_REV_D) { 1920 unsigned diff; 1921 WARN_ON(cs_mode > 10); 1922 1923 /* 1924 * the below calculation, besides trying to win an obfuscated C 1925 * contest, maps cs_mode values to DIMM chip select sizes. The 1926 * mappings are: 1927 * 1928 * cs_mode CS size (mb) 1929 * ======= ============ 1930 * 0 32 1931 * 1 64 1932 * 2 128 1933 * 3 128 1934 * 4 256 1935 * 5 512 1936 * 6 256 1937 * 7 512 1938 * 8 1024 1939 * 9 1024 1940 * 10 2048 1941 * 1942 * Basically, it calculates a value with which to shift the 1943 * smallest CS size of 32MB. 1944 * 1945 * ddr[23]_cs_size have a similar purpose. 1946 */ 1947 diff = cs_mode/3 + (unsigned)(cs_mode > 5); 1948 1949 return 32 << (cs_mode - diff); 1950 } 1951 else { 1952 WARN_ON(cs_mode > 6); 1953 return 32 << cs_mode; 1954 } 1955 } 1956 1957 static int ddr3_cs_size(unsigned i, bool dct_width) 1958 { 1959 unsigned shift = 0; 1960 int cs_size = 0; 1961 1962 if (i == 0 || i == 3 || i == 4) 1963 cs_size = -1; 1964 else if (i <= 2) 1965 shift = i; 1966 else if (i == 12) 1967 shift = 7; 1968 else if (!(i & 0x1)) 1969 shift = i >> 1; 1970 else 1971 shift = (i + 1) >> 1; 1972 1973 if (cs_size != -1) 1974 cs_size = (128 * (1 << !!dct_width)) << shift; 1975 1976 return cs_size; 1977 } 1978 1979 static int ddr3_lrdimm_cs_size(unsigned i, unsigned rank_multiply) 1980 { 1981 unsigned shift = 0; 1982 int cs_size = 0; 1983 1984 if (i < 4 || i == 6) 1985 cs_size = -1; 1986 else if (i == 12) 1987 shift = 7; 1988 else if (!(i & 0x1)) 1989 shift = i >> 1; 1990 else 1991 shift = (i + 1) >> 1; 1992 1993 if (cs_size != -1) 1994 cs_size = rank_multiply * (128 << shift); 1995 1996 return cs_size; 1997 } 1998 1999 static int ddr4_cs_size(unsigned i) 2000 { 2001 int cs_size = 0; 2002 2003 if (i == 0) 2004 cs_size = -1; 2005 else if (i == 1) 2006 cs_size = 1024; 2007 else 2008 /* Min cs_size = 1G */ 2009 cs_size = 1024 * (1 << (i >> 1)); 2010 2011 return cs_size; 2012 } 2013 2014 static int f10_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct, 2015 unsigned cs_mode, int cs_mask_nr) 2016 { 2017 u32 dclr = dct ? pvt->dclr1 : pvt->dclr0; 2018 2019 WARN_ON(cs_mode > 11); 2020 2021 if (pvt->dchr0 & DDR3_MODE || pvt->dchr1 & DDR3_MODE) 2022 return ddr3_cs_size(cs_mode, dclr & WIDTH_128); 2023 else 2024 return ddr2_cs_size(cs_mode, dclr & WIDTH_128); 2025 } 2026 2027 /* 2028 * F15h supports only 64bit DCT interfaces 2029 */ 2030 static int f15_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct, 2031 unsigned cs_mode, int cs_mask_nr) 2032 { 2033 WARN_ON(cs_mode > 12); 2034 2035 return ddr3_cs_size(cs_mode, false); 2036 } 2037 2038 /* F15h M60h supports DDR4 mapping as well.. */ 2039 static int f15_m60h_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct, 2040 unsigned cs_mode, int cs_mask_nr) 2041 { 2042 int cs_size; 2043 u32 dcsm = pvt->csels[dct].csmasks[cs_mask_nr]; 2044 2045 WARN_ON(cs_mode > 12); 2046 2047 if (pvt->dram_type == MEM_DDR4) { 2048 if (cs_mode > 9) 2049 return -1; 2050 2051 cs_size = ddr4_cs_size(cs_mode); 2052 } else if (pvt->dram_type == MEM_LRDDR3) { 2053 unsigned rank_multiply = dcsm & 0xf; 2054 2055 if (rank_multiply == 3) 2056 rank_multiply = 4; 2057 cs_size = ddr3_lrdimm_cs_size(cs_mode, rank_multiply); 2058 } else { 2059 /* Minimum cs size is 512mb for F15hM60h*/ 2060 if (cs_mode == 0x1) 2061 return -1; 2062 2063 cs_size = ddr3_cs_size(cs_mode, false); 2064 } 2065 2066 return cs_size; 2067 } 2068 2069 /* 2070 * F16h and F15h model 30h have only limited cs_modes. 2071 */ 2072 static int f16_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct, 2073 unsigned cs_mode, int cs_mask_nr) 2074 { 2075 WARN_ON(cs_mode > 12); 2076 2077 if (cs_mode == 6 || cs_mode == 8 || 2078 cs_mode == 9 || cs_mode == 12) 2079 return -1; 2080 else 2081 return ddr3_cs_size(cs_mode, false); 2082 } 2083 2084 static int f17_addr_mask_to_cs_size(struct amd64_pvt *pvt, u8 umc, 2085 unsigned int cs_mode, int csrow_nr) 2086 { 2087 u32 addr_mask_orig, addr_mask_deinterleaved; 2088 u32 msb, weight, num_zero_bits; 2089 int cs_mask_nr = csrow_nr; 2090 int dimm, size = 0; 2091 2092 /* No Chip Selects are enabled. */ 2093 if (!cs_mode) 2094 return size; 2095 2096 /* Requested size of an even CS but none are enabled. */ 2097 if (!(cs_mode & CS_EVEN) && !(csrow_nr & 1)) 2098 return size; 2099 2100 /* Requested size of an odd CS but none are enabled. */ 2101 if (!(cs_mode & CS_ODD) && (csrow_nr & 1)) 2102 return size; 2103 2104 /* 2105 * Family 17h introduced systems with one mask per DIMM, 2106 * and two Chip Selects per DIMM. 2107 * 2108 * CS0 and CS1 -> MASK0 / DIMM0 2109 * CS2 and CS3 -> MASK1 / DIMM1 2110 * 2111 * Family 19h Model 10h introduced systems with one mask per Chip Select, 2112 * and two Chip Selects per DIMM. 2113 * 2114 * CS0 -> MASK0 -> DIMM0 2115 * CS1 -> MASK1 -> DIMM0 2116 * CS2 -> MASK2 -> DIMM1 2117 * CS3 -> MASK3 -> DIMM1 2118 * 2119 * Keep the mask number equal to the Chip Select number for newer systems, 2120 * and shift the mask number for older systems. 2121 */ 2122 dimm = csrow_nr >> 1; 2123 2124 if (!fam_type->flags.zn_regs_v2) 2125 cs_mask_nr >>= 1; 2126 2127 /* Asymmetric dual-rank DIMM support. */ 2128 if ((csrow_nr & 1) && (cs_mode & CS_ODD_SECONDARY)) 2129 addr_mask_orig = pvt->csels[umc].csmasks_sec[cs_mask_nr]; 2130 else 2131 addr_mask_orig = pvt->csels[umc].csmasks[cs_mask_nr]; 2132 2133 /* 2134 * The number of zero bits in the mask is equal to the number of bits 2135 * in a full mask minus the number of bits in the current mask. 2136 * 2137 * The MSB is the number of bits in the full mask because BIT[0] is 2138 * always 0. 2139 * 2140 * In the special 3 Rank interleaving case, a single bit is flipped 2141 * without swapping with the most significant bit. This can be handled 2142 * by keeping the MSB where it is and ignoring the single zero bit. 2143 */ 2144 msb = fls(addr_mask_orig) - 1; 2145 weight = hweight_long(addr_mask_orig); 2146 num_zero_bits = msb - weight - !!(cs_mode & CS_3R_INTERLEAVE); 2147 2148 /* Take the number of zero bits off from the top of the mask. */ 2149 addr_mask_deinterleaved = GENMASK_ULL(msb - num_zero_bits, 1); 2150 2151 edac_dbg(1, "CS%d DIMM%d AddrMasks:\n", csrow_nr, dimm); 2152 edac_dbg(1, " Original AddrMask: 0x%x\n", addr_mask_orig); 2153 edac_dbg(1, " Deinterleaved AddrMask: 0x%x\n", addr_mask_deinterleaved); 2154 2155 /* Register [31:1] = Address [39:9]. Size is in kBs here. */ 2156 size = (addr_mask_deinterleaved >> 2) + 1; 2157 2158 /* Return size in MBs. */ 2159 return size >> 10; 2160 } 2161 2162 static void read_dram_ctl_register(struct amd64_pvt *pvt) 2163 { 2164 2165 if (pvt->fam == 0xf) 2166 return; 2167 2168 if (!amd64_read_pci_cfg(pvt->F2, DCT_SEL_LO, &pvt->dct_sel_lo)) { 2169 edac_dbg(0, "F2x110 (DCTSelLow): 0x%08x, High range addrs at: 0x%x\n", 2170 pvt->dct_sel_lo, dct_sel_baseaddr(pvt)); 2171 2172 edac_dbg(0, " DCTs operate in %s mode\n", 2173 (dct_ganging_enabled(pvt) ? "ganged" : "unganged")); 2174 2175 if (!dct_ganging_enabled(pvt)) 2176 edac_dbg(0, " Address range split per DCT: %s\n", 2177 (dct_high_range_enabled(pvt) ? "yes" : "no")); 2178 2179 edac_dbg(0, " data interleave for ECC: %s, DRAM cleared since last warm reset: %s\n", 2180 (dct_data_intlv_enabled(pvt) ? "enabled" : "disabled"), 2181 (dct_memory_cleared(pvt) ? "yes" : "no")); 2182 2183 edac_dbg(0, " channel interleave: %s, " 2184 "interleave bits selector: 0x%x\n", 2185 (dct_interleave_enabled(pvt) ? "enabled" : "disabled"), 2186 dct_sel_interleave_addr(pvt)); 2187 } 2188 2189 amd64_read_pci_cfg(pvt->F2, DCT_SEL_HI, &pvt->dct_sel_hi); 2190 } 2191 2192 /* 2193 * Determine channel (DCT) based on the interleaving mode (see F15h M30h BKDG, 2194 * 2.10.12 Memory Interleaving Modes). 2195 */ 2196 static u8 f15_m30h_determine_channel(struct amd64_pvt *pvt, u64 sys_addr, 2197 u8 intlv_en, int num_dcts_intlv, 2198 u32 dct_sel) 2199 { 2200 u8 channel = 0; 2201 u8 select; 2202 2203 if (!(intlv_en)) 2204 return (u8)(dct_sel); 2205 2206 if (num_dcts_intlv == 2) { 2207 select = (sys_addr >> 8) & 0x3; 2208 channel = select ? 0x3 : 0; 2209 } else if (num_dcts_intlv == 4) { 2210 u8 intlv_addr = dct_sel_interleave_addr(pvt); 2211 switch (intlv_addr) { 2212 case 0x4: 2213 channel = (sys_addr >> 8) & 0x3; 2214 break; 2215 case 0x5: 2216 channel = (sys_addr >> 9) & 0x3; 2217 break; 2218 } 2219 } 2220 return channel; 2221 } 2222 2223 /* 2224 * Determine channel (DCT) based on the interleaving mode: F10h BKDG, 2.8.9 Memory 2225 * Interleaving Modes. 2226 */ 2227 static u8 f1x_determine_channel(struct amd64_pvt *pvt, u64 sys_addr, 2228 bool hi_range_sel, u8 intlv_en) 2229 { 2230 u8 dct_sel_high = (pvt->dct_sel_lo >> 1) & 1; 2231 2232 if (dct_ganging_enabled(pvt)) 2233 return 0; 2234 2235 if (hi_range_sel) 2236 return dct_sel_high; 2237 2238 /* 2239 * see F2x110[DctSelIntLvAddr] - channel interleave mode 2240 */ 2241 if (dct_interleave_enabled(pvt)) { 2242 u8 intlv_addr = dct_sel_interleave_addr(pvt); 2243 2244 /* return DCT select function: 0=DCT0, 1=DCT1 */ 2245 if (!intlv_addr) 2246 return sys_addr >> 6 & 1; 2247 2248 if (intlv_addr & 0x2) { 2249 u8 shift = intlv_addr & 0x1 ? 9 : 6; 2250 u32 temp = hweight_long((u32) ((sys_addr >> 16) & 0x1F)) & 1; 2251 2252 return ((sys_addr >> shift) & 1) ^ temp; 2253 } 2254 2255 if (intlv_addr & 0x4) { 2256 u8 shift = intlv_addr & 0x1 ? 9 : 8; 2257 2258 return (sys_addr >> shift) & 1; 2259 } 2260 2261 return (sys_addr >> (12 + hweight8(intlv_en))) & 1; 2262 } 2263 2264 if (dct_high_range_enabled(pvt)) 2265 return ~dct_sel_high & 1; 2266 2267 return 0; 2268 } 2269 2270 /* Convert the sys_addr to the normalized DCT address */ 2271 static u64 f1x_get_norm_dct_addr(struct amd64_pvt *pvt, u8 range, 2272 u64 sys_addr, bool hi_rng, 2273 u32 dct_sel_base_addr) 2274 { 2275 u64 chan_off; 2276 u64 dram_base = get_dram_base(pvt, range); 2277 u64 hole_off = f10_dhar_offset(pvt); 2278 u64 dct_sel_base_off = (u64)(pvt->dct_sel_hi & 0xFFFFFC00) << 16; 2279 2280 if (hi_rng) { 2281 /* 2282 * if 2283 * base address of high range is below 4Gb 2284 * (bits [47:27] at [31:11]) 2285 * DRAM address space on this DCT is hoisted above 4Gb && 2286 * sys_addr > 4Gb 2287 * 2288 * remove hole offset from sys_addr 2289 * else 2290 * remove high range offset from sys_addr 2291 */ 2292 if ((!(dct_sel_base_addr >> 16) || 2293 dct_sel_base_addr < dhar_base(pvt)) && 2294 dhar_valid(pvt) && 2295 (sys_addr >= BIT_64(32))) 2296 chan_off = hole_off; 2297 else 2298 chan_off = dct_sel_base_off; 2299 } else { 2300 /* 2301 * if 2302 * we have a valid hole && 2303 * sys_addr > 4Gb 2304 * 2305 * remove hole 2306 * else 2307 * remove dram base to normalize to DCT address 2308 */ 2309 if (dhar_valid(pvt) && (sys_addr >= BIT_64(32))) 2310 chan_off = hole_off; 2311 else 2312 chan_off = dram_base; 2313 } 2314 2315 return (sys_addr & GENMASK_ULL(47,6)) - (chan_off & GENMASK_ULL(47,23)); 2316 } 2317 2318 /* 2319 * checks if the csrow passed in is marked as SPARED, if so returns the new 2320 * spare row 2321 */ 2322 static int f10_process_possible_spare(struct amd64_pvt *pvt, u8 dct, int csrow) 2323 { 2324 int tmp_cs; 2325 2326 if (online_spare_swap_done(pvt, dct) && 2327 csrow == online_spare_bad_dramcs(pvt, dct)) { 2328 2329 for_each_chip_select(tmp_cs, dct, pvt) { 2330 if (chip_select_base(tmp_cs, dct, pvt) & 0x2) { 2331 csrow = tmp_cs; 2332 break; 2333 } 2334 } 2335 } 2336 return csrow; 2337 } 2338 2339 /* 2340 * Iterate over the DRAM DCT "base" and "mask" registers looking for a 2341 * SystemAddr match on the specified 'ChannelSelect' and 'NodeID' 2342 * 2343 * Return: 2344 * -EINVAL: NOT FOUND 2345 * 0..csrow = Chip-Select Row 2346 */ 2347 static int f1x_lookup_addr_in_dct(u64 in_addr, u8 nid, u8 dct) 2348 { 2349 struct mem_ctl_info *mci; 2350 struct amd64_pvt *pvt; 2351 u64 cs_base, cs_mask; 2352 int cs_found = -EINVAL; 2353 int csrow; 2354 2355 mci = edac_mc_find(nid); 2356 if (!mci) 2357 return cs_found; 2358 2359 pvt = mci->pvt_info; 2360 2361 edac_dbg(1, "input addr: 0x%llx, DCT: %d\n", in_addr, dct); 2362 2363 for_each_chip_select(csrow, dct, pvt) { 2364 if (!csrow_enabled(csrow, dct, pvt)) 2365 continue; 2366 2367 get_cs_base_and_mask(pvt, csrow, dct, &cs_base, &cs_mask); 2368 2369 edac_dbg(1, " CSROW=%d CSBase=0x%llx CSMask=0x%llx\n", 2370 csrow, cs_base, cs_mask); 2371 2372 cs_mask = ~cs_mask; 2373 2374 edac_dbg(1, " (InputAddr & ~CSMask)=0x%llx (CSBase & ~CSMask)=0x%llx\n", 2375 (in_addr & cs_mask), (cs_base & cs_mask)); 2376 2377 if ((in_addr & cs_mask) == (cs_base & cs_mask)) { 2378 if (pvt->fam == 0x15 && pvt->model >= 0x30) { 2379 cs_found = csrow; 2380 break; 2381 } 2382 cs_found = f10_process_possible_spare(pvt, dct, csrow); 2383 2384 edac_dbg(1, " MATCH csrow=%d\n", cs_found); 2385 break; 2386 } 2387 } 2388 return cs_found; 2389 } 2390 2391 /* 2392 * See F2x10C. Non-interleaved graphics framebuffer memory under the 16G is 2393 * swapped with a region located at the bottom of memory so that the GPU can use 2394 * the interleaved region and thus two channels. 2395 */ 2396 static u64 f1x_swap_interleaved_region(struct amd64_pvt *pvt, u64 sys_addr) 2397 { 2398 u32 swap_reg, swap_base, swap_limit, rgn_size, tmp_addr; 2399 2400 if (pvt->fam == 0x10) { 2401 /* only revC3 and revE have that feature */ 2402 if (pvt->model < 4 || (pvt->model < 0xa && pvt->stepping < 3)) 2403 return sys_addr; 2404 } 2405 2406 amd64_read_pci_cfg(pvt->F2, SWAP_INTLV_REG, &swap_reg); 2407 2408 if (!(swap_reg & 0x1)) 2409 return sys_addr; 2410 2411 swap_base = (swap_reg >> 3) & 0x7f; 2412 swap_limit = (swap_reg >> 11) & 0x7f; 2413 rgn_size = (swap_reg >> 20) & 0x7f; 2414 tmp_addr = sys_addr >> 27; 2415 2416 if (!(sys_addr >> 34) && 2417 (((tmp_addr >= swap_base) && 2418 (tmp_addr <= swap_limit)) || 2419 (tmp_addr < rgn_size))) 2420 return sys_addr ^ (u64)swap_base << 27; 2421 2422 return sys_addr; 2423 } 2424 2425 /* For a given @dram_range, check if @sys_addr falls within it. */ 2426 static int f1x_match_to_this_node(struct amd64_pvt *pvt, unsigned range, 2427 u64 sys_addr, int *chan_sel) 2428 { 2429 int cs_found = -EINVAL; 2430 u64 chan_addr; 2431 u32 dct_sel_base; 2432 u8 channel; 2433 bool high_range = false; 2434 2435 u8 node_id = dram_dst_node(pvt, range); 2436 u8 intlv_en = dram_intlv_en(pvt, range); 2437 u32 intlv_sel = dram_intlv_sel(pvt, range); 2438 2439 edac_dbg(1, "(range %d) SystemAddr= 0x%llx Limit=0x%llx\n", 2440 range, sys_addr, get_dram_limit(pvt, range)); 2441 2442 if (dhar_valid(pvt) && 2443 dhar_base(pvt) <= sys_addr && 2444 sys_addr < BIT_64(32)) { 2445 amd64_warn("Huh? Address is in the MMIO hole: 0x%016llx\n", 2446 sys_addr); 2447 return -EINVAL; 2448 } 2449 2450 if (intlv_en && (intlv_sel != ((sys_addr >> 12) & intlv_en))) 2451 return -EINVAL; 2452 2453 sys_addr = f1x_swap_interleaved_region(pvt, sys_addr); 2454 2455 dct_sel_base = dct_sel_baseaddr(pvt); 2456 2457 /* 2458 * check whether addresses >= DctSelBaseAddr[47:27] are to be used to 2459 * select between DCT0 and DCT1. 2460 */ 2461 if (dct_high_range_enabled(pvt) && 2462 !dct_ganging_enabled(pvt) && 2463 ((sys_addr >> 27) >= (dct_sel_base >> 11))) 2464 high_range = true; 2465 2466 channel = f1x_determine_channel(pvt, sys_addr, high_range, intlv_en); 2467 2468 chan_addr = f1x_get_norm_dct_addr(pvt, range, sys_addr, 2469 high_range, dct_sel_base); 2470 2471 /* Remove node interleaving, see F1x120 */ 2472 if (intlv_en) 2473 chan_addr = ((chan_addr >> (12 + hweight8(intlv_en))) << 12) | 2474 (chan_addr & 0xfff); 2475 2476 /* remove channel interleave */ 2477 if (dct_interleave_enabled(pvt) && 2478 !dct_high_range_enabled(pvt) && 2479 !dct_ganging_enabled(pvt)) { 2480 2481 if (dct_sel_interleave_addr(pvt) != 1) { 2482 if (dct_sel_interleave_addr(pvt) == 0x3) 2483 /* hash 9 */ 2484 chan_addr = ((chan_addr >> 10) << 9) | 2485 (chan_addr & 0x1ff); 2486 else 2487 /* A[6] or hash 6 */ 2488 chan_addr = ((chan_addr >> 7) << 6) | 2489 (chan_addr & 0x3f); 2490 } else 2491 /* A[12] */ 2492 chan_addr = ((chan_addr >> 13) << 12) | 2493 (chan_addr & 0xfff); 2494 } 2495 2496 edac_dbg(1, " Normalized DCT addr: 0x%llx\n", chan_addr); 2497 2498 cs_found = f1x_lookup_addr_in_dct(chan_addr, node_id, channel); 2499 2500 if (cs_found >= 0) 2501 *chan_sel = channel; 2502 2503 return cs_found; 2504 } 2505 2506 static int f15_m30h_match_to_this_node(struct amd64_pvt *pvt, unsigned range, 2507 u64 sys_addr, int *chan_sel) 2508 { 2509 int cs_found = -EINVAL; 2510 int num_dcts_intlv = 0; 2511 u64 chan_addr, chan_offset; 2512 u64 dct_base, dct_limit; 2513 u32 dct_cont_base_reg, dct_cont_limit_reg, tmp; 2514 u8 channel, alias_channel, leg_mmio_hole, dct_sel, dct_offset_en; 2515 2516 u64 dhar_offset = f10_dhar_offset(pvt); 2517 u8 intlv_addr = dct_sel_interleave_addr(pvt); 2518 u8 node_id = dram_dst_node(pvt, range); 2519 u8 intlv_en = dram_intlv_en(pvt, range); 2520 2521 amd64_read_pci_cfg(pvt->F1, DRAM_CONT_BASE, &dct_cont_base_reg); 2522 amd64_read_pci_cfg(pvt->F1, DRAM_CONT_LIMIT, &dct_cont_limit_reg); 2523 2524 dct_offset_en = (u8) ((dct_cont_base_reg >> 3) & BIT(0)); 2525 dct_sel = (u8) ((dct_cont_base_reg >> 4) & 0x7); 2526 2527 edac_dbg(1, "(range %d) SystemAddr= 0x%llx Limit=0x%llx\n", 2528 range, sys_addr, get_dram_limit(pvt, range)); 2529 2530 if (!(get_dram_base(pvt, range) <= sys_addr) && 2531 !(get_dram_limit(pvt, range) >= sys_addr)) 2532 return -EINVAL; 2533 2534 if (dhar_valid(pvt) && 2535 dhar_base(pvt) <= sys_addr && 2536 sys_addr < BIT_64(32)) { 2537 amd64_warn("Huh? Address is in the MMIO hole: 0x%016llx\n", 2538 sys_addr); 2539 return -EINVAL; 2540 } 2541 2542 /* Verify sys_addr is within DCT Range. */ 2543 dct_base = (u64) dct_sel_baseaddr(pvt); 2544 dct_limit = (dct_cont_limit_reg >> 11) & 0x1FFF; 2545 2546 if (!(dct_cont_base_reg & BIT(0)) && 2547 !(dct_base <= (sys_addr >> 27) && 2548 dct_limit >= (sys_addr >> 27))) 2549 return -EINVAL; 2550 2551 /* Verify number of dct's that participate in channel interleaving. */ 2552 num_dcts_intlv = (int) hweight8(intlv_en); 2553 2554 if (!(num_dcts_intlv % 2 == 0) || (num_dcts_intlv > 4)) 2555 return -EINVAL; 2556 2557 if (pvt->model >= 0x60) 2558 channel = f1x_determine_channel(pvt, sys_addr, false, intlv_en); 2559 else 2560 channel = f15_m30h_determine_channel(pvt, sys_addr, intlv_en, 2561 num_dcts_intlv, dct_sel); 2562 2563 /* Verify we stay within the MAX number of channels allowed */ 2564 if (channel > 3) 2565 return -EINVAL; 2566 2567 leg_mmio_hole = (u8) (dct_cont_base_reg >> 1 & BIT(0)); 2568 2569 /* Get normalized DCT addr */ 2570 if (leg_mmio_hole && (sys_addr >= BIT_64(32))) 2571 chan_offset = dhar_offset; 2572 else 2573 chan_offset = dct_base << 27; 2574 2575 chan_addr = sys_addr - chan_offset; 2576 2577 /* remove channel interleave */ 2578 if (num_dcts_intlv == 2) { 2579 if (intlv_addr == 0x4) 2580 chan_addr = ((chan_addr >> 9) << 8) | 2581 (chan_addr & 0xff); 2582 else if (intlv_addr == 0x5) 2583 chan_addr = ((chan_addr >> 10) << 9) | 2584 (chan_addr & 0x1ff); 2585 else 2586 return -EINVAL; 2587 2588 } else if (num_dcts_intlv == 4) { 2589 if (intlv_addr == 0x4) 2590 chan_addr = ((chan_addr >> 10) << 8) | 2591 (chan_addr & 0xff); 2592 else if (intlv_addr == 0x5) 2593 chan_addr = ((chan_addr >> 11) << 9) | 2594 (chan_addr & 0x1ff); 2595 else 2596 return -EINVAL; 2597 } 2598 2599 if (dct_offset_en) { 2600 amd64_read_pci_cfg(pvt->F1, 2601 DRAM_CONT_HIGH_OFF + (int) channel * 4, 2602 &tmp); 2603 chan_addr += (u64) ((tmp >> 11) & 0xfff) << 27; 2604 } 2605 2606 f15h_select_dct(pvt, channel); 2607 2608 edac_dbg(1, " Normalized DCT addr: 0x%llx\n", chan_addr); 2609 2610 /* 2611 * Find Chip select: 2612 * if channel = 3, then alias it to 1. This is because, in F15 M30h, 2613 * there is support for 4 DCT's, but only 2 are currently functional. 2614 * They are DCT0 and DCT3. But we have read all registers of DCT3 into 2615 * pvt->csels[1]. So we need to use '1' here to get correct info. 2616 * Refer F15 M30h BKDG Section 2.10 and 2.10.3 for clarifications. 2617 */ 2618 alias_channel = (channel == 3) ? 1 : channel; 2619 2620 cs_found = f1x_lookup_addr_in_dct(chan_addr, node_id, alias_channel); 2621 2622 if (cs_found >= 0) 2623 *chan_sel = alias_channel; 2624 2625 return cs_found; 2626 } 2627 2628 static int f1x_translate_sysaddr_to_cs(struct amd64_pvt *pvt, 2629 u64 sys_addr, 2630 int *chan_sel) 2631 { 2632 int cs_found = -EINVAL; 2633 unsigned range; 2634 2635 for (range = 0; range < DRAM_RANGES; range++) { 2636 if (!dram_rw(pvt, range)) 2637 continue; 2638 2639 if (pvt->fam == 0x15 && pvt->model >= 0x30) 2640 cs_found = f15_m30h_match_to_this_node(pvt, range, 2641 sys_addr, 2642 chan_sel); 2643 2644 else if ((get_dram_base(pvt, range) <= sys_addr) && 2645 (get_dram_limit(pvt, range) >= sys_addr)) { 2646 cs_found = f1x_match_to_this_node(pvt, range, 2647 sys_addr, chan_sel); 2648 if (cs_found >= 0) 2649 break; 2650 } 2651 } 2652 return cs_found; 2653 } 2654 2655 /* 2656 * For reference see "2.8.5 Routing DRAM Requests" in F10 BKDG. This code maps 2657 * a @sys_addr to NodeID, DCT (channel) and chip select (CSROW). 2658 * 2659 * The @sys_addr is usually an error address received from the hardware 2660 * (MCX_ADDR). 2661 */ 2662 static void f1x_map_sysaddr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr, 2663 struct err_info *err) 2664 { 2665 struct amd64_pvt *pvt = mci->pvt_info; 2666 2667 error_address_to_page_and_offset(sys_addr, err); 2668 2669 err->csrow = f1x_translate_sysaddr_to_cs(pvt, sys_addr, &err->channel); 2670 if (err->csrow < 0) { 2671 err->err_code = ERR_CSROW; 2672 return; 2673 } 2674 2675 /* 2676 * We need the syndromes for channel detection only when we're 2677 * ganged. Otherwise @chan should already contain the channel at 2678 * this point. 2679 */ 2680 if (dct_ganging_enabled(pvt)) 2681 err->channel = get_channel_from_ecc_syndrome(mci, err->syndrome); 2682 } 2683 2684 /* 2685 * debug routine to display the memory sizes of all logical DIMMs and its 2686 * CSROWs 2687 */ 2688 static void debug_display_dimm_sizes(struct amd64_pvt *pvt, u8 ctrl) 2689 { 2690 int dimm, size0, size1; 2691 u32 *dcsb = ctrl ? pvt->csels[1].csbases : pvt->csels[0].csbases; 2692 u32 dbam = ctrl ? pvt->dbam1 : pvt->dbam0; 2693 2694 if (pvt->fam == 0xf) { 2695 /* K8 families < revF not supported yet */ 2696 if (pvt->ext_model < K8_REV_F) 2697 return; 2698 else 2699 WARN_ON(ctrl != 0); 2700 } 2701 2702 if (pvt->fam == 0x10) { 2703 dbam = (ctrl && !dct_ganging_enabled(pvt)) ? pvt->dbam1 2704 : pvt->dbam0; 2705 dcsb = (ctrl && !dct_ganging_enabled(pvt)) ? 2706 pvt->csels[1].csbases : 2707 pvt->csels[0].csbases; 2708 } else if (ctrl) { 2709 dbam = pvt->dbam0; 2710 dcsb = pvt->csels[1].csbases; 2711 } 2712 edac_dbg(1, "F2x%d80 (DRAM Bank Address Mapping): 0x%08x\n", 2713 ctrl, dbam); 2714 2715 edac_printk(KERN_DEBUG, EDAC_MC, "DCT%d chip selects:\n", ctrl); 2716 2717 /* Dump memory sizes for DIMM and its CSROWs */ 2718 for (dimm = 0; dimm < 4; dimm++) { 2719 2720 size0 = 0; 2721 if (dcsb[dimm*2] & DCSB_CS_ENABLE) 2722 /* 2723 * For F15m60h, we need multiplier for LRDIMM cs_size 2724 * calculation. We pass dimm value to the dbam_to_cs 2725 * mapper so we can find the multiplier from the 2726 * corresponding DCSM. 2727 */ 2728 size0 = pvt->ops->dbam_to_cs(pvt, ctrl, 2729 DBAM_DIMM(dimm, dbam), 2730 dimm); 2731 2732 size1 = 0; 2733 if (dcsb[dimm*2 + 1] & DCSB_CS_ENABLE) 2734 size1 = pvt->ops->dbam_to_cs(pvt, ctrl, 2735 DBAM_DIMM(dimm, dbam), 2736 dimm); 2737 2738 amd64_info(EDAC_MC ": %d: %5dMB %d: %5dMB\n", 2739 dimm * 2, size0, 2740 dimm * 2 + 1, size1); 2741 } 2742 } 2743 2744 static struct amd64_family_type family_types[] = { 2745 [K8_CPUS] = { 2746 .ctl_name = "K8", 2747 .f1_id = PCI_DEVICE_ID_AMD_K8_NB_ADDRMAP, 2748 .f2_id = PCI_DEVICE_ID_AMD_K8_NB_MEMCTL, 2749 .max_mcs = 2, 2750 .ops = { 2751 .map_sysaddr_to_csrow = k8_map_sysaddr_to_csrow, 2752 .dbam_to_cs = k8_dbam_to_chip_select, 2753 } 2754 }, 2755 [F10_CPUS] = { 2756 .ctl_name = "F10h", 2757 .f1_id = PCI_DEVICE_ID_AMD_10H_NB_MAP, 2758 .f2_id = PCI_DEVICE_ID_AMD_10H_NB_DRAM, 2759 .max_mcs = 2, 2760 .ops = { 2761 .map_sysaddr_to_csrow = f1x_map_sysaddr_to_csrow, 2762 .dbam_to_cs = f10_dbam_to_chip_select, 2763 } 2764 }, 2765 [F15_CPUS] = { 2766 .ctl_name = "F15h", 2767 .f1_id = PCI_DEVICE_ID_AMD_15H_NB_F1, 2768 .f2_id = PCI_DEVICE_ID_AMD_15H_NB_F2, 2769 .max_mcs = 2, 2770 .ops = { 2771 .map_sysaddr_to_csrow = f1x_map_sysaddr_to_csrow, 2772 .dbam_to_cs = f15_dbam_to_chip_select, 2773 } 2774 }, 2775 [F15_M30H_CPUS] = { 2776 .ctl_name = "F15h_M30h", 2777 .f1_id = PCI_DEVICE_ID_AMD_15H_M30H_NB_F1, 2778 .f2_id = PCI_DEVICE_ID_AMD_15H_M30H_NB_F2, 2779 .max_mcs = 2, 2780 .ops = { 2781 .map_sysaddr_to_csrow = f1x_map_sysaddr_to_csrow, 2782 .dbam_to_cs = f16_dbam_to_chip_select, 2783 } 2784 }, 2785 [F15_M60H_CPUS] = { 2786 .ctl_name = "F15h_M60h", 2787 .f1_id = PCI_DEVICE_ID_AMD_15H_M60H_NB_F1, 2788 .f2_id = PCI_DEVICE_ID_AMD_15H_M60H_NB_F2, 2789 .max_mcs = 2, 2790 .ops = { 2791 .map_sysaddr_to_csrow = f1x_map_sysaddr_to_csrow, 2792 .dbam_to_cs = f15_m60h_dbam_to_chip_select, 2793 } 2794 }, 2795 [F16_CPUS] = { 2796 .ctl_name = "F16h", 2797 .f1_id = PCI_DEVICE_ID_AMD_16H_NB_F1, 2798 .f2_id = PCI_DEVICE_ID_AMD_16H_NB_F2, 2799 .max_mcs = 2, 2800 .ops = { 2801 .map_sysaddr_to_csrow = f1x_map_sysaddr_to_csrow, 2802 .dbam_to_cs = f16_dbam_to_chip_select, 2803 } 2804 }, 2805 [F16_M30H_CPUS] = { 2806 .ctl_name = "F16h_M30h", 2807 .f1_id = PCI_DEVICE_ID_AMD_16H_M30H_NB_F1, 2808 .f2_id = PCI_DEVICE_ID_AMD_16H_M30H_NB_F2, 2809 .max_mcs = 2, 2810 .ops = { 2811 .map_sysaddr_to_csrow = f1x_map_sysaddr_to_csrow, 2812 .dbam_to_cs = f16_dbam_to_chip_select, 2813 } 2814 }, 2815 [F17_CPUS] = { 2816 .ctl_name = "F17h", 2817 .max_mcs = 2, 2818 .ops = { 2819 .dbam_to_cs = f17_addr_mask_to_cs_size, 2820 } 2821 }, 2822 [F17_M10H_CPUS] = { 2823 .ctl_name = "F17h_M10h", 2824 .max_mcs = 2, 2825 .ops = { 2826 .dbam_to_cs = f17_addr_mask_to_cs_size, 2827 } 2828 }, 2829 [F17_M30H_CPUS] = { 2830 .ctl_name = "F17h_M30h", 2831 .max_mcs = 8, 2832 .ops = { 2833 .dbam_to_cs = f17_addr_mask_to_cs_size, 2834 } 2835 }, 2836 [F17_M60H_CPUS] = { 2837 .ctl_name = "F17h_M60h", 2838 .max_mcs = 2, 2839 .ops = { 2840 .dbam_to_cs = f17_addr_mask_to_cs_size, 2841 } 2842 }, 2843 [F17_M70H_CPUS] = { 2844 .ctl_name = "F17h_M70h", 2845 .max_mcs = 2, 2846 .ops = { 2847 .dbam_to_cs = f17_addr_mask_to_cs_size, 2848 } 2849 }, 2850 [F19_CPUS] = { 2851 .ctl_name = "F19h", 2852 .max_mcs = 8, 2853 .ops = { 2854 .dbam_to_cs = f17_addr_mask_to_cs_size, 2855 } 2856 }, 2857 [F19_M10H_CPUS] = { 2858 .ctl_name = "F19h_M10h", 2859 .max_mcs = 12, 2860 .flags.zn_regs_v2 = 1, 2861 .ops = { 2862 .dbam_to_cs = f17_addr_mask_to_cs_size, 2863 } 2864 }, 2865 [F19_M50H_CPUS] = { 2866 .ctl_name = "F19h_M50h", 2867 .max_mcs = 2, 2868 .ops = { 2869 .dbam_to_cs = f17_addr_mask_to_cs_size, 2870 } 2871 }, 2872 }; 2873 2874 /* 2875 * These are tables of eigenvectors (one per line) which can be used for the 2876 * construction of the syndrome tables. The modified syndrome search algorithm 2877 * uses those to find the symbol in error and thus the DIMM. 2878 * 2879 * Algorithm courtesy of Ross LaFetra from AMD. 2880 */ 2881 static const u16 x4_vectors[] = { 2882 0x2f57, 0x1afe, 0x66cc, 0xdd88, 2883 0x11eb, 0x3396, 0x7f4c, 0xeac8, 2884 0x0001, 0x0002, 0x0004, 0x0008, 2885 0x1013, 0x3032, 0x4044, 0x8088, 2886 0x106b, 0x30d6, 0x70fc, 0xe0a8, 2887 0x4857, 0xc4fe, 0x13cc, 0x3288, 2888 0x1ac5, 0x2f4a, 0x5394, 0xa1e8, 2889 0x1f39, 0x251e, 0xbd6c, 0x6bd8, 2890 0x15c1, 0x2a42, 0x89ac, 0x4758, 2891 0x2b03, 0x1602, 0x4f0c, 0xca08, 2892 0x1f07, 0x3a0e, 0x6b04, 0xbd08, 2893 0x8ba7, 0x465e, 0x244c, 0x1cc8, 2894 0x2b87, 0x164e, 0x642c, 0xdc18, 2895 0x40b9, 0x80de, 0x1094, 0x20e8, 2896 0x27db, 0x1eb6, 0x9dac, 0x7b58, 2897 0x11c1, 0x2242, 0x84ac, 0x4c58, 2898 0x1be5, 0x2d7a, 0x5e34, 0xa718, 2899 0x4b39, 0x8d1e, 0x14b4, 0x28d8, 2900 0x4c97, 0xc87e, 0x11fc, 0x33a8, 2901 0x8e97, 0x497e, 0x2ffc, 0x1aa8, 2902 0x16b3, 0x3d62, 0x4f34, 0x8518, 2903 0x1e2f, 0x391a, 0x5cac, 0xf858, 2904 0x1d9f, 0x3b7a, 0x572c, 0xfe18, 2905 0x15f5, 0x2a5a, 0x5264, 0xa3b8, 2906 0x1dbb, 0x3b66, 0x715c, 0xe3f8, 2907 0x4397, 0xc27e, 0x17fc, 0x3ea8, 2908 0x1617, 0x3d3e, 0x6464, 0xb8b8, 2909 0x23ff, 0x12aa, 0xab6c, 0x56d8, 2910 0x2dfb, 0x1ba6, 0x913c, 0x7328, 2911 0x185d, 0x2ca6, 0x7914, 0x9e28, 2912 0x171b, 0x3e36, 0x7d7c, 0xebe8, 2913 0x4199, 0x82ee, 0x19f4, 0x2e58, 2914 0x4807, 0xc40e, 0x130c, 0x3208, 2915 0x1905, 0x2e0a, 0x5804, 0xac08, 2916 0x213f, 0x132a, 0xadfc, 0x5ba8, 2917 0x19a9, 0x2efe, 0xb5cc, 0x6f88, 2918 }; 2919 2920 static const u16 x8_vectors[] = { 2921 0x0145, 0x028a, 0x2374, 0x43c8, 0xa1f0, 0x0520, 0x0a40, 0x1480, 2922 0x0211, 0x0422, 0x0844, 0x1088, 0x01b0, 0x44e0, 0x23c0, 0xed80, 2923 0x1011, 0x0116, 0x022c, 0x0458, 0x08b0, 0x8c60, 0x2740, 0x4e80, 2924 0x0411, 0x0822, 0x1044, 0x0158, 0x02b0, 0x2360, 0x46c0, 0xab80, 2925 0x0811, 0x1022, 0x012c, 0x0258, 0x04b0, 0x4660, 0x8cc0, 0x2780, 2926 0x2071, 0x40e2, 0xa0c4, 0x0108, 0x0210, 0x0420, 0x0840, 0x1080, 2927 0x4071, 0x80e2, 0x0104, 0x0208, 0x0410, 0x0820, 0x1040, 0x2080, 2928 0x8071, 0x0102, 0x0204, 0x0408, 0x0810, 0x1020, 0x2040, 0x4080, 2929 0x019d, 0x03d6, 0x136c, 0x2198, 0x50b0, 0xb2e0, 0x0740, 0x0e80, 2930 0x0189, 0x03ea, 0x072c, 0x0e58, 0x1cb0, 0x56e0, 0x37c0, 0xf580, 2931 0x01fd, 0x0376, 0x06ec, 0x0bb8, 0x1110, 0x2220, 0x4440, 0x8880, 2932 0x0163, 0x02c6, 0x1104, 0x0758, 0x0eb0, 0x2be0, 0x6140, 0xc280, 2933 0x02fd, 0x01c6, 0x0b5c, 0x1108, 0x07b0, 0x25a0, 0x8840, 0x6180, 2934 0x0801, 0x012e, 0x025c, 0x04b8, 0x1370, 0x26e0, 0x57c0, 0xb580, 2935 0x0401, 0x0802, 0x015c, 0x02b8, 0x22b0, 0x13e0, 0x7140, 0xe280, 2936 0x0201, 0x0402, 0x0804, 0x01b8, 0x11b0, 0x31a0, 0x8040, 0x7180, 2937 0x0101, 0x0202, 0x0404, 0x0808, 0x1010, 0x2020, 0x4040, 0x8080, 2938 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 2939 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 2940 }; 2941 2942 static int decode_syndrome(u16 syndrome, const u16 *vectors, unsigned num_vecs, 2943 unsigned v_dim) 2944 { 2945 unsigned int i, err_sym; 2946 2947 for (err_sym = 0; err_sym < num_vecs / v_dim; err_sym++) { 2948 u16 s = syndrome; 2949 unsigned v_idx = err_sym * v_dim; 2950 unsigned v_end = (err_sym + 1) * v_dim; 2951 2952 /* walk over all 16 bits of the syndrome */ 2953 for (i = 1; i < (1U << 16); i <<= 1) { 2954 2955 /* if bit is set in that eigenvector... */ 2956 if (v_idx < v_end && vectors[v_idx] & i) { 2957 u16 ev_comp = vectors[v_idx++]; 2958 2959 /* ... and bit set in the modified syndrome, */ 2960 if (s & i) { 2961 /* remove it. */ 2962 s ^= ev_comp; 2963 2964 if (!s) 2965 return err_sym; 2966 } 2967 2968 } else if (s & i) 2969 /* can't get to zero, move to next symbol */ 2970 break; 2971 } 2972 } 2973 2974 edac_dbg(0, "syndrome(%x) not found\n", syndrome); 2975 return -1; 2976 } 2977 2978 static int map_err_sym_to_channel(int err_sym, int sym_size) 2979 { 2980 if (sym_size == 4) 2981 switch (err_sym) { 2982 case 0x20: 2983 case 0x21: 2984 return 0; 2985 case 0x22: 2986 case 0x23: 2987 return 1; 2988 default: 2989 return err_sym >> 4; 2990 } 2991 /* x8 symbols */ 2992 else 2993 switch (err_sym) { 2994 /* imaginary bits not in a DIMM */ 2995 case 0x10: 2996 WARN(1, KERN_ERR "Invalid error symbol: 0x%x\n", 2997 err_sym); 2998 return -1; 2999 case 0x11: 3000 return 0; 3001 case 0x12: 3002 return 1; 3003 default: 3004 return err_sym >> 3; 3005 } 3006 return -1; 3007 } 3008 3009 static int get_channel_from_ecc_syndrome(struct mem_ctl_info *mci, u16 syndrome) 3010 { 3011 struct amd64_pvt *pvt = mci->pvt_info; 3012 int err_sym = -1; 3013 3014 if (pvt->ecc_sym_sz == 8) 3015 err_sym = decode_syndrome(syndrome, x8_vectors, 3016 ARRAY_SIZE(x8_vectors), 3017 pvt->ecc_sym_sz); 3018 else if (pvt->ecc_sym_sz == 4) 3019 err_sym = decode_syndrome(syndrome, x4_vectors, 3020 ARRAY_SIZE(x4_vectors), 3021 pvt->ecc_sym_sz); 3022 else { 3023 amd64_warn("Illegal syndrome type: %u\n", pvt->ecc_sym_sz); 3024 return err_sym; 3025 } 3026 3027 return map_err_sym_to_channel(err_sym, pvt->ecc_sym_sz); 3028 } 3029 3030 static void __log_ecc_error(struct mem_ctl_info *mci, struct err_info *err, 3031 u8 ecc_type) 3032 { 3033 enum hw_event_mc_err_type err_type; 3034 const char *string; 3035 3036 if (ecc_type == 2) 3037 err_type = HW_EVENT_ERR_CORRECTED; 3038 else if (ecc_type == 1) 3039 err_type = HW_EVENT_ERR_UNCORRECTED; 3040 else if (ecc_type == 3) 3041 err_type = HW_EVENT_ERR_DEFERRED; 3042 else { 3043 WARN(1, "Something is rotten in the state of Denmark.\n"); 3044 return; 3045 } 3046 3047 switch (err->err_code) { 3048 case DECODE_OK: 3049 string = ""; 3050 break; 3051 case ERR_NODE: 3052 string = "Failed to map error addr to a node"; 3053 break; 3054 case ERR_CSROW: 3055 string = "Failed to map error addr to a csrow"; 3056 break; 3057 case ERR_CHANNEL: 3058 string = "Unknown syndrome - possible error reporting race"; 3059 break; 3060 case ERR_SYND: 3061 string = "MCA_SYND not valid - unknown syndrome and csrow"; 3062 break; 3063 case ERR_NORM_ADDR: 3064 string = "Cannot decode normalized address"; 3065 break; 3066 default: 3067 string = "WTF error"; 3068 break; 3069 } 3070 3071 edac_mc_handle_error(err_type, mci, 1, 3072 err->page, err->offset, err->syndrome, 3073 err->csrow, err->channel, -1, 3074 string, ""); 3075 } 3076 3077 static inline void decode_bus_error(int node_id, struct mce *m) 3078 { 3079 struct mem_ctl_info *mci; 3080 struct amd64_pvt *pvt; 3081 u8 ecc_type = (m->status >> 45) & 0x3; 3082 u8 xec = XEC(m->status, 0x1f); 3083 u16 ec = EC(m->status); 3084 u64 sys_addr; 3085 struct err_info err; 3086 3087 mci = edac_mc_find(node_id); 3088 if (!mci) 3089 return; 3090 3091 pvt = mci->pvt_info; 3092 3093 /* Bail out early if this was an 'observed' error */ 3094 if (PP(ec) == NBSL_PP_OBS) 3095 return; 3096 3097 /* Do only ECC errors */ 3098 if (xec && xec != F10_NBSL_EXT_ERR_ECC) 3099 return; 3100 3101 memset(&err, 0, sizeof(err)); 3102 3103 sys_addr = get_error_address(pvt, m); 3104 3105 if (ecc_type == 2) 3106 err.syndrome = extract_syndrome(m->status); 3107 3108 pvt->ops->map_sysaddr_to_csrow(mci, sys_addr, &err); 3109 3110 __log_ecc_error(mci, &err, ecc_type); 3111 } 3112 3113 /* 3114 * To find the UMC channel represented by this bank we need to match on its 3115 * instance_id. The instance_id of a bank is held in the lower 32 bits of its 3116 * IPID. 3117 * 3118 * Currently, we can derive the channel number by looking at the 6th nibble in 3119 * the instance_id. For example, instance_id=0xYXXXXX where Y is the channel 3120 * number. 3121 */ 3122 static int find_umc_channel(struct mce *m) 3123 { 3124 return (m->ipid & GENMASK(31, 0)) >> 20; 3125 } 3126 3127 static void decode_umc_error(int node_id, struct mce *m) 3128 { 3129 u8 ecc_type = (m->status >> 45) & 0x3; 3130 struct mem_ctl_info *mci; 3131 struct amd64_pvt *pvt; 3132 struct err_info err; 3133 u64 sys_addr; 3134 3135 mci = edac_mc_find(node_id); 3136 if (!mci) 3137 return; 3138 3139 pvt = mci->pvt_info; 3140 3141 memset(&err, 0, sizeof(err)); 3142 3143 if (m->status & MCI_STATUS_DEFERRED) 3144 ecc_type = 3; 3145 3146 err.channel = find_umc_channel(m); 3147 3148 if (!(m->status & MCI_STATUS_SYNDV)) { 3149 err.err_code = ERR_SYND; 3150 goto log_error; 3151 } 3152 3153 if (ecc_type == 2) { 3154 u8 length = (m->synd >> 18) & 0x3f; 3155 3156 if (length) 3157 err.syndrome = (m->synd >> 32) & GENMASK(length - 1, 0); 3158 else 3159 err.err_code = ERR_CHANNEL; 3160 } 3161 3162 err.csrow = m->synd & 0x7; 3163 3164 if (umc_normaddr_to_sysaddr(m->addr, pvt->mc_node_id, err.channel, &sys_addr)) { 3165 err.err_code = ERR_NORM_ADDR; 3166 goto log_error; 3167 } 3168 3169 error_address_to_page_and_offset(sys_addr, &err); 3170 3171 log_error: 3172 __log_ecc_error(mci, &err, ecc_type); 3173 } 3174 3175 /* 3176 * Use pvt->F3 which contains the F3 CPU PCI device to get the related 3177 * F1 (AddrMap) and F2 (Dct) devices. Return negative value on error. 3178 */ 3179 static int 3180 reserve_mc_sibling_devs(struct amd64_pvt *pvt, u16 pci_id1, u16 pci_id2) 3181 { 3182 if (pvt->umc) 3183 return 0; 3184 3185 /* Reserve the ADDRESS MAP Device */ 3186 pvt->F1 = pci_get_related_function(pvt->F3->vendor, pci_id1, pvt->F3); 3187 if (!pvt->F1) { 3188 edac_dbg(1, "F1 not found: device 0x%x\n", pci_id1); 3189 return -ENODEV; 3190 } 3191 3192 /* Reserve the DCT Device */ 3193 pvt->F2 = pci_get_related_function(pvt->F3->vendor, pci_id2, pvt->F3); 3194 if (!pvt->F2) { 3195 pci_dev_put(pvt->F1); 3196 pvt->F1 = NULL; 3197 3198 edac_dbg(1, "F2 not found: device 0x%x\n", pci_id2); 3199 return -ENODEV; 3200 } 3201 3202 if (!pci_ctl_dev) 3203 pci_ctl_dev = &pvt->F2->dev; 3204 3205 edac_dbg(1, "F1: %s\n", pci_name(pvt->F1)); 3206 edac_dbg(1, "F2: %s\n", pci_name(pvt->F2)); 3207 edac_dbg(1, "F3: %s\n", pci_name(pvt->F3)); 3208 3209 return 0; 3210 } 3211 3212 static void free_mc_sibling_devs(struct amd64_pvt *pvt) 3213 { 3214 if (pvt->umc) { 3215 return; 3216 } else { 3217 pci_dev_put(pvt->F1); 3218 pci_dev_put(pvt->F2); 3219 } 3220 } 3221 3222 static void determine_ecc_sym_sz(struct amd64_pvt *pvt) 3223 { 3224 pvt->ecc_sym_sz = 4; 3225 3226 if (pvt->umc) { 3227 u8 i; 3228 3229 for_each_umc(i) { 3230 /* Check enabled channels only: */ 3231 if (pvt->umc[i].sdp_ctrl & UMC_SDP_INIT) { 3232 if (pvt->umc[i].ecc_ctrl & BIT(9)) { 3233 pvt->ecc_sym_sz = 16; 3234 return; 3235 } else if (pvt->umc[i].ecc_ctrl & BIT(7)) { 3236 pvt->ecc_sym_sz = 8; 3237 return; 3238 } 3239 } 3240 } 3241 } else if (pvt->fam >= 0x10) { 3242 u32 tmp; 3243 3244 amd64_read_pci_cfg(pvt->F3, EXT_NB_MCA_CFG, &tmp); 3245 /* F16h has only DCT0, so no need to read dbam1. */ 3246 if (pvt->fam != 0x16) 3247 amd64_read_dct_pci_cfg(pvt, 1, DBAM0, &pvt->dbam1); 3248 3249 /* F10h, revD and later can do x8 ECC too. */ 3250 if ((pvt->fam > 0x10 || pvt->model > 7) && tmp & BIT(25)) 3251 pvt->ecc_sym_sz = 8; 3252 } 3253 } 3254 3255 /* 3256 * Retrieve the hardware registers of the memory controller. 3257 */ 3258 static void __read_mc_regs_df(struct amd64_pvt *pvt) 3259 { 3260 u8 nid = pvt->mc_node_id; 3261 struct amd64_umc *umc; 3262 u32 i, umc_base; 3263 3264 /* Read registers from each UMC */ 3265 for_each_umc(i) { 3266 3267 umc_base = get_umc_base(i); 3268 umc = &pvt->umc[i]; 3269 3270 amd_smn_read(nid, umc_base + get_umc_reg(UMCCH_DIMM_CFG), &umc->dimm_cfg); 3271 amd_smn_read(nid, umc_base + UMCCH_UMC_CFG, &umc->umc_cfg); 3272 amd_smn_read(nid, umc_base + UMCCH_SDP_CTRL, &umc->sdp_ctrl); 3273 amd_smn_read(nid, umc_base + UMCCH_ECC_CTRL, &umc->ecc_ctrl); 3274 amd_smn_read(nid, umc_base + UMCCH_UMC_CAP_HI, &umc->umc_cap_hi); 3275 } 3276 } 3277 3278 /* 3279 * Retrieve the hardware registers of the memory controller (this includes the 3280 * 'Address Map' and 'Misc' device regs) 3281 */ 3282 static void read_mc_regs(struct amd64_pvt *pvt) 3283 { 3284 unsigned int range; 3285 u64 msr_val; 3286 3287 /* 3288 * Retrieve TOP_MEM and TOP_MEM2; no masking off of reserved bits since 3289 * those are Read-As-Zero. 3290 */ 3291 rdmsrl(MSR_K8_TOP_MEM1, pvt->top_mem); 3292 edac_dbg(0, " TOP_MEM: 0x%016llx\n", pvt->top_mem); 3293 3294 /* Check first whether TOP_MEM2 is enabled: */ 3295 rdmsrl(MSR_AMD64_SYSCFG, msr_val); 3296 if (msr_val & BIT(21)) { 3297 rdmsrl(MSR_K8_TOP_MEM2, pvt->top_mem2); 3298 edac_dbg(0, " TOP_MEM2: 0x%016llx\n", pvt->top_mem2); 3299 } else { 3300 edac_dbg(0, " TOP_MEM2 disabled\n"); 3301 } 3302 3303 if (pvt->umc) { 3304 __read_mc_regs_df(pvt); 3305 3306 goto skip; 3307 } 3308 3309 amd64_read_pci_cfg(pvt->F3, NBCAP, &pvt->nbcap); 3310 3311 read_dram_ctl_register(pvt); 3312 3313 for (range = 0; range < DRAM_RANGES; range++) { 3314 u8 rw; 3315 3316 /* read settings for this DRAM range */ 3317 read_dram_base_limit_regs(pvt, range); 3318 3319 rw = dram_rw(pvt, range); 3320 if (!rw) 3321 continue; 3322 3323 edac_dbg(1, " DRAM range[%d], base: 0x%016llx; limit: 0x%016llx\n", 3324 range, 3325 get_dram_base(pvt, range), 3326 get_dram_limit(pvt, range)); 3327 3328 edac_dbg(1, " IntlvEn=%s; Range access: %s%s IntlvSel=%d DstNode=%d\n", 3329 dram_intlv_en(pvt, range) ? "Enabled" : "Disabled", 3330 (rw & 0x1) ? "R" : "-", 3331 (rw & 0x2) ? "W" : "-", 3332 dram_intlv_sel(pvt, range), 3333 dram_dst_node(pvt, range)); 3334 } 3335 3336 amd64_read_pci_cfg(pvt->F1, DHAR, &pvt->dhar); 3337 amd64_read_dct_pci_cfg(pvt, 0, DBAM0, &pvt->dbam0); 3338 3339 amd64_read_pci_cfg(pvt->F3, F10_ONLINE_SPARE, &pvt->online_spare); 3340 3341 amd64_read_dct_pci_cfg(pvt, 0, DCLR0, &pvt->dclr0); 3342 amd64_read_dct_pci_cfg(pvt, 0, DCHR0, &pvt->dchr0); 3343 3344 if (!dct_ganging_enabled(pvt)) { 3345 amd64_read_dct_pci_cfg(pvt, 1, DCLR0, &pvt->dclr1); 3346 amd64_read_dct_pci_cfg(pvt, 1, DCHR0, &pvt->dchr1); 3347 } 3348 3349 skip: 3350 read_dct_base_mask(pvt); 3351 3352 determine_memory_type(pvt); 3353 3354 if (!pvt->umc) 3355 edac_dbg(1, " DIMM type: %s\n", edac_mem_types[pvt->dram_type]); 3356 3357 determine_ecc_sym_sz(pvt); 3358 } 3359 3360 /* 3361 * NOTE: CPU Revision Dependent code 3362 * 3363 * Input: 3364 * @csrow_nr ChipSelect Row Number (0..NUM_CHIPSELECTS-1) 3365 * k8 private pointer to --> 3366 * DRAM Bank Address mapping register 3367 * node_id 3368 * DCL register where dual_channel_active is 3369 * 3370 * The DBAM register consists of 4 sets of 4 bits each definitions: 3371 * 3372 * Bits: CSROWs 3373 * 0-3 CSROWs 0 and 1 3374 * 4-7 CSROWs 2 and 3 3375 * 8-11 CSROWs 4 and 5 3376 * 12-15 CSROWs 6 and 7 3377 * 3378 * Values range from: 0 to 15 3379 * The meaning of the values depends on CPU revision and dual-channel state, 3380 * see relevant BKDG more info. 3381 * 3382 * The memory controller provides for total of only 8 CSROWs in its current 3383 * architecture. Each "pair" of CSROWs normally represents just one DIMM in 3384 * single channel or two (2) DIMMs in dual channel mode. 3385 * 3386 * The following code logic collapses the various tables for CSROW based on CPU 3387 * revision. 3388 * 3389 * Returns: 3390 * The number of PAGE_SIZE pages on the specified CSROW number it 3391 * encompasses 3392 * 3393 */ 3394 static u32 get_csrow_nr_pages(struct amd64_pvt *pvt, u8 dct, int csrow_nr_orig) 3395 { 3396 u32 dbam = dct ? pvt->dbam1 : pvt->dbam0; 3397 int csrow_nr = csrow_nr_orig; 3398 u32 cs_mode, nr_pages; 3399 3400 if (!pvt->umc) { 3401 csrow_nr >>= 1; 3402 cs_mode = DBAM_DIMM(csrow_nr, dbam); 3403 } else { 3404 cs_mode = f17_get_cs_mode(csrow_nr >> 1, dct, pvt); 3405 } 3406 3407 nr_pages = pvt->ops->dbam_to_cs(pvt, dct, cs_mode, csrow_nr); 3408 nr_pages <<= 20 - PAGE_SHIFT; 3409 3410 edac_dbg(0, "csrow: %d, channel: %d, DBAM idx: %d\n", 3411 csrow_nr_orig, dct, cs_mode); 3412 edac_dbg(0, "nr_pages/channel: %u\n", nr_pages); 3413 3414 return nr_pages; 3415 } 3416 3417 static int init_csrows_df(struct mem_ctl_info *mci) 3418 { 3419 struct amd64_pvt *pvt = mci->pvt_info; 3420 enum edac_type edac_mode = EDAC_NONE; 3421 enum dev_type dev_type = DEV_UNKNOWN; 3422 struct dimm_info *dimm; 3423 int empty = 1; 3424 u8 umc, cs; 3425 3426 if (mci->edac_ctl_cap & EDAC_FLAG_S16ECD16ED) { 3427 edac_mode = EDAC_S16ECD16ED; 3428 dev_type = DEV_X16; 3429 } else if (mci->edac_ctl_cap & EDAC_FLAG_S8ECD8ED) { 3430 edac_mode = EDAC_S8ECD8ED; 3431 dev_type = DEV_X8; 3432 } else if (mci->edac_ctl_cap & EDAC_FLAG_S4ECD4ED) { 3433 edac_mode = EDAC_S4ECD4ED; 3434 dev_type = DEV_X4; 3435 } else if (mci->edac_ctl_cap & EDAC_FLAG_SECDED) { 3436 edac_mode = EDAC_SECDED; 3437 } 3438 3439 for_each_umc(umc) { 3440 for_each_chip_select(cs, umc, pvt) { 3441 if (!csrow_enabled(cs, umc, pvt)) 3442 continue; 3443 3444 empty = 0; 3445 dimm = mci->csrows[cs]->channels[umc]->dimm; 3446 3447 edac_dbg(1, "MC node: %d, csrow: %d\n", 3448 pvt->mc_node_id, cs); 3449 3450 dimm->nr_pages = get_csrow_nr_pages(pvt, umc, cs); 3451 dimm->mtype = pvt->umc[umc].dram_type; 3452 dimm->edac_mode = edac_mode; 3453 dimm->dtype = dev_type; 3454 dimm->grain = 64; 3455 } 3456 } 3457 3458 return empty; 3459 } 3460 3461 /* 3462 * Initialize the array of csrow attribute instances, based on the values 3463 * from pci config hardware registers. 3464 */ 3465 static int init_csrows(struct mem_ctl_info *mci) 3466 { 3467 struct amd64_pvt *pvt = mci->pvt_info; 3468 enum edac_type edac_mode = EDAC_NONE; 3469 struct csrow_info *csrow; 3470 struct dimm_info *dimm; 3471 int i, j, empty = 1; 3472 int nr_pages = 0; 3473 u32 val; 3474 3475 if (pvt->umc) 3476 return init_csrows_df(mci); 3477 3478 amd64_read_pci_cfg(pvt->F3, NBCFG, &val); 3479 3480 pvt->nbcfg = val; 3481 3482 edac_dbg(0, "node %d, NBCFG=0x%08x[ChipKillEccCap: %d|DramEccEn: %d]\n", 3483 pvt->mc_node_id, val, 3484 !!(val & NBCFG_CHIPKILL), !!(val & NBCFG_ECC_ENABLE)); 3485 3486 /* 3487 * We iterate over DCT0 here but we look at DCT1 in parallel, if needed. 3488 */ 3489 for_each_chip_select(i, 0, pvt) { 3490 bool row_dct0 = !!csrow_enabled(i, 0, pvt); 3491 bool row_dct1 = false; 3492 3493 if (pvt->fam != 0xf) 3494 row_dct1 = !!csrow_enabled(i, 1, pvt); 3495 3496 if (!row_dct0 && !row_dct1) 3497 continue; 3498 3499 csrow = mci->csrows[i]; 3500 empty = 0; 3501 3502 edac_dbg(1, "MC node: %d, csrow: %d\n", 3503 pvt->mc_node_id, i); 3504 3505 if (row_dct0) { 3506 nr_pages = get_csrow_nr_pages(pvt, 0, i); 3507 csrow->channels[0]->dimm->nr_pages = nr_pages; 3508 } 3509 3510 /* K8 has only one DCT */ 3511 if (pvt->fam != 0xf && row_dct1) { 3512 int row_dct1_pages = get_csrow_nr_pages(pvt, 1, i); 3513 3514 csrow->channels[1]->dimm->nr_pages = row_dct1_pages; 3515 nr_pages += row_dct1_pages; 3516 } 3517 3518 edac_dbg(1, "Total csrow%d pages: %u\n", i, nr_pages); 3519 3520 /* Determine DIMM ECC mode: */ 3521 if (pvt->nbcfg & NBCFG_ECC_ENABLE) { 3522 edac_mode = (pvt->nbcfg & NBCFG_CHIPKILL) 3523 ? EDAC_S4ECD4ED 3524 : EDAC_SECDED; 3525 } 3526 3527 for (j = 0; j < fam_type->max_mcs; j++) { 3528 dimm = csrow->channels[j]->dimm; 3529 dimm->mtype = pvt->dram_type; 3530 dimm->edac_mode = edac_mode; 3531 dimm->grain = 64; 3532 } 3533 } 3534 3535 return empty; 3536 } 3537 3538 /* get all cores on this DCT */ 3539 static void get_cpus_on_this_dct_cpumask(struct cpumask *mask, u16 nid) 3540 { 3541 int cpu; 3542 3543 for_each_online_cpu(cpu) 3544 if (topology_die_id(cpu) == nid) 3545 cpumask_set_cpu(cpu, mask); 3546 } 3547 3548 /* check MCG_CTL on all the cpus on this node */ 3549 static bool nb_mce_bank_enabled_on_node(u16 nid) 3550 { 3551 cpumask_var_t mask; 3552 int cpu, nbe; 3553 bool ret = false; 3554 3555 if (!zalloc_cpumask_var(&mask, GFP_KERNEL)) { 3556 amd64_warn("%s: Error allocating mask\n", __func__); 3557 return false; 3558 } 3559 3560 get_cpus_on_this_dct_cpumask(mask, nid); 3561 3562 rdmsr_on_cpus(mask, MSR_IA32_MCG_CTL, msrs); 3563 3564 for_each_cpu(cpu, mask) { 3565 struct msr *reg = per_cpu_ptr(msrs, cpu); 3566 nbe = reg->l & MSR_MCGCTL_NBE; 3567 3568 edac_dbg(0, "core: %u, MCG_CTL: 0x%llx, NB MSR is %s\n", 3569 cpu, reg->q, 3570 (nbe ? "enabled" : "disabled")); 3571 3572 if (!nbe) 3573 goto out; 3574 } 3575 ret = true; 3576 3577 out: 3578 free_cpumask_var(mask); 3579 return ret; 3580 } 3581 3582 static int toggle_ecc_err_reporting(struct ecc_settings *s, u16 nid, bool on) 3583 { 3584 cpumask_var_t cmask; 3585 int cpu; 3586 3587 if (!zalloc_cpumask_var(&cmask, GFP_KERNEL)) { 3588 amd64_warn("%s: error allocating mask\n", __func__); 3589 return -ENOMEM; 3590 } 3591 3592 get_cpus_on_this_dct_cpumask(cmask, nid); 3593 3594 rdmsr_on_cpus(cmask, MSR_IA32_MCG_CTL, msrs); 3595 3596 for_each_cpu(cpu, cmask) { 3597 3598 struct msr *reg = per_cpu_ptr(msrs, cpu); 3599 3600 if (on) { 3601 if (reg->l & MSR_MCGCTL_NBE) 3602 s->flags.nb_mce_enable = 1; 3603 3604 reg->l |= MSR_MCGCTL_NBE; 3605 } else { 3606 /* 3607 * Turn off NB MCE reporting only when it was off before 3608 */ 3609 if (!s->flags.nb_mce_enable) 3610 reg->l &= ~MSR_MCGCTL_NBE; 3611 } 3612 } 3613 wrmsr_on_cpus(cmask, MSR_IA32_MCG_CTL, msrs); 3614 3615 free_cpumask_var(cmask); 3616 3617 return 0; 3618 } 3619 3620 static bool enable_ecc_error_reporting(struct ecc_settings *s, u16 nid, 3621 struct pci_dev *F3) 3622 { 3623 bool ret = true; 3624 u32 value, mask = 0x3; /* UECC/CECC enable */ 3625 3626 if (toggle_ecc_err_reporting(s, nid, ON)) { 3627 amd64_warn("Error enabling ECC reporting over MCGCTL!\n"); 3628 return false; 3629 } 3630 3631 amd64_read_pci_cfg(F3, NBCTL, &value); 3632 3633 s->old_nbctl = value & mask; 3634 s->nbctl_valid = true; 3635 3636 value |= mask; 3637 amd64_write_pci_cfg(F3, NBCTL, value); 3638 3639 amd64_read_pci_cfg(F3, NBCFG, &value); 3640 3641 edac_dbg(0, "1: node %d, NBCFG=0x%08x[DramEccEn: %d]\n", 3642 nid, value, !!(value & NBCFG_ECC_ENABLE)); 3643 3644 if (!(value & NBCFG_ECC_ENABLE)) { 3645 amd64_warn("DRAM ECC disabled on this node, enabling...\n"); 3646 3647 s->flags.nb_ecc_prev = 0; 3648 3649 /* Attempt to turn on DRAM ECC Enable */ 3650 value |= NBCFG_ECC_ENABLE; 3651 amd64_write_pci_cfg(F3, NBCFG, value); 3652 3653 amd64_read_pci_cfg(F3, NBCFG, &value); 3654 3655 if (!(value & NBCFG_ECC_ENABLE)) { 3656 amd64_warn("Hardware rejected DRAM ECC enable," 3657 "check memory DIMM configuration.\n"); 3658 ret = false; 3659 } else { 3660 amd64_info("Hardware accepted DRAM ECC Enable\n"); 3661 } 3662 } else { 3663 s->flags.nb_ecc_prev = 1; 3664 } 3665 3666 edac_dbg(0, "2: node %d, NBCFG=0x%08x[DramEccEn: %d]\n", 3667 nid, value, !!(value & NBCFG_ECC_ENABLE)); 3668 3669 return ret; 3670 } 3671 3672 static void restore_ecc_error_reporting(struct ecc_settings *s, u16 nid, 3673 struct pci_dev *F3) 3674 { 3675 u32 value, mask = 0x3; /* UECC/CECC enable */ 3676 3677 if (!s->nbctl_valid) 3678 return; 3679 3680 amd64_read_pci_cfg(F3, NBCTL, &value); 3681 value &= ~mask; 3682 value |= s->old_nbctl; 3683 3684 amd64_write_pci_cfg(F3, NBCTL, value); 3685 3686 /* restore previous BIOS DRAM ECC "off" setting we force-enabled */ 3687 if (!s->flags.nb_ecc_prev) { 3688 amd64_read_pci_cfg(F3, NBCFG, &value); 3689 value &= ~NBCFG_ECC_ENABLE; 3690 amd64_write_pci_cfg(F3, NBCFG, value); 3691 } 3692 3693 /* restore the NB Enable MCGCTL bit */ 3694 if (toggle_ecc_err_reporting(s, nid, OFF)) 3695 amd64_warn("Error restoring NB MCGCTL settings!\n"); 3696 } 3697 3698 static bool ecc_enabled(struct amd64_pvt *pvt) 3699 { 3700 u16 nid = pvt->mc_node_id; 3701 bool nb_mce_en = false; 3702 u8 ecc_en = 0, i; 3703 u32 value; 3704 3705 if (boot_cpu_data.x86 >= 0x17) { 3706 u8 umc_en_mask = 0, ecc_en_mask = 0; 3707 struct amd64_umc *umc; 3708 3709 for_each_umc(i) { 3710 umc = &pvt->umc[i]; 3711 3712 /* Only check enabled UMCs. */ 3713 if (!(umc->sdp_ctrl & UMC_SDP_INIT)) 3714 continue; 3715 3716 umc_en_mask |= BIT(i); 3717 3718 if (umc->umc_cap_hi & UMC_ECC_ENABLED) 3719 ecc_en_mask |= BIT(i); 3720 } 3721 3722 /* Check whether at least one UMC is enabled: */ 3723 if (umc_en_mask) 3724 ecc_en = umc_en_mask == ecc_en_mask; 3725 else 3726 edac_dbg(0, "Node %d: No enabled UMCs.\n", nid); 3727 3728 /* Assume UMC MCA banks are enabled. */ 3729 nb_mce_en = true; 3730 } else { 3731 amd64_read_pci_cfg(pvt->F3, NBCFG, &value); 3732 3733 ecc_en = !!(value & NBCFG_ECC_ENABLE); 3734 3735 nb_mce_en = nb_mce_bank_enabled_on_node(nid); 3736 if (!nb_mce_en) 3737 edac_dbg(0, "NB MCE bank disabled, set MSR 0x%08x[4] on node %d to enable.\n", 3738 MSR_IA32_MCG_CTL, nid); 3739 } 3740 3741 edac_dbg(3, "Node %d: DRAM ECC %s.\n", nid, (ecc_en ? "enabled" : "disabled")); 3742 3743 if (!ecc_en || !nb_mce_en) 3744 return false; 3745 else 3746 return true; 3747 } 3748 3749 static inline void 3750 f17h_determine_edac_ctl_cap(struct mem_ctl_info *mci, struct amd64_pvt *pvt) 3751 { 3752 u8 i, ecc_en = 1, cpk_en = 1, dev_x4 = 1, dev_x16 = 1; 3753 3754 for_each_umc(i) { 3755 if (pvt->umc[i].sdp_ctrl & UMC_SDP_INIT) { 3756 ecc_en &= !!(pvt->umc[i].umc_cap_hi & UMC_ECC_ENABLED); 3757 cpk_en &= !!(pvt->umc[i].umc_cap_hi & UMC_ECC_CHIPKILL_CAP); 3758 3759 dev_x4 &= !!(pvt->umc[i].dimm_cfg & BIT(6)); 3760 dev_x16 &= !!(pvt->umc[i].dimm_cfg & BIT(7)); 3761 } 3762 } 3763 3764 /* Set chipkill only if ECC is enabled: */ 3765 if (ecc_en) { 3766 mci->edac_ctl_cap |= EDAC_FLAG_SECDED; 3767 3768 if (!cpk_en) 3769 return; 3770 3771 if (dev_x4) 3772 mci->edac_ctl_cap |= EDAC_FLAG_S4ECD4ED; 3773 else if (dev_x16) 3774 mci->edac_ctl_cap |= EDAC_FLAG_S16ECD16ED; 3775 else 3776 mci->edac_ctl_cap |= EDAC_FLAG_S8ECD8ED; 3777 } 3778 } 3779 3780 static void setup_mci_misc_attrs(struct mem_ctl_info *mci) 3781 { 3782 struct amd64_pvt *pvt = mci->pvt_info; 3783 3784 mci->mtype_cap = MEM_FLAG_DDR2 | MEM_FLAG_RDDR2; 3785 mci->edac_ctl_cap = EDAC_FLAG_NONE; 3786 3787 if (pvt->umc) { 3788 f17h_determine_edac_ctl_cap(mci, pvt); 3789 } else { 3790 if (pvt->nbcap & NBCAP_SECDED) 3791 mci->edac_ctl_cap |= EDAC_FLAG_SECDED; 3792 3793 if (pvt->nbcap & NBCAP_CHIPKILL) 3794 mci->edac_ctl_cap |= EDAC_FLAG_S4ECD4ED; 3795 } 3796 3797 mci->edac_cap = determine_edac_cap(pvt); 3798 mci->mod_name = EDAC_MOD_STR; 3799 mci->ctl_name = fam_type->ctl_name; 3800 mci->dev_name = pci_name(pvt->F3); 3801 mci->ctl_page_to_phys = NULL; 3802 3803 if (pvt->fam >= 0x17) 3804 return; 3805 3806 /* memory scrubber interface */ 3807 mci->set_sdram_scrub_rate = set_scrub_rate; 3808 mci->get_sdram_scrub_rate = get_scrub_rate; 3809 } 3810 3811 /* 3812 * returns a pointer to the family descriptor on success, NULL otherwise. 3813 */ 3814 static struct amd64_family_type *per_family_init(struct amd64_pvt *pvt) 3815 { 3816 pvt->ext_model = boot_cpu_data.x86_model >> 4; 3817 pvt->stepping = boot_cpu_data.x86_stepping; 3818 pvt->model = boot_cpu_data.x86_model; 3819 pvt->fam = boot_cpu_data.x86; 3820 3821 switch (pvt->fam) { 3822 case 0xf: 3823 fam_type = &family_types[K8_CPUS]; 3824 pvt->ops = &family_types[K8_CPUS].ops; 3825 break; 3826 3827 case 0x10: 3828 fam_type = &family_types[F10_CPUS]; 3829 pvt->ops = &family_types[F10_CPUS].ops; 3830 break; 3831 3832 case 0x15: 3833 if (pvt->model == 0x30) { 3834 fam_type = &family_types[F15_M30H_CPUS]; 3835 pvt->ops = &family_types[F15_M30H_CPUS].ops; 3836 break; 3837 } else if (pvt->model == 0x60) { 3838 fam_type = &family_types[F15_M60H_CPUS]; 3839 pvt->ops = &family_types[F15_M60H_CPUS].ops; 3840 break; 3841 /* Richland is only client */ 3842 } else if (pvt->model == 0x13) { 3843 return NULL; 3844 } else { 3845 fam_type = &family_types[F15_CPUS]; 3846 pvt->ops = &family_types[F15_CPUS].ops; 3847 } 3848 break; 3849 3850 case 0x16: 3851 if (pvt->model == 0x30) { 3852 fam_type = &family_types[F16_M30H_CPUS]; 3853 pvt->ops = &family_types[F16_M30H_CPUS].ops; 3854 break; 3855 } 3856 fam_type = &family_types[F16_CPUS]; 3857 pvt->ops = &family_types[F16_CPUS].ops; 3858 break; 3859 3860 case 0x17: 3861 if (pvt->model >= 0x10 && pvt->model <= 0x2f) { 3862 fam_type = &family_types[F17_M10H_CPUS]; 3863 pvt->ops = &family_types[F17_M10H_CPUS].ops; 3864 break; 3865 } else if (pvt->model >= 0x30 && pvt->model <= 0x3f) { 3866 fam_type = &family_types[F17_M30H_CPUS]; 3867 pvt->ops = &family_types[F17_M30H_CPUS].ops; 3868 break; 3869 } else if (pvt->model >= 0x60 && pvt->model <= 0x6f) { 3870 fam_type = &family_types[F17_M60H_CPUS]; 3871 pvt->ops = &family_types[F17_M60H_CPUS].ops; 3872 break; 3873 } else if (pvt->model >= 0x70 && pvt->model <= 0x7f) { 3874 fam_type = &family_types[F17_M70H_CPUS]; 3875 pvt->ops = &family_types[F17_M70H_CPUS].ops; 3876 break; 3877 } 3878 fallthrough; 3879 case 0x18: 3880 fam_type = &family_types[F17_CPUS]; 3881 pvt->ops = &family_types[F17_CPUS].ops; 3882 3883 if (pvt->fam == 0x18) 3884 family_types[F17_CPUS].ctl_name = "F18h"; 3885 break; 3886 3887 case 0x19: 3888 if (pvt->model >= 0x10 && pvt->model <= 0x1f) { 3889 fam_type = &family_types[F19_M10H_CPUS]; 3890 pvt->ops = &family_types[F19_M10H_CPUS].ops; 3891 break; 3892 } else if (pvt->model >= 0x20 && pvt->model <= 0x2f) { 3893 fam_type = &family_types[F17_M70H_CPUS]; 3894 pvt->ops = &family_types[F17_M70H_CPUS].ops; 3895 fam_type->ctl_name = "F19h_M20h"; 3896 break; 3897 } else if (pvt->model >= 0x50 && pvt->model <= 0x5f) { 3898 fam_type = &family_types[F19_M50H_CPUS]; 3899 pvt->ops = &family_types[F19_M50H_CPUS].ops; 3900 fam_type->ctl_name = "F19h_M50h"; 3901 break; 3902 } else if (pvt->model >= 0xa0 && pvt->model <= 0xaf) { 3903 fam_type = &family_types[F19_M10H_CPUS]; 3904 pvt->ops = &family_types[F19_M10H_CPUS].ops; 3905 fam_type->ctl_name = "F19h_MA0h"; 3906 break; 3907 } 3908 fam_type = &family_types[F19_CPUS]; 3909 pvt->ops = &family_types[F19_CPUS].ops; 3910 family_types[F19_CPUS].ctl_name = "F19h"; 3911 break; 3912 3913 default: 3914 amd64_err("Unsupported family!\n"); 3915 return NULL; 3916 } 3917 3918 return fam_type; 3919 } 3920 3921 static const struct attribute_group *amd64_edac_attr_groups[] = { 3922 #ifdef CONFIG_EDAC_DEBUG 3923 &dbg_group, 3924 &inj_group, 3925 #endif 3926 NULL 3927 }; 3928 3929 static int hw_info_get(struct amd64_pvt *pvt) 3930 { 3931 u16 pci_id1 = 0, pci_id2 = 0; 3932 int ret; 3933 3934 if (pvt->fam >= 0x17) { 3935 pvt->umc = kcalloc(fam_type->max_mcs, sizeof(struct amd64_umc), GFP_KERNEL); 3936 if (!pvt->umc) 3937 return -ENOMEM; 3938 } else { 3939 pci_id1 = fam_type->f1_id; 3940 pci_id2 = fam_type->f2_id; 3941 } 3942 3943 ret = reserve_mc_sibling_devs(pvt, pci_id1, pci_id2); 3944 if (ret) 3945 return ret; 3946 3947 read_mc_regs(pvt); 3948 3949 return 0; 3950 } 3951 3952 static void hw_info_put(struct amd64_pvt *pvt) 3953 { 3954 if (pvt->F1) 3955 free_mc_sibling_devs(pvt); 3956 3957 kfree(pvt->umc); 3958 } 3959 3960 static int init_one_instance(struct amd64_pvt *pvt) 3961 { 3962 struct mem_ctl_info *mci = NULL; 3963 struct edac_mc_layer layers[2]; 3964 int ret = -ENOMEM; 3965 3966 layers[0].type = EDAC_MC_LAYER_CHIP_SELECT; 3967 layers[0].size = pvt->csels[0].b_cnt; 3968 layers[0].is_virt_csrow = true; 3969 layers[1].type = EDAC_MC_LAYER_CHANNEL; 3970 layers[1].size = fam_type->max_mcs; 3971 layers[1].is_virt_csrow = false; 3972 3973 mci = edac_mc_alloc(pvt->mc_node_id, ARRAY_SIZE(layers), layers, 0); 3974 if (!mci) 3975 return ret; 3976 3977 mci->pvt_info = pvt; 3978 mci->pdev = &pvt->F3->dev; 3979 3980 setup_mci_misc_attrs(mci); 3981 3982 if (init_csrows(mci)) 3983 mci->edac_cap = EDAC_FLAG_NONE; 3984 3985 ret = -ENODEV; 3986 if (edac_mc_add_mc_with_groups(mci, amd64_edac_attr_groups)) { 3987 edac_dbg(1, "failed edac_mc_add_mc()\n"); 3988 edac_mc_free(mci); 3989 return ret; 3990 } 3991 3992 return 0; 3993 } 3994 3995 static bool instance_has_memory(struct amd64_pvt *pvt) 3996 { 3997 bool cs_enabled = false; 3998 int cs = 0, dct = 0; 3999 4000 for (dct = 0; dct < fam_type->max_mcs; dct++) { 4001 for_each_chip_select(cs, dct, pvt) 4002 cs_enabled |= csrow_enabled(cs, dct, pvt); 4003 } 4004 4005 return cs_enabled; 4006 } 4007 4008 static int probe_one_instance(unsigned int nid) 4009 { 4010 struct pci_dev *F3 = node_to_amd_nb(nid)->misc; 4011 struct amd64_pvt *pvt = NULL; 4012 struct ecc_settings *s; 4013 int ret; 4014 4015 ret = -ENOMEM; 4016 s = kzalloc(sizeof(struct ecc_settings), GFP_KERNEL); 4017 if (!s) 4018 goto err_out; 4019 4020 ecc_stngs[nid] = s; 4021 4022 pvt = kzalloc(sizeof(struct amd64_pvt), GFP_KERNEL); 4023 if (!pvt) 4024 goto err_settings; 4025 4026 pvt->mc_node_id = nid; 4027 pvt->F3 = F3; 4028 4029 ret = -ENODEV; 4030 fam_type = per_family_init(pvt); 4031 if (!fam_type) 4032 goto err_enable; 4033 4034 ret = hw_info_get(pvt); 4035 if (ret < 0) 4036 goto err_enable; 4037 4038 ret = 0; 4039 if (!instance_has_memory(pvt)) { 4040 amd64_info("Node %d: No DIMMs detected.\n", nid); 4041 goto err_enable; 4042 } 4043 4044 if (!ecc_enabled(pvt)) { 4045 ret = -ENODEV; 4046 4047 if (!ecc_enable_override) 4048 goto err_enable; 4049 4050 if (boot_cpu_data.x86 >= 0x17) { 4051 amd64_warn("Forcing ECC on is not recommended on newer systems. Please enable ECC in BIOS."); 4052 goto err_enable; 4053 } else 4054 amd64_warn("Forcing ECC on!\n"); 4055 4056 if (!enable_ecc_error_reporting(s, nid, F3)) 4057 goto err_enable; 4058 } 4059 4060 ret = init_one_instance(pvt); 4061 if (ret < 0) { 4062 amd64_err("Error probing instance: %d\n", nid); 4063 4064 if (boot_cpu_data.x86 < 0x17) 4065 restore_ecc_error_reporting(s, nid, F3); 4066 4067 goto err_enable; 4068 } 4069 4070 amd64_info("%s %sdetected (node %d).\n", fam_type->ctl_name, 4071 (pvt->fam == 0xf ? 4072 (pvt->ext_model >= K8_REV_F ? "revF or later " 4073 : "revE or earlier ") 4074 : ""), pvt->mc_node_id); 4075 4076 dump_misc_regs(pvt); 4077 4078 return ret; 4079 4080 err_enable: 4081 hw_info_put(pvt); 4082 kfree(pvt); 4083 4084 err_settings: 4085 kfree(s); 4086 ecc_stngs[nid] = NULL; 4087 4088 err_out: 4089 return ret; 4090 } 4091 4092 static void remove_one_instance(unsigned int nid) 4093 { 4094 struct pci_dev *F3 = node_to_amd_nb(nid)->misc; 4095 struct ecc_settings *s = ecc_stngs[nid]; 4096 struct mem_ctl_info *mci; 4097 struct amd64_pvt *pvt; 4098 4099 /* Remove from EDAC CORE tracking list */ 4100 mci = edac_mc_del_mc(&F3->dev); 4101 if (!mci) 4102 return; 4103 4104 pvt = mci->pvt_info; 4105 4106 restore_ecc_error_reporting(s, nid, F3); 4107 4108 kfree(ecc_stngs[nid]); 4109 ecc_stngs[nid] = NULL; 4110 4111 /* Free the EDAC CORE resources */ 4112 mci->pvt_info = NULL; 4113 4114 hw_info_put(pvt); 4115 kfree(pvt); 4116 edac_mc_free(mci); 4117 } 4118 4119 static void setup_pci_device(void) 4120 { 4121 if (pci_ctl) 4122 return; 4123 4124 pci_ctl = edac_pci_create_generic_ctl(pci_ctl_dev, EDAC_MOD_STR); 4125 if (!pci_ctl) { 4126 pr_warn("%s(): Unable to create PCI control\n", __func__); 4127 pr_warn("%s(): PCI error report via EDAC not set\n", __func__); 4128 } 4129 } 4130 4131 static const struct x86_cpu_id amd64_cpuids[] = { 4132 X86_MATCH_VENDOR_FAM(AMD, 0x0F, NULL), 4133 X86_MATCH_VENDOR_FAM(AMD, 0x10, NULL), 4134 X86_MATCH_VENDOR_FAM(AMD, 0x15, NULL), 4135 X86_MATCH_VENDOR_FAM(AMD, 0x16, NULL), 4136 X86_MATCH_VENDOR_FAM(AMD, 0x17, NULL), 4137 X86_MATCH_VENDOR_FAM(HYGON, 0x18, NULL), 4138 X86_MATCH_VENDOR_FAM(AMD, 0x19, NULL), 4139 { } 4140 }; 4141 MODULE_DEVICE_TABLE(x86cpu, amd64_cpuids); 4142 4143 static int __init amd64_edac_init(void) 4144 { 4145 const char *owner; 4146 int err = -ENODEV; 4147 int i; 4148 4149 if (ghes_get_devices()) 4150 return -EBUSY; 4151 4152 owner = edac_get_owner(); 4153 if (owner && strncmp(owner, EDAC_MOD_STR, sizeof(EDAC_MOD_STR))) 4154 return -EBUSY; 4155 4156 if (!x86_match_cpu(amd64_cpuids)) 4157 return -ENODEV; 4158 4159 if (!amd_nb_num()) 4160 return -ENODEV; 4161 4162 opstate_init(); 4163 4164 err = -ENOMEM; 4165 ecc_stngs = kcalloc(amd_nb_num(), sizeof(ecc_stngs[0]), GFP_KERNEL); 4166 if (!ecc_stngs) 4167 goto err_free; 4168 4169 msrs = msrs_alloc(); 4170 if (!msrs) 4171 goto err_free; 4172 4173 for (i = 0; i < amd_nb_num(); i++) { 4174 err = probe_one_instance(i); 4175 if (err) { 4176 /* unwind properly */ 4177 while (--i >= 0) 4178 remove_one_instance(i); 4179 4180 goto err_pci; 4181 } 4182 } 4183 4184 if (!edac_has_mcs()) { 4185 err = -ENODEV; 4186 goto err_pci; 4187 } 4188 4189 /* register stuff with EDAC MCE */ 4190 if (boot_cpu_data.x86 >= 0x17) { 4191 amd_register_ecc_decoder(decode_umc_error); 4192 } else { 4193 amd_register_ecc_decoder(decode_bus_error); 4194 setup_pci_device(); 4195 } 4196 4197 #ifdef CONFIG_X86_32 4198 amd64_err("%s on 32-bit is unsupported. USE AT YOUR OWN RISK!\n", EDAC_MOD_STR); 4199 #endif 4200 4201 printk(KERN_INFO "AMD64 EDAC driver v%s\n", EDAC_AMD64_VERSION); 4202 4203 return 0; 4204 4205 err_pci: 4206 pci_ctl_dev = NULL; 4207 4208 msrs_free(msrs); 4209 msrs = NULL; 4210 4211 err_free: 4212 kfree(ecc_stngs); 4213 ecc_stngs = NULL; 4214 4215 return err; 4216 } 4217 4218 static void __exit amd64_edac_exit(void) 4219 { 4220 int i; 4221 4222 if (pci_ctl) 4223 edac_pci_release_generic_ctl(pci_ctl); 4224 4225 /* unregister from EDAC MCE */ 4226 if (boot_cpu_data.x86 >= 0x17) 4227 amd_unregister_ecc_decoder(decode_umc_error); 4228 else 4229 amd_unregister_ecc_decoder(decode_bus_error); 4230 4231 for (i = 0; i < amd_nb_num(); i++) 4232 remove_one_instance(i); 4233 4234 kfree(ecc_stngs); 4235 ecc_stngs = NULL; 4236 4237 pci_ctl_dev = NULL; 4238 4239 msrs_free(msrs); 4240 msrs = NULL; 4241 } 4242 4243 module_init(amd64_edac_init); 4244 module_exit(amd64_edac_exit); 4245 4246 MODULE_LICENSE("GPL"); 4247 MODULE_AUTHOR("SoftwareBitMaker: Doug Thompson, " 4248 "Dave Peterson, Thayne Harbaugh"); 4249 MODULE_DESCRIPTION("MC support for AMD64 memory controllers - " 4250 EDAC_AMD64_VERSION); 4251 4252 module_param(edac_op_state, int, 0444); 4253 MODULE_PARM_DESC(edac_op_state, "EDAC Error Reporting state: 0=Poll,1=NMI"); 4254