aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/edac/amd64_edac.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/edac/amd64_edac.h')
-rw-r--r--drivers/edac/amd64_edac.h62
1 files changed, 34 insertions, 28 deletions
diff --git a/drivers/edac/amd64_edac.h b/drivers/edac/amd64_edac.h
index c6f359a85207..41bc561e5981 100644
--- a/drivers/edac/amd64_edac.h
+++ b/drivers/edac/amd64_edac.h
@@ -129,24 +129,22 @@
129 * sections 3.5.4 and 3.5.5 for more information. 129 * sections 3.5.4 and 3.5.5 for more information.
130 */ 130 */
131 131
132#define EDAC_AMD64_VERSION " Ver: 3.2.0 " __DATE__ 132#define EDAC_AMD64_VERSION " Ver: 3.3.0 " __DATE__
133#define EDAC_MOD_STR "amd64_edac" 133#define EDAC_MOD_STR "amd64_edac"
134 134
135#define EDAC_MAX_NUMNODES 8 135#define EDAC_MAX_NUMNODES 8
136 136
137/* Extended Model from CPUID, for CPU Revision numbers */ 137/* Extended Model from CPUID, for CPU Revision numbers */
138#define OPTERON_CPU_LE_REV_C 0 138#define K8_REV_D 1
139#define OPTERON_CPU_REV_D 1 139#define K8_REV_E 2
140#define OPTERON_CPU_REV_E 2 140#define K8_REV_F 4
141
142/* NPT processors have the following Extended Models */
143#define OPTERON_CPU_REV_F 4
144#define OPTERON_CPU_REV_FA 5
145 141
146/* Hardware limit on ChipSelect rows per MC and processors per system */ 142/* Hardware limit on ChipSelect rows per MC and processors per system */
147#define MAX_CS_COUNT 8 143#define MAX_CS_COUNT 8
148#define DRAM_REG_COUNT 8 144#define DRAM_REG_COUNT 8
149 145
146#define ON true
147#define OFF false
150 148
151/* 149/*
152 * PCI-defined configuration space registers 150 * PCI-defined configuration space registers
@@ -241,7 +239,7 @@
241#define F10_DCHR_1 0x194 239#define F10_DCHR_1 0x194
242 240
243#define F10_DCHR_FOUR_RANK_DIMM BIT(18) 241#define F10_DCHR_FOUR_RANK_DIMM BIT(18)
244#define F10_DCHR_Ddr3Mode BIT(8) 242#define DDR3_MODE BIT(8)
245#define F10_DCHR_MblMode BIT(6) 243#define F10_DCHR_MblMode BIT(6)
246 244
247 245
@@ -382,14 +380,9 @@ enum {
382#define K8_NBCAP_CORES (BIT(12)|BIT(13)) 380#define K8_NBCAP_CORES (BIT(12)|BIT(13))
383#define K8_NBCAP_CHIPKILL BIT(4) 381#define K8_NBCAP_CHIPKILL BIT(4)
384#define K8_NBCAP_SECDED BIT(3) 382#define K8_NBCAP_SECDED BIT(3)
385#define K8_NBCAP_8_NODE BIT(2)
386#define K8_NBCAP_DUAL_NODE BIT(1)
387#define K8_NBCAP_DCT_DUAL BIT(0) 383#define K8_NBCAP_DCT_DUAL BIT(0)
388 384
389/* 385/* MSRs */
390 * MSR Regs
391 */
392#define K8_MSR_MCGCTL 0x017b
393#define K8_MSR_MCGCTL_NBE BIT(4) 386#define K8_MSR_MCGCTL_NBE BIT(4)
394 387
395#define K8_MSR_MC4CTL 0x0410 388#define K8_MSR_MC4CTL 0x0410
@@ -487,7 +480,6 @@ struct amd64_pvt {
487 /* Save old hw registers' values before we modified them */ 480 /* Save old hw registers' values before we modified them */
488 u32 nbctl_mcgctl_saved; /* When true, following 2 are valid */ 481 u32 nbctl_mcgctl_saved; /* When true, following 2 are valid */
489 u32 old_nbctl; 482 u32 old_nbctl;
490 unsigned long old_mcgctl; /* per core on this node */
491 483
492 /* MC Type Index value: socket F vs Family 10h */ 484 /* MC Type Index value: socket F vs Family 10h */
493 u32 mc_type_index; 485 u32 mc_type_index;
@@ -495,6 +487,7 @@ struct amd64_pvt {
495 /* misc settings */ 487 /* misc settings */
496 struct flags { 488 struct flags {
497 unsigned long cf8_extcfg:1; 489 unsigned long cf8_extcfg:1;
490 unsigned long ecc_report:1;
498 } flags; 491 } flags;
499}; 492};
500 493
@@ -504,7 +497,6 @@ struct scrubrate {
504}; 497};
505 498
506extern struct scrubrate scrubrates[23]; 499extern struct scrubrate scrubrates[23];
507extern u32 revf_quad_ddr2_shift[16];
508extern const char *tt_msgs[4]; 500extern const char *tt_msgs[4];
509extern const char *ll_msgs[4]; 501extern const char *ll_msgs[4];
510extern const char *rrrr_msgs[16]; 502extern const char *rrrr_msgs[16];
@@ -534,17 +526,15 @@ extern struct mcidev_sysfs_attribute amd64_dbg_attrs[NUM_DBG_ATTRS],
534 * functions and per device encoding/decoding logic. 526 * functions and per device encoding/decoding logic.
535 */ 527 */
536struct low_ops { 528struct low_ops {
537 int (*probe_valid_hardware)(struct amd64_pvt *pvt); 529 int (*early_channel_count) (struct amd64_pvt *pvt);
538 int (*early_channel_count)(struct amd64_pvt *pvt); 530
539 531 u64 (*get_error_address) (struct mem_ctl_info *mci,
540 u64 (*get_error_address)(struct mem_ctl_info *mci, 532 struct err_regs *info);
541 struct err_regs *info); 533 void (*read_dram_base_limit) (struct amd64_pvt *pvt, int dram);
542 void (*read_dram_base_limit)(struct amd64_pvt *pvt, int dram); 534 void (*read_dram_ctl_register) (struct amd64_pvt *pvt);
543 void (*read_dram_ctl_register)(struct amd64_pvt *pvt); 535 void (*map_sysaddr_to_csrow) (struct mem_ctl_info *mci,
544 void (*map_sysaddr_to_csrow)(struct mem_ctl_info *mci, 536 struct err_regs *info, u64 SystemAddr);
545 struct err_regs *info, 537 int (*dbam_to_cs) (struct amd64_pvt *pvt, int cs_mode);
546 u64 SystemAddr);
547 int (*dbam_map_to_pages)(struct amd64_pvt *pvt, int dram_map);
548}; 538};
549 539
550struct amd64_family_type { 540struct amd64_family_type {
@@ -566,6 +556,22 @@ static inline struct low_ops *family_ops(int index)
566 return &amd64_family_types[index].ops; 556 return &amd64_family_types[index].ops;
567} 557}
568 558
559static inline int amd64_read_pci_cfg_dword(struct pci_dev *pdev, int offset,
560 u32 *val, const char *func)
561{
562 int err = 0;
563
564 err = pci_read_config_dword(pdev, offset, val);
565 if (err)
566 amd64_printk(KERN_WARNING, "%s: error reading F%dx%x.\n",
567 func, PCI_FUNC(pdev->devfn), offset);
568
569 return err;
570}
571
572#define amd64_read_pci_cfg(pdev, offset, val) \
573 amd64_read_pci_cfg_dword(pdev, offset, val, __func__)
574
569/* 575/*
570 * For future CPU versions, verify the following as new 'slow' rates appear and 576 * For future CPU versions, verify the following as new 'slow' rates appear and
571 * modify the necessary skip values for the supported CPU. 577 * modify the necessary skip values for the supported CPU.