diff options
Diffstat (limited to 'drivers/edac/i82860_edac.c')
-rw-r--r-- | drivers/edac/i82860_edac.c | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/drivers/edac/i82860_edac.c b/drivers/edac/i82860_edac.c index fd342163cf97..baa021b96d18 100644 --- a/drivers/edac/i82860_edac.c +++ b/drivers/edac/i82860_edac.c | |||
@@ -17,6 +17,8 @@ | |||
17 | #include <linux/slab.h> | 17 | #include <linux/slab.h> |
18 | #include "edac_mc.h" | 18 | #include "edac_mc.h" |
19 | 19 | ||
20 | #define I82860_REVISION " Ver: 2.0.0 " __DATE__ | ||
21 | |||
20 | #define i82860_printk(level, fmt, arg...) \ | 22 | #define i82860_printk(level, fmt, arg...) \ |
21 | edac_printk(level, "i82860", fmt, ##arg) | 23 | edac_printk(level, "i82860", fmt, ##arg) |
22 | 24 | ||
@@ -63,17 +65,21 @@ static struct pci_dev *mci_pdev = NULL; /* init dev: in case that AGP code | |||
63 | static void i82860_get_error_info(struct mem_ctl_info *mci, | 65 | static void i82860_get_error_info(struct mem_ctl_info *mci, |
64 | struct i82860_error_info *info) | 66 | struct i82860_error_info *info) |
65 | { | 67 | { |
68 | struct pci_dev *pdev; | ||
69 | |||
70 | pdev = to_pci_dev(mci->dev); | ||
71 | |||
66 | /* | 72 | /* |
67 | * This is a mess because there is no atomic way to read all the | 73 | * This is a mess because there is no atomic way to read all the |
68 | * registers at once and the registers can transition from CE being | 74 | * registers at once and the registers can transition from CE being |
69 | * overwritten by UE. | 75 | * overwritten by UE. |
70 | */ | 76 | */ |
71 | pci_read_config_word(mci->pdev, I82860_ERRSTS, &info->errsts); | 77 | pci_read_config_word(pdev, I82860_ERRSTS, &info->errsts); |
72 | pci_read_config_dword(mci->pdev, I82860_EAP, &info->eap); | 78 | pci_read_config_dword(pdev, I82860_EAP, &info->eap); |
73 | pci_read_config_word(mci->pdev, I82860_DERRCTL_STS, &info->derrsyn); | 79 | pci_read_config_word(pdev, I82860_DERRCTL_STS, &info->derrsyn); |
74 | pci_read_config_word(mci->pdev, I82860_ERRSTS, &info->errsts2); | 80 | pci_read_config_word(pdev, I82860_ERRSTS, &info->errsts2); |
75 | 81 | ||
76 | pci_write_bits16(mci->pdev, I82860_ERRSTS, 0x0003, 0x0003); | 82 | pci_write_bits16(pdev, I82860_ERRSTS, 0x0003, 0x0003); |
77 | 83 | ||
78 | /* | 84 | /* |
79 | * If the error is the same for both reads then the first set of reads | 85 | * If the error is the same for both reads then the first set of reads |
@@ -84,8 +90,8 @@ static void i82860_get_error_info(struct mem_ctl_info *mci, | |||
84 | return; | 90 | return; |
85 | 91 | ||
86 | if ((info->errsts ^ info->errsts2) & 0x0003) { | 92 | if ((info->errsts ^ info->errsts2) & 0x0003) { |
87 | pci_read_config_dword(mci->pdev, I82860_EAP, &info->eap); | 93 | pci_read_config_dword(pdev, I82860_EAP, &info->eap); |
88 | pci_read_config_word(mci->pdev, I82860_DERRCTL_STS, | 94 | pci_read_config_word(pdev, I82860_DERRCTL_STS, |
89 | &info->derrsyn); | 95 | &info->derrsyn); |
90 | } | 96 | } |
91 | } | 97 | } |
@@ -151,7 +157,7 @@ static int i82860_probe1(struct pci_dev *pdev, int dev_idx) | |||
151 | return -ENOMEM; | 157 | return -ENOMEM; |
152 | 158 | ||
153 | debugf3("%s(): init mci\n", __func__); | 159 | debugf3("%s(): init mci\n", __func__); |
154 | mci->pdev = pdev; | 160 | mci->dev = &pdev->dev; |
155 | mci->mtype_cap = MEM_FLAG_DDR; | 161 | mci->mtype_cap = MEM_FLAG_DDR; |
156 | 162 | ||
157 | mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_SECDED; | 163 | mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_SECDED; |
@@ -160,12 +166,12 @@ static int i82860_probe1(struct pci_dev *pdev, int dev_idx) | |||
160 | /* adjust FLAGS */ | 166 | /* adjust FLAGS */ |
161 | 167 | ||
162 | mci->mod_name = EDAC_MOD_STR; | 168 | mci->mod_name = EDAC_MOD_STR; |
163 | mci->mod_ver = "$Revision: 1.1.2.6 $"; | 169 | mci->mod_ver = I82860_REVISION; |
164 | mci->ctl_name = i82860_devs[dev_idx].ctl_name; | 170 | mci->ctl_name = i82860_devs[dev_idx].ctl_name; |
165 | mci->edac_check = i82860_check; | 171 | mci->edac_check = i82860_check; |
166 | mci->ctl_page_to_phys = NULL; | 172 | mci->ctl_page_to_phys = NULL; |
167 | 173 | ||
168 | pci_read_config_word(mci->pdev, I82860_MCHCFG, &mchcfg_ddim); | 174 | pci_read_config_word(pdev, I82860_MCHCFG, &mchcfg_ddim); |
169 | mchcfg_ddim = mchcfg_ddim & 0x180; | 175 | mchcfg_ddim = mchcfg_ddim & 0x180; |
170 | 176 | ||
171 | /* | 177 | /* |
@@ -179,7 +185,7 @@ static int i82860_probe1(struct pci_dev *pdev, int dev_idx) | |||
179 | u32 cumul_size; | 185 | u32 cumul_size; |
180 | struct csrow_info *csrow = &mci->csrows[index]; | 186 | struct csrow_info *csrow = &mci->csrows[index]; |
181 | 187 | ||
182 | pci_read_config_word(mci->pdev, I82860_GBA + index * 2, | 188 | pci_read_config_word(pdev, I82860_GBA + index * 2, |
183 | &value); | 189 | &value); |
184 | 190 | ||
185 | cumul_size = (value & I82860_GBA_MASK) << | 191 | cumul_size = (value & I82860_GBA_MASK) << |
@@ -240,7 +246,7 @@ static void __devexit i82860_remove_one(struct pci_dev *pdev) | |||
240 | 246 | ||
241 | debugf0("%s()\n", __func__); | 247 | debugf0("%s()\n", __func__); |
242 | 248 | ||
243 | if ((mci = edac_mc_del_mc(pdev)) == NULL) | 249 | if ((mci = edac_mc_del_mc(&pdev->dev)) == NULL) |
244 | return; | 250 | return; |
245 | 251 | ||
246 | edac_mc_free(mci); | 252 | edac_mc_free(mci); |