diff options
| author | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-08-27 07:56:48 -0400 |
|---|---|---|
| committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-08-30 13:56:50 -0400 |
| commit | d7de2bdb0e15c594aefbc71d899c4684a5ce6559 (patch) | |
| tree | d83813daa216c3bcc3069ff378420883f18bf9a3 | |
| parent | 86002324cf8809c72858741ab20bb7a855654b4c (diff) | |
i7300_edac: Adds detection for enhanced scrub mode on x8
While here, do some cleanup by adding some macros to check
for device features.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
| -rw-r--r-- | drivers/edac/i7300_edac.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/drivers/edac/i7300_edac.c b/drivers/edac/i7300_edac.c index f2f171d0356a..27088af79672 100644 --- a/drivers/edac/i7300_edac.c +++ b/drivers/edac/i7300_edac.c | |||
| @@ -93,6 +93,12 @@ | |||
| 93 | /* OFFSETS for Function 1 */ | 93 | /* OFFSETS for Function 1 */ |
| 94 | #define MC_SETTINGS 0x40 | 94 | #define MC_SETTINGS 0x40 |
| 95 | 95 | ||
| 96 | #define IS_MIRRORED(mc) ((mc) & (1 << 16)) | ||
| 97 | #define IS_ECC_ENABLED(mc) ((mc) & (1 << 5)) | ||
| 98 | #define IS_RETRY_ENABLED(mc) ((mc) & (1 << 31)) | ||
| 99 | #define IS_SCRBALGO_ENHANCED(mc) ((mc) & (1 << 8)) | ||
| 100 | |||
| 101 | |||
| 96 | #define TOLM 0x6C | 102 | #define TOLM 0x6C |
| 97 | #define REDMEMB 0x7C | 103 | #define REDMEMB 0x7C |
| 98 | 104 | ||
| @@ -451,9 +457,13 @@ static int decode_mtr(struct i7300_pvt *pvt, | |||
| 451 | p_csrow->edac_mode = EDAC_S8ECD8ED; | 457 | p_csrow->edac_mode = EDAC_S8ECD8ED; |
| 452 | 458 | ||
| 453 | /* ask what device type on this row */ | 459 | /* ask what device type on this row */ |
| 454 | if (MTR_DRAM_WIDTH(mtr)) | 460 | if (MTR_DRAM_WIDTH(mtr)) { |
| 461 | debugf0("Scrub algorithm for x8 is on %s mode\n", | ||
| 462 | IS_SCRBALGO_ENHANCED(pvt->mc_settings) ? | ||
| 463 | "enhanced" : "normal"); | ||
| 464 | |||
| 455 | p_csrow->dtype = DEV_X8; | 465 | p_csrow->dtype = DEV_X8; |
| 456 | else | 466 | } else |
| 457 | p_csrow->dtype = DEV_X4; | 467 | p_csrow->dtype = DEV_X4; |
| 458 | 468 | ||
| 459 | return mtr; | 469 | return mtr; |
| @@ -643,10 +653,13 @@ static int i7300_get_mc_regs(struct mem_ctl_info *mci) | |||
| 643 | /* Get memory controller settings */ | 653 | /* Get memory controller settings */ |
| 644 | pci_read_config_dword(pvt->pci_dev_16_1_fsb_addr_map, MC_SETTINGS, | 654 | pci_read_config_dword(pvt->pci_dev_16_1_fsb_addr_map, MC_SETTINGS, |
| 645 | &pvt->mc_settings); | 655 | &pvt->mc_settings); |
| 656 | |||
| 646 | debugf0("Memory controller operating on %s mode\n", | 657 | debugf0("Memory controller operating on %s mode\n", |
| 647 | pvt->mc_settings & (1 << 16)? "mirrored" : "non-mirrored"); | 658 | IS_MIRRORED(pvt->mc_settings) ? "mirrored" : "non-mirrored"); |
| 648 | debugf0("Error detection is %s\n", | 659 | debugf0("Error detection is %s\n", |
| 649 | pvt->mc_settings & (1 << 5)? "enabled" : "disabled"); | 660 | IS_ECC_ENABLED(pvt->mc_settings) ? "enabled" : "disabled"); |
| 661 | debugf0("Retry is %s\n", | ||
| 662 | IS_RETRY_ENABLED(pvt->mc_settings) ? "enabled" : "disabled"); | ||
| 650 | 663 | ||
| 651 | /* Get Memory Interleave Range registers */ | 664 | /* Get Memory Interleave Range registers */ |
| 652 | pci_read_config_word(pvt->pci_dev_16_1_fsb_addr_map, MIR0, &pvt->mir[0]); | 665 | pci_read_config_word(pvt->pci_dev_16_1_fsb_addr_map, MIR0, &pvt->mir[0]); |
