diff options
Diffstat (limited to 'drivers/edac/amd64_edac.h')
-rw-r--r-- | drivers/edac/amd64_edac.h | 62 |
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 | ||
506 | extern struct scrubrate scrubrates[23]; | 499 | extern struct scrubrate scrubrates[23]; |
507 | extern u32 revf_quad_ddr2_shift[16]; | ||
508 | extern const char *tt_msgs[4]; | 500 | extern const char *tt_msgs[4]; |
509 | extern const char *ll_msgs[4]; | 501 | extern const char *ll_msgs[4]; |
510 | extern const char *rrrr_msgs[16]; | 502 | extern 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 | */ |
536 | struct low_ops { | 528 | struct 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 | ||
550 | struct amd64_family_type { | 540 | struct 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 | ||
559 | static 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. |