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