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