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