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