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