diff options
Diffstat (limited to 'drivers/edac/i82875p_edac.c')
-rw-r--r-- | drivers/edac/i82875p_edac.c | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/drivers/edac/i82875p_edac.c b/drivers/edac/i82875p_edac.c index 0aec92698f17..3f509a7ea02a 100644 --- a/drivers/edac/i82875p_edac.c +++ b/drivers/edac/i82875p_edac.c | |||
@@ -21,6 +21,8 @@ | |||
21 | #include <linux/slab.h> | 21 | #include <linux/slab.h> |
22 | #include "edac_mc.h" | 22 | #include "edac_mc.h" |
23 | 23 | ||
24 | #define I82875P_REVISION " Ver: 2.0.0 " __DATE__ | ||
25 | |||
24 | #define i82875p_printk(level, fmt, arg...) \ | 26 | #define i82875p_printk(level, fmt, arg...) \ |
25 | edac_printk(level, "i82875p", fmt, ##arg) | 27 | edac_printk(level, "i82875p", fmt, ##arg) |
26 | 28 | ||
@@ -185,18 +187,22 @@ static int i82875p_registered = 1; | |||
185 | static void i82875p_get_error_info(struct mem_ctl_info *mci, | 187 | static void i82875p_get_error_info(struct mem_ctl_info *mci, |
186 | struct i82875p_error_info *info) | 188 | struct i82875p_error_info *info) |
187 | { | 189 | { |
190 | struct pci_dev *pdev; | ||
191 | |||
192 | pdev = to_pci_dev(mci->dev); | ||
193 | |||
188 | /* | 194 | /* |
189 | * This is a mess because there is no atomic way to read all the | 195 | * This is a mess because there is no atomic way to read all the |
190 | * registers at once and the registers can transition from CE being | 196 | * registers at once and the registers can transition from CE being |
191 | * overwritten by UE. | 197 | * overwritten by UE. |
192 | */ | 198 | */ |
193 | pci_read_config_word(mci->pdev, I82875P_ERRSTS, &info->errsts); | 199 | pci_read_config_word(pdev, I82875P_ERRSTS, &info->errsts); |
194 | pci_read_config_dword(mci->pdev, I82875P_EAP, &info->eap); | 200 | pci_read_config_dword(pdev, I82875P_EAP, &info->eap); |
195 | pci_read_config_byte(mci->pdev, I82875P_DES, &info->des); | 201 | pci_read_config_byte(pdev, I82875P_DES, &info->des); |
196 | pci_read_config_byte(mci->pdev, I82875P_DERRSYN, &info->derrsyn); | 202 | pci_read_config_byte(pdev, I82875P_DERRSYN, &info->derrsyn); |
197 | pci_read_config_word(mci->pdev, I82875P_ERRSTS, &info->errsts2); | 203 | pci_read_config_word(pdev, I82875P_ERRSTS, &info->errsts2); |
198 | 204 | ||
199 | pci_write_bits16(mci->pdev, I82875P_ERRSTS, 0x0081, 0x0081); | 205 | pci_write_bits16(pdev, I82875P_ERRSTS, 0x0081, 0x0081); |
200 | 206 | ||
201 | /* | 207 | /* |
202 | * If the error is the same then we can for both reads then | 208 | * If the error is the same then we can for both reads then |
@@ -208,9 +214,9 @@ static void i82875p_get_error_info(struct mem_ctl_info *mci, | |||
208 | return; | 214 | return; |
209 | 215 | ||
210 | if ((info->errsts ^ info->errsts2) & 0x0081) { | 216 | if ((info->errsts ^ info->errsts2) & 0x0081) { |
211 | pci_read_config_dword(mci->pdev, I82875P_EAP, &info->eap); | 217 | pci_read_config_dword(pdev, I82875P_EAP, &info->eap); |
212 | pci_read_config_byte(mci->pdev, I82875P_DES, &info->des); | 218 | pci_read_config_byte(pdev, I82875P_DES, &info->des); |
213 | pci_read_config_byte(mci->pdev, I82875P_DERRSYN, | 219 | pci_read_config_byte(pdev, I82875P_DERRSYN, |
214 | &info->derrsyn); | 220 | &info->derrsyn); |
215 | } | 221 | } |
216 | } | 222 | } |
@@ -337,14 +343,14 @@ static int i82875p_probe1(struct pci_dev *pdev, int dev_idx) | |||
337 | } | 343 | } |
338 | 344 | ||
339 | debugf3("%s(): init mci\n", __func__); | 345 | debugf3("%s(): init mci\n", __func__); |
340 | mci->pdev = pdev; | 346 | mci->dev = &pdev->dev; |
341 | mci->mtype_cap = MEM_FLAG_DDR; | 347 | mci->mtype_cap = MEM_FLAG_DDR; |
342 | mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_SECDED; | 348 | mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_SECDED; |
343 | mci->edac_cap = EDAC_FLAG_UNKNOWN; | 349 | mci->edac_cap = EDAC_FLAG_UNKNOWN; |
344 | /* adjust FLAGS */ | 350 | /* adjust FLAGS */ |
345 | 351 | ||
346 | mci->mod_name = EDAC_MOD_STR; | 352 | mci->mod_name = EDAC_MOD_STR; |
347 | mci->mod_ver = "$Revision: 1.5.2.11 $"; | 353 | mci->mod_ver = I82875P_REVISION; |
348 | mci->ctl_name = i82875p_devs[dev_idx].ctl_name; | 354 | mci->ctl_name = i82875p_devs[dev_idx].ctl_name; |
349 | mci->edac_check = i82875p_check; | 355 | mci->edac_check = i82875p_check; |
350 | mci->ctl_page_to_phys = NULL; | 356 | mci->ctl_page_to_phys = NULL; |
@@ -437,7 +443,7 @@ static void __devexit i82875p_remove_one(struct pci_dev *pdev) | |||
437 | 443 | ||
438 | debugf0("%s()\n", __func__); | 444 | debugf0("%s()\n", __func__); |
439 | 445 | ||
440 | if ((mci = edac_mc_del_mc(pdev)) == NULL) | 446 | if ((mci = edac_mc_del_mc(&pdev->dev)) == NULL) |
441 | return; | 447 | return; |
442 | 448 | ||
443 | pvt = (struct i82875p_pvt *) mci->pvt_info; | 449 | pvt = (struct i82875p_pvt *) mci->pvt_info; |