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