diff options
| author | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-08-27 14:44:43 -0400 |
|---|---|---|
| committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-08-30 13:57:03 -0400 |
| commit | 37b69cf91c2c6e60856ad1ac4c37ccb2005ebbd3 (patch) | |
| tree | cec2976c1b6e6e0f0e0ce6c4eec3c59dec435210 | |
| parent | 32f9472613b30791d8cb5a953791cf4647166744 (diff) | |
i7300_edac: Properly detect channel on CE errors
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
| -rw-r--r-- | drivers/edac/i7300_edac.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/drivers/edac/i7300_edac.c b/drivers/edac/i7300_edac.c index a06db65e1fef..a85a8e5163b7 100644 --- a/drivers/edac/i7300_edac.c +++ b/drivers/edac/i7300_edac.c | |||
| @@ -101,7 +101,6 @@ | |||
| 101 | #define IS_SINGLE_MODE(mca) ((mca) & (1 << 14)) | 101 | #define IS_SINGLE_MODE(mca) ((mca) & (1 << 14)) |
| 102 | 102 | ||
| 103 | #define TOLM 0x6C | 103 | #define TOLM 0x6C |
| 104 | #define REDMEMB 0x7C | ||
| 105 | 104 | ||
| 106 | #define MIR0 0x80 | 105 | #define MIR0 0x80 |
| 107 | #define MIR1 0x84 | 106 | #define MIR1 0x84 |
| @@ -279,6 +278,9 @@ static const char *ferr_global_lo_name[] = { | |||
| 279 | 278 | ||
| 280 | #define REDMEMA 0xdc | 279 | #define REDMEMA 0xdc |
| 281 | 280 | ||
| 281 | #define REDMEMB 0x7c | ||
| 282 | #define IS_SECOND_CH(v) ((v) * (1 << 17)) | ||
| 283 | |||
| 282 | #define RECMEMA 0xe0 | 284 | #define RECMEMA 0xe0 |
| 283 | #define RECMEMA_BANK(v) (((v) >> 12) & 7) | 285 | #define RECMEMA_BANK(v) (((v) >> 12) & 7) |
| 284 | #define RECMEMA_RANK(v) (((v) >> 8) & 15) | 286 | #define RECMEMA_RANK(v) (((v) >> 8) & 15) |
| @@ -414,7 +416,7 @@ static void i7300_process_fbd_error(struct mem_ctl_info *mci) | |||
| 414 | struct i7300_pvt *pvt; | 416 | struct i7300_pvt *pvt; |
| 415 | u32 errnum, value; | 417 | u32 errnum, value; |
| 416 | u16 val16; | 418 | u16 val16; |
| 417 | unsigned branch, bank, rank, cas, ras; | 419 | unsigned branch, channel, bank, rank, cas, ras; |
| 418 | u32 syndrome; | 420 | u32 syndrome; |
| 419 | 421 | ||
| 420 | unsigned long errors; | 422 | unsigned long errors; |
| @@ -488,12 +490,19 @@ static void i7300_process_fbd_error(struct mem_ctl_info *mci) | |||
| 488 | cas = RECMEMB_CAS(value); | 490 | cas = RECMEMB_CAS(value); |
| 489 | ras = RECMEMB_RAS(value); | 491 | ras = RECMEMB_RAS(value); |
| 490 | 492 | ||
| 493 | pci_read_config_dword(pvt->pci_dev_16_1_fsb_addr_map, | ||
| 494 | REDMEMB, &value); | ||
| 495 | |||
| 496 | channel = (branch << 1); | ||
| 497 | if (IS_SECOND_CH(value)) | ||
| 498 | channel++; | ||
| 499 | |||
| 491 | /* Form out message */ | 500 | /* Form out message */ |
| 492 | snprintf(pvt->tmp_prt_buffer, PAGE_SIZE, | 501 | snprintf(pvt->tmp_prt_buffer, PAGE_SIZE, |
| 493 | "Corrected error (Branch=%d (channel %d or %d), " | 502 | "Corrected error (Branch=%d, Channel %d), " |
| 494 | " DRAM-Bank=%d %s " | 503 | " DRAM-Bank=%d %s " |
| 495 | "RAS=%d CAS=%d, CE Err=0x%lx, Syndrome=0x%08x(%s))", | 504 | "RAS=%d CAS=%d, CE Err=0x%lx, Syndrome=0x%08x(%s))", |
| 496 | branch, branch << 1, (branch << 1) + 1, | 505 | branch, channel, |
| 497 | bank, | 506 | bank, |
| 498 | is_wr ? "RDWR" : "RD", | 507 | is_wr ? "RDWR" : "RD", |
| 499 | ras, cas, | 508 | ras, cas, |
| @@ -505,7 +514,7 @@ static void i7300_process_fbd_error(struct mem_ctl_info *mci) | |||
| 505 | * Currently, we don't know how to identify the right | 514 | * Currently, we don't know how to identify the right |
| 506 | * channel. | 515 | * channel. |
| 507 | */ | 516 | */ |
| 508 | edac_mc_handle_fbd_ce(mci, rank, branch << 1, | 517 | edac_mc_handle_fbd_ce(mci, rank, channel, |
| 509 | pvt->tmp_prt_buffer); | 518 | pvt->tmp_prt_buffer); |
| 510 | } | 519 | } |
| 511 | return; | 520 | return; |
