diff options
author | Dave Jiang <djiang@mvista.com> | 2007-07-19 04:50:06 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-19 13:04:54 -0400 |
commit | 203333cbbaae3941504c2b6e92850783bf361b6f (patch) | |
tree | c205152abe7fed4c219066bd1f8d5e299c9ff5f6 /drivers/edac/e752x_edac.c | |
parent | 466b71d58413a515a8029b4eccf98c08b8bb5aca (diff) |
drivers/edac: Lindent e752x
Run e752x_edac.c file through Lindent for cleanup
Signed-off-by: Dave Jiang <djiang@mvista.com>
Signed-off-by: Douglas Thompson <dougthompson@xmission.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/edac/e752x_edac.c')
-rw-r--r-- | drivers/edac/e752x_edac.c | 328 |
1 files changed, 158 insertions, 170 deletions
diff --git a/drivers/edac/e752x_edac.c b/drivers/edac/e752x_edac.c index d8b86584afbb..45c55a067c73 100644 --- a/drivers/edac/e752x_edac.c +++ b/drivers/edac/e752x_edac.c | |||
@@ -204,27 +204,24 @@ struct e752x_error_info { | |||
204 | 204 | ||
205 | static const struct e752x_dev_info e752x_devs[] = { | 205 | static const struct e752x_dev_info e752x_devs[] = { |
206 | [E7520] = { | 206 | [E7520] = { |
207 | .err_dev = PCI_DEVICE_ID_INTEL_7520_1_ERR, | 207 | .err_dev = PCI_DEVICE_ID_INTEL_7520_1_ERR, |
208 | .ctl_dev = PCI_DEVICE_ID_INTEL_7520_0, | 208 | .ctl_dev = PCI_DEVICE_ID_INTEL_7520_0, |
209 | .ctl_name = "E7520" | 209 | .ctl_name = "E7520"}, |
210 | }, | ||
211 | [E7525] = { | 210 | [E7525] = { |
212 | .err_dev = PCI_DEVICE_ID_INTEL_7525_1_ERR, | 211 | .err_dev = PCI_DEVICE_ID_INTEL_7525_1_ERR, |
213 | .ctl_dev = PCI_DEVICE_ID_INTEL_7525_0, | 212 | .ctl_dev = PCI_DEVICE_ID_INTEL_7525_0, |
214 | .ctl_name = "E7525" | 213 | .ctl_name = "E7525"}, |
215 | }, | ||
216 | [E7320] = { | 214 | [E7320] = { |
217 | .err_dev = PCI_DEVICE_ID_INTEL_7320_1_ERR, | 215 | .err_dev = PCI_DEVICE_ID_INTEL_7320_1_ERR, |
218 | .ctl_dev = PCI_DEVICE_ID_INTEL_7320_0, | 216 | .ctl_dev = PCI_DEVICE_ID_INTEL_7320_0, |
219 | .ctl_name = "E7320" | 217 | .ctl_name = "E7320"}, |
220 | }, | ||
221 | }; | 218 | }; |
222 | 219 | ||
223 | static unsigned long ctl_page_to_phys(struct mem_ctl_info *mci, | 220 | static unsigned long ctl_page_to_phys(struct mem_ctl_info *mci, |
224 | unsigned long page) | 221 | unsigned long page) |
225 | { | 222 | { |
226 | u32 remap; | 223 | u32 remap; |
227 | struct e752x_pvt *pvt = (struct e752x_pvt *) mci->pvt_info; | 224 | struct e752x_pvt *pvt = (struct e752x_pvt *)mci->pvt_info; |
228 | 225 | ||
229 | debugf3("%s()\n", __func__); | 226 | debugf3("%s()\n", __func__); |
230 | 227 | ||
@@ -244,13 +241,13 @@ static unsigned long ctl_page_to_phys(struct mem_ctl_info *mci, | |||
244 | } | 241 | } |
245 | 242 | ||
246 | static void do_process_ce(struct mem_ctl_info *mci, u16 error_one, | 243 | static void do_process_ce(struct mem_ctl_info *mci, u16 error_one, |
247 | u32 sec1_add, u16 sec1_syndrome) | 244 | u32 sec1_add, u16 sec1_syndrome) |
248 | { | 245 | { |
249 | u32 page; | 246 | u32 page; |
250 | int row; | 247 | int row; |
251 | int channel; | 248 | int channel; |
252 | int i; | 249 | int i; |
253 | struct e752x_pvt *pvt = (struct e752x_pvt *) mci->pvt_info; | 250 | struct e752x_pvt *pvt = (struct e752x_pvt *)mci->pvt_info; |
254 | 251 | ||
255 | debugf3("%s()\n", __func__); | 252 | debugf3("%s()\n", __func__); |
256 | 253 | ||
@@ -262,9 +259,10 @@ static void do_process_ce(struct mem_ctl_info *mci, u16 error_one, | |||
262 | /* chip select are bits 14 & 13 */ | 259 | /* chip select are bits 14 & 13 */ |
263 | row = ((page >> 1) & 3); | 260 | row = ((page >> 1) & 3); |
264 | e752x_printk(KERN_WARNING, | 261 | e752x_printk(KERN_WARNING, |
265 | "Test row %d Table %d %d %d %d %d %d %d %d\n", row, | 262 | "Test row %d Table %d %d %d %d %d %d %d %d\n", row, |
266 | pvt->map[0], pvt->map[1], pvt->map[2], pvt->map[3], | 263 | pvt->map[0], pvt->map[1], pvt->map[2], pvt->map[3], |
267 | pvt->map[4], pvt->map[5], pvt->map[6], pvt->map[7]); | 264 | pvt->map[4], pvt->map[5], pvt->map[6], |
265 | pvt->map[7]); | ||
268 | 266 | ||
269 | /* test for channel remapping */ | 267 | /* test for channel remapping */ |
270 | for (i = 0; i < 8; i++) { | 268 | for (i = 0; i < 8; i++) { |
@@ -278,7 +276,8 @@ static void do_process_ce(struct mem_ctl_info *mci, u16 error_one, | |||
278 | row = i; | 276 | row = i; |
279 | else | 277 | else |
280 | e752x_mc_printk(mci, KERN_WARNING, | 278 | e752x_mc_printk(mci, KERN_WARNING, |
281 | "row %d not found in remap table\n", row); | 279 | "row %d not found in remap table\n", |
280 | row); | ||
282 | } else | 281 | } else |
283 | row = edac_mc_find_csrow_by_page(mci, page); | 282 | row = edac_mc_find_csrow_by_page(mci, page); |
284 | 283 | ||
@@ -290,12 +289,12 @@ static void do_process_ce(struct mem_ctl_info *mci, u16 error_one, | |||
290 | 289 | ||
291 | /* e752x mc reads 34:6 of the DRAM linear address */ | 290 | /* e752x mc reads 34:6 of the DRAM linear address */ |
292 | edac_mc_handle_ce(mci, page, offset_in_page(sec1_add << 4), | 291 | edac_mc_handle_ce(mci, page, offset_in_page(sec1_add << 4), |
293 | sec1_syndrome, row, channel, "e752x CE"); | 292 | sec1_syndrome, row, channel, "e752x CE"); |
294 | } | 293 | } |
295 | 294 | ||
296 | static inline void process_ce(struct mem_ctl_info *mci, u16 error_one, | 295 | static inline void process_ce(struct mem_ctl_info *mci, u16 error_one, |
297 | u32 sec1_add, u16 sec1_syndrome, int *error_found, | 296 | u32 sec1_add, u16 sec1_syndrome, int *error_found, |
298 | int handle_error) | 297 | int handle_error) |
299 | { | 298 | { |
300 | *error_found = 1; | 299 | *error_found = 1; |
301 | 300 | ||
@@ -304,11 +303,11 @@ static inline void process_ce(struct mem_ctl_info *mci, u16 error_one, | |||
304 | } | 303 | } |
305 | 304 | ||
306 | static void do_process_ue(struct mem_ctl_info *mci, u16 error_one, | 305 | static void do_process_ue(struct mem_ctl_info *mci, u16 error_one, |
307 | u32 ded_add, u32 scrb_add) | 306 | u32 ded_add, u32 scrb_add) |
308 | { | 307 | { |
309 | u32 error_2b, block_page; | 308 | u32 error_2b, block_page; |
310 | int row; | 309 | int row; |
311 | struct e752x_pvt *pvt = (struct e752x_pvt *) mci->pvt_info; | 310 | struct e752x_pvt *pvt = (struct e752x_pvt *)mci->pvt_info; |
312 | 311 | ||
313 | debugf3("%s()\n", __func__); | 312 | debugf3("%s()\n", __func__); |
314 | 313 | ||
@@ -319,14 +318,14 @@ static void do_process_ue(struct mem_ctl_info *mci, u16 error_one, | |||
319 | block_page = error_2b >> (PAGE_SHIFT - 4); | 318 | block_page = error_2b >> (PAGE_SHIFT - 4); |
320 | 319 | ||
321 | row = pvt->mc_symmetric ? | 320 | row = pvt->mc_symmetric ? |
322 | /* chip select are bits 14 & 13 */ | 321 | /* chip select are bits 14 & 13 */ |
323 | ((block_page >> 1) & 3) : | 322 | ((block_page >> 1) & 3) : |
324 | edac_mc_find_csrow_by_page(mci, block_page); | 323 | edac_mc_find_csrow_by_page(mci, block_page); |
325 | 324 | ||
326 | /* e752x mc reads 34:6 of the DRAM linear address */ | 325 | /* e752x mc reads 34:6 of the DRAM linear address */ |
327 | edac_mc_handle_ue(mci, block_page, | 326 | edac_mc_handle_ue(mci, block_page, |
328 | offset_in_page(error_2b << 4), | 327 | offset_in_page(error_2b << 4), |
329 | row, "e752x UE from Read"); | 328 | row, "e752x UE from Read"); |
330 | } | 329 | } |
331 | if (error_one & 0x0404) { | 330 | if (error_one & 0x0404) { |
332 | error_2b = scrb_add; | 331 | error_2b = scrb_add; |
@@ -335,19 +334,20 @@ static void do_process_ue(struct mem_ctl_info *mci, u16 error_one, | |||
335 | block_page = error_2b >> (PAGE_SHIFT - 4); | 334 | block_page = error_2b >> (PAGE_SHIFT - 4); |
336 | 335 | ||
337 | row = pvt->mc_symmetric ? | 336 | row = pvt->mc_symmetric ? |
338 | /* chip select are bits 14 & 13 */ | 337 | /* chip select are bits 14 & 13 */ |
339 | ((block_page >> 1) & 3) : | 338 | ((block_page >> 1) & 3) : |
340 | edac_mc_find_csrow_by_page(mci, block_page); | 339 | edac_mc_find_csrow_by_page(mci, block_page); |
341 | 340 | ||
342 | /* e752x mc reads 34:6 of the DRAM linear address */ | 341 | /* e752x mc reads 34:6 of the DRAM linear address */ |
343 | edac_mc_handle_ue(mci, block_page, | 342 | edac_mc_handle_ue(mci, block_page, |
344 | offset_in_page(error_2b << 4), | 343 | offset_in_page(error_2b << 4), |
345 | row, "e752x UE from Scruber"); | 344 | row, "e752x UE from Scruber"); |
346 | } | 345 | } |
347 | } | 346 | } |
348 | 347 | ||
349 | static inline void process_ue(struct mem_ctl_info *mci, u16 error_one, | 348 | static inline void process_ue(struct mem_ctl_info *mci, u16 error_one, |
350 | u32 ded_add, u32 scrb_add, int *error_found, int handle_error) | 349 | u32 ded_add, u32 scrb_add, int *error_found, |
350 | int handle_error) | ||
351 | { | 351 | { |
352 | *error_found = 1; | 352 | *error_found = 1; |
353 | 353 | ||
@@ -356,7 +356,7 @@ static inline void process_ue(struct mem_ctl_info *mci, u16 error_one, | |||
356 | } | 356 | } |
357 | 357 | ||
358 | static inline void process_ue_no_info_wr(struct mem_ctl_info *mci, | 358 | static inline void process_ue_no_info_wr(struct mem_ctl_info *mci, |
359 | int *error_found, int handle_error) | 359 | int *error_found, int handle_error) |
360 | { | 360 | { |
361 | *error_found = 1; | 361 | *error_found = 1; |
362 | 362 | ||
@@ -368,24 +368,24 @@ static inline void process_ue_no_info_wr(struct mem_ctl_info *mci, | |||
368 | } | 368 | } |
369 | 369 | ||
370 | static void do_process_ded_retry(struct mem_ctl_info *mci, u16 error, | 370 | static void do_process_ded_retry(struct mem_ctl_info *mci, u16 error, |
371 | u32 retry_add) | 371 | u32 retry_add) |
372 | { | 372 | { |
373 | u32 error_1b, page; | 373 | u32 error_1b, page; |
374 | int row; | 374 | int row; |
375 | struct e752x_pvt *pvt = (struct e752x_pvt *) mci->pvt_info; | 375 | struct e752x_pvt *pvt = (struct e752x_pvt *)mci->pvt_info; |
376 | 376 | ||
377 | error_1b = retry_add; | 377 | error_1b = retry_add; |
378 | page = error_1b >> (PAGE_SHIFT - 4); /* convert the addr to 4k page */ | 378 | page = error_1b >> (PAGE_SHIFT - 4); /* convert the addr to 4k page */ |
379 | row = pvt->mc_symmetric ? | 379 | row = pvt->mc_symmetric ? ((page >> 1) & 3) : /* chip select are bits 14 & 13 */ |
380 | ((page >> 1) & 3) : /* chip select are bits 14 & 13 */ | 380 | edac_mc_find_csrow_by_page(mci, page); |
381 | edac_mc_find_csrow_by_page(mci, page); | ||
382 | e752x_mc_printk(mci, KERN_WARNING, | 381 | e752x_mc_printk(mci, KERN_WARNING, |
383 | "CE page 0x%lx, row %d : Memory read retry\n", | 382 | "CE page 0x%lx, row %d : Memory read retry\n", |
384 | (long unsigned int) page, row); | 383 | (long unsigned int)page, row); |
385 | } | 384 | } |
386 | 385 | ||
387 | static inline void process_ded_retry(struct mem_ctl_info *mci, u16 error, | 386 | static inline void process_ded_retry(struct mem_ctl_info *mci, u16 error, |
388 | u32 retry_add, int *error_found, int handle_error) | 387 | u32 retry_add, int *error_found, |
388 | int handle_error) | ||
389 | { | 389 | { |
390 | *error_found = 1; | 390 | *error_found = 1; |
391 | 391 | ||
@@ -394,7 +394,7 @@ static inline void process_ded_retry(struct mem_ctl_info *mci, u16 error, | |||
394 | } | 394 | } |
395 | 395 | ||
396 | static inline void process_threshold_ce(struct mem_ctl_info *mci, u16 error, | 396 | static inline void process_threshold_ce(struct mem_ctl_info *mci, u16 error, |
397 | int *error_found, int handle_error) | 397 | int *error_found, int handle_error) |
398 | { | 398 | { |
399 | *error_found = 1; | 399 | *error_found = 1; |
400 | 400 | ||
@@ -418,12 +418,12 @@ static void do_global_error(int fatal, u32 errors) | |||
418 | for (i = 0; i < 11; i++) { | 418 | for (i = 0; i < 11; i++) { |
419 | if (errors & (1 << i)) | 419 | if (errors & (1 << i)) |
420 | e752x_printk(KERN_WARNING, "%sError %s\n", | 420 | e752x_printk(KERN_WARNING, "%sError %s\n", |
421 | fatal_message[fatal], global_message[i]); | 421 | fatal_message[fatal], global_message[i]); |
422 | } | 422 | } |
423 | } | 423 | } |
424 | 424 | ||
425 | static inline void global_error(int fatal, u32 errors, int *error_found, | 425 | static inline void global_error(int fatal, u32 errors, int *error_found, |
426 | int handle_error) | 426 | int handle_error) |
427 | { | 427 | { |
428 | *error_found = 1; | 428 | *error_found = 1; |
429 | 429 | ||
@@ -445,12 +445,12 @@ static void do_hub_error(int fatal, u8 errors) | |||
445 | for (i = 0; i < 7; i++) { | 445 | for (i = 0; i < 7; i++) { |
446 | if (errors & (1 << i)) | 446 | if (errors & (1 << i)) |
447 | e752x_printk(KERN_WARNING, "%sError %s\n", | 447 | e752x_printk(KERN_WARNING, "%sError %s\n", |
448 | fatal_message[fatal], hub_message[i]); | 448 | fatal_message[fatal], hub_message[i]); |
449 | } | 449 | } |
450 | } | 450 | } |
451 | 451 | ||
452 | static inline void hub_error(int fatal, u8 errors, int *error_found, | 452 | static inline void hub_error(int fatal, u8 errors, int *error_found, |
453 | int handle_error) | 453 | int handle_error) |
454 | { | 454 | { |
455 | *error_found = 1; | 455 | *error_found = 1; |
456 | 456 | ||
@@ -472,7 +472,7 @@ static void do_membuf_error(u8 errors) | |||
472 | for (i = 0; i < 4; i++) { | 472 | for (i = 0; i < 4; i++) { |
473 | if (errors & (1 << i)) | 473 | if (errors & (1 << i)) |
474 | e752x_printk(KERN_WARNING, "Non-Fatal Error %s\n", | 474 | e752x_printk(KERN_WARNING, "Non-Fatal Error %s\n", |
475 | membuf_message[i]); | 475 | membuf_message[i]); |
476 | } | 476 | } |
477 | } | 477 | } |
478 | 478 | ||
@@ -503,12 +503,12 @@ static void do_sysbus_error(int fatal, u32 errors) | |||
503 | for (i = 0; i < 10; i++) { | 503 | for (i = 0; i < 10; i++) { |
504 | if (errors & (1 << i)) | 504 | if (errors & (1 << i)) |
505 | e752x_printk(KERN_WARNING, "%sError System Bus %s\n", | 505 | e752x_printk(KERN_WARNING, "%sError System Bus %s\n", |
506 | fatal_message[fatal], sysbus_message[i]); | 506 | fatal_message[fatal], sysbus_message[i]); |
507 | } | 507 | } |
508 | } | 508 | } |
509 | 509 | ||
510 | static inline void sysbus_error(int fatal, u32 errors, int *error_found, | 510 | static inline void sysbus_error(int fatal, u32 errors, int *error_found, |
511 | int handle_error) | 511 | int handle_error) |
512 | { | 512 | { |
513 | *error_found = 1; | 513 | *error_found = 1; |
514 | 514 | ||
@@ -517,7 +517,7 @@ static inline void sysbus_error(int fatal, u32 errors, int *error_found, | |||
517 | } | 517 | } |
518 | 518 | ||
519 | static void e752x_check_hub_interface(struct e752x_error_info *info, | 519 | static void e752x_check_hub_interface(struct e752x_error_info *info, |
520 | int *error_found, int handle_error) | 520 | int *error_found, int handle_error) |
521 | { | 521 | { |
522 | u8 stat8; | 522 | u8 stat8; |
523 | 523 | ||
@@ -525,33 +525,32 @@ static void e752x_check_hub_interface(struct e752x_error_info *info, | |||
525 | 525 | ||
526 | stat8 = info->hi_ferr; | 526 | stat8 = info->hi_ferr; |
527 | 527 | ||
528 | if(stat8 & 0x7f) { /* Error, so process */ | 528 | if (stat8 & 0x7f) { /* Error, so process */ |
529 | stat8 &= 0x7f; | 529 | stat8 &= 0x7f; |
530 | 530 | ||
531 | if(stat8 & 0x2b) | 531 | if (stat8 & 0x2b) |
532 | hub_error(1, stat8 & 0x2b, error_found, handle_error); | 532 | hub_error(1, stat8 & 0x2b, error_found, handle_error); |
533 | 533 | ||
534 | if(stat8 & 0x54) | 534 | if (stat8 & 0x54) |
535 | hub_error(0, stat8 & 0x54, error_found, handle_error); | 535 | hub_error(0, stat8 & 0x54, error_found, handle_error); |
536 | } | 536 | } |
537 | |||
538 | //pci_read_config_byte(dev,E752X_HI_NERR,&stat8); | 537 | //pci_read_config_byte(dev,E752X_HI_NERR,&stat8); |
539 | 538 | ||
540 | stat8 = info->hi_nerr; | 539 | stat8 = info->hi_nerr; |
541 | 540 | ||
542 | if(stat8 & 0x7f) { /* Error, so process */ | 541 | if (stat8 & 0x7f) { /* Error, so process */ |
543 | stat8 &= 0x7f; | 542 | stat8 &= 0x7f; |
544 | 543 | ||
545 | if (stat8 & 0x2b) | 544 | if (stat8 & 0x2b) |
546 | hub_error(1, stat8 & 0x2b, error_found, handle_error); | 545 | hub_error(1, stat8 & 0x2b, error_found, handle_error); |
547 | 546 | ||
548 | if(stat8 & 0x54) | 547 | if (stat8 & 0x54) |
549 | hub_error(0, stat8 & 0x54, error_found, handle_error); | 548 | hub_error(0, stat8 & 0x54, error_found, handle_error); |
550 | } | 549 | } |
551 | } | 550 | } |
552 | 551 | ||
553 | static void e752x_check_sysbus(struct e752x_error_info *info, | 552 | static void e752x_check_sysbus(struct e752x_error_info *info, |
554 | int *error_found, int handle_error) | 553 | int *error_found, int handle_error) |
555 | { | 554 | { |
556 | u32 stat32, error32; | 555 | u32 stat32, error32; |
557 | 556 | ||
@@ -559,47 +558,47 @@ static void e752x_check_sysbus(struct e752x_error_info *info, | |||
559 | stat32 = info->sysbus_ferr + (info->sysbus_nerr << 16); | 558 | stat32 = info->sysbus_ferr + (info->sysbus_nerr << 16); |
560 | 559 | ||
561 | if (stat32 == 0) | 560 | if (stat32 == 0) |
562 | return; /* no errors */ | 561 | return; /* no errors */ |
563 | 562 | ||
564 | error32 = (stat32 >> 16) & 0x3ff; | 563 | error32 = (stat32 >> 16) & 0x3ff; |
565 | stat32 = stat32 & 0x3ff; | 564 | stat32 = stat32 & 0x3ff; |
566 | 565 | ||
567 | if(stat32 & 0x087) | 566 | if (stat32 & 0x087) |
568 | sysbus_error(1, stat32 & 0x087, error_found, handle_error); | 567 | sysbus_error(1, stat32 & 0x087, error_found, handle_error); |
569 | 568 | ||
570 | if(stat32 & 0x378) | 569 | if (stat32 & 0x378) |
571 | sysbus_error(0, stat32 & 0x378, error_found, handle_error); | 570 | sysbus_error(0, stat32 & 0x378, error_found, handle_error); |
572 | 571 | ||
573 | if(error32 & 0x087) | 572 | if (error32 & 0x087) |
574 | sysbus_error(1, error32 & 0x087, error_found, handle_error); | 573 | sysbus_error(1, error32 & 0x087, error_found, handle_error); |
575 | 574 | ||
576 | if(error32 & 0x378) | 575 | if (error32 & 0x378) |
577 | sysbus_error(0, error32 & 0x378, error_found, handle_error); | 576 | sysbus_error(0, error32 & 0x378, error_found, handle_error); |
578 | } | 577 | } |
579 | 578 | ||
580 | static void e752x_check_membuf (struct e752x_error_info *info, | 579 | static void e752x_check_membuf(struct e752x_error_info *info, |
581 | int *error_found, int handle_error) | 580 | int *error_found, int handle_error) |
582 | { | 581 | { |
583 | u8 stat8; | 582 | u8 stat8; |
584 | 583 | ||
585 | stat8 = info->buf_ferr; | 584 | stat8 = info->buf_ferr; |
586 | 585 | ||
587 | if (stat8 & 0x0f) { /* Error, so process */ | 586 | if (stat8 & 0x0f) { /* Error, so process */ |
588 | stat8 &= 0x0f; | 587 | stat8 &= 0x0f; |
589 | membuf_error(stat8, error_found, handle_error); | 588 | membuf_error(stat8, error_found, handle_error); |
590 | } | 589 | } |
591 | 590 | ||
592 | stat8 = info->buf_nerr; | 591 | stat8 = info->buf_nerr; |
593 | 592 | ||
594 | if (stat8 & 0x0f) { /* Error, so process */ | 593 | if (stat8 & 0x0f) { /* Error, so process */ |
595 | stat8 &= 0x0f; | 594 | stat8 &= 0x0f; |
596 | membuf_error(stat8, error_found, handle_error); | 595 | membuf_error(stat8, error_found, handle_error); |
597 | } | 596 | } |
598 | } | 597 | } |
599 | 598 | ||
600 | static void e752x_check_dram (struct mem_ctl_info *mci, | 599 | static void e752x_check_dram(struct mem_ctl_info *mci, |
601 | struct e752x_error_info *info, int *error_found, | 600 | struct e752x_error_info *info, int *error_found, |
602 | int handle_error) | 601 | int handle_error) |
603 | { | 602 | { |
604 | u16 error_one, error_next; | 603 | u16 error_one, error_next; |
605 | 604 | ||
@@ -607,94 +606,90 @@ static void e752x_check_dram (struct mem_ctl_info *mci, | |||
607 | error_next = info->dram_nerr; | 606 | error_next = info->dram_nerr; |
608 | 607 | ||
609 | /* decode and report errors */ | 608 | /* decode and report errors */ |
610 | if(error_one & 0x0101) /* check first error correctable */ | 609 | if (error_one & 0x0101) /* check first error correctable */ |
611 | process_ce(mci, error_one, info->dram_sec1_add, | 610 | process_ce(mci, error_one, info->dram_sec1_add, |
612 | info->dram_sec1_syndrome, error_found, | 611 | info->dram_sec1_syndrome, error_found, handle_error); |
613 | handle_error); | ||
614 | 612 | ||
615 | if(error_next & 0x0101) /* check next error correctable */ | 613 | if (error_next & 0x0101) /* check next error correctable */ |
616 | process_ce(mci, error_next, info->dram_sec2_add, | 614 | process_ce(mci, error_next, info->dram_sec2_add, |
617 | info->dram_sec2_syndrome, error_found, | 615 | info->dram_sec2_syndrome, error_found, handle_error); |
618 | handle_error); | ||
619 | 616 | ||
620 | if(error_one & 0x4040) | 617 | if (error_one & 0x4040) |
621 | process_ue_no_info_wr(mci, error_found, handle_error); | 618 | process_ue_no_info_wr(mci, error_found, handle_error); |
622 | 619 | ||
623 | if(error_next & 0x4040) | 620 | if (error_next & 0x4040) |
624 | process_ue_no_info_wr(mci, error_found, handle_error); | 621 | process_ue_no_info_wr(mci, error_found, handle_error); |
625 | 622 | ||
626 | if(error_one & 0x2020) | 623 | if (error_one & 0x2020) |
627 | process_ded_retry(mci, error_one, info->dram_retr_add, | 624 | process_ded_retry(mci, error_one, info->dram_retr_add, |
628 | error_found, handle_error); | 625 | error_found, handle_error); |
629 | 626 | ||
630 | if(error_next & 0x2020) | 627 | if (error_next & 0x2020) |
631 | process_ded_retry(mci, error_next, info->dram_retr_add, | 628 | process_ded_retry(mci, error_next, info->dram_retr_add, |
632 | error_found, handle_error); | 629 | error_found, handle_error); |
633 | 630 | ||
634 | if(error_one & 0x0808) | 631 | if (error_one & 0x0808) |
635 | process_threshold_ce(mci, error_one, error_found, | 632 | process_threshold_ce(mci, error_one, error_found, handle_error); |
636 | handle_error); | ||
637 | 633 | ||
638 | if(error_next & 0x0808) | 634 | if (error_next & 0x0808) |
639 | process_threshold_ce(mci, error_next, error_found, | 635 | process_threshold_ce(mci, error_next, error_found, |
640 | handle_error); | 636 | handle_error); |
641 | 637 | ||
642 | if(error_one & 0x0606) | 638 | if (error_one & 0x0606) |
643 | process_ue(mci, error_one, info->dram_ded_add, | 639 | process_ue(mci, error_one, info->dram_ded_add, |
644 | info->dram_scrb_add, error_found, handle_error); | 640 | info->dram_scrb_add, error_found, handle_error); |
645 | 641 | ||
646 | if(error_next & 0x0606) | 642 | if (error_next & 0x0606) |
647 | process_ue(mci, error_next, info->dram_ded_add, | 643 | process_ue(mci, error_next, info->dram_ded_add, |
648 | info->dram_scrb_add, error_found, handle_error); | 644 | info->dram_scrb_add, error_found, handle_error); |
649 | } | 645 | } |
650 | 646 | ||
651 | static void e752x_get_error_info (struct mem_ctl_info *mci, | 647 | static void e752x_get_error_info(struct mem_ctl_info *mci, |
652 | struct e752x_error_info *info) | 648 | struct e752x_error_info *info) |
653 | { | 649 | { |
654 | struct pci_dev *dev; | 650 | struct pci_dev *dev; |
655 | struct e752x_pvt *pvt; | 651 | struct e752x_pvt *pvt; |
656 | 652 | ||
657 | memset(info, 0, sizeof(*info)); | 653 | memset(info, 0, sizeof(*info)); |
658 | pvt = (struct e752x_pvt *) mci->pvt_info; | 654 | pvt = (struct e752x_pvt *)mci->pvt_info; |
659 | dev = pvt->dev_d0f1; | 655 | dev = pvt->dev_d0f1; |
660 | pci_read_config_dword(dev, E752X_FERR_GLOBAL, &info->ferr_global); | 656 | pci_read_config_dword(dev, E752X_FERR_GLOBAL, &info->ferr_global); |
661 | 657 | ||
662 | if (info->ferr_global) { | 658 | if (info->ferr_global) { |
663 | pci_read_config_byte(dev, E752X_HI_FERR, &info->hi_ferr); | 659 | pci_read_config_byte(dev, E752X_HI_FERR, &info->hi_ferr); |
664 | pci_read_config_word(dev, E752X_SYSBUS_FERR, | 660 | pci_read_config_word(dev, E752X_SYSBUS_FERR, |
665 | &info->sysbus_ferr); | 661 | &info->sysbus_ferr); |
666 | pci_read_config_byte(dev, E752X_BUF_FERR, &info->buf_ferr); | 662 | pci_read_config_byte(dev, E752X_BUF_FERR, &info->buf_ferr); |
667 | pci_read_config_word(dev, E752X_DRAM_FERR, | 663 | pci_read_config_word(dev, E752X_DRAM_FERR, &info->dram_ferr); |
668 | &info->dram_ferr); | ||
669 | pci_read_config_dword(dev, E752X_DRAM_SEC1_ADD, | 664 | pci_read_config_dword(dev, E752X_DRAM_SEC1_ADD, |
670 | &info->dram_sec1_add); | 665 | &info->dram_sec1_add); |
671 | pci_read_config_word(dev, E752X_DRAM_SEC1_SYNDROME, | 666 | pci_read_config_word(dev, E752X_DRAM_SEC1_SYNDROME, |
672 | &info->dram_sec1_syndrome); | 667 | &info->dram_sec1_syndrome); |
673 | pci_read_config_dword(dev, E752X_DRAM_DED_ADD, | 668 | pci_read_config_dword(dev, E752X_DRAM_DED_ADD, |
674 | &info->dram_ded_add); | 669 | &info->dram_ded_add); |
675 | pci_read_config_dword(dev, E752X_DRAM_SCRB_ADD, | 670 | pci_read_config_dword(dev, E752X_DRAM_SCRB_ADD, |
676 | &info->dram_scrb_add); | 671 | &info->dram_scrb_add); |
677 | pci_read_config_dword(dev, E752X_DRAM_RETR_ADD, | 672 | pci_read_config_dword(dev, E752X_DRAM_RETR_ADD, |
678 | &info->dram_retr_add); | 673 | &info->dram_retr_add); |
679 | 674 | ||
680 | if (info->hi_ferr & 0x7f) | 675 | if (info->hi_ferr & 0x7f) |
681 | pci_write_config_byte(dev, E752X_HI_FERR, | 676 | pci_write_config_byte(dev, E752X_HI_FERR, |
682 | info->hi_ferr); | 677 | info->hi_ferr); |
683 | 678 | ||
684 | if (info->sysbus_ferr) | 679 | if (info->sysbus_ferr) |
685 | pci_write_config_word(dev, E752X_SYSBUS_FERR, | 680 | pci_write_config_word(dev, E752X_SYSBUS_FERR, |
686 | info->sysbus_ferr); | 681 | info->sysbus_ferr); |
687 | 682 | ||
688 | if (info->buf_ferr & 0x0f) | 683 | if (info->buf_ferr & 0x0f) |
689 | pci_write_config_byte(dev, E752X_BUF_FERR, | 684 | pci_write_config_byte(dev, E752X_BUF_FERR, |
690 | info->buf_ferr); | 685 | info->buf_ferr); |
691 | 686 | ||
692 | if (info->dram_ferr) | 687 | if (info->dram_ferr) |
693 | pci_write_bits16(pvt->bridge_ck, E752X_DRAM_FERR, | 688 | pci_write_bits16(pvt->bridge_ck, E752X_DRAM_FERR, |
694 | info->dram_ferr, info->dram_ferr); | 689 | info->dram_ferr, info->dram_ferr); |
695 | 690 | ||
696 | pci_write_config_dword(dev, E752X_FERR_GLOBAL, | 691 | pci_write_config_dword(dev, E752X_FERR_GLOBAL, |
697 | info->ferr_global); | 692 | info->ferr_global); |
698 | } | 693 | } |
699 | 694 | ||
700 | pci_read_config_dword(dev, E752X_NERR_GLOBAL, &info->nerr_global); | 695 | pci_read_config_dword(dev, E752X_NERR_GLOBAL, &info->nerr_global); |
@@ -702,38 +697,38 @@ static void e752x_get_error_info (struct mem_ctl_info *mci, | |||
702 | if (info->nerr_global) { | 697 | if (info->nerr_global) { |
703 | pci_read_config_byte(dev, E752X_HI_NERR, &info->hi_nerr); | 698 | pci_read_config_byte(dev, E752X_HI_NERR, &info->hi_nerr); |
704 | pci_read_config_word(dev, E752X_SYSBUS_NERR, | 699 | pci_read_config_word(dev, E752X_SYSBUS_NERR, |
705 | &info->sysbus_nerr); | 700 | &info->sysbus_nerr); |
706 | pci_read_config_byte(dev, E752X_BUF_NERR, &info->buf_nerr); | 701 | pci_read_config_byte(dev, E752X_BUF_NERR, &info->buf_nerr); |
707 | pci_read_config_word(dev, E752X_DRAM_NERR, | 702 | pci_read_config_word(dev, E752X_DRAM_NERR, &info->dram_nerr); |
708 | &info->dram_nerr); | ||
709 | pci_read_config_dword(dev, E752X_DRAM_SEC2_ADD, | 703 | pci_read_config_dword(dev, E752X_DRAM_SEC2_ADD, |
710 | &info->dram_sec2_add); | 704 | &info->dram_sec2_add); |
711 | pci_read_config_word(dev, E752X_DRAM_SEC2_SYNDROME, | 705 | pci_read_config_word(dev, E752X_DRAM_SEC2_SYNDROME, |
712 | &info->dram_sec2_syndrome); | 706 | &info->dram_sec2_syndrome); |
713 | 707 | ||
714 | if (info->hi_nerr & 0x7f) | 708 | if (info->hi_nerr & 0x7f) |
715 | pci_write_config_byte(dev, E752X_HI_NERR, | 709 | pci_write_config_byte(dev, E752X_HI_NERR, |
716 | info->hi_nerr); | 710 | info->hi_nerr); |
717 | 711 | ||
718 | if (info->sysbus_nerr) | 712 | if (info->sysbus_nerr) |
719 | pci_write_config_word(dev, E752X_SYSBUS_NERR, | 713 | pci_write_config_word(dev, E752X_SYSBUS_NERR, |
720 | info->sysbus_nerr); | 714 | info->sysbus_nerr); |
721 | 715 | ||
722 | if (info->buf_nerr & 0x0f) | 716 | if (info->buf_nerr & 0x0f) |
723 | pci_write_config_byte(dev, E752X_BUF_NERR, | 717 | pci_write_config_byte(dev, E752X_BUF_NERR, |
724 | info->buf_nerr); | 718 | info->buf_nerr); |
725 | 719 | ||
726 | if (info->dram_nerr) | 720 | if (info->dram_nerr) |
727 | pci_write_bits16(pvt->bridge_ck, E752X_DRAM_NERR, | 721 | pci_write_bits16(pvt->bridge_ck, E752X_DRAM_NERR, |
728 | info->dram_nerr, info->dram_nerr); | 722 | info->dram_nerr, info->dram_nerr); |
729 | 723 | ||
730 | pci_write_config_dword(dev, E752X_NERR_GLOBAL, | 724 | pci_write_config_dword(dev, E752X_NERR_GLOBAL, |
731 | info->nerr_global); | 725 | info->nerr_global); |
732 | } | 726 | } |
733 | } | 727 | } |
734 | 728 | ||
735 | static int e752x_process_error_info (struct mem_ctl_info *mci, | 729 | static int e752x_process_error_info(struct mem_ctl_info *mci, |
736 | struct e752x_error_info *info, int handle_errors) | 730 | struct e752x_error_info *info, |
731 | int handle_errors) | ||
737 | { | 732 | { |
738 | u32 error32, stat32; | 733 | u32 error32, stat32; |
739 | int error_found; | 734 | int error_found; |
@@ -780,25 +775,25 @@ static inline int dual_channel_active(u16 ddrcsr) | |||
780 | } | 775 | } |
781 | 776 | ||
782 | static void e752x_init_csrows(struct mem_ctl_info *mci, struct pci_dev *pdev, | 777 | static void e752x_init_csrows(struct mem_ctl_info *mci, struct pci_dev *pdev, |
783 | u16 ddrcsr) | 778 | u16 ddrcsr) |
784 | { | 779 | { |
785 | struct csrow_info *csrow; | 780 | struct csrow_info *csrow; |
786 | unsigned long last_cumul_size; | 781 | unsigned long last_cumul_size; |
787 | int index, mem_dev, drc_chan; | 782 | int index, mem_dev, drc_chan; |
788 | int drc_drbg; /* DRB granularity 0=64mb, 1=128mb */ | 783 | int drc_drbg; /* DRB granularity 0=64mb, 1=128mb */ |
789 | int drc_ddim; /* DRAM Data Integrity Mode 0=none, 2=edac */ | 784 | int drc_ddim; /* DRAM Data Integrity Mode 0=none, 2=edac */ |
790 | u8 value; | 785 | u8 value; |
791 | u32 dra, drc, cumul_size; | 786 | u32 dra, drc, cumul_size; |
792 | 787 | ||
793 | dra = 0; | 788 | dra = 0; |
794 | for (index=0; index < 4; index++) { | 789 | for (index = 0; index < 4; index++) { |
795 | u8 dra_reg; | 790 | u8 dra_reg; |
796 | pci_read_config_byte(pdev, E752X_DRA+index, &dra_reg); | 791 | pci_read_config_byte(pdev, E752X_DRA + index, &dra_reg); |
797 | dra |= dra_reg << (index * 8); | 792 | dra |= dra_reg << (index * 8); |
798 | } | 793 | } |
799 | pci_read_config_dword(pdev, E752X_DRC, &drc); | 794 | pci_read_config_dword(pdev, E752X_DRC, &drc); |
800 | drc_chan = dual_channel_active(ddrcsr); | 795 | drc_chan = dual_channel_active(ddrcsr); |
801 | drc_drbg = drc_chan + 1; /* 128 in dual mode, 64 in single */ | 796 | drc_drbg = drc_chan + 1; /* 128 in dual mode, 64 in single */ |
802 | drc_ddim = (drc >> 20) & 0x3; | 797 | drc_ddim = (drc >> 20) & 0x3; |
803 | 798 | ||
804 | /* The dram row boundary (DRB) reg values are boundary address for | 799 | /* The dram row boundary (DRB) reg values are boundary address for |
@@ -846,7 +841,7 @@ static void e752x_init_csrows(struct mem_ctl_info *mci, struct pci_dev *pdev, | |||
846 | } | 841 | } |
847 | 842 | ||
848 | static void e752x_init_mem_map_table(struct pci_dev *pdev, | 843 | static void e752x_init_mem_map_table(struct pci_dev *pdev, |
849 | struct e752x_pvt *pvt) | 844 | struct e752x_pvt *pvt) |
850 | { | 845 | { |
851 | int index; | 846 | int index; |
852 | u8 value, last, row, stat8; | 847 | u8 value, last, row, stat8; |
@@ -861,7 +856,7 @@ static void e752x_init_mem_map_table(struct pci_dev *pdev, | |||
861 | /* no dimm in the slot, so flag it as empty */ | 856 | /* no dimm in the slot, so flag it as empty */ |
862 | pvt->map[index] = 0xff; | 857 | pvt->map[index] = 0xff; |
863 | pvt->map[index + 1] = 0xff; | 858 | pvt->map[index + 1] = 0xff; |
864 | } else { /* there is a dimm in the slot */ | 859 | } else { /* there is a dimm in the slot */ |
865 | pvt->map[index] = row; | 860 | pvt->map[index] = row; |
866 | row++; | 861 | row++; |
867 | last = value; | 862 | last = value; |
@@ -870,10 +865,9 @@ static void e752x_init_mem_map_table(struct pci_dev *pdev, | |||
870 | */ | 865 | */ |
871 | pci_read_config_byte(pdev, E752X_DRB + index + 1, | 866 | pci_read_config_byte(pdev, E752X_DRB + index + 1, |
872 | &value); | 867 | &value); |
873 | pvt->map[index + 1] = (value == last) ? | 868 | pvt->map[index + 1] = (value == last) ? 0xff : /* the dimm is single sided, |
874 | 0xff : /* the dimm is single sided, | 869 | so flag as empty */ |
875 | so flag as empty */ | 870 | row; /* this is a double sided dimm |
876 | row; /* this is a double sided dimm | ||
877 | to save the next row # */ | 871 | to save the next row # */ |
878 | row++; | 872 | row++; |
879 | last = value; | 873 | last = value; |
@@ -887,13 +881,12 @@ static void e752x_init_mem_map_table(struct pci_dev *pdev, | |||
887 | 881 | ||
888 | /* Return 0 on success or 1 on failure. */ | 882 | /* Return 0 on success or 1 on failure. */ |
889 | static int e752x_get_devs(struct pci_dev *pdev, int dev_idx, | 883 | static int e752x_get_devs(struct pci_dev *pdev, int dev_idx, |
890 | struct e752x_pvt *pvt) | 884 | struct e752x_pvt *pvt) |
891 | { | 885 | { |
892 | struct pci_dev *dev; | 886 | struct pci_dev *dev; |
893 | 887 | ||
894 | pvt->bridge_ck = pci_get_device(PCI_VENDOR_ID_INTEL, | 888 | pvt->bridge_ck = pci_get_device(PCI_VENDOR_ID_INTEL, |
895 | pvt->dev_info->err_dev, | 889 | pvt->dev_info->err_dev, pvt->bridge_ck); |
896 | pvt->bridge_ck); | ||
897 | 890 | ||
898 | if (pvt->bridge_ck == NULL) | 891 | if (pvt->bridge_ck == NULL) |
899 | pvt->bridge_ck = pci_scan_single_device(pdev->bus, | 892 | pvt->bridge_ck = pci_scan_single_device(pdev->bus, |
@@ -901,8 +894,8 @@ static int e752x_get_devs(struct pci_dev *pdev, int dev_idx, | |||
901 | 894 | ||
902 | if (pvt->bridge_ck == NULL) { | 895 | if (pvt->bridge_ck == NULL) { |
903 | e752x_printk(KERN_ERR, "error reporting device not found:" | 896 | e752x_printk(KERN_ERR, "error reporting device not found:" |
904 | "vendor %x device 0x%x (broken BIOS?)\n", | 897 | "vendor %x device 0x%x (broken BIOS?)\n", |
905 | PCI_VENDOR_ID_INTEL, e752x_devs[dev_idx].err_dev); | 898 | PCI_VENDOR_ID_INTEL, e752x_devs[dev_idx].err_dev); |
906 | return 1; | 899 | return 1; |
907 | } | 900 | } |
908 | 901 | ||
@@ -917,7 +910,7 @@ static int e752x_get_devs(struct pci_dev *pdev, int dev_idx, | |||
917 | 910 | ||
918 | return 0; | 911 | return 0; |
919 | 912 | ||
920 | fail: | 913 | fail: |
921 | pci_dev_put(pvt->bridge_ck); | 914 | pci_dev_put(pvt->bridge_ck); |
922 | return 1; | 915 | return 1; |
923 | } | 916 | } |
@@ -945,20 +938,20 @@ static int e752x_probe1(struct pci_dev *pdev, int dev_idx) | |||
945 | struct mem_ctl_info *mci; | 938 | struct mem_ctl_info *mci; |
946 | struct e752x_pvt *pvt; | 939 | struct e752x_pvt *pvt; |
947 | u16 ddrcsr; | 940 | u16 ddrcsr; |
948 | int drc_chan; /* Number of channels 0=1chan,1=2chan */ | 941 | int drc_chan; /* Number of channels 0=1chan,1=2chan */ |
949 | struct e752x_error_info discard; | 942 | struct e752x_error_info discard; |
950 | 943 | ||
951 | debugf0("%s(): mci\n", __func__); | 944 | debugf0("%s(): mci\n", __func__); |
952 | debugf0("Starting Probe1\n"); | 945 | debugf0("Starting Probe1\n"); |
953 | 946 | ||
954 | /* make sure error reporting method is sane */ | 947 | /* make sure error reporting method is sane */ |
955 | switch(edac_op_state) { | 948 | switch (edac_op_state) { |
956 | case EDAC_OPSTATE_POLL: | 949 | case EDAC_OPSTATE_POLL: |
957 | case EDAC_OPSTATE_NMI: | 950 | case EDAC_OPSTATE_NMI: |
958 | break; | 951 | break; |
959 | default: | 952 | default: |
960 | edac_op_state = EDAC_OPSTATE_POLL; | 953 | edac_op_state = EDAC_OPSTATE_POLL; |
961 | break; | 954 | break; |
962 | } | 955 | } |
963 | 956 | ||
964 | /* check to see if device 0 function 1 is enabled; if it isn't, we | 957 | /* check to see if device 0 function 1 is enabled; if it isn't, we |
@@ -968,7 +961,7 @@ static int e752x_probe1(struct pci_dev *pdev, int dev_idx) | |||
968 | pci_read_config_byte(pdev, E752X_DEVPRES1, &stat8); | 961 | pci_read_config_byte(pdev, E752X_DEVPRES1, &stat8); |
969 | if (!force_function_unhide && !(stat8 & (1 << 5))) { | 962 | if (!force_function_unhide && !(stat8 & (1 << 5))) { |
970 | printk(KERN_INFO "Contact your BIOS vendor to see if the " | 963 | printk(KERN_INFO "Contact your BIOS vendor to see if the " |
971 | "E752x error registers can be safely un-hidden\n"); | 964 | "E752x error registers can be safely un-hidden\n"); |
972 | return -ENOMEM; | 965 | return -ENOMEM; |
973 | } | 966 | } |
974 | stat8 |= (1 << 5); | 967 | stat8 |= (1 << 5); |
@@ -995,7 +988,7 @@ static int e752x_probe1(struct pci_dev *pdev, int dev_idx) | |||
995 | mci->dev = &pdev->dev; | 988 | mci->dev = &pdev->dev; |
996 | 989 | ||
997 | debugf3("%s(): init pvt\n", __func__); | 990 | debugf3("%s(): init pvt\n", __func__); |
998 | pvt = (struct e752x_pvt *) mci->pvt_info; | 991 | pvt = (struct e752x_pvt *)mci->pvt_info; |
999 | pvt->dev_info = &e752x_devs[dev_idx]; | 992 | pvt->dev_info = &e752x_devs[dev_idx]; |
1000 | pvt->mc_symmetric = ((ddrcsr & 0x10) != 0); | 993 | pvt->mc_symmetric = ((ddrcsr & 0x10) != 0); |
1001 | 994 | ||
@@ -1028,36 +1021,34 @@ static int e752x_probe1(struct pci_dev *pdev, int dev_idx) | |||
1028 | pci_read_config_word(pdev, E752X_REMAPLIMIT, &pci_data); | 1021 | pci_read_config_word(pdev, E752X_REMAPLIMIT, &pci_data); |
1029 | pvt->remaplimit = ((u32) pci_data) << 14; | 1022 | pvt->remaplimit = ((u32) pci_data) << 14; |
1030 | e752x_printk(KERN_INFO, | 1023 | e752x_printk(KERN_INFO, |
1031 | "tolm = %x, remapbase = %x, remaplimit = %x\n", pvt->tolm, | 1024 | "tolm = %x, remapbase = %x, remaplimit = %x\n", pvt->tolm, |
1032 | pvt->remapbase, pvt->remaplimit); | 1025 | pvt->remapbase, pvt->remaplimit); |
1033 | 1026 | ||
1034 | /* Here we assume that we will never see multiple instances of this | 1027 | /* Here we assume that we will never see multiple instances of this |
1035 | * type of memory controller. The ID is therefore hardcoded to 0. | 1028 | * type of memory controller. The ID is therefore hardcoded to 0. |
1036 | */ | 1029 | */ |
1037 | if (edac_mc_add_mc(mci,0)) { | 1030 | if (edac_mc_add_mc(mci, 0)) { |
1038 | debugf3("%s(): failed edac_mc_add_mc()\n", __func__); | 1031 | debugf3("%s(): failed edac_mc_add_mc()\n", __func__); |
1039 | goto fail; | 1032 | goto fail; |
1040 | } | 1033 | } |
1041 | 1034 | ||
1042 | e752x_init_error_reporting_regs(pvt); | 1035 | e752x_init_error_reporting_regs(pvt); |
1043 | e752x_get_error_info(mci, &discard); /* clear other MCH errors */ | 1036 | e752x_get_error_info(mci, &discard); /* clear other MCH errors */ |
1044 | 1037 | ||
1045 | /* allocating generic PCI control info */ | 1038 | /* allocating generic PCI control info */ |
1046 | e752x_pci = edac_pci_create_generic_ctl(&pdev->dev, EDAC_MOD_STR); | 1039 | e752x_pci = edac_pci_create_generic_ctl(&pdev->dev, EDAC_MOD_STR); |
1047 | if (!e752x_pci) { | 1040 | if (!e752x_pci) { |
1048 | printk(KERN_WARNING | 1041 | printk(KERN_WARNING |
1049 | "%s(): Unable to create PCI control\n", | 1042 | "%s(): Unable to create PCI control\n", __func__); |
1050 | __func__); | ||
1051 | printk(KERN_WARNING | 1043 | printk(KERN_WARNING |
1052 | "%s(): PCI error report via EDAC not setup\n", | 1044 | "%s(): PCI error report via EDAC not setup\n", __func__); |
1053 | __func__); | ||
1054 | } | 1045 | } |
1055 | 1046 | ||
1056 | /* get this far and it's successful */ | 1047 | /* get this far and it's successful */ |
1057 | debugf3("%s(): success\n", __func__); | 1048 | debugf3("%s(): success\n", __func__); |
1058 | return 0; | 1049 | return 0; |
1059 | 1050 | ||
1060 | fail: | 1051 | fail: |
1061 | pci_dev_put(pvt->dev_d0f0); | 1052 | pci_dev_put(pvt->dev_d0f0); |
1062 | pci_dev_put(pvt->dev_d0f1); | 1053 | pci_dev_put(pvt->dev_d0f1); |
1063 | pci_dev_put(pvt->bridge_ck); | 1054 | pci_dev_put(pvt->bridge_ck); |
@@ -1068,12 +1059,12 @@ fail: | |||
1068 | 1059 | ||
1069 | /* returns count (>= 0), or negative on error */ | 1060 | /* returns count (>= 0), or negative on error */ |
1070 | static int __devinit e752x_init_one(struct pci_dev *pdev, | 1061 | static int __devinit e752x_init_one(struct pci_dev *pdev, |
1071 | const struct pci_device_id *ent) | 1062 | const struct pci_device_id *ent) |
1072 | { | 1063 | { |
1073 | debugf0("%s()\n", __func__); | 1064 | debugf0("%s()\n", __func__); |
1074 | 1065 | ||
1075 | /* wake up and enable device */ | 1066 | /* wake up and enable device */ |
1076 | if(pci_enable_device(pdev) < 0) | 1067 | if (pci_enable_device(pdev) < 0) |
1077 | return -EIO; | 1068 | return -EIO; |
1078 | 1069 | ||
1079 | return e752x_probe1(pdev, ent->driver_data); | 1070 | return e752x_probe1(pdev, ent->driver_data); |
@@ -1092,7 +1083,7 @@ static void __devexit e752x_remove_one(struct pci_dev *pdev) | |||
1092 | if ((mci = edac_mc_del_mc(&pdev->dev)) == NULL) | 1083 | if ((mci = edac_mc_del_mc(&pdev->dev)) == NULL) |
1093 | return; | 1084 | return; |
1094 | 1085 | ||
1095 | pvt = (struct e752x_pvt *) mci->pvt_info; | 1086 | pvt = (struct e752x_pvt *)mci->pvt_info; |
1096 | pci_dev_put(pvt->dev_d0f0); | 1087 | pci_dev_put(pvt->dev_d0f0); |
1097 | pci_dev_put(pvt->dev_d0f1); | 1088 | pci_dev_put(pvt->dev_d0f1); |
1098 | pci_dev_put(pvt->bridge_ck); | 1089 | pci_dev_put(pvt->bridge_ck); |
@@ -1101,20 +1092,17 @@ static void __devexit e752x_remove_one(struct pci_dev *pdev) | |||
1101 | 1092 | ||
1102 | static const struct pci_device_id e752x_pci_tbl[] __devinitdata = { | 1093 | static const struct pci_device_id e752x_pci_tbl[] __devinitdata = { |
1103 | { | 1094 | { |
1104 | PCI_VEND_DEV(INTEL, 7520_0), PCI_ANY_ID, PCI_ANY_ID, 0, 0, | 1095 | PCI_VEND_DEV(INTEL, 7520_0), PCI_ANY_ID, PCI_ANY_ID, 0, 0, |
1105 | E7520 | 1096 | E7520}, |
1106 | }, | ||
1107 | { | 1097 | { |
1108 | PCI_VEND_DEV(INTEL, 7525_0), PCI_ANY_ID, PCI_ANY_ID, 0, 0, | 1098 | PCI_VEND_DEV(INTEL, 7525_0), PCI_ANY_ID, PCI_ANY_ID, 0, 0, |
1109 | E7525 | 1099 | E7525}, |
1110 | }, | ||
1111 | { | 1100 | { |
1112 | PCI_VEND_DEV(INTEL, 7320_0), PCI_ANY_ID, PCI_ANY_ID, 0, 0, | 1101 | PCI_VEND_DEV(INTEL, 7320_0), PCI_ANY_ID, PCI_ANY_ID, 0, 0, |
1113 | E7320 | 1102 | E7320}, |
1114 | }, | ||
1115 | { | 1103 | { |
1116 | 0, | 1104 | 0, |
1117 | } /* 0 terminated list. */ | 1105 | } /* 0 terminated list. */ |
1118 | }; | 1106 | }; |
1119 | 1107 | ||
1120 | MODULE_DEVICE_TABLE(pci, e752x_pci_tbl); | 1108 | MODULE_DEVICE_TABLE(pci, e752x_pci_tbl); |
@@ -1150,6 +1138,6 @@ MODULE_DESCRIPTION("MC support for Intel e752x memory controllers"); | |||
1150 | 1138 | ||
1151 | module_param(force_function_unhide, int, 0444); | 1139 | module_param(force_function_unhide, int, 0444); |
1152 | MODULE_PARM_DESC(force_function_unhide, "if BIOS sets Dev0:Fun1 up as hidden:" | 1140 | MODULE_PARM_DESC(force_function_unhide, "if BIOS sets Dev0:Fun1 up as hidden:" |
1153 | " 1=force unhide and hope BIOS doesn't fight driver for Dev0:Fun1 access"); | 1141 | " 1=force unhide and hope BIOS doesn't fight driver for Dev0:Fun1 access"); |
1154 | module_param(edac_op_state, int, 0444); | 1142 | module_param(edac_op_state, int, 0444); |
1155 | MODULE_PARM_DESC(edac_op_state, "EDAC Error Reporting state: 0=Poll,1=NMI"); | 1143 | MODULE_PARM_DESC(edac_op_state, "EDAC Error Reporting state: 0=Poll,1=NMI"); |