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