diff options
author | Dave Peterson <dsp@llnl.gov> | 2006-03-26 04:38:40 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-26 11:57:06 -0500 |
commit | 537fba28928c01b7db1580627450691a4bb0b9b3 (patch) | |
tree | 1fd5adaa38ba639e28b56e014bfb309c0d1e181e /drivers/edac | |
parent | f2fe42abbf0d99a8c4b96f1cc55db10ac35d2fb9 (diff) |
[PATCH] EDAC: printk cleanup
This implements the following idea:
On Monday 30 January 2006 19:22, Eric W. Biederman wrote:
> One piece missing from this conversation is the issue that we need errors
> in a uniform format. That is why edac_mc has helper functions.
>
> However there will always be errors that don't fit any particular model.
> Could we add a edac_printk(dev, ); That is similar to dev_printk but
> prints out an EDAC header and the device on which the error was found?
> Letting the rest of the string be user specified.
>
> For actual control that interface may be to blunt, but at least for people
> looking in the logs it allows all of the errors to be detected and
> harvested.
Signed-off-by: David S. Peterson <dsp@llnl.gov>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/edac')
-rw-r--r-- | drivers/edac/amd76x_edac.c | 23 | ||||
-rw-r--r-- | drivers/edac/e752x_edac.c | 90 | ||||
-rw-r--r-- | drivers/edac/e7xxx_edac.c | 62 | ||||
-rw-r--r-- | drivers/edac/edac_mc.c | 186 | ||||
-rw-r--r-- | drivers/edac/edac_mc.h | 23 | ||||
-rw-r--r-- | drivers/edac/i82860_edac.c | 32 | ||||
-rw-r--r-- | drivers/edac/i82875p_edac.c | 51 | ||||
-rw-r--r-- | drivers/edac/r82600_edac.c | 48 |
8 files changed, 275 insertions, 240 deletions
diff --git a/drivers/edac/amd76x_edac.c b/drivers/edac/amd76x_edac.c index 2fcc8120b53c..60535bb9275f 100644 --- a/drivers/edac/amd76x_edac.c +++ b/drivers/edac/amd76x_edac.c | |||
@@ -25,6 +25,14 @@ | |||
25 | #include "edac_mc.h" | 25 | #include "edac_mc.h" |
26 | 26 | ||
27 | 27 | ||
28 | #define amd76x_printk(level, fmt, arg...) \ | ||
29 | edac_printk(level, "amd76x", fmt, ##arg) | ||
30 | |||
31 | |||
32 | #define amd76x_mc_printk(mci, level, fmt, arg...) \ | ||
33 | edac_mc_chipset_printk(mci, level, "amd76x", fmt, ##arg) | ||
34 | |||
35 | |||
28 | #define AMD76X_NR_CSROWS 8 | 36 | #define AMD76X_NR_CSROWS 8 |
29 | #define AMD76X_NR_CHANS 1 | 37 | #define AMD76X_NR_CHANS 1 |
30 | #define AMD76X_NR_DIMMS 4 | 38 | #define AMD76X_NR_DIMMS 4 |
@@ -174,7 +182,7 @@ static int amd76x_process_error_info (struct mem_ctl_info *mci, | |||
174 | static void amd76x_check(struct mem_ctl_info *mci) | 182 | static void amd76x_check(struct mem_ctl_info *mci) |
175 | { | 183 | { |
176 | struct amd76x_error_info info; | 184 | struct amd76x_error_info info; |
177 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 185 | debugf3("%s()\n", __func__); |
178 | amd76x_get_error_info(mci, &info); | 186 | amd76x_get_error_info(mci, &info); |
179 | amd76x_process_error_info(mci, &info, 1); | 187 | amd76x_process_error_info(mci, &info, 1); |
180 | } | 188 | } |
@@ -204,7 +212,7 @@ static int amd76x_probe1(struct pci_dev *pdev, int dev_idx) | |||
204 | u32 ems; | 212 | u32 ems; |
205 | u32 ems_mode; | 213 | u32 ems_mode; |
206 | 214 | ||
207 | debugf0("MC: " __FILE__ ": %s()\n", __func__); | 215 | debugf0("%s()\n", __func__); |
208 | 216 | ||
209 | pci_read_config_dword(pdev, AMD76X_ECC_MODE_STATUS, &ems); | 217 | pci_read_config_dword(pdev, AMD76X_ECC_MODE_STATUS, &ems); |
210 | ems_mode = (ems >> 10) & 0x3; | 218 | ems_mode = (ems >> 10) & 0x3; |
@@ -216,7 +224,7 @@ static int amd76x_probe1(struct pci_dev *pdev, int dev_idx) | |||
216 | goto fail; | 224 | goto fail; |
217 | } | 225 | } |
218 | 226 | ||
219 | debugf0("MC: " __FILE__ ": %s(): mci = %p\n", __func__, mci); | 227 | debugf0("%s(): mci = %p\n", __func__, mci); |
220 | 228 | ||
221 | mci->pdev = pci_dev_get(pdev); | 229 | mci->pdev = pci_dev_get(pdev); |
222 | mci->mtype_cap = MEM_FLAG_RDDR; | 230 | mci->mtype_cap = MEM_FLAG_RDDR; |
@@ -267,13 +275,12 @@ static int amd76x_probe1(struct pci_dev *pdev, int dev_idx) | |||
267 | (u32) (0x3 << 8)); | 275 | (u32) (0x3 << 8)); |
268 | 276 | ||
269 | if (edac_mc_add_mc(mci)) { | 277 | if (edac_mc_add_mc(mci)) { |
270 | debugf3("MC: " __FILE__ | 278 | debugf3("%s(): failed edac_mc_add_mc()\n", __func__); |
271 | ": %s(): failed edac_mc_add_mc()\n", __func__); | ||
272 | goto fail; | 279 | goto fail; |
273 | } | 280 | } |
274 | 281 | ||
275 | /* get this far and it's successful */ | 282 | /* get this far and it's successful */ |
276 | debugf3("MC: " __FILE__ ": %s(): success\n", __func__); | 283 | debugf3("%s(): success\n", __func__); |
277 | return 0; | 284 | return 0; |
278 | 285 | ||
279 | fail: | 286 | fail: |
@@ -289,7 +296,7 @@ fail: | |||
289 | static int __devinit amd76x_init_one(struct pci_dev *pdev, | 296 | static int __devinit amd76x_init_one(struct pci_dev *pdev, |
290 | const struct pci_device_id *ent) | 297 | const struct pci_device_id *ent) |
291 | { | 298 | { |
292 | debugf0("MC: " __FILE__ ": %s()\n", __func__); | 299 | debugf0("%s()\n", __func__); |
293 | 300 | ||
294 | /* don't need to call pci_device_enable() */ | 301 | /* don't need to call pci_device_enable() */ |
295 | return amd76x_probe1(pdev, ent->driver_data); | 302 | return amd76x_probe1(pdev, ent->driver_data); |
@@ -309,7 +316,7 @@ static void __devexit amd76x_remove_one(struct pci_dev *pdev) | |||
309 | { | 316 | { |
310 | struct mem_ctl_info *mci; | 317 | struct mem_ctl_info *mci; |
311 | 318 | ||
312 | debugf0(__FILE__ ": %s()\n", __func__); | 319 | debugf0("%s()\n", __func__); |
313 | 320 | ||
314 | if ((mci = edac_mc_find_mci_by_pdev(pdev)) == NULL) | 321 | if ((mci = edac_mc_find_mci_by_pdev(pdev)) == NULL) |
315 | return; | 322 | return; |
diff --git a/drivers/edac/e752x_edac.c b/drivers/edac/e752x_edac.c index c454ded2b060..25edba55b18c 100644 --- a/drivers/edac/e752x_edac.c +++ b/drivers/edac/e752x_edac.c | |||
@@ -30,6 +30,14 @@ | |||
30 | #include "edac_mc.h" | 30 | #include "edac_mc.h" |
31 | 31 | ||
32 | 32 | ||
33 | #define e752x_printk(level, fmt, arg...) \ | ||
34 | edac_printk(level, "e752x", fmt, ##arg) | ||
35 | |||
36 | |||
37 | #define e752x_mc_printk(mci, level, fmt, arg...) \ | ||
38 | edac_mc_chipset_printk(mci, level, "e752x", fmt, ##arg) | ||
39 | |||
40 | |||
33 | #ifndef PCI_DEVICE_ID_INTEL_7520_0 | 41 | #ifndef PCI_DEVICE_ID_INTEL_7520_0 |
34 | #define PCI_DEVICE_ID_INTEL_7520_0 0x3590 | 42 | #define PCI_DEVICE_ID_INTEL_7520_0 0x3590 |
35 | #endif /* PCI_DEVICE_ID_INTEL_7520_0 */ | 43 | #endif /* PCI_DEVICE_ID_INTEL_7520_0 */ |
@@ -215,7 +223,7 @@ static unsigned long ctl_page_to_phys(struct mem_ctl_info *mci, | |||
215 | u32 remap; | 223 | u32 remap; |
216 | struct e752x_pvt *pvt = (struct e752x_pvt *) mci->pvt_info; | 224 | struct e752x_pvt *pvt = (struct e752x_pvt *) mci->pvt_info; |
217 | 225 | ||
218 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 226 | debugf3("%s()\n", __func__); |
219 | 227 | ||
220 | if (page < pvt->tolm) | 228 | if (page < pvt->tolm) |
221 | return page; | 229 | return page; |
@@ -224,7 +232,7 @@ static unsigned long ctl_page_to_phys(struct mem_ctl_info *mci, | |||
224 | remap = (page - pvt->tolm) + pvt->remapbase; | 232 | remap = (page - pvt->tolm) + pvt->remapbase; |
225 | if (remap < pvt->remaplimit) | 233 | if (remap < pvt->remaplimit) |
226 | return remap; | 234 | return remap; |
227 | printk(KERN_ERR "Invalid page %lx - out of range\n", page); | 235 | e752x_printk(KERN_ERR, "Invalid page %lx - out of range\n", page); |
228 | return pvt->tolm - 1; | 236 | return pvt->tolm - 1; |
229 | } | 237 | } |
230 | 238 | ||
@@ -237,7 +245,7 @@ static void do_process_ce(struct mem_ctl_info *mci, u16 error_one, | |||
237 | int i; | 245 | int i; |
238 | struct e752x_pvt *pvt = (struct e752x_pvt *) mci->pvt_info; | 246 | struct e752x_pvt *pvt = (struct e752x_pvt *) mci->pvt_info; |
239 | 247 | ||
240 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 248 | debugf3("%s()\n", __func__); |
241 | 249 | ||
242 | /* convert the addr to 4k page */ | 250 | /* convert the addr to 4k page */ |
243 | page = sec1_add >> (PAGE_SHIFT - 4); | 251 | page = sec1_add >> (PAGE_SHIFT - 4); |
@@ -246,24 +254,23 @@ static void do_process_ce(struct mem_ctl_info *mci, u16 error_one, | |||
246 | if (pvt->mc_symmetric) { | 254 | if (pvt->mc_symmetric) { |
247 | /* chip select are bits 14 & 13 */ | 255 | /* chip select are bits 14 & 13 */ |
248 | row = ((page >> 1) & 3); | 256 | row = ((page >> 1) & 3); |
249 | printk(KERN_WARNING | 257 | e752x_printk(KERN_WARNING, |
250 | "Test row %d Table %d %d %d %d %d %d %d %d\n", | 258 | "Test row %d Table %d %d %d %d %d %d %d %d\n", |
251 | row, pvt->map[0], pvt->map[1], pvt->map[2], | 259 | row, pvt->map[0], pvt->map[1], pvt->map[2], |
252 | pvt->map[3], pvt->map[4], pvt->map[5], | 260 | pvt->map[3], pvt->map[4], pvt->map[5], |
253 | pvt->map[6], pvt->map[7]); | 261 | pvt->map[6], pvt->map[7]); |
254 | 262 | ||
255 | /* test for channel remapping */ | 263 | /* test for channel remapping */ |
256 | for (i = 0; i < 8; i++) { | 264 | for (i = 0; i < 8; i++) { |
257 | if (pvt->map[i] == row) | 265 | if (pvt->map[i] == row) |
258 | break; | 266 | break; |
259 | } | 267 | } |
260 | printk(KERN_WARNING "Test computed row %d\n", i); | 268 | e752x_printk(KERN_WARNING, "Test computed row %d\n", i); |
261 | if (i < 8) | 269 | if (i < 8) |
262 | row = i; | 270 | row = i; |
263 | else | 271 | else |
264 | printk(KERN_WARNING | 272 | e752x_mc_printk(mci, KERN_WARNING, |
265 | "MC%d: row %d not found in remap table\n", | 273 | "row %d not found in remap table\n", row); |
266 | mci->mc_idx, row); | ||
267 | } else | 274 | } else |
268 | row = edac_mc_find_csrow_by_page(mci, page); | 275 | row = edac_mc_find_csrow_by_page(mci, page); |
269 | /* 0 = channel A, 1 = channel B */ | 276 | /* 0 = channel A, 1 = channel B */ |
@@ -293,7 +300,7 @@ static void do_process_ue(struct mem_ctl_info *mci, u16 error_one, u32 ded_add, | |||
293 | int row; | 300 | int row; |
294 | struct e752x_pvt *pvt = (struct e752x_pvt *) mci->pvt_info; | 301 | struct e752x_pvt *pvt = (struct e752x_pvt *) mci->pvt_info; |
295 | 302 | ||
296 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 303 | debugf3("%s()\n", __func__); |
297 | 304 | ||
298 | if (error_one & 0x0202) { | 305 | if (error_one & 0x0202) { |
299 | error_2b = ded_add; | 306 | error_2b = ded_add; |
@@ -336,7 +343,7 @@ static inline void process_ue_no_info_wr(struct mem_ctl_info *mci, | |||
336 | if (!handle_error) | 343 | if (!handle_error) |
337 | return; | 344 | return; |
338 | 345 | ||
339 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 346 | debugf3("%s()\n", __func__); |
340 | edac_mc_handle_ue_no_info(mci, "e752x UE log memory write"); | 347 | edac_mc_handle_ue_no_info(mci, "e752x UE log memory write"); |
341 | } | 348 | } |
342 | 349 | ||
@@ -352,9 +359,9 @@ static void do_process_ded_retry(struct mem_ctl_info *mci, u16 error, | |||
352 | row = pvt->mc_symmetric ? | 359 | row = pvt->mc_symmetric ? |
353 | ((page >> 1) & 3) : /* chip select are bits 14 & 13 */ | 360 | ((page >> 1) & 3) : /* chip select are bits 14 & 13 */ |
354 | edac_mc_find_csrow_by_page(mci, page); | 361 | edac_mc_find_csrow_by_page(mci, page); |
355 | printk(KERN_WARNING | 362 | e752x_mc_printk(mci, KERN_WARNING, |
356 | "MC%d: CE page 0x%lx, row %d : Memory read retry\n", | 363 | "CE page 0x%lx, row %d : Memory read retry\n", |
357 | mci->mc_idx, (long unsigned int) page, row); | 364 | (long unsigned int) page, row); |
358 | } | 365 | } |
359 | 366 | ||
360 | static inline void process_ded_retry(struct mem_ctl_info *mci, u16 error, | 367 | static inline void process_ded_retry(struct mem_ctl_info *mci, u16 error, |
@@ -372,8 +379,7 @@ static inline void process_threshold_ce(struct mem_ctl_info *mci, u16 error, | |||
372 | *error_found = 1; | 379 | *error_found = 1; |
373 | 380 | ||
374 | if (handle_error) | 381 | if (handle_error) |
375 | printk(KERN_WARNING "MC%d: Memory threshold CE\n", | 382 | e752x_mc_printk(mci, KERN_WARNING, "Memory threshold CE\n"); |
376 | mci->mc_idx); | ||
377 | } | 383 | } |
378 | 384 | ||
379 | static char *global_message[11] = { | 385 | static char *global_message[11] = { |
@@ -391,7 +397,7 @@ static void do_global_error(int fatal, u32 errors) | |||
391 | 397 | ||
392 | for (i = 0; i < 11; i++) { | 398 | for (i = 0; i < 11; i++) { |
393 | if (errors & (1 << i)) | 399 | if (errors & (1 << i)) |
394 | printk(KERN_WARNING "%sError %s\n", | 400 | e752x_printk(KERN_WARNING, "%sError %s\n", |
395 | fatal_message[fatal], global_message[i]); | 401 | fatal_message[fatal], global_message[i]); |
396 | } | 402 | } |
397 | } | 403 | } |
@@ -418,7 +424,7 @@ static void do_hub_error(int fatal, u8 errors) | |||
418 | 424 | ||
419 | for (i = 0; i < 7; i++) { | 425 | for (i = 0; i < 7; i++) { |
420 | if (errors & (1 << i)) | 426 | if (errors & (1 << i)) |
421 | printk(KERN_WARNING "%sError %s\n", | 427 | e752x_printk(KERN_WARNING, "%sError %s\n", |
422 | fatal_message[fatal], hub_message[i]); | 428 | fatal_message[fatal], hub_message[i]); |
423 | } | 429 | } |
424 | } | 430 | } |
@@ -445,7 +451,7 @@ static void do_membuf_error(u8 errors) | |||
445 | 451 | ||
446 | for (i = 0; i < 4; i++) { | 452 | for (i = 0; i < 4; i++) { |
447 | if (errors & (1 << i)) | 453 | if (errors & (1 << i)) |
448 | printk(KERN_WARNING "Non-Fatal Error %s\n", | 454 | e752x_printk(KERN_WARNING, "Non-Fatal Error %s\n", |
449 | membuf_message[i]); | 455 | membuf_message[i]); |
450 | } | 456 | } |
451 | } | 457 | } |
@@ -478,7 +484,7 @@ static void do_sysbus_error(int fatal, u32 errors) | |||
478 | 484 | ||
479 | for (i = 0; i < 10; i++) { | 485 | for (i = 0; i < 10; i++) { |
480 | if (errors & (1 << i)) | 486 | if (errors & (1 << i)) |
481 | printk(KERN_WARNING "%sError System Bus %s\n", | 487 | e752x_printk(KERN_WARNING, "%sError System Bus %s\n", |
482 | fatal_message[fatal], global_message[i]); | 488 | fatal_message[fatal], global_message[i]); |
483 | } | 489 | } |
484 | } | 490 | } |
@@ -727,7 +733,7 @@ static int e752x_process_error_info (struct mem_ctl_info *mci, | |||
727 | static void e752x_check(struct mem_ctl_info *mci) | 733 | static void e752x_check(struct mem_ctl_info *mci) |
728 | { | 734 | { |
729 | struct e752x_error_info info; | 735 | struct e752x_error_info info; |
730 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 736 | debugf3("%s()\n", __func__); |
731 | e752x_get_error_info(mci, &info); | 737 | e752x_get_error_info(mci, &info); |
732 | e752x_process_error_info(mci, &info, 1); | 738 | e752x_process_error_info(mci, &info, 1); |
733 | } | 739 | } |
@@ -752,7 +758,7 @@ static int e752x_probe1(struct pci_dev *pdev, int dev_idx) | |||
752 | struct pci_dev *pres_dev; | 758 | struct pci_dev *pres_dev; |
753 | struct pci_dev *dev = NULL; | 759 | struct pci_dev *dev = NULL; |
754 | 760 | ||
755 | debugf0("MC: " __FILE__ ": %s(): mci\n", __func__); | 761 | debugf0("%s(): mci\n", __func__); |
756 | debugf0("Starting Probe1\n"); | 762 | debugf0("Starting Probe1\n"); |
757 | 763 | ||
758 | /* enable device 0 function 1 */ | 764 | /* enable device 0 function 1 */ |
@@ -776,7 +782,7 @@ static int e752x_probe1(struct pci_dev *pdev, int dev_idx) | |||
776 | goto fail; | 782 | goto fail; |
777 | } | 783 | } |
778 | 784 | ||
779 | debugf3("MC: " __FILE__ ": %s(): init mci\n", __func__); | 785 | debugf3("%s(): init mci\n", __func__); |
780 | 786 | ||
781 | mci->mtype_cap = MEM_FLAG_RDDR; | 787 | mci->mtype_cap = MEM_FLAG_RDDR; |
782 | mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_SECDED | | 788 | mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_SECDED | |
@@ -786,7 +792,7 @@ static int e752x_probe1(struct pci_dev *pdev, int dev_idx) | |||
786 | mci->mod_ver = "$Revision: 1.5.2.11 $"; | 792 | mci->mod_ver = "$Revision: 1.5.2.11 $"; |
787 | mci->pdev = pdev; | 793 | mci->pdev = pdev; |
788 | 794 | ||
789 | debugf3("MC: " __FILE__ ": %s(): init pvt\n", __func__); | 795 | debugf3("%s(): init pvt\n", __func__); |
790 | pvt = (struct e752x_pvt *) mci->pvt_info; | 796 | pvt = (struct e752x_pvt *) mci->pvt_info; |
791 | pvt->dev_info = &e752x_devs[dev_idx]; | 797 | pvt->dev_info = &e752x_devs[dev_idx]; |
792 | pvt->bridge_ck = pci_get_device(PCI_VENDOR_ID_INTEL, | 798 | pvt->bridge_ck = pci_get_device(PCI_VENDOR_ID_INTEL, |
@@ -796,14 +802,14 @@ static int e752x_probe1(struct pci_dev *pdev, int dev_idx) | |||
796 | pvt->bridge_ck = pci_scan_single_device(pdev->bus, | 802 | pvt->bridge_ck = pci_scan_single_device(pdev->bus, |
797 | PCI_DEVFN(0, 1)); | 803 | PCI_DEVFN(0, 1)); |
798 | if (pvt->bridge_ck == NULL) { | 804 | if (pvt->bridge_ck == NULL) { |
799 | printk(KERN_ERR "MC: error reporting device not found:" | 805 | e752x_printk(KERN_ERR, "error reporting device not found:" |
800 | "vendor %x device 0x%x (broken BIOS?)\n", | 806 | "vendor %x device 0x%x (broken BIOS?)\n", |
801 | PCI_VENDOR_ID_INTEL, e752x_devs[dev_idx].err_dev); | 807 | PCI_VENDOR_ID_INTEL, e752x_devs[dev_idx].err_dev); |
802 | goto fail; | 808 | goto fail; |
803 | } | 809 | } |
804 | pvt->mc_symmetric = ((ddrcsr & 0x10) != 0); | 810 | pvt->mc_symmetric = ((ddrcsr & 0x10) != 0); |
805 | 811 | ||
806 | debugf3("MC: " __FILE__ ": %s(): more mci init\n", __func__); | 812 | debugf3("%s(): more mci init\n", __func__); |
807 | mci->ctl_name = pvt->dev_info->ctl_name; | 813 | mci->ctl_name = pvt->dev_info->ctl_name; |
808 | mci->edac_check = e752x_check; | 814 | mci->edac_check = e752x_check; |
809 | mci->ctl_page_to_phys = ctl_page_to_phys; | 815 | mci->ctl_page_to_phys = ctl_page_to_phys; |
@@ -828,8 +834,8 @@ static int e752x_probe1(struct pci_dev *pdev, int dev_idx) | |||
828 | pci_read_config_byte(mci->pdev, E752X_DRB + index, &value); | 834 | pci_read_config_byte(mci->pdev, E752X_DRB + index, &value); |
829 | /* convert a 128 or 64 MiB DRB to a page size. */ | 835 | /* convert a 128 or 64 MiB DRB to a page size. */ |
830 | cumul_size = value << (25 + drc_drbg - PAGE_SHIFT); | 836 | cumul_size = value << (25 + drc_drbg - PAGE_SHIFT); |
831 | debugf3("MC: " __FILE__ ": %s(): (%d) cumul_size 0x%x\n", | 837 | debugf3("%s(): (%d) cumul_size 0x%x\n", __func__, index, |
832 | __func__, index, cumul_size); | 838 | cumul_size); |
833 | if (cumul_size == last_cumul_size) | 839 | if (cumul_size == last_cumul_size) |
834 | continue; /* not populated */ | 840 | continue; /* not populated */ |
835 | 841 | ||
@@ -897,8 +903,7 @@ static int e752x_probe1(struct pci_dev *pdev, int dev_idx) | |||
897 | 903 | ||
898 | mci->edac_cap |= EDAC_FLAG_NONE; | 904 | mci->edac_cap |= EDAC_FLAG_NONE; |
899 | 905 | ||
900 | debugf3("MC: " __FILE__ ": %s(): tolm, remapbase, remaplimit\n", | 906 | debugf3("%s(): tolm, remapbase, remaplimit\n", __func__); |
901 | __func__); | ||
902 | /* load the top of low memory, remap base, and remap limit vars */ | 907 | /* load the top of low memory, remap base, and remap limit vars */ |
903 | pci_read_config_word(mci->pdev, E752X_TOLM, &pci_data); | 908 | pci_read_config_word(mci->pdev, E752X_TOLM, &pci_data); |
904 | pvt->tolm = ((u32) pci_data) << 4; | 909 | pvt->tolm = ((u32) pci_data) << 4; |
@@ -906,13 +911,12 @@ static int e752x_probe1(struct pci_dev *pdev, int dev_idx) | |||
906 | pvt->remapbase = ((u32) pci_data) << 14; | 911 | pvt->remapbase = ((u32) pci_data) << 14; |
907 | pci_read_config_word(mci->pdev, E752X_REMAPLIMIT, &pci_data); | 912 | pci_read_config_word(mci->pdev, E752X_REMAPLIMIT, &pci_data); |
908 | pvt->remaplimit = ((u32) pci_data) << 14; | 913 | pvt->remaplimit = ((u32) pci_data) << 14; |
909 | printk("tolm = %x, remapbase = %x, remaplimit = %x\n", pvt->tolm, | 914 | e752x_printk(KERN_INFO, |
910 | pvt->remapbase, pvt->remaplimit); | 915 | "tolm = %x, remapbase = %x, remaplimit = %x\n", |
916 | pvt->tolm, pvt->remapbase, pvt->remaplimit); | ||
911 | 917 | ||
912 | if (edac_mc_add_mc(mci)) { | 918 | if (edac_mc_add_mc(mci)) { |
913 | debugf3("MC: " __FILE__ | 919 | debugf3("%s(): failed edac_mc_add_mc()\n", __func__); |
914 | ": %s(): failed edac_mc_add_mc()\n", | ||
915 | __func__); | ||
916 | goto fail; | 920 | goto fail; |
917 | } | 921 | } |
918 | 922 | ||
@@ -975,7 +979,7 @@ static int e752x_probe1(struct pci_dev *pdev, int dev_idx) | |||
975 | pci_write_config_word(dev, E752X_DRAM_NERR, stat16); | 979 | pci_write_config_word(dev, E752X_DRAM_NERR, stat16); |
976 | 980 | ||
977 | /* get this far and it's successful */ | 981 | /* get this far and it's successful */ |
978 | debugf3("MC: " __FILE__ ": %s(): success\n", __func__); | 982 | debugf3("%s(): success\n", __func__); |
979 | return 0; | 983 | return 0; |
980 | 984 | ||
981 | fail: | 985 | fail: |
@@ -995,7 +999,7 @@ fail: | |||
995 | static int __devinit e752x_init_one(struct pci_dev *pdev, | 999 | static int __devinit e752x_init_one(struct pci_dev *pdev, |
996 | const struct pci_device_id *ent) | 1000 | const struct pci_device_id *ent) |
997 | { | 1001 | { |
998 | debugf0("MC: " __FILE__ ": %s()\n", __func__); | 1002 | debugf0("%s()\n", __func__); |
999 | 1003 | ||
1000 | /* wake up and enable device */ | 1004 | /* wake up and enable device */ |
1001 | if(pci_enable_device(pdev) < 0) | 1005 | if(pci_enable_device(pdev) < 0) |
@@ -1009,7 +1013,7 @@ static void __devexit e752x_remove_one(struct pci_dev *pdev) | |||
1009 | struct mem_ctl_info *mci; | 1013 | struct mem_ctl_info *mci; |
1010 | struct e752x_pvt *pvt; | 1014 | struct e752x_pvt *pvt; |
1011 | 1015 | ||
1012 | debugf0(__FILE__ ": %s()\n", __func__); | 1016 | debugf0("%s()\n", __func__); |
1013 | 1017 | ||
1014 | if ((mci = edac_mc_find_mci_by_pdev(pdev)) == NULL) | 1018 | if ((mci = edac_mc_find_mci_by_pdev(pdev)) == NULL) |
1015 | return; | 1019 | return; |
@@ -1050,7 +1054,7 @@ static int __init e752x_init(void) | |||
1050 | { | 1054 | { |
1051 | int pci_rc; | 1055 | int pci_rc; |
1052 | 1056 | ||
1053 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 1057 | debugf3("%s()\n", __func__); |
1054 | pci_rc = pci_register_driver(&e752x_driver); | 1058 | pci_rc = pci_register_driver(&e752x_driver); |
1055 | return (pci_rc < 0) ? pci_rc : 0; | 1059 | return (pci_rc < 0) ? pci_rc : 0; |
1056 | } | 1060 | } |
@@ -1058,7 +1062,7 @@ static int __init e752x_init(void) | |||
1058 | 1062 | ||
1059 | static void __exit e752x_exit(void) | 1063 | static void __exit e752x_exit(void) |
1060 | { | 1064 | { |
1061 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 1065 | debugf3("%s()\n", __func__); |
1062 | pci_unregister_driver(&e752x_driver); | 1066 | pci_unregister_driver(&e752x_driver); |
1063 | } | 1067 | } |
1064 | 1068 | ||
diff --git a/drivers/edac/e7xxx_edac.c b/drivers/edac/e7xxx_edac.c index d5e320dfc66f..e7537413cad2 100644 --- a/drivers/edac/e7xxx_edac.c +++ b/drivers/edac/e7xxx_edac.c | |||
@@ -32,6 +32,14 @@ | |||
32 | #include "edac_mc.h" | 32 | #include "edac_mc.h" |
33 | 33 | ||
34 | 34 | ||
35 | #define e7xxx_printk(level, fmt, arg...) \ | ||
36 | edac_printk(level, "e7xxx", fmt, ##arg) | ||
37 | |||
38 | |||
39 | #define e7xxx_mc_printk(mci, level, fmt, arg...) \ | ||
40 | edac_mc_chipset_printk(mci, level, "e7xxx", fmt, ##arg) | ||
41 | |||
42 | |||
35 | #ifndef PCI_DEVICE_ID_INTEL_7205_0 | 43 | #ifndef PCI_DEVICE_ID_INTEL_7205_0 |
36 | #define PCI_DEVICE_ID_INTEL_7205_0 0x255d | 44 | #define PCI_DEVICE_ID_INTEL_7205_0 0x255d |
37 | #endif /* PCI_DEVICE_ID_INTEL_7205_0 */ | 45 | #endif /* PCI_DEVICE_ID_INTEL_7205_0 */ |
@@ -161,7 +169,7 @@ static const struct e7xxx_dev_info e7xxx_devs[] = { | |||
161 | /* FIXME - is this valid for both SECDED and S4ECD4ED? */ | 169 | /* FIXME - is this valid for both SECDED and S4ECD4ED? */ |
162 | static inline int e7xxx_find_channel(u16 syndrome) | 170 | static inline int e7xxx_find_channel(u16 syndrome) |
163 | { | 171 | { |
164 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 172 | debugf3("%s()\n", __func__); |
165 | 173 | ||
166 | if ((syndrome & 0xff00) == 0) | 174 | if ((syndrome & 0xff00) == 0) |
167 | return 0; | 175 | return 0; |
@@ -179,7 +187,7 @@ ctl_page_to_phys(struct mem_ctl_info *mci, unsigned long page) | |||
179 | u32 remap; | 187 | u32 remap; |
180 | struct e7xxx_pvt *pvt = (struct e7xxx_pvt *) mci->pvt_info; | 188 | struct e7xxx_pvt *pvt = (struct e7xxx_pvt *) mci->pvt_info; |
181 | 189 | ||
182 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 190 | debugf3("%s()\n", __func__); |
183 | 191 | ||
184 | if ((page < pvt->tolm) || | 192 | if ((page < pvt->tolm) || |
185 | ((page >= 0x100000) && (page < pvt->remapbase))) | 193 | ((page >= 0x100000) && (page < pvt->remapbase))) |
@@ -187,7 +195,7 @@ ctl_page_to_phys(struct mem_ctl_info *mci, unsigned long page) | |||
187 | remap = (page - pvt->tolm) + pvt->remapbase; | 195 | remap = (page - pvt->tolm) + pvt->remapbase; |
188 | if (remap < pvt->remaplimit) | 196 | if (remap < pvt->remaplimit) |
189 | return remap; | 197 | return remap; |
190 | printk(KERN_ERR "Invalid page %lx - out of range\n", page); | 198 | e7xxx_printk(KERN_ERR, "Invalid page %lx - out of range\n", page); |
191 | return pvt->tolm - 1; | 199 | return pvt->tolm - 1; |
192 | } | 200 | } |
193 | 201 | ||
@@ -199,7 +207,7 @@ static void process_ce(struct mem_ctl_info *mci, struct e7xxx_error_info *info) | |||
199 | int row; | 207 | int row; |
200 | int channel; | 208 | int channel; |
201 | 209 | ||
202 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 210 | debugf3("%s()\n", __func__); |
203 | 211 | ||
204 | /* read the error address */ | 212 | /* read the error address */ |
205 | error_1b = info->dram_celog_add; | 213 | error_1b = info->dram_celog_add; |
@@ -218,7 +226,7 @@ static void process_ce(struct mem_ctl_info *mci, struct e7xxx_error_info *info) | |||
218 | 226 | ||
219 | static void process_ce_no_info(struct mem_ctl_info *mci) | 227 | static void process_ce_no_info(struct mem_ctl_info *mci) |
220 | { | 228 | { |
221 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 229 | debugf3("%s()\n", __func__); |
222 | edac_mc_handle_ce_no_info(mci, "e7xxx CE log register overflow"); | 230 | edac_mc_handle_ce_no_info(mci, "e7xxx CE log register overflow"); |
223 | } | 231 | } |
224 | 232 | ||
@@ -228,7 +236,7 @@ static void process_ue(struct mem_ctl_info *mci, struct e7xxx_error_info *info) | |||
228 | u32 error_2b, block_page; | 236 | u32 error_2b, block_page; |
229 | int row; | 237 | int row; |
230 | 238 | ||
231 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 239 | debugf3("%s()\n", __func__); |
232 | 240 | ||
233 | /* read the error address */ | 241 | /* read the error address */ |
234 | error_2b = info->dram_uelog_add; | 242 | error_2b = info->dram_uelog_add; |
@@ -241,7 +249,7 @@ static void process_ue(struct mem_ctl_info *mci, struct e7xxx_error_info *info) | |||
241 | 249 | ||
242 | static void process_ue_no_info(struct mem_ctl_info *mci) | 250 | static void process_ue_no_info(struct mem_ctl_info *mci) |
243 | { | 251 | { |
244 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 252 | debugf3("%s()\n", __func__); |
245 | edac_mc_handle_ue_no_info(mci, "e7xxx UE log register overflow"); | 253 | edac_mc_handle_ue_no_info(mci, "e7xxx UE log register overflow"); |
246 | } | 254 | } |
247 | 255 | ||
@@ -330,7 +338,7 @@ static void e7xxx_check(struct mem_ctl_info *mci) | |||
330 | { | 338 | { |
331 | struct e7xxx_error_info info; | 339 | struct e7xxx_error_info info; |
332 | 340 | ||
333 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 341 | debugf3("%s()\n", __func__); |
334 | e7xxx_get_error_info(mci, &info); | 342 | e7xxx_get_error_info(mci, &info); |
335 | e7xxx_process_error_info(mci, &info, 1); | 343 | e7xxx_process_error_info(mci, &info, 1); |
336 | } | 344 | } |
@@ -351,7 +359,7 @@ static int e7xxx_probe1(struct pci_dev *pdev, int dev_idx) | |||
351 | unsigned long last_cumul_size; | 359 | unsigned long last_cumul_size; |
352 | 360 | ||
353 | 361 | ||
354 | debugf0("MC: " __FILE__ ": %s(): mci\n", __func__); | 362 | debugf0("%s(): mci\n", __func__); |
355 | 363 | ||
356 | /* need to find out the number of channels */ | 364 | /* need to find out the number of channels */ |
357 | pci_read_config_dword(pdev, E7XXX_DRC, &drc); | 365 | pci_read_config_dword(pdev, E7XXX_DRC, &drc); |
@@ -369,7 +377,7 @@ static int e7xxx_probe1(struct pci_dev *pdev, int dev_idx) | |||
369 | goto fail; | 377 | goto fail; |
370 | } | 378 | } |
371 | 379 | ||
372 | debugf3("MC: " __FILE__ ": %s(): init mci\n", __func__); | 380 | debugf3("%s(): init mci\n", __func__); |
373 | 381 | ||
374 | mci->mtype_cap = MEM_FLAG_RDDR; | 382 | mci->mtype_cap = MEM_FLAG_RDDR; |
375 | mci->edac_ctl_cap = | 383 | mci->edac_ctl_cap = |
@@ -379,21 +387,21 @@ static int e7xxx_probe1(struct pci_dev *pdev, int dev_idx) | |||
379 | mci->mod_ver = "$Revision: 1.5.2.9 $"; | 387 | mci->mod_ver = "$Revision: 1.5.2.9 $"; |
380 | mci->pdev = pdev; | 388 | mci->pdev = pdev; |
381 | 389 | ||
382 | debugf3("MC: " __FILE__ ": %s(): init pvt\n", __func__); | 390 | debugf3("%s(): init pvt\n", __func__); |
383 | pvt = (struct e7xxx_pvt *) mci->pvt_info; | 391 | pvt = (struct e7xxx_pvt *) mci->pvt_info; |
384 | pvt->dev_info = &e7xxx_devs[dev_idx]; | 392 | pvt->dev_info = &e7xxx_devs[dev_idx]; |
385 | pvt->bridge_ck = pci_get_device(PCI_VENDOR_ID_INTEL, | 393 | pvt->bridge_ck = pci_get_device(PCI_VENDOR_ID_INTEL, |
386 | pvt->dev_info->err_dev, | 394 | pvt->dev_info->err_dev, |
387 | pvt->bridge_ck); | 395 | pvt->bridge_ck); |
388 | if (!pvt->bridge_ck) { | 396 | if (!pvt->bridge_ck) { |
389 | printk(KERN_ERR | 397 | e7xxx_printk(KERN_ERR, "error reporting device not found:" |
390 | "MC: error reporting device not found:" | 398 | "vendor %x device 0x%x (broken BIOS?)\n", |
391 | "vendor %x device 0x%x (broken BIOS?)\n", | 399 | PCI_VENDOR_ID_INTEL, |
392 | PCI_VENDOR_ID_INTEL, e7xxx_devs[dev_idx].err_dev); | 400 | e7xxx_devs[dev_idx].err_dev); |
393 | goto fail; | 401 | goto fail; |
394 | } | 402 | } |
395 | 403 | ||
396 | debugf3("MC: " __FILE__ ": %s(): more mci init\n", __func__); | 404 | debugf3("%s(): more mci init\n", __func__); |
397 | mci->ctl_name = pvt->dev_info->ctl_name; | 405 | mci->ctl_name = pvt->dev_info->ctl_name; |
398 | 406 | ||
399 | mci->edac_check = e7xxx_check; | 407 | mci->edac_check = e7xxx_check; |
@@ -418,8 +426,8 @@ static int e7xxx_probe1(struct pci_dev *pdev, int dev_idx) | |||
418 | pci_read_config_byte(mci->pdev, E7XXX_DRB + index, &value); | 426 | pci_read_config_byte(mci->pdev, E7XXX_DRB + index, &value); |
419 | /* convert a 64 or 32 MiB DRB to a page size. */ | 427 | /* convert a 64 or 32 MiB DRB to a page size. */ |
420 | cumul_size = value << (25 + drc_drbg - PAGE_SHIFT); | 428 | cumul_size = value << (25 + drc_drbg - PAGE_SHIFT); |
421 | debugf3("MC: " __FILE__ ": %s(): (%d) cumul_size 0x%x\n", | 429 | debugf3("%s(): (%d) cumul_size 0x%x\n", __func__, index, |
422 | __func__, index, cumul_size); | 430 | cumul_size); |
423 | if (cumul_size == last_cumul_size) | 431 | if (cumul_size == last_cumul_size) |
424 | continue; /* not populated */ | 432 | continue; /* not populated */ |
425 | 433 | ||
@@ -449,8 +457,7 @@ static int e7xxx_probe1(struct pci_dev *pdev, int dev_idx) | |||
449 | 457 | ||
450 | mci->edac_cap |= EDAC_FLAG_NONE; | 458 | mci->edac_cap |= EDAC_FLAG_NONE; |
451 | 459 | ||
452 | debugf3("MC: " __FILE__ ": %s(): tolm, remapbase, remaplimit\n", | 460 | debugf3("%s(): tolm, remapbase, remaplimit\n", __func__); |
453 | __func__); | ||
454 | /* load the top of low memory, remap base, and remap limit vars */ | 461 | /* load the top of low memory, remap base, and remap limit vars */ |
455 | pci_read_config_word(mci->pdev, E7XXX_TOLM, &pci_data); | 462 | pci_read_config_word(mci->pdev, E7XXX_TOLM, &pci_data); |
456 | pvt->tolm = ((u32) pci_data) << 4; | 463 | pvt->tolm = ((u32) pci_data) << 4; |
@@ -458,22 +465,21 @@ static int e7xxx_probe1(struct pci_dev *pdev, int dev_idx) | |||
458 | pvt->remapbase = ((u32) pci_data) << 14; | 465 | pvt->remapbase = ((u32) pci_data) << 14; |
459 | pci_read_config_word(mci->pdev, E7XXX_REMAPLIMIT, &pci_data); | 466 | pci_read_config_word(mci->pdev, E7XXX_REMAPLIMIT, &pci_data); |
460 | pvt->remaplimit = ((u32) pci_data) << 14; | 467 | pvt->remaplimit = ((u32) pci_data) << 14; |
461 | printk("tolm = %x, remapbase = %x, remaplimit = %x\n", pvt->tolm, | 468 | e7xxx_printk(KERN_INFO, |
462 | pvt->remapbase, pvt->remaplimit); | 469 | "tolm = %x, remapbase = %x, remaplimit = %x\n", |
470 | pvt->tolm, pvt->remapbase, pvt->remaplimit); | ||
463 | 471 | ||
464 | /* clear any pending errors, or initial state bits */ | 472 | /* clear any pending errors, or initial state bits */ |
465 | pci_write_bits8(pvt->bridge_ck, E7XXX_DRAM_FERR, 0x03, 0x03); | 473 | pci_write_bits8(pvt->bridge_ck, E7XXX_DRAM_FERR, 0x03, 0x03); |
466 | pci_write_bits8(pvt->bridge_ck, E7XXX_DRAM_NERR, 0x03, 0x03); | 474 | pci_write_bits8(pvt->bridge_ck, E7XXX_DRAM_NERR, 0x03, 0x03); |
467 | 475 | ||
468 | if (edac_mc_add_mc(mci) != 0) { | 476 | if (edac_mc_add_mc(mci) != 0) { |
469 | debugf3("MC: " __FILE__ | 477 | debugf3("%s(): failed edac_mc_add_mc()\n", __func__); |
470 | ": %s(): failed edac_mc_add_mc()\n", | ||
471 | __func__); | ||
472 | goto fail; | 478 | goto fail; |
473 | } | 479 | } |
474 | 480 | ||
475 | /* get this far and it's successful */ | 481 | /* get this far and it's successful */ |
476 | debugf3("MC: " __FILE__ ": %s(): success\n", __func__); | 482 | debugf3("%s(): success\n", __func__); |
477 | return 0; | 483 | return 0; |
478 | 484 | ||
479 | fail: | 485 | fail: |
@@ -490,7 +496,7 @@ fail: | |||
490 | static int __devinit | 496 | static int __devinit |
491 | e7xxx_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | 497 | e7xxx_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) |
492 | { | 498 | { |
493 | debugf0("MC: " __FILE__ ": %s()\n", __func__); | 499 | debugf0("%s()\n", __func__); |
494 | 500 | ||
495 | /* wake up and enable device */ | 501 | /* wake up and enable device */ |
496 | return pci_enable_device(pdev) ? | 502 | return pci_enable_device(pdev) ? |
@@ -503,7 +509,7 @@ static void __devexit e7xxx_remove_one(struct pci_dev *pdev) | |||
503 | struct mem_ctl_info *mci; | 509 | struct mem_ctl_info *mci; |
504 | struct e7xxx_pvt *pvt; | 510 | struct e7xxx_pvt *pvt; |
505 | 511 | ||
506 | debugf0(__FILE__ ": %s()\n", __func__); | 512 | debugf0("%s()\n", __func__); |
507 | 513 | ||
508 | if (((mci = edac_mc_find_mci_by_pdev(pdev)) != 0) && | 514 | if (((mci = edac_mc_find_mci_by_pdev(pdev)) != 0) && |
509 | edac_mc_del_mc(mci)) { | 515 | edac_mc_del_mc(mci)) { |
diff --git a/drivers/edac/edac_mc.c b/drivers/edac/edac_mc.c index 8a7a3ab745aa..499ac90ad67e 100644 --- a/drivers/edac/edac_mc.c +++ b/drivers/edac/edac_mc.c | |||
@@ -37,7 +37,7 @@ | |||
37 | 37 | ||
38 | #include "edac_mc.h" | 38 | #include "edac_mc.h" |
39 | 39 | ||
40 | #define EDAC_MC_VERSION "edac_mc Ver: 2.0.0 " __DATE__ | 40 | #define EDAC_MC_VERSION "Ver: 2.0.0 " __DATE__ |
41 | 41 | ||
42 | /* For now, disable the EDAC sysfs code. The sysfs interface that EDAC | 42 | /* For now, disable the EDAC sysfs code. The sysfs interface that EDAC |
43 | * presents to user space needs more thought, and is likely to change | 43 | * presents to user space needs more thought, and is likely to change |
@@ -243,7 +243,7 @@ static struct memctrl_dev_attribute *memctrl_attr[] = { | |||
243 | /* Main MC kobject release() function */ | 243 | /* Main MC kobject release() function */ |
244 | static void edac_memctrl_master_release(struct kobject *kobj) | 244 | static void edac_memctrl_master_release(struct kobject *kobj) |
245 | { | 245 | { |
246 | debugf1("EDAC MC: " __FILE__ ": %s()\n", __func__); | 246 | debugf1("%s()\n", __func__); |
247 | } | 247 | } |
248 | 248 | ||
249 | static struct kobj_type ktype_memctrl = { | 249 | static struct kobj_type ktype_memctrl = { |
@@ -271,7 +271,7 @@ static int edac_sysfs_memctrl_setup(void) | |||
271 | { | 271 | { |
272 | int err=0; | 272 | int err=0; |
273 | 273 | ||
274 | debugf1("MC: " __FILE__ ": %s()\n", __func__); | 274 | debugf1("%s()\n", __func__); |
275 | 275 | ||
276 | /* create the /sys/devices/system/edac directory */ | 276 | /* create the /sys/devices/system/edac directory */ |
277 | err = sysdev_class_register(&edac_class); | 277 | err = sysdev_class_register(&edac_class); |
@@ -295,7 +295,7 @@ static int edac_sysfs_memctrl_setup(void) | |||
295 | } | 295 | } |
296 | } | 296 | } |
297 | } else { | 297 | } else { |
298 | debugf1(KERN_WARNING "__FILE__ %s() error=%d\n", __func__,err); | 298 | debugf1("%s() error=%d\n", __func__, err); |
299 | } | 299 | } |
300 | 300 | ||
301 | return err; | 301 | return err; |
@@ -567,7 +567,7 @@ static struct edac_pci_dev_attribute *edac_pci_attr[] = { | |||
567 | /* No memory to release */ | 567 | /* No memory to release */ |
568 | static void edac_pci_release(struct kobject *kobj) | 568 | static void edac_pci_release(struct kobject *kobj) |
569 | { | 569 | { |
570 | debugf1("EDAC PCI: " __FILE__ ": %s()\n", __func__); | 570 | debugf1("%s()\n", __func__); |
571 | } | 571 | } |
572 | 572 | ||
573 | static struct kobj_type ktype_edac_pci = { | 573 | static struct kobj_type ktype_edac_pci = { |
@@ -591,7 +591,7 @@ static int edac_sysfs_pci_setup(void) | |||
591 | { | 591 | { |
592 | int err; | 592 | int err; |
593 | 593 | ||
594 | debugf1("MC: " __FILE__ ": %s()\n", __func__); | 594 | debugf1("%s()\n", __func__); |
595 | 595 | ||
596 | memset(&edac_pci_kobj, 0, sizeof(edac_pci_kobj)); | 596 | memset(&edac_pci_kobj, 0, sizeof(edac_pci_kobj)); |
597 | 597 | ||
@@ -616,7 +616,7 @@ static int edac_sysfs_pci_setup(void) | |||
616 | static void edac_sysfs_pci_teardown(void) | 616 | static void edac_sysfs_pci_teardown(void) |
617 | { | 617 | { |
618 | #ifndef DISABLE_EDAC_SYSFS | 618 | #ifndef DISABLE_EDAC_SYSFS |
619 | debugf0("MC: " __FILE__ ": %s()\n", __func__); | 619 | debugf0("%s()\n", __func__); |
620 | 620 | ||
621 | kobject_unregister(&edac_pci_kobj); | 621 | kobject_unregister(&edac_pci_kobj); |
622 | kobject_put(&edac_pci_kobj); | 622 | kobject_put(&edac_pci_kobj); |
@@ -808,7 +808,7 @@ static struct csrowdev_attribute *csrow_attr[] = { | |||
808 | /* No memory to release */ | 808 | /* No memory to release */ |
809 | static void edac_csrow_instance_release(struct kobject *kobj) | 809 | static void edac_csrow_instance_release(struct kobject *kobj) |
810 | { | 810 | { |
811 | debugf1("EDAC MC: " __FILE__ ": %s()\n", __func__); | 811 | debugf1("%s()\n", __func__); |
812 | } | 812 | } |
813 | 813 | ||
814 | static struct kobj_type ktype_csrow = { | 814 | static struct kobj_type ktype_csrow = { |
@@ -823,7 +823,7 @@ static int edac_create_csrow_object(struct kobject *edac_mci_kobj, | |||
823 | { | 823 | { |
824 | int err = 0; | 824 | int err = 0; |
825 | 825 | ||
826 | debugf0("MC: " __FILE__ ": %s()\n", __func__); | 826 | debugf0("%s()\n", __func__); |
827 | 827 | ||
828 | memset(&csrow->kobj, 0, sizeof(csrow->kobj)); | 828 | memset(&csrow->kobj, 0, sizeof(csrow->kobj)); |
829 | 829 | ||
@@ -1066,8 +1066,7 @@ static void edac_mci_instance_release(struct kobject *kobj) | |||
1066 | struct mem_ctl_info *mci; | 1066 | struct mem_ctl_info *mci; |
1067 | mci = container_of(kobj,struct mem_ctl_info,edac_mci_kobj); | 1067 | mci = container_of(kobj,struct mem_ctl_info,edac_mci_kobj); |
1068 | 1068 | ||
1069 | debugf0("MC: " __FILE__ ": %s() idx=%d calling kfree\n", | 1069 | debugf0("%s() idx=%d calling kfree\n", __func__, mci->mc_idx); |
1070 | __func__, mci->mc_idx); | ||
1071 | 1070 | ||
1072 | kfree(mci); | 1071 | kfree(mci); |
1073 | } | 1072 | } |
@@ -1102,7 +1101,7 @@ static int edac_create_sysfs_mci_device(struct mem_ctl_info *mci) | |||
1102 | struct csrow_info *csrow; | 1101 | struct csrow_info *csrow; |
1103 | struct kobject *edac_mci_kobj=&mci->edac_mci_kobj; | 1102 | struct kobject *edac_mci_kobj=&mci->edac_mci_kobj; |
1104 | 1103 | ||
1105 | debugf0("MC: " __FILE__ ": %s() idx=%d\n", __func__, mci->mc_idx); | 1104 | debugf0("%s() idx=%d\n", __func__, mci->mc_idx); |
1106 | 1105 | ||
1107 | memset(edac_mci_kobj, 0, sizeof(*edac_mci_kobj)); | 1106 | memset(edac_mci_kobj, 0, sizeof(*edac_mci_kobj)); |
1108 | kobject_init(edac_mci_kobj); | 1107 | kobject_init(edac_mci_kobj); |
@@ -1174,7 +1173,7 @@ static void edac_remove_sysfs_mci_device(struct mem_ctl_info *mci) | |||
1174 | #ifndef DISABLE_EDAC_SYSFS | 1173 | #ifndef DISABLE_EDAC_SYSFS |
1175 | int i; | 1174 | int i; |
1176 | 1175 | ||
1177 | debugf0("MC: " __FILE__ ": %s()\n", __func__); | 1176 | debugf0("%s()\n", __func__); |
1178 | 1177 | ||
1179 | /* remove all csrow kobjects */ | 1178 | /* remove all csrow kobjects */ |
1180 | for (i = 0; i < mci->nr_csrows; i++) { | 1179 | for (i = 0; i < mci->nr_csrows; i++) { |
@@ -1396,7 +1395,7 @@ struct mem_ctl_info *edac_mc_find_mci_by_pdev(struct pci_dev *pdev) | |||
1396 | struct mem_ctl_info *mci; | 1395 | struct mem_ctl_info *mci; |
1397 | struct list_head *item; | 1396 | struct list_head *item; |
1398 | 1397 | ||
1399 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 1398 | debugf3("%s()\n", __func__); |
1400 | 1399 | ||
1401 | list_for_each(item, &mc_devices) { | 1400 | list_for_each(item, &mc_devices) { |
1402 | mci = list_entry(item, struct mem_ctl_info, link); | 1401 | mci = list_entry(item, struct mem_ctl_info, link); |
@@ -1419,10 +1418,11 @@ static int add_mc_to_global_list (struct mem_ctl_info *mci) | |||
1419 | insert_before = &mc_devices; | 1418 | insert_before = &mc_devices; |
1420 | } else { | 1419 | } else { |
1421 | if (edac_mc_find_mci_by_pdev(mci->pdev)) { | 1420 | if (edac_mc_find_mci_by_pdev(mci->pdev)) { |
1422 | printk(KERN_WARNING | 1421 | edac_printk(KERN_WARNING, EDAC_MC, |
1423 | "EDAC MC: %s (%s) %s %s already assigned %d\n", | 1422 | "%s (%s) %s %s already assigned %d\n", |
1424 | mci->pdev->dev.bus_id, pci_name(mci->pdev), | 1423 | mci->pdev->dev.bus_id, |
1425 | mci->mod_name, mci->ctl_name, mci->mc_idx); | 1424 | pci_name(mci->pdev), mci->mod_name, |
1425 | mci->ctl_name, mci->mc_idx); | ||
1426 | return 1; | 1426 | return 1; |
1427 | } | 1427 | } |
1428 | 1428 | ||
@@ -1468,7 +1468,7 @@ int edac_mc_add_mc(struct mem_ctl_info *mci) | |||
1468 | { | 1468 | { |
1469 | int rc = 1; | 1469 | int rc = 1; |
1470 | 1470 | ||
1471 | debugf0("MC: " __FILE__ ": %s()\n", __func__); | 1471 | debugf0("%s()\n", __func__); |
1472 | #ifdef CONFIG_EDAC_DEBUG | 1472 | #ifdef CONFIG_EDAC_DEBUG |
1473 | if (edac_debug_level >= 3) | 1473 | if (edac_debug_level >= 3) |
1474 | edac_mc_dump_mci(mci); | 1474 | edac_mc_dump_mci(mci); |
@@ -1493,19 +1493,15 @@ int edac_mc_add_mc(struct mem_ctl_info *mci) | |||
1493 | mci->start_time = jiffies; | 1493 | mci->start_time = jiffies; |
1494 | 1494 | ||
1495 | if (edac_create_sysfs_mci_device(mci)) { | 1495 | if (edac_create_sysfs_mci_device(mci)) { |
1496 | printk(KERN_WARNING | 1496 | edac_mc_printk(mci, KERN_WARNING, |
1497 | "EDAC MC%d: failed to create sysfs device\n", | 1497 | "failed to create sysfs device\n"); |
1498 | mci->mc_idx); | ||
1499 | /* FIXME - should there be an error code and unwind? */ | 1498 | /* FIXME - should there be an error code and unwind? */ |
1500 | goto finish; | 1499 | goto finish; |
1501 | } | 1500 | } |
1502 | 1501 | ||
1503 | /* Report action taken */ | 1502 | /* Report action taken */ |
1504 | printk(KERN_INFO | 1503 | edac_mc_printk(mci, KERN_INFO, "Giving out device to %s %s: PCI %s\n", |
1505 | "EDAC MC%d: Giving out device to %s %s: PCI %s\n", | 1504 | mci->mod_name, mci->ctl_name, pci_name(mci->pdev)); |
1506 | mci->mc_idx, mci->mod_name, mci->ctl_name, | ||
1507 | pci_name(mci->pdev)); | ||
1508 | |||
1509 | 1505 | ||
1510 | rc = 0; | 1506 | rc = 0; |
1511 | 1507 | ||
@@ -1547,13 +1543,12 @@ int edac_mc_del_mc(struct mem_ctl_info *mci) | |||
1547 | { | 1543 | { |
1548 | int rc = 1; | 1544 | int rc = 1; |
1549 | 1545 | ||
1550 | debugf0("MC%d: " __FILE__ ": %s()\n", mci->mc_idx, __func__); | 1546 | debugf0("MC%d: %s()\n", mci->mc_idx, __func__); |
1551 | down(&mem_ctls_mutex); | 1547 | down(&mem_ctls_mutex); |
1552 | del_mc_from_global_list(mci); | 1548 | del_mc_from_global_list(mci); |
1553 | printk(KERN_INFO | 1549 | edac_printk(KERN_INFO, EDAC_MC, |
1554 | "EDAC MC%d: Removed device %d for %s %s: PCI %s\n", | 1550 | "Removed device %d for %s %s: PCI %s\n", mci->mc_idx, |
1555 | mci->mc_idx, mci->mc_idx, mci->mod_name, mci->ctl_name, | 1551 | mci->mod_name, mci->ctl_name, pci_name(mci->pdev)); |
1556 | pci_name(mci->pdev)); | ||
1557 | rc = 0; | 1552 | rc = 0; |
1558 | up(&mem_ctls_mutex); | 1553 | up(&mem_ctls_mutex); |
1559 | 1554 | ||
@@ -1570,7 +1565,7 @@ void edac_mc_scrub_block(unsigned long page, unsigned long offset, | |||
1570 | void *virt_addr; | 1565 | void *virt_addr; |
1571 | unsigned long flags = 0; | 1566 | unsigned long flags = 0; |
1572 | 1567 | ||
1573 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 1568 | debugf3("%s()\n", __func__); |
1574 | 1569 | ||
1575 | /* ECC error page was not in our memory. Ignore it. */ | 1570 | /* ECC error page was not in our memory. Ignore it. */ |
1576 | if(!pfn_valid(page)) | 1571 | if(!pfn_valid(page)) |
@@ -1604,8 +1599,7 @@ int edac_mc_find_csrow_by_page(struct mem_ctl_info *mci, | |||
1604 | struct csrow_info *csrows = mci->csrows; | 1599 | struct csrow_info *csrows = mci->csrows; |
1605 | int row, i; | 1600 | int row, i; |
1606 | 1601 | ||
1607 | debugf1("MC%d: " __FILE__ ": %s(): 0x%lx\n", mci->mc_idx, __func__, | 1602 | debugf1("MC%d: %s(): 0x%lx\n", mci->mc_idx, __func__, page); |
1608 | page); | ||
1609 | row = -1; | 1603 | row = -1; |
1610 | 1604 | ||
1611 | for (i = 0; i < mci->nr_csrows; i++) { | 1605 | for (i = 0; i < mci->nr_csrows; i++) { |
@@ -1614,11 +1608,10 @@ int edac_mc_find_csrow_by_page(struct mem_ctl_info *mci, | |||
1614 | if (csrow->nr_pages == 0) | 1608 | if (csrow->nr_pages == 0) |
1615 | continue; | 1609 | continue; |
1616 | 1610 | ||
1617 | debugf3("MC%d: " __FILE__ | 1611 | debugf3("MC%d: %s(): first(0x%lx) page(0x%lx) last(0x%lx) " |
1618 | ": %s(): first(0x%lx) page(0x%lx)" | 1612 | "mask(0x%lx)\n", mci->mc_idx, __func__, |
1619 | " last(0x%lx) mask(0x%lx)\n", mci->mc_idx, | 1613 | csrow->first_page, page, csrow->last_page, |
1620 | __func__, csrow->first_page, page, | 1614 | csrow->page_mask); |
1621 | csrow->last_page, csrow->page_mask); | ||
1622 | 1615 | ||
1623 | if ((page >= csrow->first_page) && | 1616 | if ((page >= csrow->first_page) && |
1624 | (page <= csrow->last_page) && | 1617 | (page <= csrow->last_page) && |
@@ -1630,9 +1623,9 @@ int edac_mc_find_csrow_by_page(struct mem_ctl_info *mci, | |||
1630 | } | 1623 | } |
1631 | 1624 | ||
1632 | if (row == -1) | 1625 | if (row == -1) |
1633 | printk(KERN_ERR | 1626 | edac_mc_printk(mci, KERN_ERR, |
1634 | "EDAC MC%d: could not look up page error address %lx\n", | 1627 | "could not look up page error address %lx\n", |
1635 | mci->mc_idx, (unsigned long) page); | 1628 | (unsigned long) page); |
1636 | 1629 | ||
1637 | return row; | 1630 | return row; |
1638 | } | 1631 | } |
@@ -1650,36 +1643,35 @@ void edac_mc_handle_ce(struct mem_ctl_info *mci, | |||
1650 | { | 1643 | { |
1651 | unsigned long remapped_page; | 1644 | unsigned long remapped_page; |
1652 | 1645 | ||
1653 | debugf3("MC%d: " __FILE__ ": %s()\n", mci->mc_idx, __func__); | 1646 | debugf3("MC%d: %s()\n", mci->mc_idx, __func__); |
1654 | 1647 | ||
1655 | /* FIXME - maybe make panic on INTERNAL ERROR an option */ | 1648 | /* FIXME - maybe make panic on INTERNAL ERROR an option */ |
1656 | if (row >= mci->nr_csrows || row < 0) { | 1649 | if (row >= mci->nr_csrows || row < 0) { |
1657 | /* something is wrong */ | 1650 | /* something is wrong */ |
1658 | printk(KERN_ERR | 1651 | edac_mc_printk(mci, KERN_ERR, |
1659 | "EDAC MC%d: INTERNAL ERROR: row out of range (%d >= %d)\n", | 1652 | "INTERNAL ERROR: row out of range " |
1660 | mci->mc_idx, row, mci->nr_csrows); | 1653 | "(%d >= %d)\n", row, mci->nr_csrows); |
1661 | edac_mc_handle_ce_no_info(mci, "INTERNAL ERROR"); | 1654 | edac_mc_handle_ce_no_info(mci, "INTERNAL ERROR"); |
1662 | return; | 1655 | return; |
1663 | } | 1656 | } |
1664 | if (channel >= mci->csrows[row].nr_channels || channel < 0) { | 1657 | if (channel >= mci->csrows[row].nr_channels || channel < 0) { |
1665 | /* something is wrong */ | 1658 | /* something is wrong */ |
1666 | printk(KERN_ERR | 1659 | edac_mc_printk(mci, KERN_ERR, |
1667 | "EDAC MC%d: INTERNAL ERROR: channel out of range " | 1660 | "INTERNAL ERROR: channel out of range " |
1668 | "(%d >= %d)\n", | 1661 | "(%d >= %d)\n", channel, |
1669 | mci->mc_idx, channel, mci->csrows[row].nr_channels); | 1662 | mci->csrows[row].nr_channels); |
1670 | edac_mc_handle_ce_no_info(mci, "INTERNAL ERROR"); | 1663 | edac_mc_handle_ce_no_info(mci, "INTERNAL ERROR"); |
1671 | return; | 1664 | return; |
1672 | } | 1665 | } |
1673 | 1666 | ||
1674 | if (log_ce) | 1667 | if (log_ce) |
1675 | /* FIXME - put in DIMM location */ | 1668 | /* FIXME - put in DIMM location */ |
1676 | printk(KERN_WARNING | 1669 | edac_mc_printk(mci, KERN_WARNING, |
1677 | "EDAC MC%d: CE page 0x%lx, offset 0x%lx," | 1670 | "CE page 0x%lx, offset 0x%lx, grain %d, syndrome " |
1678 | " grain %d, syndrome 0x%lx, row %d, channel %d," | 1671 | "0x%lx, row %d, channel %d, label \"%s\": %s\n", |
1679 | " label \"%s\": %s\n", mci->mc_idx, | 1672 | page_frame_number, offset_in_page, |
1680 | page_frame_number, offset_in_page, | 1673 | mci->csrows[row].grain, syndrome, row, channel, |
1681 | mci->csrows[row].grain, syndrome, row, channel, | 1674 | mci->csrows[row].channels[channel].label, msg); |
1682 | mci->csrows[row].channels[channel].label, msg); | ||
1683 | 1675 | ||
1684 | mci->ce_count++; | 1676 | mci->ce_count++; |
1685 | mci->csrows[row].ce_count++; | 1677 | mci->csrows[row].ce_count++; |
@@ -1711,9 +1703,8 @@ void edac_mc_handle_ce_no_info(struct mem_ctl_info *mci, | |||
1711 | const char *msg) | 1703 | const char *msg) |
1712 | { | 1704 | { |
1713 | if (log_ce) | 1705 | if (log_ce) |
1714 | printk(KERN_WARNING | 1706 | edac_mc_printk(mci, KERN_WARNING, |
1715 | "EDAC MC%d: CE - no information available: %s\n", | 1707 | "CE - no information available: %s\n", msg); |
1716 | mci->mc_idx, msg); | ||
1717 | mci->ce_noinfo_count++; | 1708 | mci->ce_noinfo_count++; |
1718 | mci->ce_count++; | 1709 | mci->ce_count++; |
1719 | } | 1710 | } |
@@ -1732,14 +1723,14 @@ void edac_mc_handle_ue(struct mem_ctl_info *mci, | |||
1732 | int chan; | 1723 | int chan; |
1733 | int chars; | 1724 | int chars; |
1734 | 1725 | ||
1735 | debugf3("MC%d: " __FILE__ ": %s()\n", mci->mc_idx, __func__); | 1726 | debugf3("MC%d: %s()\n", mci->mc_idx, __func__); |
1736 | 1727 | ||
1737 | /* FIXME - maybe make panic on INTERNAL ERROR an option */ | 1728 | /* FIXME - maybe make panic on INTERNAL ERROR an option */ |
1738 | if (row >= mci->nr_csrows || row < 0) { | 1729 | if (row >= mci->nr_csrows || row < 0) { |
1739 | /* something is wrong */ | 1730 | /* something is wrong */ |
1740 | printk(KERN_ERR | 1731 | edac_mc_printk(mci, KERN_ERR, |
1741 | "EDAC MC%d: INTERNAL ERROR: row out of range (%d >= %d)\n", | 1732 | "INTERNAL ERROR: row out of range " |
1742 | mci->mc_idx, row, mci->nr_csrows); | 1733 | "(%d >= %d)\n", row, mci->nr_csrows); |
1743 | edac_mc_handle_ue_no_info(mci, "INTERNAL ERROR"); | 1734 | edac_mc_handle_ue_no_info(mci, "INTERNAL ERROR"); |
1744 | return; | 1735 | return; |
1745 | } | 1736 | } |
@@ -1757,11 +1748,11 @@ void edac_mc_handle_ue(struct mem_ctl_info *mci, | |||
1757 | } | 1748 | } |
1758 | 1749 | ||
1759 | if (log_ue) | 1750 | if (log_ue) |
1760 | printk(KERN_EMERG | 1751 | edac_mc_printk(mci, KERN_EMERG, |
1761 | "EDAC MC%d: UE page 0x%lx, offset 0x%lx, grain %d, row %d," | 1752 | "UE page 0x%lx, offset 0x%lx, grain %d, row %d, " |
1762 | " labels \"%s\": %s\n", mci->mc_idx, | 1753 | "labels \"%s\": %s\n", page_frame_number, |
1763 | page_frame_number, offset_in_page, | 1754 | offset_in_page, mci->csrows[row].grain, row, labels, |
1764 | mci->csrows[row].grain, row, labels, msg); | 1755 | msg); |
1765 | 1756 | ||
1766 | if (panic_on_ue) | 1757 | if (panic_on_ue) |
1767 | panic | 1758 | panic |
@@ -1784,9 +1775,8 @@ void edac_mc_handle_ue_no_info(struct mem_ctl_info *mci, | |||
1784 | panic("EDAC MC%d: Uncorrected Error", mci->mc_idx); | 1775 | panic("EDAC MC%d: Uncorrected Error", mci->mc_idx); |
1785 | 1776 | ||
1786 | if (log_ue) | 1777 | if (log_ue) |
1787 | printk(KERN_WARNING | 1778 | edac_mc_printk(mci, KERN_WARNING, |
1788 | "EDAC MC%d: UE - no information available: %s\n", | 1779 | "UE - no information available: %s\n", msg); |
1789 | mci->mc_idx, msg); | ||
1790 | mci->ue_noinfo_count++; | 1780 | mci->ue_noinfo_count++; |
1791 | mci->ue_count++; | 1781 | mci->ue_count++; |
1792 | } | 1782 | } |
@@ -1856,25 +1846,22 @@ static void edac_pci_dev_parity_test(struct pci_dev *dev) | |||
1856 | /* check the status reg for errors */ | 1846 | /* check the status reg for errors */ |
1857 | if (status) { | 1847 | if (status) { |
1858 | if (status & (PCI_STATUS_SIG_SYSTEM_ERROR)) | 1848 | if (status & (PCI_STATUS_SIG_SYSTEM_ERROR)) |
1859 | printk(KERN_CRIT | 1849 | edac_printk(KERN_CRIT, EDAC_PCI, |
1860 | "EDAC PCI- " | ||
1861 | "Signaled System Error on %s\n", | 1850 | "Signaled System Error on %s\n", |
1862 | pci_name (dev)); | 1851 | pci_name(dev)); |
1863 | 1852 | ||
1864 | if (status & (PCI_STATUS_PARITY)) { | 1853 | if (status & (PCI_STATUS_PARITY)) { |
1865 | printk(KERN_CRIT | 1854 | edac_printk(KERN_CRIT, EDAC_PCI, |
1866 | "EDAC PCI- " | ||
1867 | "Master Data Parity Error on %s\n", | 1855 | "Master Data Parity Error on %s\n", |
1868 | pci_name (dev)); | 1856 | pci_name(dev)); |
1869 | 1857 | ||
1870 | atomic_inc(&pci_parity_count); | 1858 | atomic_inc(&pci_parity_count); |
1871 | } | 1859 | } |
1872 | 1860 | ||
1873 | if (status & (PCI_STATUS_DETECTED_PARITY)) { | 1861 | if (status & (PCI_STATUS_DETECTED_PARITY)) { |
1874 | printk(KERN_CRIT | 1862 | edac_printk(KERN_CRIT, EDAC_PCI, |
1875 | "EDAC PCI- " | ||
1876 | "Detected Parity Error on %s\n", | 1863 | "Detected Parity Error on %s\n", |
1877 | pci_name (dev)); | 1864 | pci_name(dev)); |
1878 | 1865 | ||
1879 | atomic_inc(&pci_parity_count); | 1866 | atomic_inc(&pci_parity_count); |
1880 | } | 1867 | } |
@@ -1895,25 +1882,22 @@ static void edac_pci_dev_parity_test(struct pci_dev *dev) | |||
1895 | /* check the secondary status reg for errors */ | 1882 | /* check the secondary status reg for errors */ |
1896 | if (status) { | 1883 | if (status) { |
1897 | if (status & (PCI_STATUS_SIG_SYSTEM_ERROR)) | 1884 | if (status & (PCI_STATUS_SIG_SYSTEM_ERROR)) |
1898 | printk(KERN_CRIT | 1885 | edac_printk(KERN_CRIT, EDAC_PCI, "Bridge " |
1899 | "EDAC PCI-Bridge- " | ||
1900 | "Signaled System Error on %s\n", | 1886 | "Signaled System Error on %s\n", |
1901 | pci_name (dev)); | 1887 | pci_name(dev)); |
1902 | 1888 | ||
1903 | if (status & (PCI_STATUS_PARITY)) { | 1889 | if (status & (PCI_STATUS_PARITY)) { |
1904 | printk(KERN_CRIT | 1890 | edac_printk(KERN_CRIT, EDAC_PCI, "Bridge " |
1905 | "EDAC PCI-Bridge- " | 1891 | "Master Data Parity Error on " |
1906 | "Master Data Parity Error on %s\n", | 1892 | "%s\n", pci_name(dev)); |
1907 | pci_name (dev)); | ||
1908 | 1893 | ||
1909 | atomic_inc(&pci_parity_count); | 1894 | atomic_inc(&pci_parity_count); |
1910 | } | 1895 | } |
1911 | 1896 | ||
1912 | if (status & (PCI_STATUS_DETECTED_PARITY)) { | 1897 | if (status & (PCI_STATUS_DETECTED_PARITY)) { |
1913 | printk(KERN_CRIT | 1898 | edac_printk(KERN_CRIT, EDAC_PCI, "Bridge " |
1914 | "EDAC PCI-Bridge- " | ||
1915 | "Detected Parity Error on %s\n", | 1899 | "Detected Parity Error on %s\n", |
1916 | pci_name (dev)); | 1900 | pci_name(dev)); |
1917 | 1901 | ||
1918 | atomic_inc(&pci_parity_count); | 1902 | atomic_inc(&pci_parity_count); |
1919 | } | 1903 | } |
@@ -1992,7 +1976,7 @@ static void do_pci_parity_check(void) | |||
1992 | unsigned long flags; | 1976 | unsigned long flags; |
1993 | int before_count; | 1977 | int before_count; |
1994 | 1978 | ||
1995 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 1979 | debugf3("%s()\n", __func__); |
1996 | 1980 | ||
1997 | if (!check_pci_parity) | 1981 | if (!check_pci_parity) |
1998 | return; | 1982 | return; |
@@ -2050,7 +2034,7 @@ static inline void check_mc_devices (void) | |||
2050 | struct list_head *item; | 2034 | struct list_head *item; |
2051 | struct mem_ctl_info *mci; | 2035 | struct mem_ctl_info *mci; |
2052 | 2036 | ||
2053 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 2037 | debugf3("%s()\n", __func__); |
2054 | 2038 | ||
2055 | /* during poll, have interrupts off */ | 2039 | /* during poll, have interrupts off */ |
2056 | local_irq_save(flags); | 2040 | local_irq_save(flags); |
@@ -2076,10 +2060,8 @@ static inline void check_mc_devices (void) | |||
2076 | */ | 2060 | */ |
2077 | static void do_edac_check(void) | 2061 | static void do_edac_check(void) |
2078 | { | 2062 | { |
2079 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 2063 | debugf3("%s()\n", __func__); |
2080 | |||
2081 | check_mc_devices(); | 2064 | check_mc_devices(); |
2082 | |||
2083 | do_pci_parity_check(); | 2065 | do_pci_parity_check(); |
2084 | } | 2066 | } |
2085 | 2067 | ||
@@ -2102,7 +2084,7 @@ static int edac_kernel_thread(void *arg) | |||
2102 | */ | 2084 | */ |
2103 | static int __init edac_mc_init(void) | 2085 | static int __init edac_mc_init(void) |
2104 | { | 2086 | { |
2105 | printk(KERN_INFO "MC: " __FILE__ " version " EDAC_MC_VERSION "\n"); | 2087 | edac_printk(KERN_INFO, EDAC_MC, EDAC_MC_VERSION "\n"); |
2106 | 2088 | ||
2107 | /* | 2089 | /* |
2108 | * Harvest and clear any boot/initialization PCI parity errors | 2090 | * Harvest and clear any boot/initialization PCI parity errors |
@@ -2118,14 +2100,16 @@ static int __init edac_mc_init(void) | |||
2118 | 2100 | ||
2119 | /* Create the MC sysfs entires */ | 2101 | /* Create the MC sysfs entires */ |
2120 | if (edac_sysfs_memctrl_setup()) { | 2102 | if (edac_sysfs_memctrl_setup()) { |
2121 | printk(KERN_ERR "EDAC MC: Error initializing sysfs code\n"); | 2103 | edac_printk(KERN_ERR, EDAC_MC, |
2104 | "Error initializing sysfs code\n"); | ||
2122 | return -ENODEV; | 2105 | return -ENODEV; |
2123 | } | 2106 | } |
2124 | 2107 | ||
2125 | /* Create the PCI parity sysfs entries */ | 2108 | /* Create the PCI parity sysfs entries */ |
2126 | if (edac_sysfs_pci_setup()) { | 2109 | if (edac_sysfs_pci_setup()) { |
2127 | edac_sysfs_memctrl_teardown(); | 2110 | edac_sysfs_memctrl_teardown(); |
2128 | printk(KERN_ERR "EDAC PCI: Error initializing sysfs code\n"); | 2111 | edac_printk(KERN_ERR, EDAC_MC, |
2112 | "EDAC PCI: Error initializing sysfs code\n"); | ||
2129 | return -ENODEV; | 2113 | return -ENODEV; |
2130 | } | 2114 | } |
2131 | 2115 | ||
@@ -2148,7 +2132,7 @@ static int __init edac_mc_init(void) | |||
2148 | */ | 2132 | */ |
2149 | static void __exit edac_mc_exit(void) | 2133 | static void __exit edac_mc_exit(void) |
2150 | { | 2134 | { |
2151 | debugf0("MC: " __FILE__ ": %s()\n", __func__); | 2135 | debugf0("%s()\n", __func__); |
2152 | 2136 | ||
2153 | kthread_stop(edac_thread); | 2137 | kthread_stop(edac_thread); |
2154 | 2138 | ||
diff --git a/drivers/edac/edac_mc.h b/drivers/edac/edac_mc.h index 75ecf484a43a..4bd8375a8d7e 100644 --- a/drivers/edac/edac_mc.h +++ b/drivers/edac/edac_mc.h | |||
@@ -43,10 +43,29 @@ | |||
43 | #define PAGES_TO_MiB( pages ) ( ( pages ) << ( PAGE_SHIFT - 20 ) ) | 43 | #define PAGES_TO_MiB( pages ) ( ( pages ) << ( PAGE_SHIFT - 20 ) ) |
44 | #endif | 44 | #endif |
45 | 45 | ||
46 | #define edac_printk(level, prefix, fmt, arg...) \ | ||
47 | printk(level "EDAC " prefix ": " fmt, ##arg) | ||
48 | |||
49 | #define edac_mc_printk(mci, level, fmt, arg...) \ | ||
50 | printk(level "EDAC MC%d: " fmt, mci->mc_idx, ##arg) | ||
51 | |||
52 | #define edac_mc_chipset_printk(mci, level, prefix, fmt, arg...) \ | ||
53 | printk(level "EDAC " prefix " MC%d: " fmt, mci->mc_idx, ##arg) | ||
54 | |||
55 | /* prefixes for edac_printk() and edac_mc_printk() */ | ||
56 | #define EDAC_MC "MC" | ||
57 | #define EDAC_PCI "PCI" | ||
58 | #define EDAC_DEBUG "DEBUG" | ||
59 | |||
46 | #ifdef CONFIG_EDAC_DEBUG | 60 | #ifdef CONFIG_EDAC_DEBUG |
47 | extern int edac_debug_level; | 61 | extern int edac_debug_level; |
48 | #define edac_debug_printk(level, fmt, args...) \ | 62 | |
49 | do { if (level <= edac_debug_level) printk(KERN_DEBUG fmt, ##args); } while(0) | 63 | #define edac_debug_printk(level, fmt, arg...) \ |
64 | do { \ | ||
65 | if (level <= edac_debug_level) \ | ||
66 | edac_printk(KERN_DEBUG, EDAC_DEBUG, fmt, ##arg); \ | ||
67 | } while(0) | ||
68 | |||
50 | #define debugf0( ... ) edac_debug_printk(0, __VA_ARGS__ ) | 69 | #define debugf0( ... ) edac_debug_printk(0, __VA_ARGS__ ) |
51 | #define debugf1( ... ) edac_debug_printk(1, __VA_ARGS__ ) | 70 | #define debugf1( ... ) edac_debug_printk(1, __VA_ARGS__ ) |
52 | #define debugf2( ... ) edac_debug_printk(2, __VA_ARGS__ ) | 71 | #define debugf2( ... ) edac_debug_printk(2, __VA_ARGS__ ) |
diff --git a/drivers/edac/i82860_edac.c b/drivers/edac/i82860_edac.c index 52596e75f9c2..fa9ab84fa5c9 100644 --- a/drivers/edac/i82860_edac.c +++ b/drivers/edac/i82860_edac.c | |||
@@ -19,6 +19,14 @@ | |||
19 | #include "edac_mc.h" | 19 | #include "edac_mc.h" |
20 | 20 | ||
21 | 21 | ||
22 | #define i82860_printk(level, fmt, arg...) \ | ||
23 | edac_printk(level, "i82860", fmt, ##arg) | ||
24 | |||
25 | |||
26 | #define i82860_mc_printk(mci, level, fmt, arg...) \ | ||
27 | edac_mc_chipset_printk(mci, level, "i82860", fmt, ##arg) | ||
28 | |||
29 | |||
22 | #ifndef PCI_DEVICE_ID_INTEL_82860_0 | 30 | #ifndef PCI_DEVICE_ID_INTEL_82860_0 |
23 | #define PCI_DEVICE_ID_INTEL_82860_0 0x2531 | 31 | #define PCI_DEVICE_ID_INTEL_82860_0 0x2531 |
24 | #endif /* PCI_DEVICE_ID_INTEL_82860_0 */ | 32 | #endif /* PCI_DEVICE_ID_INTEL_82860_0 */ |
@@ -117,7 +125,7 @@ static void i82860_check(struct mem_ctl_info *mci) | |||
117 | { | 125 | { |
118 | struct i82860_error_info info; | 126 | struct i82860_error_info info; |
119 | 127 | ||
120 | debugf1("MC%d: " __FILE__ ": %s()\n", mci->mc_idx, __func__); | 128 | debugf1("MC%d: %s()\n", mci->mc_idx, __func__); |
121 | i82860_get_error_info(mci, &info); | 129 | i82860_get_error_info(mci, &info); |
122 | i82860_process_error_info(mci, &info, 1); | 130 | i82860_process_error_info(mci, &info, 1); |
123 | } | 131 | } |
@@ -143,7 +151,7 @@ static int i82860_probe1(struct pci_dev *pdev, int dev_idx) | |||
143 | if (!mci) | 151 | if (!mci) |
144 | return -ENOMEM; | 152 | return -ENOMEM; |
145 | 153 | ||
146 | debugf3("MC: " __FILE__ ": %s(): init mci\n", __func__); | 154 | debugf3("%s(): init mci\n", __func__); |
147 | 155 | ||
148 | mci->pdev = pdev; | 156 | mci->pdev = pdev; |
149 | mci->mtype_cap = MEM_FLAG_DDR; | 157 | mci->mtype_cap = MEM_FLAG_DDR; |
@@ -179,8 +187,8 @@ static int i82860_probe1(struct pci_dev *pdev, int dev_idx) | |||
179 | 187 | ||
180 | cumul_size = (value & I82860_GBA_MASK) << | 188 | cumul_size = (value & I82860_GBA_MASK) << |
181 | (I82860_GBA_SHIFT - PAGE_SHIFT); | 189 | (I82860_GBA_SHIFT - PAGE_SHIFT); |
182 | debugf3("MC: " __FILE__ ": %s(): (%d) cumul_size 0x%x\n", | 190 | debugf3("%s(): (%d) cumul_size 0x%x\n", __func__, index, |
183 | __func__, index, cumul_size); | 191 | cumul_size); |
184 | if (cumul_size == last_cumul_size) | 192 | if (cumul_size == last_cumul_size) |
185 | continue; /* not populated */ | 193 | continue; /* not populated */ |
186 | 194 | ||
@@ -198,13 +206,11 @@ static int i82860_probe1(struct pci_dev *pdev, int dev_idx) | |||
198 | pci_write_bits16(mci->pdev, I82860_ERRSTS, 0x0003, 0x0003); | 206 | pci_write_bits16(mci->pdev, I82860_ERRSTS, 0x0003, 0x0003); |
199 | 207 | ||
200 | if (edac_mc_add_mc(mci)) { | 208 | if (edac_mc_add_mc(mci)) { |
201 | debugf3("MC: " __FILE__ | 209 | debugf3("%s(): failed edac_mc_add_mc()\n", __func__); |
202 | ": %s(): failed edac_mc_add_mc()\n", | ||
203 | __func__); | ||
204 | edac_mc_free(mci); | 210 | edac_mc_free(mci); |
205 | } else { | 211 | } else { |
206 | /* get this far and it's successful */ | 212 | /* get this far and it's successful */ |
207 | debugf3("MC: " __FILE__ ": %s(): success\n", __func__); | 213 | debugf3("%s(): success\n", __func__); |
208 | rc = 0; | 214 | rc = 0; |
209 | } | 215 | } |
210 | return rc; | 216 | return rc; |
@@ -216,9 +222,9 @@ static int __devinit i82860_init_one(struct pci_dev *pdev, | |||
216 | { | 222 | { |
217 | int rc; | 223 | int rc; |
218 | 224 | ||
219 | debugf0("MC: " __FILE__ ": %s()\n", __func__); | 225 | debugf0("%s()\n", __func__); |
220 | 226 | ||
221 | printk(KERN_INFO "i82860 init one\n"); | 227 | i82860_printk(KERN_INFO, "i82860 init one\n"); |
222 | if(pci_enable_device(pdev) < 0) | 228 | if(pci_enable_device(pdev) < 0) |
223 | return -EIO; | 229 | return -EIO; |
224 | rc = i82860_probe1(pdev, ent->driver_data); | 230 | rc = i82860_probe1(pdev, ent->driver_data); |
@@ -231,7 +237,7 @@ static void __devexit i82860_remove_one(struct pci_dev *pdev) | |||
231 | { | 237 | { |
232 | struct mem_ctl_info *mci; | 238 | struct mem_ctl_info *mci; |
233 | 239 | ||
234 | debugf0(__FILE__ ": %s()\n", __func__); | 240 | debugf0("%s()\n", __func__); |
235 | 241 | ||
236 | mci = edac_mc_find_mci_by_pdev(pdev); | 242 | mci = edac_mc_find_mci_by_pdev(pdev); |
237 | if ((mci != NULL) && (edac_mc_del_mc(mci) == 0)) | 243 | if ((mci != NULL) && (edac_mc_del_mc(mci) == 0)) |
@@ -257,7 +263,7 @@ static int __init i82860_init(void) | |||
257 | { | 263 | { |
258 | int pci_rc; | 264 | int pci_rc; |
259 | 265 | ||
260 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 266 | debugf3("%s()\n", __func__); |
261 | if ((pci_rc = pci_register_driver(&i82860_driver)) < 0) | 267 | if ((pci_rc = pci_register_driver(&i82860_driver)) < 0) |
262 | return pci_rc; | 268 | return pci_rc; |
263 | 269 | ||
@@ -281,7 +287,7 @@ static int __init i82860_init(void) | |||
281 | 287 | ||
282 | static void __exit i82860_exit(void) | 288 | static void __exit i82860_exit(void) |
283 | { | 289 | { |
284 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 290 | debugf3("%s()\n", __func__); |
285 | 291 | ||
286 | pci_unregister_driver(&i82860_driver); | 292 | pci_unregister_driver(&i82860_driver); |
287 | if (!i82860_registered) { | 293 | if (!i82860_registered) { |
diff --git a/drivers/edac/i82875p_edac.c b/drivers/edac/i82875p_edac.c index 1991f94af753..0e22c66ee36c 100644 --- a/drivers/edac/i82875p_edac.c +++ b/drivers/edac/i82875p_edac.c | |||
@@ -26,6 +26,14 @@ | |||
26 | #include "edac_mc.h" | 26 | #include "edac_mc.h" |
27 | 27 | ||
28 | 28 | ||
29 | #define i82875p_printk(level, fmt, arg...) \ | ||
30 | edac_printk(level, "i82875p", fmt, ##arg) | ||
31 | |||
32 | |||
33 | #define i82875p_mc_printk(mci, level, fmt, arg...) \ | ||
34 | edac_mc_chipset_printk(mci, level, "i82875p", fmt, ##arg) | ||
35 | |||
36 | |||
29 | #ifndef PCI_DEVICE_ID_INTEL_82875_0 | 37 | #ifndef PCI_DEVICE_ID_INTEL_82875_0 |
30 | #define PCI_DEVICE_ID_INTEL_82875_0 0x2578 | 38 | #define PCI_DEVICE_ID_INTEL_82875_0 0x2578 |
31 | #endif /* PCI_DEVICE_ID_INTEL_82875_0 */ | 39 | #endif /* PCI_DEVICE_ID_INTEL_82875_0 */ |
@@ -254,7 +262,7 @@ static void i82875p_check(struct mem_ctl_info *mci) | |||
254 | { | 262 | { |
255 | struct i82875p_error_info info; | 263 | struct i82875p_error_info info; |
256 | 264 | ||
257 | debugf1("MC%d: " __FILE__ ": %s()\n", mci->mc_idx, __func__); | 265 | debugf1("MC%d: %s()\n", mci->mc_idx, __func__); |
258 | i82875p_get_error_info(mci, &info); | 266 | i82875p_get_error_info(mci, &info); |
259 | i82875p_process_error_info(mci, &info, 1); | 267 | i82875p_process_error_info(mci, &info, 1); |
260 | } | 268 | } |
@@ -279,7 +287,7 @@ static int i82875p_probe1(struct pci_dev *pdev, int dev_idx) | |||
279 | u32 nr_chans; | 287 | u32 nr_chans; |
280 | u32 drc_ddim; /* DRAM Data Integrity Mode 0=none,2=edac */ | 288 | u32 drc_ddim; /* DRAM Data Integrity Mode 0=none,2=edac */ |
281 | 289 | ||
282 | debugf0("MC: " __FILE__ ": %s()\n", __func__); | 290 | debugf0("%s()\n", __func__); |
283 | 291 | ||
284 | ovrfl_pdev = pci_find_device(PCI_VEND_DEV(INTEL, 82875_6), NULL); | 292 | ovrfl_pdev = pci_find_device(PCI_VEND_DEV(INTEL, 82875_6), NULL); |
285 | 293 | ||
@@ -298,16 +306,16 @@ static int i82875p_probe1(struct pci_dev *pdev, int dev_idx) | |||
298 | } | 306 | } |
299 | #ifdef CONFIG_PROC_FS | 307 | #ifdef CONFIG_PROC_FS |
300 | if (!ovrfl_pdev->procent && pci_proc_attach_device(ovrfl_pdev)) { | 308 | if (!ovrfl_pdev->procent && pci_proc_attach_device(ovrfl_pdev)) { |
301 | printk(KERN_ERR "MC: " __FILE__ | 309 | i82875p_printk(KERN_ERR, |
302 | ": %s(): Failed to attach overflow device\n", | 310 | "%s(): Failed to attach overflow device\n", |
303 | __func__); | 311 | __func__); |
304 | goto fail; | 312 | goto fail; |
305 | } | 313 | } |
306 | #endif /* CONFIG_PROC_FS */ | 314 | #endif /* CONFIG_PROC_FS */ |
307 | if (pci_enable_device(ovrfl_pdev)) { | 315 | if (pci_enable_device(ovrfl_pdev)) { |
308 | printk(KERN_ERR "MC: " __FILE__ | 316 | i82875p_printk(KERN_ERR, |
309 | ": %s(): Failed to enable overflow device\n", | 317 | "%s(): Failed to enable overflow device\n", |
310 | __func__); | 318 | __func__); |
311 | goto fail; | 319 | goto fail; |
312 | } | 320 | } |
313 | 321 | ||
@@ -321,8 +329,8 @@ static int i82875p_probe1(struct pci_dev *pdev, int dev_idx) | |||
321 | pci_resource_len(ovrfl_pdev, 0)); | 329 | pci_resource_len(ovrfl_pdev, 0)); |
322 | 330 | ||
323 | if (!ovrfl_window) { | 331 | if (!ovrfl_window) { |
324 | printk(KERN_ERR "MC: " __FILE__ | 332 | i82875p_printk(KERN_ERR, "%s(): Failed to ioremap bar6\n", |
325 | ": %s(): Failed to ioremap bar6\n", __func__); | 333 | __func__); |
326 | goto fail; | 334 | goto fail; |
327 | } | 335 | } |
328 | 336 | ||
@@ -340,7 +348,7 @@ static int i82875p_probe1(struct pci_dev *pdev, int dev_idx) | |||
340 | goto fail; | 348 | goto fail; |
341 | } | 349 | } |
342 | 350 | ||
343 | debugf3("MC: " __FILE__ ": %s(): init mci\n", __func__); | 351 | debugf3("%s(): init mci\n", __func__); |
344 | 352 | ||
345 | mci->pdev = pdev; | 353 | mci->pdev = pdev; |
346 | mci->mtype_cap = MEM_FLAG_DDR; | 354 | mci->mtype_cap = MEM_FLAG_DDR; |
@@ -355,7 +363,7 @@ static int i82875p_probe1(struct pci_dev *pdev, int dev_idx) | |||
355 | mci->edac_check = i82875p_check; | 363 | mci->edac_check = i82875p_check; |
356 | mci->ctl_page_to_phys = NULL; | 364 | mci->ctl_page_to_phys = NULL; |
357 | 365 | ||
358 | debugf3("MC: " __FILE__ ": %s(): init pvt\n", __func__); | 366 | debugf3("%s(): init pvt\n", __func__); |
359 | 367 | ||
360 | pvt = (struct i82875p_pvt *) mci->pvt_info; | 368 | pvt = (struct i82875p_pvt *) mci->pvt_info; |
361 | pvt->ovrfl_pdev = ovrfl_pdev; | 369 | pvt->ovrfl_pdev = ovrfl_pdev; |
@@ -374,8 +382,8 @@ static int i82875p_probe1(struct pci_dev *pdev, int dev_idx) | |||
374 | 382 | ||
375 | value = readb(ovrfl_window + I82875P_DRB + index); | 383 | value = readb(ovrfl_window + I82875P_DRB + index); |
376 | cumul_size = value << (I82875P_DRB_SHIFT - PAGE_SHIFT); | 384 | cumul_size = value << (I82875P_DRB_SHIFT - PAGE_SHIFT); |
377 | debugf3("MC: " __FILE__ ": %s(): (%d) cumul_size 0x%x\n", | 385 | debugf3("%s(): (%d) cumul_size 0x%x\n", __func__, index, |
378 | __func__, index, cumul_size); | 386 | cumul_size); |
379 | if (cumul_size == last_cumul_size) | 387 | if (cumul_size == last_cumul_size) |
380 | continue; /* not populated */ | 388 | continue; /* not populated */ |
381 | 389 | ||
@@ -393,13 +401,12 @@ static int i82875p_probe1(struct pci_dev *pdev, int dev_idx) | |||
393 | pci_write_bits16(mci->pdev, I82875P_ERRSTS, 0x0081, 0x0081); | 401 | pci_write_bits16(mci->pdev, I82875P_ERRSTS, 0x0081, 0x0081); |
394 | 402 | ||
395 | if (edac_mc_add_mc(mci)) { | 403 | if (edac_mc_add_mc(mci)) { |
396 | debugf3("MC: " __FILE__ | 404 | debugf3("%s(): failed edac_mc_add_mc()\n", __func__); |
397 | ": %s(): failed edac_mc_add_mc()\n", __func__); | ||
398 | goto fail; | 405 | goto fail; |
399 | } | 406 | } |
400 | 407 | ||
401 | /* get this far and it's successful */ | 408 | /* get this far and it's successful */ |
402 | debugf3("MC: " __FILE__ ": %s(): success\n", __func__); | 409 | debugf3("%s(): success\n", __func__); |
403 | return 0; | 410 | return 0; |
404 | 411 | ||
405 | fail: | 412 | fail: |
@@ -425,9 +432,9 @@ static int __devinit i82875p_init_one(struct pci_dev *pdev, | |||
425 | { | 432 | { |
426 | int rc; | 433 | int rc; |
427 | 434 | ||
428 | debugf0("MC: " __FILE__ ": %s()\n", __func__); | 435 | debugf0("%s()\n", __func__); |
429 | 436 | ||
430 | printk(KERN_INFO "i82875p init one\n"); | 437 | i82875p_printk(KERN_INFO, "i82875p init one\n"); |
431 | if(pci_enable_device(pdev) < 0) | 438 | if(pci_enable_device(pdev) < 0) |
432 | return -EIO; | 439 | return -EIO; |
433 | rc = i82875p_probe1(pdev, ent->driver_data); | 440 | rc = i82875p_probe1(pdev, ent->driver_data); |
@@ -442,7 +449,7 @@ static void __devexit i82875p_remove_one(struct pci_dev *pdev) | |||
442 | struct mem_ctl_info *mci; | 449 | struct mem_ctl_info *mci; |
443 | struct i82875p_pvt *pvt = NULL; | 450 | struct i82875p_pvt *pvt = NULL; |
444 | 451 | ||
445 | debugf0(__FILE__ ": %s()\n", __func__); | 452 | debugf0("%s()\n", __func__); |
446 | 453 | ||
447 | if ((mci = edac_mc_find_mci_by_pdev(pdev)) == NULL) | 454 | if ((mci = edac_mc_find_mci_by_pdev(pdev)) == NULL) |
448 | return; | 455 | return; |
@@ -487,7 +494,7 @@ static int __init i82875p_init(void) | |||
487 | { | 494 | { |
488 | int pci_rc; | 495 | int pci_rc; |
489 | 496 | ||
490 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 497 | debugf3("%s()\n", __func__); |
491 | pci_rc = pci_register_driver(&i82875p_driver); | 498 | pci_rc = pci_register_driver(&i82875p_driver); |
492 | if (pci_rc < 0) | 499 | if (pci_rc < 0) |
493 | return pci_rc; | 500 | return pci_rc; |
@@ -513,7 +520,7 @@ static int __init i82875p_init(void) | |||
513 | 520 | ||
514 | static void __exit i82875p_exit(void) | 521 | static void __exit i82875p_exit(void) |
515 | { | 522 | { |
516 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 523 | debugf3("%s()\n", __func__); |
517 | 524 | ||
518 | pci_unregister_driver(&i82875p_driver); | 525 | pci_unregister_driver(&i82875p_driver); |
519 | if (!i82875p_registered) { | 526 | if (!i82875p_registered) { |
diff --git a/drivers/edac/r82600_edac.c b/drivers/edac/r82600_edac.c index e90892831b90..27d16dc2f11d 100644 --- a/drivers/edac/r82600_edac.c +++ b/drivers/edac/r82600_edac.c | |||
@@ -26,6 +26,12 @@ | |||
26 | 26 | ||
27 | #include "edac_mc.h" | 27 | #include "edac_mc.h" |
28 | 28 | ||
29 | #define r82600_printk(level, fmt, arg...) \ | ||
30 | edac_printk(level, "r82600", fmt, ##arg) | ||
31 | |||
32 | #define r82600_mc_printk(mci, level, fmt, arg...) \ | ||
33 | edac_mc_chipset_printk(mci, level, "r82600", fmt, ##arg) | ||
34 | |||
29 | /* Radisys say "The 82600 integrates a main memory SDRAM controller that | 35 | /* Radisys say "The 82600 integrates a main memory SDRAM controller that |
30 | * supports up to four banks of memory. The four banks can support a mix of | 36 | * supports up to four banks of memory. The four banks can support a mix of |
31 | * sizes of 64 bit wide (72 bits with ECC) Synchronous DRAM (SDRAM) DIMMs, | 37 | * sizes of 64 bit wide (72 bits with ECC) Synchronous DRAM (SDRAM) DIMMs, |
@@ -196,7 +202,7 @@ static void r82600_check(struct mem_ctl_info *mci) | |||
196 | { | 202 | { |
197 | struct r82600_error_info info; | 203 | struct r82600_error_info info; |
198 | 204 | ||
199 | debugf1("MC%d: " __FILE__ ": %s()\n", mci->mc_idx, __func__); | 205 | debugf1("MC%d: %s()\n", mci->mc_idx, __func__); |
200 | r82600_get_error_info(mci, &info); | 206 | r82600_get_error_info(mci, &info); |
201 | r82600_process_error_info(mci, &info, 1); | 207 | r82600_process_error_info(mci, &info, 1); |
202 | } | 208 | } |
@@ -215,7 +221,7 @@ static int r82600_probe1(struct pci_dev *pdev, int dev_idx) | |||
215 | u32 row_high_limit_last = 0; | 221 | u32 row_high_limit_last = 0; |
216 | u32 eap_init_bits; | 222 | u32 eap_init_bits; |
217 | 223 | ||
218 | debugf0("MC: " __FILE__ ": %s()\n", __func__); | 224 | debugf0("%s()\n", __func__); |
219 | 225 | ||
220 | 226 | ||
221 | pci_read_config_byte(pdev, R82600_DRAMC, &dramcr); | 227 | pci_read_config_byte(pdev, R82600_DRAMC, &dramcr); |
@@ -226,11 +232,10 @@ static int r82600_probe1(struct pci_dev *pdev, int dev_idx) | |||
226 | scrub_disabled = eapr & BIT(31); | 232 | scrub_disabled = eapr & BIT(31); |
227 | sdram_refresh_rate = dramcr & (BIT(0) | BIT(1)); | 233 | sdram_refresh_rate = dramcr & (BIT(0) | BIT(1)); |
228 | 234 | ||
229 | debugf2("MC: " __FILE__ ": %s(): sdram refresh rate = %#0x\n", | 235 | debugf2("%s(): sdram refresh rate = %#0x\n", __func__, |
230 | __func__, sdram_refresh_rate); | 236 | sdram_refresh_rate); |
231 | 237 | ||
232 | debugf2("MC: " __FILE__ ": %s(): DRAMC register = %#0x\n", __func__, | 238 | debugf2("%s(): DRAMC register = %#0x\n", __func__, dramcr); |
233 | dramcr); | ||
234 | 239 | ||
235 | mci = edac_mc_alloc(0, R82600_NR_CSROWS, R82600_NR_CHANS); | 240 | mci = edac_mc_alloc(0, R82600_NR_CSROWS, R82600_NR_CHANS); |
236 | 241 | ||
@@ -239,7 +244,7 @@ static int r82600_probe1(struct pci_dev *pdev, int dev_idx) | |||
239 | goto fail; | 244 | goto fail; |
240 | } | 245 | } |
241 | 246 | ||
242 | debugf0("MC: " __FILE__ ": %s(): mci = %p\n", __func__, mci); | 247 | debugf0("%s(): mci = %p\n", __func__, mci); |
243 | 248 | ||
244 | mci->pdev = pdev; | 249 | mci->pdev = pdev; |
245 | mci->mtype_cap = MEM_FLAG_RDDR | MEM_FLAG_DDR; | 250 | mci->mtype_cap = MEM_FLAG_RDDR | MEM_FLAG_DDR; |
@@ -255,9 +260,8 @@ static int r82600_probe1(struct pci_dev *pdev, int dev_idx) | |||
255 | mci->edac_cap = EDAC_FLAG_NONE | EDAC_FLAG_EC | EDAC_FLAG_SECDED; | 260 | mci->edac_cap = EDAC_FLAG_NONE | EDAC_FLAG_EC | EDAC_FLAG_SECDED; |
256 | if (ecc_on) { | 261 | if (ecc_on) { |
257 | if (scrub_disabled) | 262 | if (scrub_disabled) |
258 | debugf3("MC: " __FILE__ ": %s(): mci = %p - " | 263 | debugf3("%s(): mci = %p - Scrubbing disabled! EAP: " |
259 | "Scrubbing disabled! EAP: %#0x\n", __func__, | 264 | "%#0x\n", __func__, mci, eapr); |
260 | mci, eapr); | ||
261 | } else | 265 | } else |
262 | mci->edac_cap = EDAC_FLAG_NONE; | 266 | mci->edac_cap = EDAC_FLAG_NONE; |
263 | 267 | ||
@@ -276,16 +280,15 @@ static int r82600_probe1(struct pci_dev *pdev, int dev_idx) | |||
276 | /* find the DRAM Chip Select Base address and mask */ | 280 | /* find the DRAM Chip Select Base address and mask */ |
277 | pci_read_config_byte(mci->pdev, R82600_DRBA + index, &drbar); | 281 | pci_read_config_byte(mci->pdev, R82600_DRBA + index, &drbar); |
278 | 282 | ||
279 | debugf1("MC%d: " __FILE__ ": %s() Row=%d DRBA = %#0x\n", | 283 | debugf1("MC%d: %s() Row=%d DRBA = %#0x\n", mci->mc_idx, |
280 | mci->mc_idx, __func__, index, drbar); | 284 | __func__, index, drbar); |
281 | 285 | ||
282 | row_high_limit = ((u32) drbar << 24); | 286 | row_high_limit = ((u32) drbar << 24); |
283 | /* row_high_limit = ((u32)drbar << 24) | 0xffffffUL; */ | 287 | /* row_high_limit = ((u32)drbar << 24) | 0xffffffUL; */ |
284 | 288 | ||
285 | debugf1("MC%d: " __FILE__ ": %s() Row=%d, " | 289 | debugf1("MC%d: %s() Row=%d, Boundry Address=%#0x, Last = " |
286 | "Boundry Address=%#0x, Last = %#0x \n", | 290 | "%#0x \n", mci->mc_idx, __func__, index, |
287 | mci->mc_idx, __func__, index, row_high_limit, | 291 | row_high_limit, row_high_limit_last); |
288 | row_high_limit_last); | ||
289 | 292 | ||
290 | /* Empty row [p.57] */ | 293 | /* Empty row [p.57] */ |
291 | if (row_high_limit == row_high_limit_last) | 294 | if (row_high_limit == row_high_limit_last) |
@@ -312,8 +315,7 @@ static int r82600_probe1(struct pci_dev *pdev, int dev_idx) | |||
312 | /* FIXME should we? */ | 315 | /* FIXME should we? */ |
313 | 316 | ||
314 | if (edac_mc_add_mc(mci)) { | 317 | if (edac_mc_add_mc(mci)) { |
315 | debugf3("MC: " __FILE__ | 318 | debugf3("%s(): failed edac_mc_add_mc()\n", __func__); |
316 | ": %s(): failed edac_mc_add_mc()\n", __func__); | ||
317 | goto fail; | 319 | goto fail; |
318 | } | 320 | } |
319 | 321 | ||
@@ -325,14 +327,14 @@ static int r82600_probe1(struct pci_dev *pdev, int dev_idx) | |||
325 | eap_init_bits = BIT(0) & BIT(1); | 327 | eap_init_bits = BIT(0) & BIT(1); |
326 | if (disable_hardware_scrub) { | 328 | if (disable_hardware_scrub) { |
327 | eap_init_bits |= BIT(31); | 329 | eap_init_bits |= BIT(31); |
328 | debugf3("MC: " __FILE__ ": %s(): Disabling Hardware Scrub " | 330 | debugf3("%s(): Disabling Hardware Scrub (scrub on error)\n", |
329 | "(scrub on error)\n", __func__); | 331 | __func__); |
330 | } | 332 | } |
331 | 333 | ||
332 | pci_write_bits32(mci->pdev, R82600_EAP, eap_init_bits, | 334 | pci_write_bits32(mci->pdev, R82600_EAP, eap_init_bits, |
333 | eap_init_bits); | 335 | eap_init_bits); |
334 | 336 | ||
335 | debugf3("MC: " __FILE__ ": %s(): success\n", __func__); | 337 | debugf3("%s(): success\n", __func__); |
336 | return 0; | 338 | return 0; |
337 | 339 | ||
338 | fail: | 340 | fail: |
@@ -346,7 +348,7 @@ fail: | |||
346 | static int __devinit r82600_init_one(struct pci_dev *pdev, | 348 | static int __devinit r82600_init_one(struct pci_dev *pdev, |
347 | const struct pci_device_id *ent) | 349 | const struct pci_device_id *ent) |
348 | { | 350 | { |
349 | debugf0("MC: " __FILE__ ": %s()\n", __func__); | 351 | debugf0("%s()\n", __func__); |
350 | 352 | ||
351 | /* don't need to call pci_device_enable() */ | 353 | /* don't need to call pci_device_enable() */ |
352 | return r82600_probe1(pdev, ent->driver_data); | 354 | return r82600_probe1(pdev, ent->driver_data); |
@@ -357,7 +359,7 @@ static void __devexit r82600_remove_one(struct pci_dev *pdev) | |||
357 | { | 359 | { |
358 | struct mem_ctl_info *mci; | 360 | struct mem_ctl_info *mci; |
359 | 361 | ||
360 | debugf0(__FILE__ ": %s()\n", __func__); | 362 | debugf0("%s()\n", __func__); |
361 | 363 | ||
362 | if (((mci = edac_mc_find_mci_by_pdev(pdev)) != NULL) && | 364 | if (((mci = edac_mc_find_mci_by_pdev(pdev)) != NULL) && |
363 | !edac_mc_del_mc(mci)) | 365 | !edac_mc_del_mc(mci)) |