aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2010-08-27 09:30:18 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-08-30 13:56:55 -0400
commite43276050927c7dfc45b1e2f090b94f72f87c052 (patch)
treedf6eafa0aefb4db65ac6adfd7bcfe487a91908ac
parent57021918aa9c310524d7e9754506e4e8272b4c0e (diff)
i7300_edac: Add a code to cleanup error registers
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/edac/i7300_edac.c29
1 files changed, 27 insertions, 2 deletions
diff --git a/drivers/edac/i7300_edac.c b/drivers/edac/i7300_edac.c
index 728f9b0ab62c..3b6da20de4e5 100644
--- a/drivers/edac/i7300_edac.c
+++ b/drivers/edac/i7300_edac.c
@@ -470,9 +470,34 @@ static void i7300_process_error_info(struct mem_ctl_info *mci,
470 */ 470 */
471static void i7300_clear_error(struct mem_ctl_info *mci) 471static void i7300_clear_error(struct mem_ctl_info *mci)
472{ 472{
473 struct i7300_error_info info; 473 struct i7300_pvt *pvt = mci->pvt_info;
474 u32 value;
475 /*
476 * All error values are RWC - we need to read and write 1 to the
477 * bit that we want to cleanup
478 */
474 479
475 i7300_get_error_info(mci, &info); 480 /* Clear global error registers */
481 pci_read_config_dword(pvt->pci_dev_16_2_fsb_err_regs,
482 FERR_GLOBAL_HI, &value);
483 pci_write_config_dword(pvt->pci_dev_16_2_fsb_err_regs,
484 FERR_GLOBAL_HI, value);
485
486 pci_read_config_dword(pvt->pci_dev_16_2_fsb_err_regs,
487 FERR_GLOBAL_LO, &value);
488 pci_write_config_dword(pvt->pci_dev_16_2_fsb_err_regs,
489 FERR_GLOBAL_LO, value);
490
491 /* Clear FBD error registers */
492 pci_read_config_dword(pvt->pci_dev_16_1_fsb_addr_map,
493 FERR_FAT_FBD, &value);
494 pci_write_config_dword(pvt->pci_dev_16_1_fsb_addr_map,
495 FERR_FAT_FBD, value);
496
497 pci_read_config_dword(pvt->pci_dev_16_1_fsb_addr_map,
498 FERR_NF_FBD, &value);
499 pci_write_config_dword(pvt->pci_dev_16_1_fsb_addr_map,
500 FERR_NF_FBD, value);
476} 501}
477 502
478/* 503/*