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