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 /* 979 * See AMD PPR DF::LclNodeTypeMap 980 * 981 * This register gives information for nodes of the same type within a system. 982 * 983 * Reading this register from a GPU node will tell how many GPU nodes are in the 984 * system and what the lowest AMD Node ID value is for the GPU nodes. Use this 985 * info to fixup the Linux logical "Node ID" value set in the AMD NB code and EDAC. 986 */ 987 static struct local_node_map { 988 u16 node_count; 989 u16 base_node_id; 990 } gpu_node_map; 991 992 #define PCI_DEVICE_ID_AMD_MI200_DF_F1 0x14d1 993 #define REG_LOCAL_NODE_TYPE_MAP 0x144 994 995 /* Local Node Type Map (LNTM) fields */ 996 #define LNTM_NODE_COUNT GENMASK(27, 16) 997 #define LNTM_BASE_NODE_ID GENMASK(11, 0) 998 999 static int gpu_get_node_map(void) 1000 { 1001 struct pci_dev *pdev; 1002 int ret; 1003 u32 tmp; 1004 1005 /* 1006 * Node ID 0 is reserved for CPUs. 1007 * Therefore, a non-zero Node ID means we've already cached the values. 1008 */ 1009 if (gpu_node_map.base_node_id) 1010 return 0; 1011 1012 pdev = pci_get_device(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_MI200_DF_F1, NULL); 1013 if (!pdev) { 1014 ret = -ENODEV; 1015 goto out; 1016 } 1017 1018 ret = pci_read_config_dword(pdev, REG_LOCAL_NODE_TYPE_MAP, &tmp); 1019 if (ret) 1020 goto out; 1021 1022 gpu_node_map.node_count = FIELD_GET(LNTM_NODE_COUNT, tmp); 1023 gpu_node_map.base_node_id = FIELD_GET(LNTM_BASE_NODE_ID, tmp); 1024 1025 out: 1026 pci_dev_put(pdev); 1027 return ret; 1028 } 1029 1030 static int fixup_node_id(int node_id, struct mce *m) 1031 { 1032 /* MCA_IPID[InstanceIdHi] give the AMD Node ID for the bank. */ 1033 u8 nid = (m->ipid >> 44) & 0xF; 1034 1035 if (smca_get_bank_type(m->extcpu, m->bank) != SMCA_UMC_V2) 1036 return node_id; 1037 1038 /* Nodes below the GPU base node are CPU nodes and don't need a fixup. */ 1039 if (nid < gpu_node_map.base_node_id) 1040 return node_id; 1041 1042 /* Convert the hardware-provided AMD Node ID to a Linux logical one. */ 1043 return nid - gpu_node_map.base_node_id + 1; 1044 } 1045 1046 /* Protect the PCI config register pairs used for DF indirect access. */ 1047 static DEFINE_MUTEX(df_indirect_mutex); 1048 1049 /* 1050 * Data Fabric Indirect Access uses FICAA/FICAD. 1051 * 1052 * Fabric Indirect Configuration Access Address (FICAA): Constructed based 1053 * on the device's Instance Id and the PCI function and register offset of 1054 * the desired register. 1055 * 1056 * Fabric Indirect Configuration Access Data (FICAD): There are FICAD LO 1057 * and FICAD HI registers but so far we only need the LO register. 1058 * 1059 * Use Instance Id 0xFF to indicate a broadcast read. 1060 */ 1061 #define DF_BROADCAST 0xFF 1062 static int __df_indirect_read(u16 node, u8 func, u16 reg, u8 instance_id, u32 *lo) 1063 { 1064 struct pci_dev *F4; 1065 u32 ficaa; 1066 int err = -ENODEV; 1067 1068 if (node >= amd_nb_num()) 1069 goto out; 1070 1071 F4 = node_to_amd_nb(node)->link; 1072 if (!F4) 1073 goto out; 1074 1075 ficaa = (instance_id == DF_BROADCAST) ? 0 : 1; 1076 ficaa |= reg & 0x3FC; 1077 ficaa |= (func & 0x7) << 11; 1078 ficaa |= instance_id << 16; 1079 1080 mutex_lock(&df_indirect_mutex); 1081 1082 err = pci_write_config_dword(F4, 0x5C, ficaa); 1083 if (err) { 1084 pr_warn("Error writing DF Indirect FICAA, FICAA=0x%x\n", ficaa); 1085 goto out_unlock; 1086 } 1087 1088 err = pci_read_config_dword(F4, 0x98, lo); 1089 if (err) 1090 pr_warn("Error reading DF Indirect FICAD LO, FICAA=0x%x.\n", ficaa); 1091 1092 out_unlock: 1093 mutex_unlock(&df_indirect_mutex); 1094 1095 out: 1096 return err; 1097 } 1098 1099 static int df_indirect_read_instance(u16 node, u8 func, u16 reg, u8 instance_id, u32 *lo) 1100 { 1101 return __df_indirect_read(node, func, reg, instance_id, lo); 1102 } 1103 1104 static int df_indirect_read_broadcast(u16 node, u8 func, u16 reg, u32 *lo) 1105 { 1106 return __df_indirect_read(node, func, reg, DF_BROADCAST, lo); 1107 } 1108 1109 struct addr_ctx { 1110 u64 ret_addr; 1111 u32 tmp; 1112 u16 nid; 1113 u8 inst_id; 1114 }; 1115 1116 static int umc_normaddr_to_sysaddr(u64 norm_addr, u16 nid, u8 umc, u64 *sys_addr) 1117 { 1118 u64 dram_base_addr, dram_limit_addr, dram_hole_base; 1119 1120 u8 die_id_shift, die_id_mask, socket_id_shift, socket_id_mask; 1121 u8 intlv_num_dies, intlv_num_chan, intlv_num_sockets; 1122 u8 intlv_addr_sel, intlv_addr_bit; 1123 u8 num_intlv_bits, hashed_bit; 1124 u8 lgcy_mmio_hole_en, base = 0; 1125 u8 cs_mask, cs_id = 0; 1126 bool hash_enabled = false; 1127 1128 struct addr_ctx ctx; 1129 1130 memset(&ctx, 0, sizeof(ctx)); 1131 1132 /* Start from the normalized address */ 1133 ctx.ret_addr = norm_addr; 1134 1135 ctx.nid = nid; 1136 ctx.inst_id = umc; 1137 1138 /* Read D18F0x1B4 (DramOffset), check if base 1 is used. */ 1139 if (df_indirect_read_instance(nid, 0, 0x1B4, umc, &ctx.tmp)) 1140 goto out_err; 1141 1142 /* Remove HiAddrOffset from normalized address, if enabled: */ 1143 if (ctx.tmp & BIT(0)) { 1144 u64 hi_addr_offset = (ctx.tmp & GENMASK_ULL(31, 20)) << 8; 1145 1146 if (norm_addr >= hi_addr_offset) { 1147 ctx.ret_addr -= hi_addr_offset; 1148 base = 1; 1149 } 1150 } 1151 1152 /* Read D18F0x110 (DramBaseAddress). */ 1153 if (df_indirect_read_instance(nid, 0, 0x110 + (8 * base), umc, &ctx.tmp)) 1154 goto out_err; 1155 1156 /* Check if address range is valid. */ 1157 if (!(ctx.tmp & BIT(0))) { 1158 pr_err("%s: Invalid DramBaseAddress range: 0x%x.\n", 1159 __func__, ctx.tmp); 1160 goto out_err; 1161 } 1162 1163 lgcy_mmio_hole_en = ctx.tmp & BIT(1); 1164 intlv_num_chan = (ctx.tmp >> 4) & 0xF; 1165 intlv_addr_sel = (ctx.tmp >> 8) & 0x7; 1166 dram_base_addr = (ctx.tmp & GENMASK_ULL(31, 12)) << 16; 1167 1168 /* {0, 1, 2, 3} map to address bits {8, 9, 10, 11} respectively */ 1169 if (intlv_addr_sel > 3) { 1170 pr_err("%s: Invalid interleave address select %d.\n", 1171 __func__, intlv_addr_sel); 1172 goto out_err; 1173 } 1174 1175 /* Read D18F0x114 (DramLimitAddress). */ 1176 if (df_indirect_read_instance(nid, 0, 0x114 + (8 * base), umc, &ctx.tmp)) 1177 goto out_err; 1178 1179 intlv_num_sockets = (ctx.tmp >> 8) & 0x1; 1180 intlv_num_dies = (ctx.tmp >> 10) & 0x3; 1181 dram_limit_addr = ((ctx.tmp & GENMASK_ULL(31, 12)) << 16) | GENMASK_ULL(27, 0); 1182 1183 intlv_addr_bit = intlv_addr_sel + 8; 1184 1185 /* Re-use intlv_num_chan by setting it equal to log2(#channels) */ 1186 switch (intlv_num_chan) { 1187 case 0: intlv_num_chan = 0; break; 1188 case 1: intlv_num_chan = 1; break; 1189 case 3: intlv_num_chan = 2; break; 1190 case 5: intlv_num_chan = 3; break; 1191 case 7: intlv_num_chan = 4; break; 1192 1193 case 8: intlv_num_chan = 1; 1194 hash_enabled = true; 1195 break; 1196 default: 1197 pr_err("%s: Invalid number of interleaved channels %d.\n", 1198 __func__, intlv_num_chan); 1199 goto out_err; 1200 } 1201 1202 num_intlv_bits = intlv_num_chan; 1203 1204 if (intlv_num_dies > 2) { 1205 pr_err("%s: Invalid number of interleaved nodes/dies %d.\n", 1206 __func__, intlv_num_dies); 1207 goto out_err; 1208 } 1209 1210 num_intlv_bits += intlv_num_dies; 1211 1212 /* Add a bit if sockets are interleaved. */ 1213 num_intlv_bits += intlv_num_sockets; 1214 1215 /* Assert num_intlv_bits <= 4 */ 1216 if (num_intlv_bits > 4) { 1217 pr_err("%s: Invalid interleave bits %d.\n", 1218 __func__, num_intlv_bits); 1219 goto out_err; 1220 } 1221 1222 if (num_intlv_bits > 0) { 1223 u64 temp_addr_x, temp_addr_i, temp_addr_y; 1224 u8 die_id_bit, sock_id_bit, cs_fabric_id; 1225 1226 /* 1227 * Read FabricBlockInstanceInformation3_CS[BlockFabricID]. 1228 * This is the fabric id for this coherent slave. Use 1229 * umc/channel# as instance id of the coherent slave 1230 * for FICAA. 1231 */ 1232 if (df_indirect_read_instance(nid, 0, 0x50, umc, &ctx.tmp)) 1233 goto out_err; 1234 1235 cs_fabric_id = (ctx.tmp >> 8) & 0xFF; 1236 die_id_bit = 0; 1237 1238 /* If interleaved over more than 1 channel: */ 1239 if (intlv_num_chan) { 1240 die_id_bit = intlv_num_chan; 1241 cs_mask = (1 << die_id_bit) - 1; 1242 cs_id = cs_fabric_id & cs_mask; 1243 } 1244 1245 sock_id_bit = die_id_bit; 1246 1247 /* Read D18F1x208 (SystemFabricIdMask). */ 1248 if (intlv_num_dies || intlv_num_sockets) 1249 if (df_indirect_read_broadcast(nid, 1, 0x208, &ctx.tmp)) 1250 goto out_err; 1251 1252 /* If interleaved over more than 1 die. */ 1253 if (intlv_num_dies) { 1254 sock_id_bit = die_id_bit + intlv_num_dies; 1255 die_id_shift = (ctx.tmp >> 24) & 0xF; 1256 die_id_mask = (ctx.tmp >> 8) & 0xFF; 1257 1258 cs_id |= ((cs_fabric_id & die_id_mask) >> die_id_shift) << die_id_bit; 1259 } 1260 1261 /* If interleaved over more than 1 socket. */ 1262 if (intlv_num_sockets) { 1263 socket_id_shift = (ctx.tmp >> 28) & 0xF; 1264 socket_id_mask = (ctx.tmp >> 16) & 0xFF; 1265 1266 cs_id |= ((cs_fabric_id & socket_id_mask) >> socket_id_shift) << sock_id_bit; 1267 } 1268 1269 /* 1270 * The pre-interleaved address consists of XXXXXXIIIYYYYY 1271 * where III is the ID for this CS, and XXXXXXYYYYY are the 1272 * address bits from the post-interleaved address. 1273 * "num_intlv_bits" has been calculated to tell us how many "I" 1274 * bits there are. "intlv_addr_bit" tells us how many "Y" bits 1275 * there are (where "I" starts). 1276 */ 1277 temp_addr_y = ctx.ret_addr & GENMASK_ULL(intlv_addr_bit - 1, 0); 1278 temp_addr_i = (cs_id << intlv_addr_bit); 1279 temp_addr_x = (ctx.ret_addr & GENMASK_ULL(63, intlv_addr_bit)) << num_intlv_bits; 1280 ctx.ret_addr = temp_addr_x | temp_addr_i | temp_addr_y; 1281 } 1282 1283 /* Add dram base address */ 1284 ctx.ret_addr += dram_base_addr; 1285 1286 /* If legacy MMIO hole enabled */ 1287 if (lgcy_mmio_hole_en) { 1288 if (df_indirect_read_broadcast(nid, 0, 0x104, &ctx.tmp)) 1289 goto out_err; 1290 1291 dram_hole_base = ctx.tmp & GENMASK(31, 24); 1292 if (ctx.ret_addr >= dram_hole_base) 1293 ctx.ret_addr += (BIT_ULL(32) - dram_hole_base); 1294 } 1295 1296 if (hash_enabled) { 1297 /* Save some parentheses and grab ls-bit at the end. */ 1298 hashed_bit = (ctx.ret_addr >> 12) ^ 1299 (ctx.ret_addr >> 18) ^ 1300 (ctx.ret_addr >> 21) ^ 1301 (ctx.ret_addr >> 30) ^ 1302 cs_id; 1303 1304 hashed_bit &= BIT(0); 1305 1306 if (hashed_bit != ((ctx.ret_addr >> intlv_addr_bit) & BIT(0))) 1307 ctx.ret_addr ^= BIT(intlv_addr_bit); 1308 } 1309 1310 /* Is calculated system address is above DRAM limit address? */ 1311 if (ctx.ret_addr > dram_limit_addr) 1312 goto out_err; 1313 1314 *sys_addr = ctx.ret_addr; 1315 return 0; 1316 1317 out_err: 1318 return -EINVAL; 1319 } 1320 1321 static int get_channel_from_ecc_syndrome(struct mem_ctl_info *, u16); 1322 1323 /* 1324 * Determine if the DIMMs have ECC enabled. ECC is enabled ONLY if all the DIMMs 1325 * are ECC capable. 1326 */ 1327 static unsigned long dct_determine_edac_cap(struct amd64_pvt *pvt) 1328 { 1329 unsigned long edac_cap = EDAC_FLAG_NONE; 1330 u8 bit; 1331 1332 bit = (pvt->fam > 0xf || pvt->ext_model >= K8_REV_F) 1333 ? 19 1334 : 17; 1335 1336 if (pvt->dclr0 & BIT(bit)) 1337 edac_cap = EDAC_FLAG_SECDED; 1338 1339 return edac_cap; 1340 } 1341 1342 static unsigned long umc_determine_edac_cap(struct amd64_pvt *pvt) 1343 { 1344 u8 i, umc_en_mask = 0, dimm_ecc_en_mask = 0; 1345 unsigned long edac_cap = EDAC_FLAG_NONE; 1346 1347 for_each_umc(i) { 1348 if (!(pvt->umc[i].sdp_ctrl & UMC_SDP_INIT)) 1349 continue; 1350 1351 umc_en_mask |= BIT(i); 1352 1353 /* UMC Configuration bit 12 (DimmEccEn) */ 1354 if (pvt->umc[i].umc_cfg & BIT(12)) 1355 dimm_ecc_en_mask |= BIT(i); 1356 } 1357 1358 if (umc_en_mask == dimm_ecc_en_mask) 1359 edac_cap = EDAC_FLAG_SECDED; 1360 1361 return edac_cap; 1362 } 1363 1364 /* 1365 * debug routine to display the memory sizes of all logical DIMMs and its 1366 * CSROWs 1367 */ 1368 static void dct_debug_display_dimm_sizes(struct amd64_pvt *pvt, u8 ctrl) 1369 { 1370 u32 *dcsb = ctrl ? pvt->csels[1].csbases : pvt->csels[0].csbases; 1371 u32 dbam = ctrl ? pvt->dbam1 : pvt->dbam0; 1372 int dimm, size0, size1; 1373 1374 if (pvt->fam == 0xf) { 1375 /* K8 families < revF not supported yet */ 1376 if (pvt->ext_model < K8_REV_F) 1377 return; 1378 1379 WARN_ON(ctrl != 0); 1380 } 1381 1382 if (pvt->fam == 0x10) { 1383 dbam = (ctrl && !dct_ganging_enabled(pvt)) ? pvt->dbam1 1384 : pvt->dbam0; 1385 dcsb = (ctrl && !dct_ganging_enabled(pvt)) ? 1386 pvt->csels[1].csbases : 1387 pvt->csels[0].csbases; 1388 } else if (ctrl) { 1389 dbam = pvt->dbam0; 1390 dcsb = pvt->csels[1].csbases; 1391 } 1392 edac_dbg(1, "F2x%d80 (DRAM Bank Address Mapping): 0x%08x\n", 1393 ctrl, dbam); 1394 1395 edac_printk(KERN_DEBUG, EDAC_MC, "DCT%d chip selects:\n", ctrl); 1396 1397 /* Dump memory sizes for DIMM and its CSROWs */ 1398 for (dimm = 0; dimm < 4; dimm++) { 1399 size0 = 0; 1400 if (dcsb[dimm * 2] & DCSB_CS_ENABLE) 1401 /* 1402 * For F15m60h, we need multiplier for LRDIMM cs_size 1403 * calculation. We pass dimm value to the dbam_to_cs 1404 * mapper so we can find the multiplier from the 1405 * corresponding DCSM. 1406 */ 1407 size0 = pvt->ops->dbam_to_cs(pvt, ctrl, 1408 DBAM_DIMM(dimm, dbam), 1409 dimm); 1410 1411 size1 = 0; 1412 if (dcsb[dimm * 2 + 1] & DCSB_CS_ENABLE) 1413 size1 = pvt->ops->dbam_to_cs(pvt, ctrl, 1414 DBAM_DIMM(dimm, dbam), 1415 dimm); 1416 1417 amd64_info(EDAC_MC ": %d: %5dMB %d: %5dMB\n", 1418 dimm * 2, size0, 1419 dimm * 2 + 1, size1); 1420 } 1421 } 1422 1423 1424 static void debug_dump_dramcfg_low(struct amd64_pvt *pvt, u32 dclr, int chan) 1425 { 1426 edac_dbg(1, "F2x%d90 (DRAM Cfg Low): 0x%08x\n", chan, dclr); 1427 1428 if (pvt->dram_type == MEM_LRDDR3) { 1429 u32 dcsm = pvt->csels[chan].csmasks[0]; 1430 /* 1431 * It's assumed all LRDIMMs in a DCT are going to be of 1432 * same 'type' until proven otherwise. So, use a cs 1433 * value of '0' here to get dcsm value. 1434 */ 1435 edac_dbg(1, " LRDIMM %dx rank multiply\n", (dcsm & 0x3)); 1436 } 1437 1438 edac_dbg(1, "All DIMMs support ECC:%s\n", 1439 (dclr & BIT(19)) ? "yes" : "no"); 1440 1441 1442 edac_dbg(1, " PAR/ERR parity: %s\n", 1443 (dclr & BIT(8)) ? "enabled" : "disabled"); 1444 1445 if (pvt->fam == 0x10) 1446 edac_dbg(1, " DCT 128bit mode width: %s\n", 1447 (dclr & BIT(11)) ? "128b" : "64b"); 1448 1449 edac_dbg(1, " x4 logical DIMMs present: L0: %s L1: %s L2: %s L3: %s\n", 1450 (dclr & BIT(12)) ? "yes" : "no", 1451 (dclr & BIT(13)) ? "yes" : "no", 1452 (dclr & BIT(14)) ? "yes" : "no", 1453 (dclr & BIT(15)) ? "yes" : "no"); 1454 } 1455 1456 #define CS_EVEN_PRIMARY BIT(0) 1457 #define CS_ODD_PRIMARY BIT(1) 1458 #define CS_EVEN_SECONDARY BIT(2) 1459 #define CS_ODD_SECONDARY BIT(3) 1460 #define CS_3R_INTERLEAVE BIT(4) 1461 1462 #define CS_EVEN (CS_EVEN_PRIMARY | CS_EVEN_SECONDARY) 1463 #define CS_ODD (CS_ODD_PRIMARY | CS_ODD_SECONDARY) 1464 1465 static int umc_get_cs_mode(int dimm, u8 ctrl, struct amd64_pvt *pvt) 1466 { 1467 u8 base, count = 0; 1468 int cs_mode = 0; 1469 1470 if (csrow_enabled(2 * dimm, ctrl, pvt)) 1471 cs_mode |= CS_EVEN_PRIMARY; 1472 1473 if (csrow_enabled(2 * dimm + 1, ctrl, pvt)) 1474 cs_mode |= CS_ODD_PRIMARY; 1475 1476 /* Asymmetric dual-rank DIMM support. */ 1477 if (csrow_sec_enabled(2 * dimm + 1, ctrl, pvt)) 1478 cs_mode |= CS_ODD_SECONDARY; 1479 1480 /* 1481 * 3 Rank inteleaving support. 1482 * There should be only three bases enabled and their two masks should 1483 * be equal. 1484 */ 1485 for_each_chip_select(base, ctrl, pvt) 1486 count += csrow_enabled(base, ctrl, pvt); 1487 1488 if (count == 3 && 1489 pvt->csels[ctrl].csmasks[0] == pvt->csels[ctrl].csmasks[1]) { 1490 edac_dbg(1, "3R interleaving in use.\n"); 1491 cs_mode |= CS_3R_INTERLEAVE; 1492 } 1493 1494 return cs_mode; 1495 } 1496 1497 static int __addr_mask_to_cs_size(u32 addr_mask_orig, unsigned int cs_mode, 1498 int csrow_nr, int dimm) 1499 { 1500 u32 msb, weight, num_zero_bits; 1501 u32 addr_mask_deinterleaved; 1502 int size = 0; 1503 1504 /* 1505 * The number of zero bits in the mask is equal to the number of bits 1506 * in a full mask minus the number of bits in the current mask. 1507 * 1508 * The MSB is the number of bits in the full mask because BIT[0] is 1509 * always 0. 1510 * 1511 * In the special 3 Rank interleaving case, a single bit is flipped 1512 * without swapping with the most significant bit. This can be handled 1513 * by keeping the MSB where it is and ignoring the single zero bit. 1514 */ 1515 msb = fls(addr_mask_orig) - 1; 1516 weight = hweight_long(addr_mask_orig); 1517 num_zero_bits = msb - weight - !!(cs_mode & CS_3R_INTERLEAVE); 1518 1519 /* Take the number of zero bits off from the top of the mask. */ 1520 addr_mask_deinterleaved = GENMASK_ULL(msb - num_zero_bits, 1); 1521 1522 edac_dbg(1, "CS%d DIMM%d AddrMasks:\n", csrow_nr, dimm); 1523 edac_dbg(1, " Original AddrMask: 0x%x\n", addr_mask_orig); 1524 edac_dbg(1, " Deinterleaved AddrMask: 0x%x\n", addr_mask_deinterleaved); 1525 1526 /* Register [31:1] = Address [39:9]. Size is in kBs here. */ 1527 size = (addr_mask_deinterleaved >> 2) + 1; 1528 1529 /* Return size in MBs. */ 1530 return size >> 10; 1531 } 1532 1533 static int umc_addr_mask_to_cs_size(struct amd64_pvt *pvt, u8 umc, 1534 unsigned int cs_mode, int csrow_nr) 1535 { 1536 int cs_mask_nr = csrow_nr; 1537 u32 addr_mask_orig; 1538 int dimm, size = 0; 1539 1540 /* No Chip Selects are enabled. */ 1541 if (!cs_mode) 1542 return size; 1543 1544 /* Requested size of an even CS but none are enabled. */ 1545 if (!(cs_mode & CS_EVEN) && !(csrow_nr & 1)) 1546 return size; 1547 1548 /* Requested size of an odd CS but none are enabled. */ 1549 if (!(cs_mode & CS_ODD) && (csrow_nr & 1)) 1550 return size; 1551 1552 /* 1553 * Family 17h introduced systems with one mask per DIMM, 1554 * and two Chip Selects per DIMM. 1555 * 1556 * CS0 and CS1 -> MASK0 / DIMM0 1557 * CS2 and CS3 -> MASK1 / DIMM1 1558 * 1559 * Family 19h Model 10h introduced systems with one mask per Chip Select, 1560 * and two Chip Selects per DIMM. 1561 * 1562 * CS0 -> MASK0 -> DIMM0 1563 * CS1 -> MASK1 -> DIMM0 1564 * CS2 -> MASK2 -> DIMM1 1565 * CS3 -> MASK3 -> DIMM1 1566 * 1567 * Keep the mask number equal to the Chip Select number for newer systems, 1568 * and shift the mask number for older systems. 1569 */ 1570 dimm = csrow_nr >> 1; 1571 1572 if (!pvt->flags.zn_regs_v2) 1573 cs_mask_nr >>= 1; 1574 1575 /* Asymmetric dual-rank DIMM support. */ 1576 if ((csrow_nr & 1) && (cs_mode & CS_ODD_SECONDARY)) 1577 addr_mask_orig = pvt->csels[umc].csmasks_sec[cs_mask_nr]; 1578 else 1579 addr_mask_orig = pvt->csels[umc].csmasks[cs_mask_nr]; 1580 1581 return __addr_mask_to_cs_size(addr_mask_orig, cs_mode, csrow_nr, dimm); 1582 } 1583 1584 static void umc_debug_display_dimm_sizes(struct amd64_pvt *pvt, u8 ctrl) 1585 { 1586 int dimm, size0, size1, cs0, cs1, cs_mode; 1587 1588 edac_printk(KERN_DEBUG, EDAC_MC, "UMC%d chip selects:\n", ctrl); 1589 1590 for (dimm = 0; dimm < 2; dimm++) { 1591 cs0 = dimm * 2; 1592 cs1 = dimm * 2 + 1; 1593 1594 cs_mode = umc_get_cs_mode(dimm, ctrl, pvt); 1595 1596 size0 = umc_addr_mask_to_cs_size(pvt, ctrl, cs_mode, cs0); 1597 size1 = umc_addr_mask_to_cs_size(pvt, ctrl, cs_mode, cs1); 1598 1599 amd64_info(EDAC_MC ": %d: %5dMB %d: %5dMB\n", 1600 cs0, size0, 1601 cs1, size1); 1602 } 1603 } 1604 1605 static void umc_dump_misc_regs(struct amd64_pvt *pvt) 1606 { 1607 struct amd64_umc *umc; 1608 u32 i, tmp, umc_base; 1609 1610 for_each_umc(i) { 1611 umc_base = get_umc_base(i); 1612 umc = &pvt->umc[i]; 1613 1614 edac_dbg(1, "UMC%d DIMM cfg: 0x%x\n", i, umc->dimm_cfg); 1615 edac_dbg(1, "UMC%d UMC cfg: 0x%x\n", i, umc->umc_cfg); 1616 edac_dbg(1, "UMC%d SDP ctrl: 0x%x\n", i, umc->sdp_ctrl); 1617 edac_dbg(1, "UMC%d ECC ctrl: 0x%x\n", i, umc->ecc_ctrl); 1618 1619 amd_smn_read(pvt->mc_node_id, umc_base + UMCCH_ECC_BAD_SYMBOL, &tmp); 1620 edac_dbg(1, "UMC%d ECC bad symbol: 0x%x\n", i, tmp); 1621 1622 amd_smn_read(pvt->mc_node_id, umc_base + UMCCH_UMC_CAP, &tmp); 1623 edac_dbg(1, "UMC%d UMC cap: 0x%x\n", i, tmp); 1624 edac_dbg(1, "UMC%d UMC cap high: 0x%x\n", i, umc->umc_cap_hi); 1625 1626 edac_dbg(1, "UMC%d ECC capable: %s, ChipKill ECC capable: %s\n", 1627 i, (umc->umc_cap_hi & BIT(30)) ? "yes" : "no", 1628 (umc->umc_cap_hi & BIT(31)) ? "yes" : "no"); 1629 edac_dbg(1, "UMC%d All DIMMs support ECC: %s\n", 1630 i, (umc->umc_cfg & BIT(12)) ? "yes" : "no"); 1631 edac_dbg(1, "UMC%d x4 DIMMs present: %s\n", 1632 i, (umc->dimm_cfg & BIT(6)) ? "yes" : "no"); 1633 edac_dbg(1, "UMC%d x16 DIMMs present: %s\n", 1634 i, (umc->dimm_cfg & BIT(7)) ? "yes" : "no"); 1635 1636 if (umc->dram_type == MEM_LRDDR4 || umc->dram_type == MEM_LRDDR5) { 1637 amd_smn_read(pvt->mc_node_id, 1638 umc_base + get_umc_reg(pvt, UMCCH_ADDR_CFG), 1639 &tmp); 1640 edac_dbg(1, "UMC%d LRDIMM %dx rank multiply\n", 1641 i, 1 << ((tmp >> 4) & 0x3)); 1642 } 1643 1644 umc_debug_display_dimm_sizes(pvt, i); 1645 } 1646 } 1647 1648 static void dct_dump_misc_regs(struct amd64_pvt *pvt) 1649 { 1650 edac_dbg(1, "F3xE8 (NB Cap): 0x%08x\n", pvt->nbcap); 1651 1652 edac_dbg(1, " NB two channel DRAM capable: %s\n", 1653 (pvt->nbcap & NBCAP_DCT_DUAL) ? "yes" : "no"); 1654 1655 edac_dbg(1, " ECC capable: %s, ChipKill ECC capable: %s\n", 1656 (pvt->nbcap & NBCAP_SECDED) ? "yes" : "no", 1657 (pvt->nbcap & NBCAP_CHIPKILL) ? "yes" : "no"); 1658 1659 debug_dump_dramcfg_low(pvt, pvt->dclr0, 0); 1660 1661 edac_dbg(1, "F3xB0 (Online Spare): 0x%08x\n", pvt->online_spare); 1662 1663 edac_dbg(1, "F1xF0 (DRAM Hole Address): 0x%08x, base: 0x%08x, offset: 0x%08x\n", 1664 pvt->dhar, dhar_base(pvt), 1665 (pvt->fam == 0xf) ? k8_dhar_offset(pvt) 1666 : f10_dhar_offset(pvt)); 1667 1668 dct_debug_display_dimm_sizes(pvt, 0); 1669 1670 /* everything below this point is Fam10h and above */ 1671 if (pvt->fam == 0xf) 1672 return; 1673 1674 dct_debug_display_dimm_sizes(pvt, 1); 1675 1676 /* Only if NOT ganged does dclr1 have valid info */ 1677 if (!dct_ganging_enabled(pvt)) 1678 debug_dump_dramcfg_low(pvt, pvt->dclr1, 1); 1679 1680 edac_dbg(1, " DramHoleValid: %s\n", dhar_valid(pvt) ? "yes" : "no"); 1681 1682 amd64_info("using x%u syndromes.\n", pvt->ecc_sym_sz); 1683 } 1684 1685 /* 1686 * See BKDG, F2x[1,0][5C:40], F2[1,0][6C:60] 1687 */ 1688 static void dct_prep_chip_selects(struct amd64_pvt *pvt) 1689 { 1690 if (pvt->fam == 0xf && pvt->ext_model < K8_REV_F) { 1691 pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 8; 1692 pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 8; 1693 } else if (pvt->fam == 0x15 && pvt->model == 0x30) { 1694 pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 4; 1695 pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 2; 1696 } else { 1697 pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 8; 1698 pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 4; 1699 } 1700 } 1701 1702 static void umc_prep_chip_selects(struct amd64_pvt *pvt) 1703 { 1704 int umc; 1705 1706 for_each_umc(umc) { 1707 pvt->csels[umc].b_cnt = 4; 1708 pvt->csels[umc].m_cnt = pvt->flags.zn_regs_v2 ? 4 : 2; 1709 } 1710 } 1711 1712 static void umc_read_base_mask(struct amd64_pvt *pvt) 1713 { 1714 u32 umc_base_reg, umc_base_reg_sec; 1715 u32 umc_mask_reg, umc_mask_reg_sec; 1716 u32 base_reg, base_reg_sec; 1717 u32 mask_reg, mask_reg_sec; 1718 u32 *base, *base_sec; 1719 u32 *mask, *mask_sec; 1720 int cs, umc; 1721 1722 for_each_umc(umc) { 1723 umc_base_reg = get_umc_base(umc) + UMCCH_BASE_ADDR; 1724 umc_base_reg_sec = get_umc_base(umc) + UMCCH_BASE_ADDR_SEC; 1725 1726 for_each_chip_select(cs, umc, pvt) { 1727 base = &pvt->csels[umc].csbases[cs]; 1728 base_sec = &pvt->csels[umc].csbases_sec[cs]; 1729 1730 base_reg = umc_base_reg + (cs * 4); 1731 base_reg_sec = umc_base_reg_sec + (cs * 4); 1732 1733 if (!amd_smn_read(pvt->mc_node_id, base_reg, base)) 1734 edac_dbg(0, " DCSB%d[%d]=0x%08x reg: 0x%x\n", 1735 umc, cs, *base, base_reg); 1736 1737 if (!amd_smn_read(pvt->mc_node_id, base_reg_sec, base_sec)) 1738 edac_dbg(0, " DCSB_SEC%d[%d]=0x%08x reg: 0x%x\n", 1739 umc, cs, *base_sec, base_reg_sec); 1740 } 1741 1742 umc_mask_reg = get_umc_base(umc) + UMCCH_ADDR_MASK; 1743 umc_mask_reg_sec = get_umc_base(umc) + get_umc_reg(pvt, UMCCH_ADDR_MASK_SEC); 1744 1745 for_each_chip_select_mask(cs, umc, pvt) { 1746 mask = &pvt->csels[umc].csmasks[cs]; 1747 mask_sec = &pvt->csels[umc].csmasks_sec[cs]; 1748 1749 mask_reg = umc_mask_reg + (cs * 4); 1750 mask_reg_sec = umc_mask_reg_sec + (cs * 4); 1751 1752 if (!amd_smn_read(pvt->mc_node_id, mask_reg, mask)) 1753 edac_dbg(0, " DCSM%d[%d]=0x%08x reg: 0x%x\n", 1754 umc, cs, *mask, mask_reg); 1755 1756 if (!amd_smn_read(pvt->mc_node_id, mask_reg_sec, mask_sec)) 1757 edac_dbg(0, " DCSM_SEC%d[%d]=0x%08x reg: 0x%x\n", 1758 umc, cs, *mask_sec, mask_reg_sec); 1759 } 1760 } 1761 } 1762 1763 /* 1764 * Function 2 Offset F10_DCSB0; read in the DCS Base and DCS Mask registers 1765 */ 1766 static void dct_read_base_mask(struct amd64_pvt *pvt) 1767 { 1768 int cs; 1769 1770 for_each_chip_select(cs, 0, pvt) { 1771 int reg0 = DCSB0 + (cs * 4); 1772 int reg1 = DCSB1 + (cs * 4); 1773 u32 *base0 = &pvt->csels[0].csbases[cs]; 1774 u32 *base1 = &pvt->csels[1].csbases[cs]; 1775 1776 if (!amd64_read_dct_pci_cfg(pvt, 0, reg0, base0)) 1777 edac_dbg(0, " DCSB0[%d]=0x%08x reg: F2x%x\n", 1778 cs, *base0, reg0); 1779 1780 if (pvt->fam == 0xf) 1781 continue; 1782 1783 if (!amd64_read_dct_pci_cfg(pvt, 1, reg0, base1)) 1784 edac_dbg(0, " DCSB1[%d]=0x%08x reg: F2x%x\n", 1785 cs, *base1, (pvt->fam == 0x10) ? reg1 1786 : reg0); 1787 } 1788 1789 for_each_chip_select_mask(cs, 0, pvt) { 1790 int reg0 = DCSM0 + (cs * 4); 1791 int reg1 = DCSM1 + (cs * 4); 1792 u32 *mask0 = &pvt->csels[0].csmasks[cs]; 1793 u32 *mask1 = &pvt->csels[1].csmasks[cs]; 1794 1795 if (!amd64_read_dct_pci_cfg(pvt, 0, reg0, mask0)) 1796 edac_dbg(0, " DCSM0[%d]=0x%08x reg: F2x%x\n", 1797 cs, *mask0, reg0); 1798 1799 if (pvt->fam == 0xf) 1800 continue; 1801 1802 if (!amd64_read_dct_pci_cfg(pvt, 1, reg0, mask1)) 1803 edac_dbg(0, " DCSM1[%d]=0x%08x reg: F2x%x\n", 1804 cs, *mask1, (pvt->fam == 0x10) ? reg1 1805 : reg0); 1806 } 1807 } 1808 1809 static void umc_determine_memory_type(struct amd64_pvt *pvt) 1810 { 1811 struct amd64_umc *umc; 1812 u32 i; 1813 1814 for_each_umc(i) { 1815 umc = &pvt->umc[i]; 1816 1817 if (!(umc->sdp_ctrl & UMC_SDP_INIT)) { 1818 umc->dram_type = MEM_EMPTY; 1819 continue; 1820 } 1821 1822 /* 1823 * Check if the system supports the "DDR Type" field in UMC Config 1824 * and has DDR5 DIMMs in use. 1825 */ 1826 if (pvt->flags.zn_regs_v2 && ((umc->umc_cfg & GENMASK(2, 0)) == 0x1)) { 1827 if (umc->dimm_cfg & BIT(5)) 1828 umc->dram_type = MEM_LRDDR5; 1829 else if (umc->dimm_cfg & BIT(4)) 1830 umc->dram_type = MEM_RDDR5; 1831 else 1832 umc->dram_type = MEM_DDR5; 1833 } else { 1834 if (umc->dimm_cfg & BIT(5)) 1835 umc->dram_type = MEM_LRDDR4; 1836 else if (umc->dimm_cfg & BIT(4)) 1837 umc->dram_type = MEM_RDDR4; 1838 else 1839 umc->dram_type = MEM_DDR4; 1840 } 1841 1842 edac_dbg(1, " UMC%d DIMM type: %s\n", i, edac_mem_types[umc->dram_type]); 1843 } 1844 } 1845 1846 static void dct_determine_memory_type(struct amd64_pvt *pvt) 1847 { 1848 u32 dram_ctrl, dcsm; 1849 1850 switch (pvt->fam) { 1851 case 0xf: 1852 if (pvt->ext_model >= K8_REV_F) 1853 goto ddr3; 1854 1855 pvt->dram_type = (pvt->dclr0 & BIT(18)) ? MEM_DDR : MEM_RDDR; 1856 return; 1857 1858 case 0x10: 1859 if (pvt->dchr0 & DDR3_MODE) 1860 goto ddr3; 1861 1862 pvt->dram_type = (pvt->dclr0 & BIT(16)) ? MEM_DDR2 : MEM_RDDR2; 1863 return; 1864 1865 case 0x15: 1866 if (pvt->model < 0x60) 1867 goto ddr3; 1868 1869 /* 1870 * Model 0x60h needs special handling: 1871 * 1872 * We use a Chip Select value of '0' to obtain dcsm. 1873 * Theoretically, it is possible to populate LRDIMMs of different 1874 * 'Rank' value on a DCT. But this is not the common case. So, 1875 * it's reasonable to assume all DIMMs are going to be of same 1876 * 'type' until proven otherwise. 1877 */ 1878 amd64_read_dct_pci_cfg(pvt, 0, DRAM_CONTROL, &dram_ctrl); 1879 dcsm = pvt->csels[0].csmasks[0]; 1880 1881 if (((dram_ctrl >> 8) & 0x7) == 0x2) 1882 pvt->dram_type = MEM_DDR4; 1883 else if (pvt->dclr0 & BIT(16)) 1884 pvt->dram_type = MEM_DDR3; 1885 else if (dcsm & 0x3) 1886 pvt->dram_type = MEM_LRDDR3; 1887 else 1888 pvt->dram_type = MEM_RDDR3; 1889 1890 return; 1891 1892 case 0x16: 1893 goto ddr3; 1894 1895 default: 1896 WARN(1, KERN_ERR "%s: Family??? 0x%x\n", __func__, pvt->fam); 1897 pvt->dram_type = MEM_EMPTY; 1898 } 1899 1900 edac_dbg(1, " DIMM type: %s\n", edac_mem_types[pvt->dram_type]); 1901 return; 1902 1903 ddr3: 1904 pvt->dram_type = (pvt->dclr0 & BIT(16)) ? MEM_DDR3 : MEM_RDDR3; 1905 } 1906 1907 /* On F10h and later ErrAddr is MC4_ADDR[47:1] */ 1908 static u64 get_error_address(struct amd64_pvt *pvt, struct mce *m) 1909 { 1910 u16 mce_nid = topology_die_id(m->extcpu); 1911 struct mem_ctl_info *mci; 1912 u8 start_bit = 1; 1913 u8 end_bit = 47; 1914 u64 addr; 1915 1916 mci = edac_mc_find(mce_nid); 1917 if (!mci) 1918 return 0; 1919 1920 pvt = mci->pvt_info; 1921 1922 if (pvt->fam == 0xf) { 1923 start_bit = 3; 1924 end_bit = 39; 1925 } 1926 1927 addr = m->addr & GENMASK_ULL(end_bit, start_bit); 1928 1929 /* 1930 * Erratum 637 workaround 1931 */ 1932 if (pvt->fam == 0x15) { 1933 u64 cc6_base, tmp_addr; 1934 u32 tmp; 1935 u8 intlv_en; 1936 1937 if ((addr & GENMASK_ULL(47, 24)) >> 24 != 0x00fdf7) 1938 return addr; 1939 1940 1941 amd64_read_pci_cfg(pvt->F1, DRAM_LOCAL_NODE_LIM, &tmp); 1942 intlv_en = tmp >> 21 & 0x7; 1943 1944 /* add [47:27] + 3 trailing bits */ 1945 cc6_base = (tmp & GENMASK_ULL(20, 0)) << 3; 1946 1947 /* reverse and add DramIntlvEn */ 1948 cc6_base |= intlv_en ^ 0x7; 1949 1950 /* pin at [47:24] */ 1951 cc6_base <<= 24; 1952 1953 if (!intlv_en) 1954 return cc6_base | (addr & GENMASK_ULL(23, 0)); 1955 1956 amd64_read_pci_cfg(pvt->F1, DRAM_LOCAL_NODE_BASE, &tmp); 1957 1958 /* faster log2 */ 1959 tmp_addr = (addr & GENMASK_ULL(23, 12)) << __fls(intlv_en + 1); 1960 1961 /* OR DramIntlvSel into bits [14:12] */ 1962 tmp_addr |= (tmp & GENMASK_ULL(23, 21)) >> 9; 1963 1964 /* add remaining [11:0] bits from original MC4_ADDR */ 1965 tmp_addr |= addr & GENMASK_ULL(11, 0); 1966 1967 return cc6_base | tmp_addr; 1968 } 1969 1970 return addr; 1971 } 1972 1973 static struct pci_dev *pci_get_related_function(unsigned int vendor, 1974 unsigned int device, 1975 struct pci_dev *related) 1976 { 1977 struct pci_dev *dev = NULL; 1978 1979 while ((dev = pci_get_device(vendor, device, dev))) { 1980 if (pci_domain_nr(dev->bus) == pci_domain_nr(related->bus) && 1981 (dev->bus->number == related->bus->number) && 1982 (PCI_SLOT(dev->devfn) == PCI_SLOT(related->devfn))) 1983 break; 1984 } 1985 1986 return dev; 1987 } 1988 1989 static void read_dram_base_limit_regs(struct amd64_pvt *pvt, unsigned range) 1990 { 1991 struct amd_northbridge *nb; 1992 struct pci_dev *f1 = NULL; 1993 unsigned int pci_func; 1994 int off = range << 3; 1995 u32 llim; 1996 1997 amd64_read_pci_cfg(pvt->F1, DRAM_BASE_LO + off, &pvt->ranges[range].base.lo); 1998 amd64_read_pci_cfg(pvt->F1, DRAM_LIMIT_LO + off, &pvt->ranges[range].lim.lo); 1999 2000 if (pvt->fam == 0xf) 2001 return; 2002 2003 if (!dram_rw(pvt, range)) 2004 return; 2005 2006 amd64_read_pci_cfg(pvt->F1, DRAM_BASE_HI + off, &pvt->ranges[range].base.hi); 2007 amd64_read_pci_cfg(pvt->F1, DRAM_LIMIT_HI + off, &pvt->ranges[range].lim.hi); 2008 2009 /* F15h: factor in CC6 save area by reading dst node's limit reg */ 2010 if (pvt->fam != 0x15) 2011 return; 2012 2013 nb = node_to_amd_nb(dram_dst_node(pvt, range)); 2014 if (WARN_ON(!nb)) 2015 return; 2016 2017 if (pvt->model == 0x60) 2018 pci_func = PCI_DEVICE_ID_AMD_15H_M60H_NB_F1; 2019 else if (pvt->model == 0x30) 2020 pci_func = PCI_DEVICE_ID_AMD_15H_M30H_NB_F1; 2021 else 2022 pci_func = PCI_DEVICE_ID_AMD_15H_NB_F1; 2023 2024 f1 = pci_get_related_function(nb->misc->vendor, pci_func, nb->misc); 2025 if (WARN_ON(!f1)) 2026 return; 2027 2028 amd64_read_pci_cfg(f1, DRAM_LOCAL_NODE_LIM, &llim); 2029 2030 pvt->ranges[range].lim.lo &= GENMASK_ULL(15, 0); 2031 2032 /* {[39:27],111b} */ 2033 pvt->ranges[range].lim.lo |= ((llim & 0x1fff) << 3 | 0x7) << 16; 2034 2035 pvt->ranges[range].lim.hi &= GENMASK_ULL(7, 0); 2036 2037 /* [47:40] */ 2038 pvt->ranges[range].lim.hi |= llim >> 13; 2039 2040 pci_dev_put(f1); 2041 } 2042 2043 static void k8_map_sysaddr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr, 2044 struct err_info *err) 2045 { 2046 struct amd64_pvt *pvt = mci->pvt_info; 2047 2048 error_address_to_page_and_offset(sys_addr, err); 2049 2050 /* 2051 * Find out which node the error address belongs to. This may be 2052 * different from the node that detected the error. 2053 */ 2054 err->src_mci = find_mc_by_sys_addr(mci, sys_addr); 2055 if (!err->src_mci) { 2056 amd64_mc_err(mci, "failed to map error addr 0x%lx to a node\n", 2057 (unsigned long)sys_addr); 2058 err->err_code = ERR_NODE; 2059 return; 2060 } 2061 2062 /* Now map the sys_addr to a CSROW */ 2063 err->csrow = sys_addr_to_csrow(err->src_mci, sys_addr); 2064 if (err->csrow < 0) { 2065 err->err_code = ERR_CSROW; 2066 return; 2067 } 2068 2069 /* CHIPKILL enabled */ 2070 if (pvt->nbcfg & NBCFG_CHIPKILL) { 2071 err->channel = get_channel_from_ecc_syndrome(mci, err->syndrome); 2072 if (err->channel < 0) { 2073 /* 2074 * Syndrome didn't map, so we don't know which of the 2075 * 2 DIMMs is in error. So we need to ID 'both' of them 2076 * as suspect. 2077 */ 2078 amd64_mc_warn(err->src_mci, "unknown syndrome 0x%04x - " 2079 "possible error reporting race\n", 2080 err->syndrome); 2081 err->err_code = ERR_CHANNEL; 2082 return; 2083 } 2084 } else { 2085 /* 2086 * non-chipkill ecc mode 2087 * 2088 * The k8 documentation is unclear about how to determine the 2089 * channel number when using non-chipkill memory. This method 2090 * was obtained from email communication with someone at AMD. 2091 * (Wish the email was placed in this comment - norsk) 2092 */ 2093 err->channel = ((sys_addr & BIT(3)) != 0); 2094 } 2095 } 2096 2097 static int ddr2_cs_size(unsigned i, bool dct_width) 2098 { 2099 unsigned shift = 0; 2100 2101 if (i <= 2) 2102 shift = i; 2103 else if (!(i & 0x1)) 2104 shift = i >> 1; 2105 else 2106 shift = (i + 1) >> 1; 2107 2108 return 128 << (shift + !!dct_width); 2109 } 2110 2111 static int k8_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct, 2112 unsigned cs_mode, int cs_mask_nr) 2113 { 2114 u32 dclr = dct ? pvt->dclr1 : pvt->dclr0; 2115 2116 if (pvt->ext_model >= K8_REV_F) { 2117 WARN_ON(cs_mode > 11); 2118 return ddr2_cs_size(cs_mode, dclr & WIDTH_128); 2119 } 2120 else if (pvt->ext_model >= K8_REV_D) { 2121 unsigned diff; 2122 WARN_ON(cs_mode > 10); 2123 2124 /* 2125 * the below calculation, besides trying to win an obfuscated C 2126 * contest, maps cs_mode values to DIMM chip select sizes. The 2127 * mappings are: 2128 * 2129 * cs_mode CS size (mb) 2130 * ======= ============ 2131 * 0 32 2132 * 1 64 2133 * 2 128 2134 * 3 128 2135 * 4 256 2136 * 5 512 2137 * 6 256 2138 * 7 512 2139 * 8 1024 2140 * 9 1024 2141 * 10 2048 2142 * 2143 * Basically, it calculates a value with which to shift the 2144 * smallest CS size of 32MB. 2145 * 2146 * ddr[23]_cs_size have a similar purpose. 2147 */ 2148 diff = cs_mode/3 + (unsigned)(cs_mode > 5); 2149 2150 return 32 << (cs_mode - diff); 2151 } 2152 else { 2153 WARN_ON(cs_mode > 6); 2154 return 32 << cs_mode; 2155 } 2156 } 2157 2158 static int ddr3_cs_size(unsigned i, bool dct_width) 2159 { 2160 unsigned shift = 0; 2161 int cs_size = 0; 2162 2163 if (i == 0 || i == 3 || i == 4) 2164 cs_size = -1; 2165 else if (i <= 2) 2166 shift = i; 2167 else if (i == 12) 2168 shift = 7; 2169 else if (!(i & 0x1)) 2170 shift = i >> 1; 2171 else 2172 shift = (i + 1) >> 1; 2173 2174 if (cs_size != -1) 2175 cs_size = (128 * (1 << !!dct_width)) << shift; 2176 2177 return cs_size; 2178 } 2179 2180 static int ddr3_lrdimm_cs_size(unsigned i, unsigned rank_multiply) 2181 { 2182 unsigned shift = 0; 2183 int cs_size = 0; 2184 2185 if (i < 4 || i == 6) 2186 cs_size = -1; 2187 else if (i == 12) 2188 shift = 7; 2189 else if (!(i & 0x1)) 2190 shift = i >> 1; 2191 else 2192 shift = (i + 1) >> 1; 2193 2194 if (cs_size != -1) 2195 cs_size = rank_multiply * (128 << shift); 2196 2197 return cs_size; 2198 } 2199 2200 static int ddr4_cs_size(unsigned i) 2201 { 2202 int cs_size = 0; 2203 2204 if (i == 0) 2205 cs_size = -1; 2206 else if (i == 1) 2207 cs_size = 1024; 2208 else 2209 /* Min cs_size = 1G */ 2210 cs_size = 1024 * (1 << (i >> 1)); 2211 2212 return cs_size; 2213 } 2214 2215 static int f10_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct, 2216 unsigned cs_mode, int cs_mask_nr) 2217 { 2218 u32 dclr = dct ? pvt->dclr1 : pvt->dclr0; 2219 2220 WARN_ON(cs_mode > 11); 2221 2222 if (pvt->dchr0 & DDR3_MODE || pvt->dchr1 & DDR3_MODE) 2223 return ddr3_cs_size(cs_mode, dclr & WIDTH_128); 2224 else 2225 return ddr2_cs_size(cs_mode, dclr & WIDTH_128); 2226 } 2227 2228 /* 2229 * F15h supports only 64bit DCT interfaces 2230 */ 2231 static int f15_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct, 2232 unsigned cs_mode, int cs_mask_nr) 2233 { 2234 WARN_ON(cs_mode > 12); 2235 2236 return ddr3_cs_size(cs_mode, false); 2237 } 2238 2239 /* F15h M60h supports DDR4 mapping as well.. */ 2240 static int f15_m60h_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct, 2241 unsigned cs_mode, int cs_mask_nr) 2242 { 2243 int cs_size; 2244 u32 dcsm = pvt->csels[dct].csmasks[cs_mask_nr]; 2245 2246 WARN_ON(cs_mode > 12); 2247 2248 if (pvt->dram_type == MEM_DDR4) { 2249 if (cs_mode > 9) 2250 return -1; 2251 2252 cs_size = ddr4_cs_size(cs_mode); 2253 } else if (pvt->dram_type == MEM_LRDDR3) { 2254 unsigned rank_multiply = dcsm & 0xf; 2255 2256 if (rank_multiply == 3) 2257 rank_multiply = 4; 2258 cs_size = ddr3_lrdimm_cs_size(cs_mode, rank_multiply); 2259 } else { 2260 /* Minimum cs size is 512mb for F15hM60h*/ 2261 if (cs_mode == 0x1) 2262 return -1; 2263 2264 cs_size = ddr3_cs_size(cs_mode, false); 2265 } 2266 2267 return cs_size; 2268 } 2269 2270 /* 2271 * F16h and F15h model 30h have only limited cs_modes. 2272 */ 2273 static int f16_dbam_to_chip_select(struct amd64_pvt *pvt, u8 dct, 2274 unsigned cs_mode, int cs_mask_nr) 2275 { 2276 WARN_ON(cs_mode > 12); 2277 2278 if (cs_mode == 6 || cs_mode == 8 || 2279 cs_mode == 9 || cs_mode == 12) 2280 return -1; 2281 else 2282 return ddr3_cs_size(cs_mode, false); 2283 } 2284 2285 static void read_dram_ctl_register(struct amd64_pvt *pvt) 2286 { 2287 2288 if (pvt->fam == 0xf) 2289 return; 2290 2291 if (!amd64_read_pci_cfg(pvt->F2, DCT_SEL_LO, &pvt->dct_sel_lo)) { 2292 edac_dbg(0, "F2x110 (DCTSelLow): 0x%08x, High range addrs at: 0x%x\n", 2293 pvt->dct_sel_lo, dct_sel_baseaddr(pvt)); 2294 2295 edac_dbg(0, " DCTs operate in %s mode\n", 2296 (dct_ganging_enabled(pvt) ? "ganged" : "unganged")); 2297 2298 if (!dct_ganging_enabled(pvt)) 2299 edac_dbg(0, " Address range split per DCT: %s\n", 2300 (dct_high_range_enabled(pvt) ? "yes" : "no")); 2301 2302 edac_dbg(0, " data interleave for ECC: %s, DRAM cleared since last warm reset: %s\n", 2303 (dct_data_intlv_enabled(pvt) ? "enabled" : "disabled"), 2304 (dct_memory_cleared(pvt) ? "yes" : "no")); 2305 2306 edac_dbg(0, " channel interleave: %s, " 2307 "interleave bits selector: 0x%x\n", 2308 (dct_interleave_enabled(pvt) ? "enabled" : "disabled"), 2309 dct_sel_interleave_addr(pvt)); 2310 } 2311 2312 amd64_read_pci_cfg(pvt->F2, DCT_SEL_HI, &pvt->dct_sel_hi); 2313 } 2314 2315 /* 2316 * Determine channel (DCT) based on the interleaving mode (see F15h M30h BKDG, 2317 * 2.10.12 Memory Interleaving Modes). 2318 */ 2319 static u8 f15_m30h_determine_channel(struct amd64_pvt *pvt, u64 sys_addr, 2320 u8 intlv_en, int num_dcts_intlv, 2321 u32 dct_sel) 2322 { 2323 u8 channel = 0; 2324 u8 select; 2325 2326 if (!(intlv_en)) 2327 return (u8)(dct_sel); 2328 2329 if (num_dcts_intlv == 2) { 2330 select = (sys_addr >> 8) & 0x3; 2331 channel = select ? 0x3 : 0; 2332 } else if (num_dcts_intlv == 4) { 2333 u8 intlv_addr = dct_sel_interleave_addr(pvt); 2334 switch (intlv_addr) { 2335 case 0x4: 2336 channel = (sys_addr >> 8) & 0x3; 2337 break; 2338 case 0x5: 2339 channel = (sys_addr >> 9) & 0x3; 2340 break; 2341 } 2342 } 2343 return channel; 2344 } 2345 2346 /* 2347 * Determine channel (DCT) based on the interleaving mode: F10h BKDG, 2.8.9 Memory 2348 * Interleaving Modes. 2349 */ 2350 static u8 f1x_determine_channel(struct amd64_pvt *pvt, u64 sys_addr, 2351 bool hi_range_sel, u8 intlv_en) 2352 { 2353 u8 dct_sel_high = (pvt->dct_sel_lo >> 1) & 1; 2354 2355 if (dct_ganging_enabled(pvt)) 2356 return 0; 2357 2358 if (hi_range_sel) 2359 return dct_sel_high; 2360 2361 /* 2362 * see F2x110[DctSelIntLvAddr] - channel interleave mode 2363 */ 2364 if (dct_interleave_enabled(pvt)) { 2365 u8 intlv_addr = dct_sel_interleave_addr(pvt); 2366 2367 /* return DCT select function: 0=DCT0, 1=DCT1 */ 2368 if (!intlv_addr) 2369 return sys_addr >> 6 & 1; 2370 2371 if (intlv_addr & 0x2) { 2372 u8 shift = intlv_addr & 0x1 ? 9 : 6; 2373 u32 temp = hweight_long((u32) ((sys_addr >> 16) & 0x1F)) & 1; 2374 2375 return ((sys_addr >> shift) & 1) ^ temp; 2376 } 2377 2378 if (intlv_addr & 0x4) { 2379 u8 shift = intlv_addr & 0x1 ? 9 : 8; 2380 2381 return (sys_addr >> shift) & 1; 2382 } 2383 2384 return (sys_addr >> (12 + hweight8(intlv_en))) & 1; 2385 } 2386 2387 if (dct_high_range_enabled(pvt)) 2388 return ~dct_sel_high & 1; 2389 2390 return 0; 2391 } 2392 2393 /* Convert the sys_addr to the normalized DCT address */ 2394 static u64 f1x_get_norm_dct_addr(struct amd64_pvt *pvt, u8 range, 2395 u64 sys_addr, bool hi_rng, 2396 u32 dct_sel_base_addr) 2397 { 2398 u64 chan_off; 2399 u64 dram_base = get_dram_base(pvt, range); 2400 u64 hole_off = f10_dhar_offset(pvt); 2401 u64 dct_sel_base_off = (u64)(pvt->dct_sel_hi & 0xFFFFFC00) << 16; 2402 2403 if (hi_rng) { 2404 /* 2405 * if 2406 * base address of high range is below 4Gb 2407 * (bits [47:27] at [31:11]) 2408 * DRAM address space on this DCT is hoisted above 4Gb && 2409 * sys_addr > 4Gb 2410 * 2411 * remove hole offset from sys_addr 2412 * else 2413 * remove high range offset from sys_addr 2414 */ 2415 if ((!(dct_sel_base_addr >> 16) || 2416 dct_sel_base_addr < dhar_base(pvt)) && 2417 dhar_valid(pvt) && 2418 (sys_addr >= BIT_64(32))) 2419 chan_off = hole_off; 2420 else 2421 chan_off = dct_sel_base_off; 2422 } else { 2423 /* 2424 * if 2425 * we have a valid hole && 2426 * sys_addr > 4Gb 2427 * 2428 * remove hole 2429 * else 2430 * remove dram base to normalize to DCT address 2431 */ 2432 if (dhar_valid(pvt) && (sys_addr >= BIT_64(32))) 2433 chan_off = hole_off; 2434 else 2435 chan_off = dram_base; 2436 } 2437 2438 return (sys_addr & GENMASK_ULL(47,6)) - (chan_off & GENMASK_ULL(47,23)); 2439 } 2440 2441 /* 2442 * checks if the csrow passed in is marked as SPARED, if so returns the new 2443 * spare row 2444 */ 2445 static int f10_process_possible_spare(struct amd64_pvt *pvt, u8 dct, int csrow) 2446 { 2447 int tmp_cs; 2448 2449 if (online_spare_swap_done(pvt, dct) && 2450 csrow == online_spare_bad_dramcs(pvt, dct)) { 2451 2452 for_each_chip_select(tmp_cs, dct, pvt) { 2453 if (chip_select_base(tmp_cs, dct, pvt) & 0x2) { 2454 csrow = tmp_cs; 2455 break; 2456 } 2457 } 2458 } 2459 return csrow; 2460 } 2461 2462 /* 2463 * Iterate over the DRAM DCT "base" and "mask" registers looking for a 2464 * SystemAddr match on the specified 'ChannelSelect' and 'NodeID' 2465 * 2466 * Return: 2467 * -EINVAL: NOT FOUND 2468 * 0..csrow = Chip-Select Row 2469 */ 2470 static int f1x_lookup_addr_in_dct(u64 in_addr, u8 nid, u8 dct) 2471 { 2472 struct mem_ctl_info *mci; 2473 struct amd64_pvt *pvt; 2474 u64 cs_base, cs_mask; 2475 int cs_found = -EINVAL; 2476 int csrow; 2477 2478 mci = edac_mc_find(nid); 2479 if (!mci) 2480 return cs_found; 2481 2482 pvt = mci->pvt_info; 2483 2484 edac_dbg(1, "input addr: 0x%llx, DCT: %d\n", in_addr, dct); 2485 2486 for_each_chip_select(csrow, dct, pvt) { 2487 if (!csrow_enabled(csrow, dct, pvt)) 2488 continue; 2489 2490 get_cs_base_and_mask(pvt, csrow, dct, &cs_base, &cs_mask); 2491 2492 edac_dbg(1, " CSROW=%d CSBase=0x%llx CSMask=0x%llx\n", 2493 csrow, cs_base, cs_mask); 2494 2495 cs_mask = ~cs_mask; 2496 2497 edac_dbg(1, " (InputAddr & ~CSMask)=0x%llx (CSBase & ~CSMask)=0x%llx\n", 2498 (in_addr & cs_mask), (cs_base & cs_mask)); 2499 2500 if ((in_addr & cs_mask) == (cs_base & cs_mask)) { 2501 if (pvt->fam == 0x15 && pvt->model >= 0x30) { 2502 cs_found = csrow; 2503 break; 2504 } 2505 cs_found = f10_process_possible_spare(pvt, dct, csrow); 2506 2507 edac_dbg(1, " MATCH csrow=%d\n", cs_found); 2508 break; 2509 } 2510 } 2511 return cs_found; 2512 } 2513 2514 /* 2515 * See F2x10C. Non-interleaved graphics framebuffer memory under the 16G is 2516 * swapped with a region located at the bottom of memory so that the GPU can use 2517 * the interleaved region and thus two channels. 2518 */ 2519 static u64 f1x_swap_interleaved_region(struct amd64_pvt *pvt, u64 sys_addr) 2520 { 2521 u32 swap_reg, swap_base, swap_limit, rgn_size, tmp_addr; 2522 2523 if (pvt->fam == 0x10) { 2524 /* only revC3 and revE have that feature */ 2525 if (pvt->model < 4 || (pvt->model < 0xa && pvt->stepping < 3)) 2526 return sys_addr; 2527 } 2528 2529 amd64_read_pci_cfg(pvt->F2, SWAP_INTLV_REG, &swap_reg); 2530 2531 if (!(swap_reg & 0x1)) 2532 return sys_addr; 2533 2534 swap_base = (swap_reg >> 3) & 0x7f; 2535 swap_limit = (swap_reg >> 11) & 0x7f; 2536 rgn_size = (swap_reg >> 20) & 0x7f; 2537 tmp_addr = sys_addr >> 27; 2538 2539 if (!(sys_addr >> 34) && 2540 (((tmp_addr >= swap_base) && 2541 (tmp_addr <= swap_limit)) || 2542 (tmp_addr < rgn_size))) 2543 return sys_addr ^ (u64)swap_base << 27; 2544 2545 return sys_addr; 2546 } 2547 2548 /* For a given @dram_range, check if @sys_addr falls within it. */ 2549 static int f1x_match_to_this_node(struct amd64_pvt *pvt, unsigned range, 2550 u64 sys_addr, int *chan_sel) 2551 { 2552 int cs_found = -EINVAL; 2553 u64 chan_addr; 2554 u32 dct_sel_base; 2555 u8 channel; 2556 bool high_range = false; 2557 2558 u8 node_id = dram_dst_node(pvt, range); 2559 u8 intlv_en = dram_intlv_en(pvt, range); 2560 u32 intlv_sel = dram_intlv_sel(pvt, range); 2561 2562 edac_dbg(1, "(range %d) SystemAddr= 0x%llx Limit=0x%llx\n", 2563 range, sys_addr, get_dram_limit(pvt, range)); 2564 2565 if (dhar_valid(pvt) && 2566 dhar_base(pvt) <= sys_addr && 2567 sys_addr < BIT_64(32)) { 2568 amd64_warn("Huh? Address is in the MMIO hole: 0x%016llx\n", 2569 sys_addr); 2570 return -EINVAL; 2571 } 2572 2573 if (intlv_en && (intlv_sel != ((sys_addr >> 12) & intlv_en))) 2574 return -EINVAL; 2575 2576 sys_addr = f1x_swap_interleaved_region(pvt, sys_addr); 2577 2578 dct_sel_base = dct_sel_baseaddr(pvt); 2579 2580 /* 2581 * check whether addresses >= DctSelBaseAddr[47:27] are to be used to 2582 * select between DCT0 and DCT1. 2583 */ 2584 if (dct_high_range_enabled(pvt) && 2585 !dct_ganging_enabled(pvt) && 2586 ((sys_addr >> 27) >= (dct_sel_base >> 11))) 2587 high_range = true; 2588 2589 channel = f1x_determine_channel(pvt, sys_addr, high_range, intlv_en); 2590 2591 chan_addr = f1x_get_norm_dct_addr(pvt, range, sys_addr, 2592 high_range, dct_sel_base); 2593 2594 /* Remove node interleaving, see F1x120 */ 2595 if (intlv_en) 2596 chan_addr = ((chan_addr >> (12 + hweight8(intlv_en))) << 12) | 2597 (chan_addr & 0xfff); 2598 2599 /* remove channel interleave */ 2600 if (dct_interleave_enabled(pvt) && 2601 !dct_high_range_enabled(pvt) && 2602 !dct_ganging_enabled(pvt)) { 2603 2604 if (dct_sel_interleave_addr(pvt) != 1) { 2605 if (dct_sel_interleave_addr(pvt) == 0x3) 2606 /* hash 9 */ 2607 chan_addr = ((chan_addr >> 10) << 9) | 2608 (chan_addr & 0x1ff); 2609 else 2610 /* A[6] or hash 6 */ 2611 chan_addr = ((chan_addr >> 7) << 6) | 2612 (chan_addr & 0x3f); 2613 } else 2614 /* A[12] */ 2615 chan_addr = ((chan_addr >> 13) << 12) | 2616 (chan_addr & 0xfff); 2617 } 2618 2619 edac_dbg(1, " Normalized DCT addr: 0x%llx\n", chan_addr); 2620 2621 cs_found = f1x_lookup_addr_in_dct(chan_addr, node_id, channel); 2622 2623 if (cs_found >= 0) 2624 *chan_sel = channel; 2625 2626 return cs_found; 2627 } 2628 2629 static int f15_m30h_match_to_this_node(struct amd64_pvt *pvt, unsigned range, 2630 u64 sys_addr, int *chan_sel) 2631 { 2632 int cs_found = -EINVAL; 2633 int num_dcts_intlv = 0; 2634 u64 chan_addr, chan_offset; 2635 u64 dct_base, dct_limit; 2636 u32 dct_cont_base_reg, dct_cont_limit_reg, tmp; 2637 u8 channel, alias_channel, leg_mmio_hole, dct_sel, dct_offset_en; 2638 2639 u64 dhar_offset = f10_dhar_offset(pvt); 2640 u8 intlv_addr = dct_sel_interleave_addr(pvt); 2641 u8 node_id = dram_dst_node(pvt, range); 2642 u8 intlv_en = dram_intlv_en(pvt, range); 2643 2644 amd64_read_pci_cfg(pvt->F1, DRAM_CONT_BASE, &dct_cont_base_reg); 2645 amd64_read_pci_cfg(pvt->F1, DRAM_CONT_LIMIT, &dct_cont_limit_reg); 2646 2647 dct_offset_en = (u8) ((dct_cont_base_reg >> 3) & BIT(0)); 2648 dct_sel = (u8) ((dct_cont_base_reg >> 4) & 0x7); 2649 2650 edac_dbg(1, "(range %d) SystemAddr= 0x%llx Limit=0x%llx\n", 2651 range, sys_addr, get_dram_limit(pvt, range)); 2652 2653 if (!(get_dram_base(pvt, range) <= sys_addr) && 2654 !(get_dram_limit(pvt, range) >= sys_addr)) 2655 return -EINVAL; 2656 2657 if (dhar_valid(pvt) && 2658 dhar_base(pvt) <= sys_addr && 2659 sys_addr < BIT_64(32)) { 2660 amd64_warn("Huh? Address is in the MMIO hole: 0x%016llx\n", 2661 sys_addr); 2662 return -EINVAL; 2663 } 2664 2665 /* Verify sys_addr is within DCT Range. */ 2666 dct_base = (u64) dct_sel_baseaddr(pvt); 2667 dct_limit = (dct_cont_limit_reg >> 11) & 0x1FFF; 2668 2669 if (!(dct_cont_base_reg & BIT(0)) && 2670 !(dct_base <= (sys_addr >> 27) && 2671 dct_limit >= (sys_addr >> 27))) 2672 return -EINVAL; 2673 2674 /* Verify number of dct's that participate in channel interleaving. */ 2675 num_dcts_intlv = (int) hweight8(intlv_en); 2676 2677 if (!(num_dcts_intlv % 2 == 0) || (num_dcts_intlv > 4)) 2678 return -EINVAL; 2679 2680 if (pvt->model >= 0x60) 2681 channel = f1x_determine_channel(pvt, sys_addr, false, intlv_en); 2682 else 2683 channel = f15_m30h_determine_channel(pvt, sys_addr, intlv_en, 2684 num_dcts_intlv, dct_sel); 2685 2686 /* Verify we stay within the MAX number of channels allowed */ 2687 if (channel > 3) 2688 return -EINVAL; 2689 2690 leg_mmio_hole = (u8) (dct_cont_base_reg >> 1 & BIT(0)); 2691 2692 /* Get normalized DCT addr */ 2693 if (leg_mmio_hole && (sys_addr >= BIT_64(32))) 2694 chan_offset = dhar_offset; 2695 else 2696 chan_offset = dct_base << 27; 2697 2698 chan_addr = sys_addr - chan_offset; 2699 2700 /* remove channel interleave */ 2701 if (num_dcts_intlv == 2) { 2702 if (intlv_addr == 0x4) 2703 chan_addr = ((chan_addr >> 9) << 8) | 2704 (chan_addr & 0xff); 2705 else if (intlv_addr == 0x5) 2706 chan_addr = ((chan_addr >> 10) << 9) | 2707 (chan_addr & 0x1ff); 2708 else 2709 return -EINVAL; 2710 2711 } else if (num_dcts_intlv == 4) { 2712 if (intlv_addr == 0x4) 2713 chan_addr = ((chan_addr >> 10) << 8) | 2714 (chan_addr & 0xff); 2715 else if (intlv_addr == 0x5) 2716 chan_addr = ((chan_addr >> 11) << 9) | 2717 (chan_addr & 0x1ff); 2718 else 2719 return -EINVAL; 2720 } 2721 2722 if (dct_offset_en) { 2723 amd64_read_pci_cfg(pvt->F1, 2724 DRAM_CONT_HIGH_OFF + (int) channel * 4, 2725 &tmp); 2726 chan_addr += (u64) ((tmp >> 11) & 0xfff) << 27; 2727 } 2728 2729 f15h_select_dct(pvt, channel); 2730 2731 edac_dbg(1, " Normalized DCT addr: 0x%llx\n", chan_addr); 2732 2733 /* 2734 * Find Chip select: 2735 * if channel = 3, then alias it to 1. This is because, in F15 M30h, 2736 * there is support for 4 DCT's, but only 2 are currently functional. 2737 * They are DCT0 and DCT3. But we have read all registers of DCT3 into 2738 * pvt->csels[1]. So we need to use '1' here to get correct info. 2739 * Refer F15 M30h BKDG Section 2.10 and 2.10.3 for clarifications. 2740 */ 2741 alias_channel = (channel == 3) ? 1 : channel; 2742 2743 cs_found = f1x_lookup_addr_in_dct(chan_addr, node_id, alias_channel); 2744 2745 if (cs_found >= 0) 2746 *chan_sel = alias_channel; 2747 2748 return cs_found; 2749 } 2750 2751 static int f1x_translate_sysaddr_to_cs(struct amd64_pvt *pvt, 2752 u64 sys_addr, 2753 int *chan_sel) 2754 { 2755 int cs_found = -EINVAL; 2756 unsigned range; 2757 2758 for (range = 0; range < DRAM_RANGES; range++) { 2759 if (!dram_rw(pvt, range)) 2760 continue; 2761 2762 if (pvt->fam == 0x15 && pvt->model >= 0x30) 2763 cs_found = f15_m30h_match_to_this_node(pvt, range, 2764 sys_addr, 2765 chan_sel); 2766 2767 else if ((get_dram_base(pvt, range) <= sys_addr) && 2768 (get_dram_limit(pvt, range) >= sys_addr)) { 2769 cs_found = f1x_match_to_this_node(pvt, range, 2770 sys_addr, chan_sel); 2771 if (cs_found >= 0) 2772 break; 2773 } 2774 } 2775 return cs_found; 2776 } 2777 2778 /* 2779 * For reference see "2.8.5 Routing DRAM Requests" in F10 BKDG. This code maps 2780 * a @sys_addr to NodeID, DCT (channel) and chip select (CSROW). 2781 * 2782 * The @sys_addr is usually an error address received from the hardware 2783 * (MCX_ADDR). 2784 */ 2785 static void f1x_map_sysaddr_to_csrow(struct mem_ctl_info *mci, u64 sys_addr, 2786 struct err_info *err) 2787 { 2788 struct amd64_pvt *pvt = mci->pvt_info; 2789 2790 error_address_to_page_and_offset(sys_addr, err); 2791 2792 err->csrow = f1x_translate_sysaddr_to_cs(pvt, sys_addr, &err->channel); 2793 if (err->csrow < 0) { 2794 err->err_code = ERR_CSROW; 2795 return; 2796 } 2797 2798 /* 2799 * We need the syndromes for channel detection only when we're 2800 * ganged. Otherwise @chan should already contain the channel at 2801 * this point. 2802 */ 2803 if (dct_ganging_enabled(pvt)) 2804 err->channel = get_channel_from_ecc_syndrome(mci, err->syndrome); 2805 } 2806 2807 /* 2808 * These are tables of eigenvectors (one per line) which can be used for the 2809 * construction of the syndrome tables. The modified syndrome search algorithm 2810 * uses those to find the symbol in error and thus the DIMM. 2811 * 2812 * Algorithm courtesy of Ross LaFetra from AMD. 2813 */ 2814 static const u16 x4_vectors[] = { 2815 0x2f57, 0x1afe, 0x66cc, 0xdd88, 2816 0x11eb, 0x3396, 0x7f4c, 0xeac8, 2817 0x0001, 0x0002, 0x0004, 0x0008, 2818 0x1013, 0x3032, 0x4044, 0x8088, 2819 0x106b, 0x30d6, 0x70fc, 0xe0a8, 2820 0x4857, 0xc4fe, 0x13cc, 0x3288, 2821 0x1ac5, 0x2f4a, 0x5394, 0xa1e8, 2822 0x1f39, 0x251e, 0xbd6c, 0x6bd8, 2823 0x15c1, 0x2a42, 0x89ac, 0x4758, 2824 0x2b03, 0x1602, 0x4f0c, 0xca08, 2825 0x1f07, 0x3a0e, 0x6b04, 0xbd08, 2826 0x8ba7, 0x465e, 0x244c, 0x1cc8, 2827 0x2b87, 0x164e, 0x642c, 0xdc18, 2828 0x40b9, 0x80de, 0x1094, 0x20e8, 2829 0x27db, 0x1eb6, 0x9dac, 0x7b58, 2830 0x11c1, 0x2242, 0x84ac, 0x4c58, 2831 0x1be5, 0x2d7a, 0x5e34, 0xa718, 2832 0x4b39, 0x8d1e, 0x14b4, 0x28d8, 2833 0x4c97, 0xc87e, 0x11fc, 0x33a8, 2834 0x8e97, 0x497e, 0x2ffc, 0x1aa8, 2835 0x16b3, 0x3d62, 0x4f34, 0x8518, 2836 0x1e2f, 0x391a, 0x5cac, 0xf858, 2837 0x1d9f, 0x3b7a, 0x572c, 0xfe18, 2838 0x15f5, 0x2a5a, 0x5264, 0xa3b8, 2839 0x1dbb, 0x3b66, 0x715c, 0xe3f8, 2840 0x4397, 0xc27e, 0x17fc, 0x3ea8, 2841 0x1617, 0x3d3e, 0x6464, 0xb8b8, 2842 0x23ff, 0x12aa, 0xab6c, 0x56d8, 2843 0x2dfb, 0x1ba6, 0x913c, 0x7328, 2844 0x185d, 0x2ca6, 0x7914, 0x9e28, 2845 0x171b, 0x3e36, 0x7d7c, 0xebe8, 2846 0x4199, 0x82ee, 0x19f4, 0x2e58, 2847 0x4807, 0xc40e, 0x130c, 0x3208, 2848 0x1905, 0x2e0a, 0x5804, 0xac08, 2849 0x213f, 0x132a, 0xadfc, 0x5ba8, 2850 0x19a9, 0x2efe, 0xb5cc, 0x6f88, 2851 }; 2852 2853 static const u16 x8_vectors[] = { 2854 0x0145, 0x028a, 0x2374, 0x43c8, 0xa1f0, 0x0520, 0x0a40, 0x1480, 2855 0x0211, 0x0422, 0x0844, 0x1088, 0x01b0, 0x44e0, 0x23c0, 0xed80, 2856 0x1011, 0x0116, 0x022c, 0x0458, 0x08b0, 0x8c60, 0x2740, 0x4e80, 2857 0x0411, 0x0822, 0x1044, 0x0158, 0x02b0, 0x2360, 0x46c0, 0xab80, 2858 0x0811, 0x1022, 0x012c, 0x0258, 0x04b0, 0x4660, 0x8cc0, 0x2780, 2859 0x2071, 0x40e2, 0xa0c4, 0x0108, 0x0210, 0x0420, 0x0840, 0x1080, 2860 0x4071, 0x80e2, 0x0104, 0x0208, 0x0410, 0x0820, 0x1040, 0x2080, 2861 0x8071, 0x0102, 0x0204, 0x0408, 0x0810, 0x1020, 0x2040, 0x4080, 2862 0x019d, 0x03d6, 0x136c, 0x2198, 0x50b0, 0xb2e0, 0x0740, 0x0e80, 2863 0x0189, 0x03ea, 0x072c, 0x0e58, 0x1cb0, 0x56e0, 0x37c0, 0xf580, 2864 0x01fd, 0x0376, 0x06ec, 0x0bb8, 0x1110, 0x2220, 0x4440, 0x8880, 2865 0x0163, 0x02c6, 0x1104, 0x0758, 0x0eb0, 0x2be0, 0x6140, 0xc280, 2866 0x02fd, 0x01c6, 0x0b5c, 0x1108, 0x07b0, 0x25a0, 0x8840, 0x6180, 2867 0x0801, 0x012e, 0x025c, 0x04b8, 0x1370, 0x26e0, 0x57c0, 0xb580, 2868 0x0401, 0x0802, 0x015c, 0x02b8, 0x22b0, 0x13e0, 0x7140, 0xe280, 2869 0x0201, 0x0402, 0x0804, 0x01b8, 0x11b0, 0x31a0, 0x8040, 0x7180, 2870 0x0101, 0x0202, 0x0404, 0x0808, 0x1010, 0x2020, 0x4040, 0x8080, 2871 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 2872 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 2873 }; 2874 2875 static int decode_syndrome(u16 syndrome, const u16 *vectors, unsigned num_vecs, 2876 unsigned v_dim) 2877 { 2878 unsigned int i, err_sym; 2879 2880 for (err_sym = 0; err_sym < num_vecs / v_dim; err_sym++) { 2881 u16 s = syndrome; 2882 unsigned v_idx = err_sym * v_dim; 2883 unsigned v_end = (err_sym + 1) * v_dim; 2884 2885 /* walk over all 16 bits of the syndrome */ 2886 for (i = 1; i < (1U << 16); i <<= 1) { 2887 2888 /* if bit is set in that eigenvector... */ 2889 if (v_idx < v_end && vectors[v_idx] & i) { 2890 u16 ev_comp = vectors[v_idx++]; 2891 2892 /* ... and bit set in the modified syndrome, */ 2893 if (s & i) { 2894 /* remove it. */ 2895 s ^= ev_comp; 2896 2897 if (!s) 2898 return err_sym; 2899 } 2900 2901 } else if (s & i) 2902 /* can't get to zero, move to next symbol */ 2903 break; 2904 } 2905 } 2906 2907 edac_dbg(0, "syndrome(%x) not found\n", syndrome); 2908 return -1; 2909 } 2910 2911 static int map_err_sym_to_channel(int err_sym, int sym_size) 2912 { 2913 if (sym_size == 4) 2914 switch (err_sym) { 2915 case 0x20: 2916 case 0x21: 2917 return 0; 2918 case 0x22: 2919 case 0x23: 2920 return 1; 2921 default: 2922 return err_sym >> 4; 2923 } 2924 /* x8 symbols */ 2925 else 2926 switch (err_sym) { 2927 /* imaginary bits not in a DIMM */ 2928 case 0x10: 2929 WARN(1, KERN_ERR "Invalid error symbol: 0x%x\n", 2930 err_sym); 2931 return -1; 2932 case 0x11: 2933 return 0; 2934 case 0x12: 2935 return 1; 2936 default: 2937 return err_sym >> 3; 2938 } 2939 return -1; 2940 } 2941 2942 static int get_channel_from_ecc_syndrome(struct mem_ctl_info *mci, u16 syndrome) 2943 { 2944 struct amd64_pvt *pvt = mci->pvt_info; 2945 int err_sym = -1; 2946 2947 if (pvt->ecc_sym_sz == 8) 2948 err_sym = decode_syndrome(syndrome, x8_vectors, 2949 ARRAY_SIZE(x8_vectors), 2950 pvt->ecc_sym_sz); 2951 else if (pvt->ecc_sym_sz == 4) 2952 err_sym = decode_syndrome(syndrome, x4_vectors, 2953 ARRAY_SIZE(x4_vectors), 2954 pvt->ecc_sym_sz); 2955 else { 2956 amd64_warn("Illegal syndrome type: %u\n", pvt->ecc_sym_sz); 2957 return err_sym; 2958 } 2959 2960 return map_err_sym_to_channel(err_sym, pvt->ecc_sym_sz); 2961 } 2962 2963 static void __log_ecc_error(struct mem_ctl_info *mci, struct err_info *err, 2964 u8 ecc_type) 2965 { 2966 enum hw_event_mc_err_type err_type; 2967 const char *string; 2968 2969 if (ecc_type == 2) 2970 err_type = HW_EVENT_ERR_CORRECTED; 2971 else if (ecc_type == 1) 2972 err_type = HW_EVENT_ERR_UNCORRECTED; 2973 else if (ecc_type == 3) 2974 err_type = HW_EVENT_ERR_DEFERRED; 2975 else { 2976 WARN(1, "Something is rotten in the state of Denmark.\n"); 2977 return; 2978 } 2979 2980 switch (err->err_code) { 2981 case DECODE_OK: 2982 string = ""; 2983 break; 2984 case ERR_NODE: 2985 string = "Failed to map error addr to a node"; 2986 break; 2987 case ERR_CSROW: 2988 string = "Failed to map error addr to a csrow"; 2989 break; 2990 case ERR_CHANNEL: 2991 string = "Unknown syndrome - possible error reporting race"; 2992 break; 2993 case ERR_SYND: 2994 string = "MCA_SYND not valid - unknown syndrome and csrow"; 2995 break; 2996 case ERR_NORM_ADDR: 2997 string = "Cannot decode normalized address"; 2998 break; 2999 default: 3000 string = "WTF error"; 3001 break; 3002 } 3003 3004 edac_mc_handle_error(err_type, mci, 1, 3005 err->page, err->offset, err->syndrome, 3006 err->csrow, err->channel, -1, 3007 string, ""); 3008 } 3009 3010 static inline void decode_bus_error(int node_id, struct mce *m) 3011 { 3012 struct mem_ctl_info *mci; 3013 struct amd64_pvt *pvt; 3014 u8 ecc_type = (m->status >> 45) & 0x3; 3015 u8 xec = XEC(m->status, 0x1f); 3016 u16 ec = EC(m->status); 3017 u64 sys_addr; 3018 struct err_info err; 3019 3020 mci = edac_mc_find(node_id); 3021 if (!mci) 3022 return; 3023 3024 pvt = mci->pvt_info; 3025 3026 /* Bail out early if this was an 'observed' error */ 3027 if (PP(ec) == NBSL_PP_OBS) 3028 return; 3029 3030 /* Do only ECC errors */ 3031 if (xec && xec != F10_NBSL_EXT_ERR_ECC) 3032 return; 3033 3034 memset(&err, 0, sizeof(err)); 3035 3036 sys_addr = get_error_address(pvt, m); 3037 3038 if (ecc_type == 2) 3039 err.syndrome = extract_syndrome(m->status); 3040 3041 pvt->ops->map_sysaddr_to_csrow(mci, sys_addr, &err); 3042 3043 __log_ecc_error(mci, &err, ecc_type); 3044 } 3045 3046 /* 3047 * To find the UMC channel represented by this bank we need to match on its 3048 * instance_id. The instance_id of a bank is held in the lower 32 bits of its 3049 * IPID. 3050 * 3051 * Currently, we can derive the channel number by looking at the 6th nibble in 3052 * the instance_id. For example, instance_id=0xYXXXXX where Y is the channel 3053 * number. 3054 * 3055 * For DRAM ECC errors, the Chip Select number is given in bits [2:0] of 3056 * the MCA_SYND[ErrorInformation] field. 3057 */ 3058 static void umc_get_err_info(struct mce *m, struct err_info *err) 3059 { 3060 err->channel = (m->ipid & GENMASK(31, 0)) >> 20; 3061 err->csrow = m->synd & 0x7; 3062 } 3063 3064 static void decode_umc_error(int node_id, struct mce *m) 3065 { 3066 u8 ecc_type = (m->status >> 45) & 0x3; 3067 struct mem_ctl_info *mci; 3068 struct amd64_pvt *pvt; 3069 struct err_info err; 3070 u64 sys_addr; 3071 3072 node_id = fixup_node_id(node_id, m); 3073 3074 mci = edac_mc_find(node_id); 3075 if (!mci) 3076 return; 3077 3078 pvt = mci->pvt_info; 3079 3080 memset(&err, 0, sizeof(err)); 3081 3082 if (m->status & MCI_STATUS_DEFERRED) 3083 ecc_type = 3; 3084 3085 if (!(m->status & MCI_STATUS_SYNDV)) { 3086 err.err_code = ERR_SYND; 3087 goto log_error; 3088 } 3089 3090 if (ecc_type == 2) { 3091 u8 length = (m->synd >> 18) & 0x3f; 3092 3093 if (length) 3094 err.syndrome = (m->synd >> 32) & GENMASK(length - 1, 0); 3095 else 3096 err.err_code = ERR_CHANNEL; 3097 } 3098 3099 pvt->ops->get_err_info(m, &err); 3100 3101 if (umc_normaddr_to_sysaddr(m->addr, pvt->mc_node_id, err.channel, &sys_addr)) { 3102 err.err_code = ERR_NORM_ADDR; 3103 goto log_error; 3104 } 3105 3106 error_address_to_page_and_offset(sys_addr, &err); 3107 3108 log_error: 3109 __log_ecc_error(mci, &err, ecc_type); 3110 } 3111 3112 /* 3113 * Use pvt->F3 which contains the F3 CPU PCI device to get the related 3114 * F1 (AddrMap) and F2 (Dct) devices. Return negative value on error. 3115 */ 3116 static int 3117 reserve_mc_sibling_devs(struct amd64_pvt *pvt, u16 pci_id1, u16 pci_id2) 3118 { 3119 /* Reserve the ADDRESS MAP Device */ 3120 pvt->F1 = pci_get_related_function(pvt->F3->vendor, pci_id1, pvt->F3); 3121 if (!pvt->F1) { 3122 edac_dbg(1, "F1 not found: device 0x%x\n", pci_id1); 3123 return -ENODEV; 3124 } 3125 3126 /* Reserve the DCT Device */ 3127 pvt->F2 = pci_get_related_function(pvt->F3->vendor, pci_id2, pvt->F3); 3128 if (!pvt->F2) { 3129 pci_dev_put(pvt->F1); 3130 pvt->F1 = NULL; 3131 3132 edac_dbg(1, "F2 not found: device 0x%x\n", pci_id2); 3133 return -ENODEV; 3134 } 3135 3136 if (!pci_ctl_dev) 3137 pci_ctl_dev = &pvt->F2->dev; 3138 3139 edac_dbg(1, "F1: %s\n", pci_name(pvt->F1)); 3140 edac_dbg(1, "F2: %s\n", pci_name(pvt->F2)); 3141 edac_dbg(1, "F3: %s\n", pci_name(pvt->F3)); 3142 3143 return 0; 3144 } 3145 3146 static void determine_ecc_sym_sz(struct amd64_pvt *pvt) 3147 { 3148 pvt->ecc_sym_sz = 4; 3149 3150 if (pvt->fam >= 0x10) { 3151 u32 tmp; 3152 3153 amd64_read_pci_cfg(pvt->F3, EXT_NB_MCA_CFG, &tmp); 3154 /* F16h has only DCT0, so no need to read dbam1. */ 3155 if (pvt->fam != 0x16) 3156 amd64_read_dct_pci_cfg(pvt, 1, DBAM0, &pvt->dbam1); 3157 3158 /* F10h, revD and later can do x8 ECC too. */ 3159 if ((pvt->fam > 0x10 || pvt->model > 7) && tmp & BIT(25)) 3160 pvt->ecc_sym_sz = 8; 3161 } 3162 } 3163 3164 /* 3165 * Retrieve the hardware registers of the memory controller. 3166 */ 3167 static void umc_read_mc_regs(struct amd64_pvt *pvt) 3168 { 3169 u8 nid = pvt->mc_node_id; 3170 struct amd64_umc *umc; 3171 u32 i, umc_base; 3172 3173 /* Read registers from each UMC */ 3174 for_each_umc(i) { 3175 3176 umc_base = get_umc_base(i); 3177 umc = &pvt->umc[i]; 3178 3179 amd_smn_read(nid, umc_base + get_umc_reg(pvt, UMCCH_DIMM_CFG), &umc->dimm_cfg); 3180 amd_smn_read(nid, umc_base + UMCCH_UMC_CFG, &umc->umc_cfg); 3181 amd_smn_read(nid, umc_base + UMCCH_SDP_CTRL, &umc->sdp_ctrl); 3182 amd_smn_read(nid, umc_base + UMCCH_ECC_CTRL, &umc->ecc_ctrl); 3183 amd_smn_read(nid, umc_base + UMCCH_UMC_CAP_HI, &umc->umc_cap_hi); 3184 } 3185 } 3186 3187 /* 3188 * Retrieve the hardware registers of the memory controller (this includes the 3189 * 'Address Map' and 'Misc' device regs) 3190 */ 3191 static void dct_read_mc_regs(struct amd64_pvt *pvt) 3192 { 3193 unsigned int range; 3194 u64 msr_val; 3195 3196 /* 3197 * Retrieve TOP_MEM and TOP_MEM2; no masking off of reserved bits since 3198 * those are Read-As-Zero. 3199 */ 3200 rdmsrl(MSR_K8_TOP_MEM1, pvt->top_mem); 3201 edac_dbg(0, " TOP_MEM: 0x%016llx\n", pvt->top_mem); 3202 3203 /* Check first whether TOP_MEM2 is enabled: */ 3204 rdmsrl(MSR_AMD64_SYSCFG, msr_val); 3205 if (msr_val & BIT(21)) { 3206 rdmsrl(MSR_K8_TOP_MEM2, pvt->top_mem2); 3207 edac_dbg(0, " TOP_MEM2: 0x%016llx\n", pvt->top_mem2); 3208 } else { 3209 edac_dbg(0, " TOP_MEM2 disabled\n"); 3210 } 3211 3212 amd64_read_pci_cfg(pvt->F3, NBCAP, &pvt->nbcap); 3213 3214 read_dram_ctl_register(pvt); 3215 3216 for (range = 0; range < DRAM_RANGES; range++) { 3217 u8 rw; 3218 3219 /* read settings for this DRAM range */ 3220 read_dram_base_limit_regs(pvt, range); 3221 3222 rw = dram_rw(pvt, range); 3223 if (!rw) 3224 continue; 3225 3226 edac_dbg(1, " DRAM range[%d], base: 0x%016llx; limit: 0x%016llx\n", 3227 range, 3228 get_dram_base(pvt, range), 3229 get_dram_limit(pvt, range)); 3230 3231 edac_dbg(1, " IntlvEn=%s; Range access: %s%s IntlvSel=%d DstNode=%d\n", 3232 dram_intlv_en(pvt, range) ? "Enabled" : "Disabled", 3233 (rw & 0x1) ? "R" : "-", 3234 (rw & 0x2) ? "W" : "-", 3235 dram_intlv_sel(pvt, range), 3236 dram_dst_node(pvt, range)); 3237 } 3238 3239 amd64_read_pci_cfg(pvt->F1, DHAR, &pvt->dhar); 3240 amd64_read_dct_pci_cfg(pvt, 0, DBAM0, &pvt->dbam0); 3241 3242 amd64_read_pci_cfg(pvt->F3, F10_ONLINE_SPARE, &pvt->online_spare); 3243 3244 amd64_read_dct_pci_cfg(pvt, 0, DCLR0, &pvt->dclr0); 3245 amd64_read_dct_pci_cfg(pvt, 0, DCHR0, &pvt->dchr0); 3246 3247 if (!dct_ganging_enabled(pvt)) { 3248 amd64_read_dct_pci_cfg(pvt, 1, DCLR0, &pvt->dclr1); 3249 amd64_read_dct_pci_cfg(pvt, 1, DCHR0, &pvt->dchr1); 3250 } 3251 3252 determine_ecc_sym_sz(pvt); 3253 } 3254 3255 /* 3256 * NOTE: CPU Revision Dependent code 3257 * 3258 * Input: 3259 * @csrow_nr ChipSelect Row Number (0..NUM_CHIPSELECTS-1) 3260 * k8 private pointer to --> 3261 * DRAM Bank Address mapping register 3262 * node_id 3263 * DCL register where dual_channel_active is 3264 * 3265 * The DBAM register consists of 4 sets of 4 bits each definitions: 3266 * 3267 * Bits: CSROWs 3268 * 0-3 CSROWs 0 and 1 3269 * 4-7 CSROWs 2 and 3 3270 * 8-11 CSROWs 4 and 5 3271 * 12-15 CSROWs 6 and 7 3272 * 3273 * Values range from: 0 to 15 3274 * The meaning of the values depends on CPU revision and dual-channel state, 3275 * see relevant BKDG more info. 3276 * 3277 * The memory controller provides for total of only 8 CSROWs in its current 3278 * architecture. Each "pair" of CSROWs normally represents just one DIMM in 3279 * single channel or two (2) DIMMs in dual channel mode. 3280 * 3281 * The following code logic collapses the various tables for CSROW based on CPU 3282 * revision. 3283 * 3284 * Returns: 3285 * The number of PAGE_SIZE pages on the specified CSROW number it 3286 * encompasses 3287 * 3288 */ 3289 static u32 dct_get_csrow_nr_pages(struct amd64_pvt *pvt, u8 dct, int csrow_nr) 3290 { 3291 u32 dbam = dct ? pvt->dbam1 : pvt->dbam0; 3292 u32 cs_mode, nr_pages; 3293 3294 csrow_nr >>= 1; 3295 cs_mode = DBAM_DIMM(csrow_nr, dbam); 3296 3297 nr_pages = pvt->ops->dbam_to_cs(pvt, dct, cs_mode, csrow_nr); 3298 nr_pages <<= 20 - PAGE_SHIFT; 3299 3300 edac_dbg(0, "csrow: %d, channel: %d, DBAM idx: %d\n", 3301 csrow_nr, dct, cs_mode); 3302 edac_dbg(0, "nr_pages/channel: %u\n", nr_pages); 3303 3304 return nr_pages; 3305 } 3306 3307 static u32 umc_get_csrow_nr_pages(struct amd64_pvt *pvt, u8 dct, int csrow_nr_orig) 3308 { 3309 int csrow_nr = csrow_nr_orig; 3310 u32 cs_mode, nr_pages; 3311 3312 cs_mode = umc_get_cs_mode(csrow_nr >> 1, dct, pvt); 3313 3314 nr_pages = umc_addr_mask_to_cs_size(pvt, dct, cs_mode, csrow_nr); 3315 nr_pages <<= 20 - PAGE_SHIFT; 3316 3317 edac_dbg(0, "csrow: %d, channel: %d, cs_mode %d\n", 3318 csrow_nr_orig, dct, cs_mode); 3319 edac_dbg(0, "nr_pages/channel: %u\n", nr_pages); 3320 3321 return nr_pages; 3322 } 3323 3324 static void umc_init_csrows(struct mem_ctl_info *mci) 3325 { 3326 struct amd64_pvt *pvt = mci->pvt_info; 3327 enum edac_type edac_mode = EDAC_NONE; 3328 enum dev_type dev_type = DEV_UNKNOWN; 3329 struct dimm_info *dimm; 3330 u8 umc, cs; 3331 3332 if (mci->edac_ctl_cap & EDAC_FLAG_S16ECD16ED) { 3333 edac_mode = EDAC_S16ECD16ED; 3334 dev_type = DEV_X16; 3335 } else if (mci->edac_ctl_cap & EDAC_FLAG_S8ECD8ED) { 3336 edac_mode = EDAC_S8ECD8ED; 3337 dev_type = DEV_X8; 3338 } else if (mci->edac_ctl_cap & EDAC_FLAG_S4ECD4ED) { 3339 edac_mode = EDAC_S4ECD4ED; 3340 dev_type = DEV_X4; 3341 } else if (mci->edac_ctl_cap & EDAC_FLAG_SECDED) { 3342 edac_mode = EDAC_SECDED; 3343 } 3344 3345 for_each_umc(umc) { 3346 for_each_chip_select(cs, umc, pvt) { 3347 if (!csrow_enabled(cs, umc, pvt)) 3348 continue; 3349 3350 dimm = mci->csrows[cs]->channels[umc]->dimm; 3351 3352 edac_dbg(1, "MC node: %d, csrow: %d\n", 3353 pvt->mc_node_id, cs); 3354 3355 dimm->nr_pages = umc_get_csrow_nr_pages(pvt, umc, cs); 3356 dimm->mtype = pvt->umc[umc].dram_type; 3357 dimm->edac_mode = edac_mode; 3358 dimm->dtype = dev_type; 3359 dimm->grain = 64; 3360 } 3361 } 3362 } 3363 3364 /* 3365 * Initialize the array of csrow attribute instances, based on the values 3366 * from pci config hardware registers. 3367 */ 3368 static void dct_init_csrows(struct mem_ctl_info *mci) 3369 { 3370 struct amd64_pvt *pvt = mci->pvt_info; 3371 enum edac_type edac_mode = EDAC_NONE; 3372 struct csrow_info *csrow; 3373 struct dimm_info *dimm; 3374 int nr_pages = 0; 3375 int i, j; 3376 u32 val; 3377 3378 amd64_read_pci_cfg(pvt->F3, NBCFG, &val); 3379 3380 pvt->nbcfg = val; 3381 3382 edac_dbg(0, "node %d, NBCFG=0x%08x[ChipKillEccCap: %d|DramEccEn: %d]\n", 3383 pvt->mc_node_id, val, 3384 !!(val & NBCFG_CHIPKILL), !!(val & NBCFG_ECC_ENABLE)); 3385 3386 /* 3387 * We iterate over DCT0 here but we look at DCT1 in parallel, if needed. 3388 */ 3389 for_each_chip_select(i, 0, pvt) { 3390 bool row_dct0 = !!csrow_enabled(i, 0, pvt); 3391 bool row_dct1 = false; 3392 3393 if (pvt->fam != 0xf) 3394 row_dct1 = !!csrow_enabled(i, 1, pvt); 3395 3396 if (!row_dct0 && !row_dct1) 3397 continue; 3398 3399 csrow = mci->csrows[i]; 3400 3401 edac_dbg(1, "MC node: %d, csrow: %d\n", 3402 pvt->mc_node_id, i); 3403 3404 if (row_dct0) { 3405 nr_pages = dct_get_csrow_nr_pages(pvt, 0, i); 3406 csrow->channels[0]->dimm->nr_pages = nr_pages; 3407 } 3408 3409 /* K8 has only one DCT */ 3410 if (pvt->fam != 0xf && row_dct1) { 3411 int row_dct1_pages = dct_get_csrow_nr_pages(pvt, 1, i); 3412 3413 csrow->channels[1]->dimm->nr_pages = row_dct1_pages; 3414 nr_pages += row_dct1_pages; 3415 } 3416 3417 edac_dbg(1, "Total csrow%d pages: %u\n", i, nr_pages); 3418 3419 /* Determine DIMM ECC mode: */ 3420 if (pvt->nbcfg & NBCFG_ECC_ENABLE) { 3421 edac_mode = (pvt->nbcfg & NBCFG_CHIPKILL) 3422 ? EDAC_S4ECD4ED 3423 : EDAC_SECDED; 3424 } 3425 3426 for (j = 0; j < pvt->max_mcs; j++) { 3427 dimm = csrow->channels[j]->dimm; 3428 dimm->mtype = pvt->dram_type; 3429 dimm->edac_mode = edac_mode; 3430 dimm->grain = 64; 3431 } 3432 } 3433 } 3434 3435 /* get all cores on this DCT */ 3436 static void get_cpus_on_this_dct_cpumask(struct cpumask *mask, u16 nid) 3437 { 3438 int cpu; 3439 3440 for_each_online_cpu(cpu) 3441 if (topology_die_id(cpu) == nid) 3442 cpumask_set_cpu(cpu, mask); 3443 } 3444 3445 /* check MCG_CTL on all the cpus on this node */ 3446 static bool nb_mce_bank_enabled_on_node(u16 nid) 3447 { 3448 cpumask_var_t mask; 3449 int cpu, nbe; 3450 bool ret = false; 3451 3452 if (!zalloc_cpumask_var(&mask, GFP_KERNEL)) { 3453 amd64_warn("%s: Error allocating mask\n", __func__); 3454 return false; 3455 } 3456 3457 get_cpus_on_this_dct_cpumask(mask, nid); 3458 3459 rdmsr_on_cpus(mask, MSR_IA32_MCG_CTL, msrs); 3460 3461 for_each_cpu(cpu, mask) { 3462 struct msr *reg = per_cpu_ptr(msrs, cpu); 3463 nbe = reg->l & MSR_MCGCTL_NBE; 3464 3465 edac_dbg(0, "core: %u, MCG_CTL: 0x%llx, NB MSR is %s\n", 3466 cpu, reg->q, 3467 (nbe ? "enabled" : "disabled")); 3468 3469 if (!nbe) 3470 goto out; 3471 } 3472 ret = true; 3473 3474 out: 3475 free_cpumask_var(mask); 3476 return ret; 3477 } 3478 3479 static int toggle_ecc_err_reporting(struct ecc_settings *s, u16 nid, bool on) 3480 { 3481 cpumask_var_t cmask; 3482 int cpu; 3483 3484 if (!zalloc_cpumask_var(&cmask, GFP_KERNEL)) { 3485 amd64_warn("%s: error allocating mask\n", __func__); 3486 return -ENOMEM; 3487 } 3488 3489 get_cpus_on_this_dct_cpumask(cmask, nid); 3490 3491 rdmsr_on_cpus(cmask, MSR_IA32_MCG_CTL, msrs); 3492 3493 for_each_cpu(cpu, cmask) { 3494 3495 struct msr *reg = per_cpu_ptr(msrs, cpu); 3496 3497 if (on) { 3498 if (reg->l & MSR_MCGCTL_NBE) 3499 s->flags.nb_mce_enable = 1; 3500 3501 reg->l |= MSR_MCGCTL_NBE; 3502 } else { 3503 /* 3504 * Turn off NB MCE reporting only when it was off before 3505 */ 3506 if (!s->flags.nb_mce_enable) 3507 reg->l &= ~MSR_MCGCTL_NBE; 3508 } 3509 } 3510 wrmsr_on_cpus(cmask, MSR_IA32_MCG_CTL, msrs); 3511 3512 free_cpumask_var(cmask); 3513 3514 return 0; 3515 } 3516 3517 static bool enable_ecc_error_reporting(struct ecc_settings *s, u16 nid, 3518 struct pci_dev *F3) 3519 { 3520 bool ret = true; 3521 u32 value, mask = 0x3; /* UECC/CECC enable */ 3522 3523 if (toggle_ecc_err_reporting(s, nid, ON)) { 3524 amd64_warn("Error enabling ECC reporting over MCGCTL!\n"); 3525 return false; 3526 } 3527 3528 amd64_read_pci_cfg(F3, NBCTL, &value); 3529 3530 s->old_nbctl = value & mask; 3531 s->nbctl_valid = true; 3532 3533 value |= mask; 3534 amd64_write_pci_cfg(F3, NBCTL, value); 3535 3536 amd64_read_pci_cfg(F3, NBCFG, &value); 3537 3538 edac_dbg(0, "1: node %d, NBCFG=0x%08x[DramEccEn: %d]\n", 3539 nid, value, !!(value & NBCFG_ECC_ENABLE)); 3540 3541 if (!(value & NBCFG_ECC_ENABLE)) { 3542 amd64_warn("DRAM ECC disabled on this node, enabling...\n"); 3543 3544 s->flags.nb_ecc_prev = 0; 3545 3546 /* Attempt to turn on DRAM ECC Enable */ 3547 value |= NBCFG_ECC_ENABLE; 3548 amd64_write_pci_cfg(F3, NBCFG, value); 3549 3550 amd64_read_pci_cfg(F3, NBCFG, &value); 3551 3552 if (!(value & NBCFG_ECC_ENABLE)) { 3553 amd64_warn("Hardware rejected DRAM ECC enable," 3554 "check memory DIMM configuration.\n"); 3555 ret = false; 3556 } else { 3557 amd64_info("Hardware accepted DRAM ECC Enable\n"); 3558 } 3559 } else { 3560 s->flags.nb_ecc_prev = 1; 3561 } 3562 3563 edac_dbg(0, "2: node %d, NBCFG=0x%08x[DramEccEn: %d]\n", 3564 nid, value, !!(value & NBCFG_ECC_ENABLE)); 3565 3566 return ret; 3567 } 3568 3569 static void restore_ecc_error_reporting(struct ecc_settings *s, u16 nid, 3570 struct pci_dev *F3) 3571 { 3572 u32 value, mask = 0x3; /* UECC/CECC enable */ 3573 3574 if (!s->nbctl_valid) 3575 return; 3576 3577 amd64_read_pci_cfg(F3, NBCTL, &value); 3578 value &= ~mask; 3579 value |= s->old_nbctl; 3580 3581 amd64_write_pci_cfg(F3, NBCTL, value); 3582 3583 /* restore previous BIOS DRAM ECC "off" setting we force-enabled */ 3584 if (!s->flags.nb_ecc_prev) { 3585 amd64_read_pci_cfg(F3, NBCFG, &value); 3586 value &= ~NBCFG_ECC_ENABLE; 3587 amd64_write_pci_cfg(F3, NBCFG, value); 3588 } 3589 3590 /* restore the NB Enable MCGCTL bit */ 3591 if (toggle_ecc_err_reporting(s, nid, OFF)) 3592 amd64_warn("Error restoring NB MCGCTL settings!\n"); 3593 } 3594 3595 static bool dct_ecc_enabled(struct amd64_pvt *pvt) 3596 { 3597 u16 nid = pvt->mc_node_id; 3598 bool nb_mce_en = false; 3599 u8 ecc_en = 0; 3600 u32 value; 3601 3602 amd64_read_pci_cfg(pvt->F3, NBCFG, &value); 3603 3604 ecc_en = !!(value & NBCFG_ECC_ENABLE); 3605 3606 nb_mce_en = nb_mce_bank_enabled_on_node(nid); 3607 if (!nb_mce_en) 3608 edac_dbg(0, "NB MCE bank disabled, set MSR 0x%08x[4] on node %d to enable.\n", 3609 MSR_IA32_MCG_CTL, nid); 3610 3611 edac_dbg(3, "Node %d: DRAM ECC %s.\n", nid, (ecc_en ? "enabled" : "disabled")); 3612 3613 if (!ecc_en || !nb_mce_en) 3614 return false; 3615 else 3616 return true; 3617 } 3618 3619 static bool umc_ecc_enabled(struct amd64_pvt *pvt) 3620 { 3621 u8 umc_en_mask = 0, ecc_en_mask = 0; 3622 u16 nid = pvt->mc_node_id; 3623 struct amd64_umc *umc; 3624 u8 ecc_en = 0, i; 3625 3626 for_each_umc(i) { 3627 umc = &pvt->umc[i]; 3628 3629 /* Only check enabled UMCs. */ 3630 if (!(umc->sdp_ctrl & UMC_SDP_INIT)) 3631 continue; 3632 3633 umc_en_mask |= BIT(i); 3634 3635 if (umc->umc_cap_hi & UMC_ECC_ENABLED) 3636 ecc_en_mask |= BIT(i); 3637 } 3638 3639 /* Check whether at least one UMC is enabled: */ 3640 if (umc_en_mask) 3641 ecc_en = umc_en_mask == ecc_en_mask; 3642 else 3643 edac_dbg(0, "Node %d: No enabled UMCs.\n", nid); 3644 3645 edac_dbg(3, "Node %d: DRAM ECC %s.\n", nid, (ecc_en ? "enabled" : "disabled")); 3646 3647 if (!ecc_en) 3648 return false; 3649 else 3650 return true; 3651 } 3652 3653 static inline void 3654 umc_determine_edac_ctl_cap(struct mem_ctl_info *mci, struct amd64_pvt *pvt) 3655 { 3656 u8 i, ecc_en = 1, cpk_en = 1, dev_x4 = 1, dev_x16 = 1; 3657 3658 for_each_umc(i) { 3659 if (pvt->umc[i].sdp_ctrl & UMC_SDP_INIT) { 3660 ecc_en &= !!(pvt->umc[i].umc_cap_hi & UMC_ECC_ENABLED); 3661 cpk_en &= !!(pvt->umc[i].umc_cap_hi & UMC_ECC_CHIPKILL_CAP); 3662 3663 dev_x4 &= !!(pvt->umc[i].dimm_cfg & BIT(6)); 3664 dev_x16 &= !!(pvt->umc[i].dimm_cfg & BIT(7)); 3665 } 3666 } 3667 3668 /* Set chipkill only if ECC is enabled: */ 3669 if (ecc_en) { 3670 mci->edac_ctl_cap |= EDAC_FLAG_SECDED; 3671 3672 if (!cpk_en) 3673 return; 3674 3675 if (dev_x4) 3676 mci->edac_ctl_cap |= EDAC_FLAG_S4ECD4ED; 3677 else if (dev_x16) 3678 mci->edac_ctl_cap |= EDAC_FLAG_S16ECD16ED; 3679 else 3680 mci->edac_ctl_cap |= EDAC_FLAG_S8ECD8ED; 3681 } 3682 } 3683 3684 static void dct_setup_mci_misc_attrs(struct mem_ctl_info *mci) 3685 { 3686 struct amd64_pvt *pvt = mci->pvt_info; 3687 3688 mci->mtype_cap = MEM_FLAG_DDR2 | MEM_FLAG_RDDR2; 3689 mci->edac_ctl_cap = EDAC_FLAG_NONE; 3690 3691 if (pvt->nbcap & NBCAP_SECDED) 3692 mci->edac_ctl_cap |= EDAC_FLAG_SECDED; 3693 3694 if (pvt->nbcap & NBCAP_CHIPKILL) 3695 mci->edac_ctl_cap |= EDAC_FLAG_S4ECD4ED; 3696 3697 mci->edac_cap = dct_determine_edac_cap(pvt); 3698 mci->mod_name = EDAC_MOD_STR; 3699 mci->ctl_name = pvt->ctl_name; 3700 mci->dev_name = pci_name(pvt->F3); 3701 mci->ctl_page_to_phys = NULL; 3702 3703 /* memory scrubber interface */ 3704 mci->set_sdram_scrub_rate = set_scrub_rate; 3705 mci->get_sdram_scrub_rate = get_scrub_rate; 3706 3707 dct_init_csrows(mci); 3708 } 3709 3710 static void umc_setup_mci_misc_attrs(struct mem_ctl_info *mci) 3711 { 3712 struct amd64_pvt *pvt = mci->pvt_info; 3713 3714 mci->mtype_cap = MEM_FLAG_DDR4 | MEM_FLAG_RDDR4; 3715 mci->edac_ctl_cap = EDAC_FLAG_NONE; 3716 3717 umc_determine_edac_ctl_cap(mci, pvt); 3718 3719 mci->edac_cap = umc_determine_edac_cap(pvt); 3720 mci->mod_name = EDAC_MOD_STR; 3721 mci->ctl_name = pvt->ctl_name; 3722 mci->dev_name = pci_name(pvt->F3); 3723 mci->ctl_page_to_phys = NULL; 3724 3725 umc_init_csrows(mci); 3726 } 3727 3728 static int dct_hw_info_get(struct amd64_pvt *pvt) 3729 { 3730 int ret = reserve_mc_sibling_devs(pvt, pvt->f1_id, pvt->f2_id); 3731 3732 if (ret) 3733 return ret; 3734 3735 dct_prep_chip_selects(pvt); 3736 dct_read_base_mask(pvt); 3737 dct_read_mc_regs(pvt); 3738 dct_determine_memory_type(pvt); 3739 3740 return 0; 3741 } 3742 3743 static int umc_hw_info_get(struct amd64_pvt *pvt) 3744 { 3745 pvt->umc = kcalloc(pvt->max_mcs, sizeof(struct amd64_umc), GFP_KERNEL); 3746 if (!pvt->umc) 3747 return -ENOMEM; 3748 3749 umc_prep_chip_selects(pvt); 3750 umc_read_base_mask(pvt); 3751 umc_read_mc_regs(pvt); 3752 umc_determine_memory_type(pvt); 3753 3754 return 0; 3755 } 3756 3757 /* 3758 * The CPUs have one channel per UMC, so UMC number is equivalent to a 3759 * channel number. The GPUs have 8 channels per UMC, so the UMC number no 3760 * longer works as a channel number. 3761 * 3762 * The channel number within a GPU UMC is given in MCA_IPID[15:12]. 3763 * However, the IDs are split such that two UMC values go to one UMC, and 3764 * the channel numbers are split in two groups of four. 3765 * 3766 * Refer to comment on gpu_get_umc_base(). 3767 * 3768 * For example, 3769 * UMC0 CH[3:0] = 0x0005[3:0]000 3770 * UMC0 CH[7:4] = 0x0015[3:0]000 3771 * UMC1 CH[3:0] = 0x0025[3:0]000 3772 * UMC1 CH[7:4] = 0x0035[3:0]000 3773 */ 3774 static void gpu_get_err_info(struct mce *m, struct err_info *err) 3775 { 3776 u8 ch = (m->ipid & GENMASK(31, 0)) >> 20; 3777 u8 phy = ((m->ipid >> 12) & 0xf); 3778 3779 err->channel = ch % 2 ? phy + 4 : phy; 3780 err->csrow = phy; 3781 } 3782 3783 static int gpu_addr_mask_to_cs_size(struct amd64_pvt *pvt, u8 umc, 3784 unsigned int cs_mode, int csrow_nr) 3785 { 3786 u32 addr_mask_orig = pvt->csels[umc].csmasks[csrow_nr]; 3787 3788 return __addr_mask_to_cs_size(addr_mask_orig, cs_mode, csrow_nr, csrow_nr >> 1); 3789 } 3790 3791 static void gpu_debug_display_dimm_sizes(struct amd64_pvt *pvt, u8 ctrl) 3792 { 3793 int size, cs_mode, cs = 0; 3794 3795 edac_printk(KERN_DEBUG, EDAC_MC, "UMC%d chip selects:\n", ctrl); 3796 3797 cs_mode = CS_EVEN_PRIMARY | CS_ODD_PRIMARY; 3798 3799 for_each_chip_select(cs, ctrl, pvt) { 3800 size = gpu_addr_mask_to_cs_size(pvt, ctrl, cs_mode, cs); 3801 amd64_info(EDAC_MC ": %d: %5dMB\n", cs, size); 3802 } 3803 } 3804 3805 static void gpu_dump_misc_regs(struct amd64_pvt *pvt) 3806 { 3807 struct amd64_umc *umc; 3808 u32 i; 3809 3810 for_each_umc(i) { 3811 umc = &pvt->umc[i]; 3812 3813 edac_dbg(1, "UMC%d UMC cfg: 0x%x\n", i, umc->umc_cfg); 3814 edac_dbg(1, "UMC%d SDP ctrl: 0x%x\n", i, umc->sdp_ctrl); 3815 edac_dbg(1, "UMC%d ECC ctrl: 0x%x\n", i, umc->ecc_ctrl); 3816 edac_dbg(1, "UMC%d All HBMs support ECC: yes\n", i); 3817 3818 gpu_debug_display_dimm_sizes(pvt, i); 3819 } 3820 } 3821 3822 static u32 gpu_get_csrow_nr_pages(struct amd64_pvt *pvt, u8 dct, int csrow_nr) 3823 { 3824 u32 nr_pages; 3825 int cs_mode = CS_EVEN_PRIMARY | CS_ODD_PRIMARY; 3826 3827 nr_pages = gpu_addr_mask_to_cs_size(pvt, dct, cs_mode, csrow_nr); 3828 nr_pages <<= 20 - PAGE_SHIFT; 3829 3830 edac_dbg(0, "csrow: %d, channel: %d\n", csrow_nr, dct); 3831 edac_dbg(0, "nr_pages/channel: %u\n", nr_pages); 3832 3833 return nr_pages; 3834 } 3835 3836 static void gpu_init_csrows(struct mem_ctl_info *mci) 3837 { 3838 struct amd64_pvt *pvt = mci->pvt_info; 3839 struct dimm_info *dimm; 3840 u8 umc, cs; 3841 3842 for_each_umc(umc) { 3843 for_each_chip_select(cs, umc, pvt) { 3844 if (!csrow_enabled(cs, umc, pvt)) 3845 continue; 3846 3847 dimm = mci->csrows[umc]->channels[cs]->dimm; 3848 3849 edac_dbg(1, "MC node: %d, csrow: %d\n", 3850 pvt->mc_node_id, cs); 3851 3852 dimm->nr_pages = gpu_get_csrow_nr_pages(pvt, umc, cs); 3853 dimm->edac_mode = EDAC_SECDED; 3854 dimm->mtype = MEM_HBM2; 3855 dimm->dtype = DEV_X16; 3856 dimm->grain = 64; 3857 } 3858 } 3859 } 3860 3861 static void gpu_setup_mci_misc_attrs(struct mem_ctl_info *mci) 3862 { 3863 struct amd64_pvt *pvt = mci->pvt_info; 3864 3865 mci->mtype_cap = MEM_FLAG_HBM2; 3866 mci->edac_ctl_cap = EDAC_FLAG_SECDED; 3867 3868 mci->edac_cap = EDAC_FLAG_EC; 3869 mci->mod_name = EDAC_MOD_STR; 3870 mci->ctl_name = pvt->ctl_name; 3871 mci->dev_name = pci_name(pvt->F3); 3872 mci->ctl_page_to_phys = NULL; 3873 3874 gpu_init_csrows(mci); 3875 } 3876 3877 /* ECC is enabled by default on GPU nodes */ 3878 static bool gpu_ecc_enabled(struct amd64_pvt *pvt) 3879 { 3880 return true; 3881 } 3882 3883 static inline u32 gpu_get_umc_base(u8 umc, u8 channel) 3884 { 3885 /* 3886 * On CPUs, there is one channel per UMC, so UMC numbering equals 3887 * channel numbering. On GPUs, there are eight channels per UMC, 3888 * so the channel numbering is different from UMC numbering. 3889 * 3890 * On CPU nodes channels are selected in 6th nibble 3891 * UMC chY[3:0]= [(chY*2 + 1) : (chY*2)]50000; 3892 * 3893 * On GPU nodes channels are selected in 3rd nibble 3894 * HBM chX[3:0]= [Y ]5X[3:0]000; 3895 * HBM chX[7:4]= [Y+1]5X[3:0]000 3896 */ 3897 umc *= 2; 3898 3899 if (channel >= 4) 3900 umc++; 3901 3902 return 0x50000 + (umc << 20) + ((channel % 4) << 12); 3903 } 3904 3905 static void gpu_read_mc_regs(struct amd64_pvt *pvt) 3906 { 3907 u8 nid = pvt->mc_node_id; 3908 struct amd64_umc *umc; 3909 u32 i, umc_base; 3910 3911 /* Read registers from each UMC */ 3912 for_each_umc(i) { 3913 umc_base = gpu_get_umc_base(i, 0); 3914 umc = &pvt->umc[i]; 3915 3916 amd_smn_read(nid, umc_base + UMCCH_UMC_CFG, &umc->umc_cfg); 3917 amd_smn_read(nid, umc_base + UMCCH_SDP_CTRL, &umc->sdp_ctrl); 3918 amd_smn_read(nid, umc_base + UMCCH_ECC_CTRL, &umc->ecc_ctrl); 3919 } 3920 } 3921 3922 static void gpu_read_base_mask(struct amd64_pvt *pvt) 3923 { 3924 u32 base_reg, mask_reg; 3925 u32 *base, *mask; 3926 int umc, cs; 3927 3928 for_each_umc(umc) { 3929 for_each_chip_select(cs, umc, pvt) { 3930 base_reg = gpu_get_umc_base(umc, cs) + UMCCH_BASE_ADDR; 3931 base = &pvt->csels[umc].csbases[cs]; 3932 3933 if (!amd_smn_read(pvt->mc_node_id, base_reg, base)) { 3934 edac_dbg(0, " DCSB%d[%d]=0x%08x reg: 0x%x\n", 3935 umc, cs, *base, base_reg); 3936 } 3937 3938 mask_reg = gpu_get_umc_base(umc, cs) + UMCCH_ADDR_MASK; 3939 mask = &pvt->csels[umc].csmasks[cs]; 3940 3941 if (!amd_smn_read(pvt->mc_node_id, mask_reg, mask)) { 3942 edac_dbg(0, " DCSM%d[%d]=0x%08x reg: 0x%x\n", 3943 umc, cs, *mask, mask_reg); 3944 } 3945 } 3946 } 3947 } 3948 3949 static void gpu_prep_chip_selects(struct amd64_pvt *pvt) 3950 { 3951 int umc; 3952 3953 for_each_umc(umc) { 3954 pvt->csels[umc].b_cnt = 8; 3955 pvt->csels[umc].m_cnt = 8; 3956 } 3957 } 3958 3959 static int gpu_hw_info_get(struct amd64_pvt *pvt) 3960 { 3961 int ret; 3962 3963 ret = gpu_get_node_map(); 3964 if (ret) 3965 return ret; 3966 3967 pvt->umc = kcalloc(pvt->max_mcs, sizeof(struct amd64_umc), GFP_KERNEL); 3968 if (!pvt->umc) 3969 return -ENOMEM; 3970 3971 gpu_prep_chip_selects(pvt); 3972 gpu_read_base_mask(pvt); 3973 gpu_read_mc_regs(pvt); 3974 3975 return 0; 3976 } 3977 3978 static void hw_info_put(struct amd64_pvt *pvt) 3979 { 3980 pci_dev_put(pvt->F1); 3981 pci_dev_put(pvt->F2); 3982 kfree(pvt->umc); 3983 } 3984 3985 static struct low_ops umc_ops = { 3986 .hw_info_get = umc_hw_info_get, 3987 .ecc_enabled = umc_ecc_enabled, 3988 .setup_mci_misc_attrs = umc_setup_mci_misc_attrs, 3989 .dump_misc_regs = umc_dump_misc_regs, 3990 .get_err_info = umc_get_err_info, 3991 }; 3992 3993 static struct low_ops gpu_ops = { 3994 .hw_info_get = gpu_hw_info_get, 3995 .ecc_enabled = gpu_ecc_enabled, 3996 .setup_mci_misc_attrs = gpu_setup_mci_misc_attrs, 3997 .dump_misc_regs = gpu_dump_misc_regs, 3998 .get_err_info = gpu_get_err_info, 3999 }; 4000 4001 /* Use Family 16h versions for defaults and adjust as needed below. */ 4002 static struct low_ops dct_ops = { 4003 .map_sysaddr_to_csrow = f1x_map_sysaddr_to_csrow, 4004 .dbam_to_cs = f16_dbam_to_chip_select, 4005 .hw_info_get = dct_hw_info_get, 4006 .ecc_enabled = dct_ecc_enabled, 4007 .setup_mci_misc_attrs = dct_setup_mci_misc_attrs, 4008 .dump_misc_regs = dct_dump_misc_regs, 4009 }; 4010 4011 static int per_family_init(struct amd64_pvt *pvt) 4012 { 4013 pvt->ext_model = boot_cpu_data.x86_model >> 4; 4014 pvt->stepping = boot_cpu_data.x86_stepping; 4015 pvt->model = boot_cpu_data.x86_model; 4016 pvt->fam = boot_cpu_data.x86; 4017 pvt->max_mcs = 2; 4018 4019 /* 4020 * Decide on which ops group to use here and do any family/model 4021 * overrides below. 4022 */ 4023 if (pvt->fam >= 0x17) 4024 pvt->ops = &umc_ops; 4025 else 4026 pvt->ops = &dct_ops; 4027 4028 switch (pvt->fam) { 4029 case 0xf: 4030 pvt->ctl_name = (pvt->ext_model >= K8_REV_F) ? 4031 "K8 revF or later" : "K8 revE or earlier"; 4032 pvt->f1_id = PCI_DEVICE_ID_AMD_K8_NB_ADDRMAP; 4033 pvt->f2_id = PCI_DEVICE_ID_AMD_K8_NB_MEMCTL; 4034 pvt->ops->map_sysaddr_to_csrow = k8_map_sysaddr_to_csrow; 4035 pvt->ops->dbam_to_cs = k8_dbam_to_chip_select; 4036 break; 4037 4038 case 0x10: 4039 pvt->ctl_name = "F10h"; 4040 pvt->f1_id = PCI_DEVICE_ID_AMD_10H_NB_MAP; 4041 pvt->f2_id = PCI_DEVICE_ID_AMD_10H_NB_DRAM; 4042 pvt->ops->dbam_to_cs = f10_dbam_to_chip_select; 4043 break; 4044 4045 case 0x15: 4046 switch (pvt->model) { 4047 case 0x30: 4048 pvt->ctl_name = "F15h_M30h"; 4049 pvt->f1_id = PCI_DEVICE_ID_AMD_15H_M30H_NB_F1; 4050 pvt->f2_id = PCI_DEVICE_ID_AMD_15H_M30H_NB_F2; 4051 break; 4052 case 0x60: 4053 pvt->ctl_name = "F15h_M60h"; 4054 pvt->f1_id = PCI_DEVICE_ID_AMD_15H_M60H_NB_F1; 4055 pvt->f2_id = PCI_DEVICE_ID_AMD_15H_M60H_NB_F2; 4056 pvt->ops->dbam_to_cs = f15_m60h_dbam_to_chip_select; 4057 break; 4058 case 0x13: 4059 /* Richland is only client */ 4060 return -ENODEV; 4061 default: 4062 pvt->ctl_name = "F15h"; 4063 pvt->f1_id = PCI_DEVICE_ID_AMD_15H_NB_F1; 4064 pvt->f2_id = PCI_DEVICE_ID_AMD_15H_NB_F2; 4065 pvt->ops->dbam_to_cs = f15_dbam_to_chip_select; 4066 break; 4067 } 4068 break; 4069 4070 case 0x16: 4071 switch (pvt->model) { 4072 case 0x30: 4073 pvt->ctl_name = "F16h_M30h"; 4074 pvt->f1_id = PCI_DEVICE_ID_AMD_16H_M30H_NB_F1; 4075 pvt->f2_id = PCI_DEVICE_ID_AMD_16H_M30H_NB_F2; 4076 break; 4077 default: 4078 pvt->ctl_name = "F16h"; 4079 pvt->f1_id = PCI_DEVICE_ID_AMD_16H_NB_F1; 4080 pvt->f2_id = PCI_DEVICE_ID_AMD_16H_NB_F2; 4081 break; 4082 } 4083 break; 4084 4085 case 0x17: 4086 switch (pvt->model) { 4087 case 0x10 ... 0x2f: 4088 pvt->ctl_name = "F17h_M10h"; 4089 break; 4090 case 0x30 ... 0x3f: 4091 pvt->ctl_name = "F17h_M30h"; 4092 pvt->max_mcs = 8; 4093 break; 4094 case 0x60 ... 0x6f: 4095 pvt->ctl_name = "F17h_M60h"; 4096 break; 4097 case 0x70 ... 0x7f: 4098 pvt->ctl_name = "F17h_M70h"; 4099 break; 4100 default: 4101 pvt->ctl_name = "F17h"; 4102 break; 4103 } 4104 break; 4105 4106 case 0x18: 4107 pvt->ctl_name = "F18h"; 4108 break; 4109 4110 case 0x19: 4111 switch (pvt->model) { 4112 case 0x00 ... 0x0f: 4113 pvt->ctl_name = "F19h"; 4114 pvt->max_mcs = 8; 4115 break; 4116 case 0x10 ... 0x1f: 4117 pvt->ctl_name = "F19h_M10h"; 4118 pvt->max_mcs = 12; 4119 pvt->flags.zn_regs_v2 = 1; 4120 break; 4121 case 0x20 ... 0x2f: 4122 pvt->ctl_name = "F19h_M20h"; 4123 break; 4124 case 0x30 ... 0x3f: 4125 if (pvt->F3->device == PCI_DEVICE_ID_AMD_MI200_DF_F3) { 4126 pvt->ctl_name = "MI200"; 4127 pvt->max_mcs = 4; 4128 pvt->ops = &gpu_ops; 4129 } else { 4130 pvt->ctl_name = "F19h_M30h"; 4131 pvt->max_mcs = 8; 4132 } 4133 break; 4134 case 0x50 ... 0x5f: 4135 pvt->ctl_name = "F19h_M50h"; 4136 break; 4137 case 0x60 ... 0x6f: 4138 pvt->ctl_name = "F19h_M60h"; 4139 pvt->flags.zn_regs_v2 = 1; 4140 break; 4141 case 0x70 ... 0x7f: 4142 pvt->ctl_name = "F19h_M70h"; 4143 pvt->flags.zn_regs_v2 = 1; 4144 break; 4145 case 0xa0 ... 0xaf: 4146 pvt->ctl_name = "F19h_MA0h"; 4147 pvt->max_mcs = 12; 4148 pvt->flags.zn_regs_v2 = 1; 4149 break; 4150 } 4151 break; 4152 4153 case 0x1A: 4154 switch (pvt->model) { 4155 case 0x00 ... 0x1f: 4156 pvt->ctl_name = "F1Ah"; 4157 pvt->max_mcs = 12; 4158 pvt->flags.zn_regs_v2 = 1; 4159 break; 4160 case 0x40 ... 0x4f: 4161 pvt->ctl_name = "F1Ah_M40h"; 4162 pvt->flags.zn_regs_v2 = 1; 4163 break; 4164 } 4165 break; 4166 4167 default: 4168 amd64_err("Unsupported family!\n"); 4169 return -ENODEV; 4170 } 4171 4172 return 0; 4173 } 4174 4175 static const struct attribute_group *amd64_edac_attr_groups[] = { 4176 #ifdef CONFIG_EDAC_DEBUG 4177 &dbg_group, 4178 &inj_group, 4179 #endif 4180 NULL 4181 }; 4182 4183 static int init_one_instance(struct amd64_pvt *pvt) 4184 { 4185 struct mem_ctl_info *mci = NULL; 4186 struct edac_mc_layer layers[2]; 4187 int ret = -ENOMEM; 4188 4189 /* 4190 * For Heterogeneous family EDAC CHIP_SELECT and CHANNEL layers should 4191 * be swapped to fit into the layers. 4192 */ 4193 layers[0].type = EDAC_MC_LAYER_CHIP_SELECT; 4194 layers[0].size = (pvt->F3->device == PCI_DEVICE_ID_AMD_MI200_DF_F3) ? 4195 pvt->max_mcs : pvt->csels[0].b_cnt; 4196 layers[0].is_virt_csrow = true; 4197 layers[1].type = EDAC_MC_LAYER_CHANNEL; 4198 layers[1].size = (pvt->F3->device == PCI_DEVICE_ID_AMD_MI200_DF_F3) ? 4199 pvt->csels[0].b_cnt : pvt->max_mcs; 4200 layers[1].is_virt_csrow = false; 4201 4202 mci = edac_mc_alloc(pvt->mc_node_id, ARRAY_SIZE(layers), layers, 0); 4203 if (!mci) 4204 return ret; 4205 4206 mci->pvt_info = pvt; 4207 mci->pdev = &pvt->F3->dev; 4208 4209 pvt->ops->setup_mci_misc_attrs(mci); 4210 4211 ret = -ENODEV; 4212 if (edac_mc_add_mc_with_groups(mci, amd64_edac_attr_groups)) { 4213 edac_dbg(1, "failed edac_mc_add_mc()\n"); 4214 edac_mc_free(mci); 4215 return ret; 4216 } 4217 4218 return 0; 4219 } 4220 4221 static bool instance_has_memory(struct amd64_pvt *pvt) 4222 { 4223 bool cs_enabled = false; 4224 int cs = 0, dct = 0; 4225 4226 for (dct = 0; dct < pvt->max_mcs; dct++) { 4227 for_each_chip_select(cs, dct, pvt) 4228 cs_enabled |= csrow_enabled(cs, dct, pvt); 4229 } 4230 4231 return cs_enabled; 4232 } 4233 4234 static int probe_one_instance(unsigned int nid) 4235 { 4236 struct pci_dev *F3 = node_to_amd_nb(nid)->misc; 4237 struct amd64_pvt *pvt = NULL; 4238 struct ecc_settings *s; 4239 int ret; 4240 4241 ret = -ENOMEM; 4242 s = kzalloc(sizeof(struct ecc_settings), GFP_KERNEL); 4243 if (!s) 4244 goto err_out; 4245 4246 ecc_stngs[nid] = s; 4247 4248 pvt = kzalloc(sizeof(struct amd64_pvt), GFP_KERNEL); 4249 if (!pvt) 4250 goto err_settings; 4251 4252 pvt->mc_node_id = nid; 4253 pvt->F3 = F3; 4254 4255 ret = per_family_init(pvt); 4256 if (ret < 0) 4257 goto err_enable; 4258 4259 ret = pvt->ops->hw_info_get(pvt); 4260 if (ret < 0) 4261 goto err_enable; 4262 4263 ret = 0; 4264 if (!instance_has_memory(pvt)) { 4265 amd64_info("Node %d: No DIMMs detected.\n", nid); 4266 goto err_enable; 4267 } 4268 4269 if (!pvt->ops->ecc_enabled(pvt)) { 4270 ret = -ENODEV; 4271 4272 if (!ecc_enable_override) 4273 goto err_enable; 4274 4275 if (boot_cpu_data.x86 >= 0x17) { 4276 amd64_warn("Forcing ECC on is not recommended on newer systems. Please enable ECC in BIOS."); 4277 goto err_enable; 4278 } else 4279 amd64_warn("Forcing ECC on!\n"); 4280 4281 if (!enable_ecc_error_reporting(s, nid, F3)) 4282 goto err_enable; 4283 } 4284 4285 ret = init_one_instance(pvt); 4286 if (ret < 0) { 4287 amd64_err("Error probing instance: %d\n", nid); 4288 4289 if (boot_cpu_data.x86 < 0x17) 4290 restore_ecc_error_reporting(s, nid, F3); 4291 4292 goto err_enable; 4293 } 4294 4295 amd64_info("%s detected (node %d).\n", pvt->ctl_name, pvt->mc_node_id); 4296 4297 /* Display and decode various registers for debug purposes. */ 4298 pvt->ops->dump_misc_regs(pvt); 4299 4300 return ret; 4301 4302 err_enable: 4303 hw_info_put(pvt); 4304 kfree(pvt); 4305 4306 err_settings: 4307 kfree(s); 4308 ecc_stngs[nid] = NULL; 4309 4310 err_out: 4311 return ret; 4312 } 4313 4314 static void remove_one_instance(unsigned int nid) 4315 { 4316 struct pci_dev *F3 = node_to_amd_nb(nid)->misc; 4317 struct ecc_settings *s = ecc_stngs[nid]; 4318 struct mem_ctl_info *mci; 4319 struct amd64_pvt *pvt; 4320 4321 /* Remove from EDAC CORE tracking list */ 4322 mci = edac_mc_del_mc(&F3->dev); 4323 if (!mci) 4324 return; 4325 4326 pvt = mci->pvt_info; 4327 4328 restore_ecc_error_reporting(s, nid, F3); 4329 4330 kfree(ecc_stngs[nid]); 4331 ecc_stngs[nid] = NULL; 4332 4333 /* Free the EDAC CORE resources */ 4334 mci->pvt_info = NULL; 4335 4336 hw_info_put(pvt); 4337 kfree(pvt); 4338 edac_mc_free(mci); 4339 } 4340 4341 static void setup_pci_device(void) 4342 { 4343 if (pci_ctl) 4344 return; 4345 4346 pci_ctl = edac_pci_create_generic_ctl(pci_ctl_dev, EDAC_MOD_STR); 4347 if (!pci_ctl) { 4348 pr_warn("%s(): Unable to create PCI control\n", __func__); 4349 pr_warn("%s(): PCI error report via EDAC not set\n", __func__); 4350 } 4351 } 4352 4353 static const struct x86_cpu_id amd64_cpuids[] = { 4354 X86_MATCH_VENDOR_FAM(AMD, 0x0F, NULL), 4355 X86_MATCH_VENDOR_FAM(AMD, 0x10, NULL), 4356 X86_MATCH_VENDOR_FAM(AMD, 0x15, NULL), 4357 X86_MATCH_VENDOR_FAM(AMD, 0x16, NULL), 4358 X86_MATCH_VENDOR_FAM(AMD, 0x17, NULL), 4359 X86_MATCH_VENDOR_FAM(HYGON, 0x18, NULL), 4360 X86_MATCH_VENDOR_FAM(AMD, 0x19, NULL), 4361 X86_MATCH_VENDOR_FAM(AMD, 0x1A, NULL), 4362 { } 4363 }; 4364 MODULE_DEVICE_TABLE(x86cpu, amd64_cpuids); 4365 4366 static int __init amd64_edac_init(void) 4367 { 4368 const char *owner; 4369 int err = -ENODEV; 4370 int i; 4371 4372 if (ghes_get_devices()) 4373 return -EBUSY; 4374 4375 owner = edac_get_owner(); 4376 if (owner && strncmp(owner, EDAC_MOD_STR, sizeof(EDAC_MOD_STR))) 4377 return -EBUSY; 4378 4379 if (!x86_match_cpu(amd64_cpuids)) 4380 return -ENODEV; 4381 4382 if (!amd_nb_num()) 4383 return -ENODEV; 4384 4385 opstate_init(); 4386 4387 err = -ENOMEM; 4388 ecc_stngs = kcalloc(amd_nb_num(), sizeof(ecc_stngs[0]), GFP_KERNEL); 4389 if (!ecc_stngs) 4390 goto err_free; 4391 4392 msrs = msrs_alloc(); 4393 if (!msrs) 4394 goto err_free; 4395 4396 for (i = 0; i < amd_nb_num(); i++) { 4397 err = probe_one_instance(i); 4398 if (err) { 4399 /* unwind properly */ 4400 while (--i >= 0) 4401 remove_one_instance(i); 4402 4403 goto err_pci; 4404 } 4405 } 4406 4407 if (!edac_has_mcs()) { 4408 err = -ENODEV; 4409 goto err_pci; 4410 } 4411 4412 /* register stuff with EDAC MCE */ 4413 if (boot_cpu_data.x86 >= 0x17) { 4414 amd_register_ecc_decoder(decode_umc_error); 4415 } else { 4416 amd_register_ecc_decoder(decode_bus_error); 4417 setup_pci_device(); 4418 } 4419 4420 #ifdef CONFIG_X86_32 4421 amd64_err("%s on 32-bit is unsupported. USE AT YOUR OWN RISK!\n", EDAC_MOD_STR); 4422 #endif 4423 4424 return 0; 4425 4426 err_pci: 4427 pci_ctl_dev = NULL; 4428 4429 msrs_free(msrs); 4430 msrs = NULL; 4431 4432 err_free: 4433 kfree(ecc_stngs); 4434 ecc_stngs = NULL; 4435 4436 return err; 4437 } 4438 4439 static void __exit amd64_edac_exit(void) 4440 { 4441 int i; 4442 4443 if (pci_ctl) 4444 edac_pci_release_generic_ctl(pci_ctl); 4445 4446 /* unregister from EDAC MCE */ 4447 if (boot_cpu_data.x86 >= 0x17) 4448 amd_unregister_ecc_decoder(decode_umc_error); 4449 else 4450 amd_unregister_ecc_decoder(decode_bus_error); 4451 4452 for (i = 0; i < amd_nb_num(); i++) 4453 remove_one_instance(i); 4454 4455 kfree(ecc_stngs); 4456 ecc_stngs = NULL; 4457 4458 pci_ctl_dev = NULL; 4459 4460 msrs_free(msrs); 4461 msrs = NULL; 4462 } 4463 4464 module_init(amd64_edac_init); 4465 module_exit(amd64_edac_exit); 4466 4467 MODULE_LICENSE("GPL"); 4468 MODULE_AUTHOR("SoftwareBitMaker: Doug Thompson, Dave Peterson, Thayne Harbaugh; AMD"); 4469 MODULE_DESCRIPTION("MC support for AMD64 memory controllers"); 4470 4471 module_param(edac_op_state, int, 0444); 4472 MODULE_PARM_DESC(edac_op_state, "EDAC Error Reporting state: 0=Poll,1=NMI"); 4473