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