diff options
Diffstat (limited to 'drivers/edac/i5000_edac.c')
-rw-r--r-- | drivers/edac/i5000_edac.c | 160 |
1 files changed, 80 insertions, 80 deletions
diff --git a/drivers/edac/i5000_edac.c b/drivers/edac/i5000_edac.c index 4b4ec978df2c..efc8853a205b 100644 --- a/drivers/edac/i5000_edac.c +++ b/drivers/edac/i5000_edac.c | |||
@@ -77,7 +77,7 @@ | |||
77 | #define FERR_FAT_M3ERR 0x00000004 | 77 | #define FERR_FAT_M3ERR 0x00000004 |
78 | #define FERR_FAT_M2ERR 0x00000002 | 78 | #define FERR_FAT_M2ERR 0x00000002 |
79 | #define FERR_FAT_M1ERR 0x00000001 | 79 | #define FERR_FAT_M1ERR 0x00000001 |
80 | #define FERR_FAT_MASK (FERR_FAT_M1ERR | \ | 80 | #define FERR_FAT_MASK (FERR_FAT_M1ERR | \ |
81 | FERR_FAT_M2ERR | \ | 81 | FERR_FAT_M2ERR | \ |
82 | FERR_FAT_M3ERR) | 82 | FERR_FAT_M3ERR) |
83 | 83 | ||
@@ -119,7 +119,7 @@ | |||
119 | #define FERR_NF_UNCORRECTABLE (FERR_NF_M12ERR | \ | 119 | #define FERR_NF_UNCORRECTABLE (FERR_NF_M12ERR | \ |
120 | FERR_NF_M11ERR | \ | 120 | FERR_NF_M11ERR | \ |
121 | FERR_NF_M10ERR | \ | 121 | FERR_NF_M10ERR | \ |
122 | FERR_NF_M8ERR | \ | 122 | FERR_NF_M8ERR | \ |
123 | FERR_NF_M7ERR | \ | 123 | FERR_NF_M7ERR | \ |
124 | FERR_NF_M6ERR | \ | 124 | FERR_NF_M6ERR | \ |
125 | FERR_NF_M5ERR | \ | 125 | FERR_NF_M5ERR | \ |
@@ -131,7 +131,7 @@ | |||
131 | #define FERR_NF_DIMM_SPARE (FERR_NF_M27ERR | \ | 131 | #define FERR_NF_DIMM_SPARE (FERR_NF_M27ERR | \ |
132 | FERR_NF_M28ERR) | 132 | FERR_NF_M28ERR) |
133 | #define FERR_NF_THERMAL (FERR_NF_M26ERR | \ | 133 | #define FERR_NF_THERMAL (FERR_NF_M26ERR | \ |
134 | FERR_NF_M25ERR | \ | 134 | FERR_NF_M25ERR | \ |
135 | FERR_NF_M24ERR | \ | 135 | FERR_NF_M24ERR | \ |
136 | FERR_NF_M23ERR) | 136 | FERR_NF_M23ERR) |
137 | #define FERR_NF_SPD_PROTOCOL (FERR_NF_M22ERR) | 137 | #define FERR_NF_SPD_PROTOCOL (FERR_NF_M22ERR) |
@@ -317,9 +317,9 @@ struct i5000_dev_info { | |||
317 | /* Table of devices attributes supported by this driver */ | 317 | /* Table of devices attributes supported by this driver */ |
318 | static const struct i5000_dev_info i5000_devs[] = { | 318 | static const struct i5000_dev_info i5000_devs[] = { |
319 | [I5000P] = { | 319 | [I5000P] = { |
320 | .ctl_name = "I5000", | 320 | .ctl_name = "I5000", |
321 | .fsb_mapping_errors = PCI_DEVICE_ID_INTEL_I5000_DEV16, | 321 | .fsb_mapping_errors = PCI_DEVICE_ID_INTEL_I5000_DEV16, |
322 | }, | 322 | }, |
323 | }; | 323 | }; |
324 | 324 | ||
325 | struct i5000_dimm_info { | 325 | struct i5000_dimm_info { |
@@ -411,15 +411,15 @@ static void i5000_get_error_info(struct mem_ctl_info *mci, | |||
411 | 411 | ||
412 | /* harvest the various error data we need */ | 412 | /* harvest the various error data we need */ |
413 | pci_read_config_dword(pvt->branchmap_werrors, | 413 | pci_read_config_dword(pvt->branchmap_werrors, |
414 | NERR_FAT_FBD, &info->nerr_fat_fbd); | 414 | NERR_FAT_FBD, &info->nerr_fat_fbd); |
415 | pci_read_config_word(pvt->branchmap_werrors, | 415 | pci_read_config_word(pvt->branchmap_werrors, |
416 | NRECMEMA, &info->nrecmema); | 416 | NRECMEMA, &info->nrecmema); |
417 | pci_read_config_word(pvt->branchmap_werrors, | 417 | pci_read_config_word(pvt->branchmap_werrors, |
418 | NRECMEMB, &info->nrecmemb); | 418 | NRECMEMB, &info->nrecmemb); |
419 | 419 | ||
420 | /* Clear the error bits, by writing them back */ | 420 | /* Clear the error bits, by writing them back */ |
421 | pci_write_config_dword(pvt->branchmap_werrors, | 421 | pci_write_config_dword(pvt->branchmap_werrors, |
422 | FERR_FAT_FBD, value); | 422 | FERR_FAT_FBD, value); |
423 | } else { | 423 | } else { |
424 | info->ferr_fat_fbd = 0; | 424 | info->ferr_fat_fbd = 0; |
425 | info->nerr_fat_fbd = 0; | 425 | info->nerr_fat_fbd = 0; |
@@ -437,17 +437,17 @@ static void i5000_get_error_info(struct mem_ctl_info *mci, | |||
437 | 437 | ||
438 | /* harvest the various error data we need */ | 438 | /* harvest the various error data we need */ |
439 | pci_read_config_dword(pvt->branchmap_werrors, | 439 | pci_read_config_dword(pvt->branchmap_werrors, |
440 | NERR_NF_FBD, &info->nerr_nf_fbd); | 440 | NERR_NF_FBD, &info->nerr_nf_fbd); |
441 | pci_read_config_word(pvt->branchmap_werrors, | 441 | pci_read_config_word(pvt->branchmap_werrors, |
442 | RECMEMA, &info->recmema); | 442 | RECMEMA, &info->recmema); |
443 | pci_read_config_dword(pvt->branchmap_werrors, | 443 | pci_read_config_dword(pvt->branchmap_werrors, |
444 | RECMEMB, &info->recmemb); | 444 | RECMEMB, &info->recmemb); |
445 | pci_read_config_dword(pvt->branchmap_werrors, | 445 | pci_read_config_dword(pvt->branchmap_werrors, |
446 | REDMEMB, &info->redmemb); | 446 | REDMEMB, &info->redmemb); |
447 | 447 | ||
448 | /* Clear the error bits, by writing them back */ | 448 | /* Clear the error bits, by writing them back */ |
449 | pci_write_config_dword(pvt->branchmap_werrors, | 449 | pci_write_config_dword(pvt->branchmap_werrors, |
450 | FERR_NF_FBD, value); | 450 | FERR_NF_FBD, value); |
451 | } else { | 451 | } else { |
452 | info->ferr_nf_fbd = 0; | 452 | info->ferr_nf_fbd = 0; |
453 | info->nerr_nf_fbd = 0; | 453 | info->nerr_nf_fbd = 0; |
@@ -465,8 +465,8 @@ static void i5000_get_error_info(struct mem_ctl_info *mci, | |||
465 | * handle the Intel FATAL errors, if any | 465 | * handle the Intel FATAL errors, if any |
466 | */ | 466 | */ |
467 | static void i5000_process_fatal_error_info(struct mem_ctl_info *mci, | 467 | static void i5000_process_fatal_error_info(struct mem_ctl_info *mci, |
468 | struct i5000_error_info * info, | 468 | struct i5000_error_info * info, |
469 | int handle_errors) | 469 | int handle_errors) |
470 | { | 470 | { |
471 | char msg[EDAC_MC_LABEL_LEN + 1 + 90]; | 471 | char msg[EDAC_MC_LABEL_LEN + 1 + 90]; |
472 | u32 allErrors; | 472 | u32 allErrors; |
@@ -532,14 +532,14 @@ static void i5000_process_fatal_error_info(struct mem_ctl_info *mci, | |||
532 | 532 | ||
533 | /****************************************************************************** | 533 | /****************************************************************************** |
534 | * i5000_process_fatal_error_info(struct mem_ctl_info *mci, | 534 | * i5000_process_fatal_error_info(struct mem_ctl_info *mci, |
535 | * struct i5000_error_info *info, | 535 | * struct i5000_error_info *info, |
536 | * int handle_errors); | 536 | * int handle_errors); |
537 | * | 537 | * |
538 | * handle the Intel NON-FATAL errors, if any | 538 | * handle the Intel NON-FATAL errors, if any |
539 | */ | 539 | */ |
540 | static void i5000_process_nonfatal_error_info(struct mem_ctl_info *mci, | 540 | static void i5000_process_nonfatal_error_info(struct mem_ctl_info *mci, |
541 | struct i5000_error_info * info, | 541 | struct i5000_error_info * info, |
542 | int handle_errors) | 542 | int handle_errors) |
543 | { | 543 | { |
544 | char msg[EDAC_MC_LABEL_LEN + 1 + 90]; | 544 | char msg[EDAC_MC_LABEL_LEN + 1 + 90]; |
545 | u32 allErrors; | 545 | u32 allErrors; |
@@ -576,10 +576,10 @@ static void i5000_process_nonfatal_error_info(struct mem_ctl_info *mci, | |||
576 | cas = NREC_CAS(info->nrecmemb); | 576 | cas = NREC_CAS(info->nrecmemb); |
577 | 577 | ||
578 | debugf0 | 578 | debugf0 |
579 | ("\t\tCSROW= %d Channels= %d,%d (Branch= %d " | 579 | ("\t\tCSROW= %d Channels= %d,%d (Branch= %d " |
580 | "DRAM Bank= %d rdwr= %s ras= %d cas= %d)\n", | 580 | "DRAM Bank= %d rdwr= %s ras= %d cas= %d)\n", |
581 | rank, channel, channel + 1, branch >> 1, bank, | 581 | rank, channel, channel + 1, branch >> 1, bank, |
582 | rdwr ? "Write" : "Read", ras, cas); | 582 | rdwr ? "Write" : "Read", ras, cas); |
583 | 583 | ||
584 | /* Form out message */ | 584 | /* Form out message */ |
585 | snprintf(msg, sizeof(msg), | 585 | snprintf(msg, sizeof(msg), |
@@ -632,37 +632,37 @@ static void i5000_process_nonfatal_error_info(struct mem_ctl_info *mci, | |||
632 | misc_errors = allErrors & FERR_NF_THERMAL; | 632 | misc_errors = allErrors & FERR_NF_THERMAL; |
633 | if (misc_errors) { | 633 | if (misc_errors) { |
634 | i5000_printk(KERN_WARNING, "\tTHERMAL Error, bits= 0x%x\n", | 634 | i5000_printk(KERN_WARNING, "\tTHERMAL Error, bits= 0x%x\n", |
635 | misc_errors); | 635 | misc_errors); |
636 | } | 636 | } |
637 | 637 | ||
638 | /* See if any of the thermal errors have fired */ | 638 | /* See if any of the thermal errors have fired */ |
639 | misc_errors = allErrors & FERR_NF_NON_RETRY; | 639 | misc_errors = allErrors & FERR_NF_NON_RETRY; |
640 | if (misc_errors) { | 640 | if (misc_errors) { |
641 | i5000_printk(KERN_WARNING, "\tNON-Retry Errors, bits= 0x%x\n", | 641 | i5000_printk(KERN_WARNING, "\tNON-Retry Errors, bits= 0x%x\n", |
642 | misc_errors); | 642 | misc_errors); |
643 | } | 643 | } |
644 | 644 | ||
645 | /* See if any of the thermal errors have fired */ | 645 | /* See if any of the thermal errors have fired */ |
646 | misc_errors = allErrors & FERR_NF_NORTH_CRC; | 646 | misc_errors = allErrors & FERR_NF_NORTH_CRC; |
647 | if (misc_errors) { | 647 | if (misc_errors) { |
648 | i5000_printk(KERN_WARNING, | 648 | i5000_printk(KERN_WARNING, |
649 | "\tNORTHBOUND CRC Error, bits= 0x%x\n", | 649 | "\tNORTHBOUND CRC Error, bits= 0x%x\n", |
650 | misc_errors); | 650 | misc_errors); |
651 | } | 651 | } |
652 | 652 | ||
653 | /* See if any of the thermal errors have fired */ | 653 | /* See if any of the thermal errors have fired */ |
654 | misc_errors = allErrors & FERR_NF_SPD_PROTOCOL; | 654 | misc_errors = allErrors & FERR_NF_SPD_PROTOCOL; |
655 | if (misc_errors) { | 655 | if (misc_errors) { |
656 | i5000_printk(KERN_WARNING, | 656 | i5000_printk(KERN_WARNING, |
657 | "\tSPD Protocol Error, bits= 0x%x\n", | 657 | "\tSPD Protocol Error, bits= 0x%x\n", |
658 | misc_errors); | 658 | misc_errors); |
659 | } | 659 | } |
660 | 660 | ||
661 | /* See if any of the thermal errors have fired */ | 661 | /* See if any of the thermal errors have fired */ |
662 | misc_errors = allErrors & FERR_NF_DIMM_SPARE; | 662 | misc_errors = allErrors & FERR_NF_DIMM_SPARE; |
663 | if (misc_errors) { | 663 | if (misc_errors) { |
664 | i5000_printk(KERN_WARNING, "\tDIMM-Spare Error, bits= 0x%x\n", | 664 | i5000_printk(KERN_WARNING, "\tDIMM-Spare Error, bits= 0x%x\n", |
665 | misc_errors); | 665 | misc_errors); |
666 | } | 666 | } |
667 | } | 667 | } |
668 | 668 | ||
@@ -671,8 +671,8 @@ static void i5000_process_nonfatal_error_info(struct mem_ctl_info *mci, | |||
671 | * in the 'info' structure, previously retrieved from hardware | 671 | * in the 'info' structure, previously retrieved from hardware |
672 | */ | 672 | */ |
673 | static void i5000_process_error_info(struct mem_ctl_info *mci, | 673 | static void i5000_process_error_info(struct mem_ctl_info *mci, |
674 | struct i5000_error_info * info, | 674 | struct i5000_error_info * info, |
675 | int handle_errors) | 675 | int handle_errors) |
676 | { | 676 | { |
677 | /* First handle any fatal errors that occurred */ | 677 | /* First handle any fatal errors that occurred */ |
678 | i5000_process_fatal_error_info(mci, info, handle_errors); | 678 | i5000_process_fatal_error_info(mci, info, handle_errors); |
@@ -724,17 +724,17 @@ static int i5000_get_devices(struct mem_ctl_info *mci, int dev_idx) | |||
724 | pdev = NULL; | 724 | pdev = NULL; |
725 | while (1) { | 725 | while (1) { |
726 | pdev = pci_get_device(PCI_VENDOR_ID_INTEL, | 726 | pdev = pci_get_device(PCI_VENDOR_ID_INTEL, |
727 | PCI_DEVICE_ID_INTEL_I5000_DEV16, pdev); | 727 | PCI_DEVICE_ID_INTEL_I5000_DEV16, pdev); |
728 | 728 | ||
729 | /* End of list, leave */ | 729 | /* End of list, leave */ |
730 | if (pdev == NULL) { | 730 | if (pdev == NULL) { |
731 | i5000_printk(KERN_ERR, | 731 | i5000_printk(KERN_ERR, |
732 | "'system address,Process Bus' " | 732 | "'system address,Process Bus' " |
733 | "device not found:" | 733 | "device not found:" |
734 | "vendor 0x%x device 0x%x FUNC 1 " | 734 | "vendor 0x%x device 0x%x FUNC 1 " |
735 | "(broken BIOS?)\n", | 735 | "(broken BIOS?)\n", |
736 | PCI_VENDOR_ID_INTEL, | 736 | PCI_VENDOR_ID_INTEL, |
737 | PCI_DEVICE_ID_INTEL_I5000_DEV16); | 737 | PCI_DEVICE_ID_INTEL_I5000_DEV16); |
738 | 738 | ||
739 | return 1; | 739 | return 1; |
740 | } | 740 | } |
@@ -750,16 +750,16 @@ static int i5000_get_devices(struct mem_ctl_info *mci, int dev_idx) | |||
750 | pdev = NULL; | 750 | pdev = NULL; |
751 | while (1) { | 751 | while (1) { |
752 | pdev = pci_get_device(PCI_VENDOR_ID_INTEL, | 752 | pdev = pci_get_device(PCI_VENDOR_ID_INTEL, |
753 | PCI_DEVICE_ID_INTEL_I5000_DEV16, pdev); | 753 | PCI_DEVICE_ID_INTEL_I5000_DEV16, pdev); |
754 | 754 | ||
755 | if (pdev == NULL) { | 755 | if (pdev == NULL) { |
756 | i5000_printk(KERN_ERR, | 756 | i5000_printk(KERN_ERR, |
757 | "MC: 'branchmap,control,errors' " | 757 | "MC: 'branchmap,control,errors' " |
758 | "device not found:" | 758 | "device not found:" |
759 | "vendor 0x%x device 0x%x Func 2 " | 759 | "vendor 0x%x device 0x%x Func 2 " |
760 | "(broken BIOS?)\n", | 760 | "(broken BIOS?)\n", |
761 | PCI_VENDOR_ID_INTEL, | 761 | PCI_VENDOR_ID_INTEL, |
762 | PCI_DEVICE_ID_INTEL_I5000_DEV16); | 762 | PCI_DEVICE_ID_INTEL_I5000_DEV16); |
763 | 763 | ||
764 | pci_dev_put(pvt->branchmap_werrors); | 764 | pci_dev_put(pvt->branchmap_werrors); |
765 | return 1; | 765 | return 1; |
@@ -784,13 +784,13 @@ static int i5000_get_devices(struct mem_ctl_info *mci, int dev_idx) | |||
784 | 784 | ||
785 | pdev = NULL; | 785 | pdev = NULL; |
786 | pdev = pci_get_device(PCI_VENDOR_ID_INTEL, | 786 | pdev = pci_get_device(PCI_VENDOR_ID_INTEL, |
787 | PCI_DEVICE_ID_I5000_BRANCH_0, pdev); | 787 | PCI_DEVICE_ID_I5000_BRANCH_0, pdev); |
788 | 788 | ||
789 | if (pdev == NULL) { | 789 | if (pdev == NULL) { |
790 | i5000_printk(KERN_ERR, | 790 | i5000_printk(KERN_ERR, |
791 | "MC: 'BRANCH 0' device not found:" | 791 | "MC: 'BRANCH 0' device not found:" |
792 | "vendor 0x%x device 0x%x Func 0 (broken BIOS?)\n", | 792 | "vendor 0x%x device 0x%x Func 0 (broken BIOS?)\n", |
793 | PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_I5000_BRANCH_0); | 793 | PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_I5000_BRANCH_0); |
794 | 794 | ||
795 | pci_dev_put(pvt->branchmap_werrors); | 795 | pci_dev_put(pvt->branchmap_werrors); |
796 | pci_dev_put(pvt->fsb_error_regs); | 796 | pci_dev_put(pvt->fsb_error_regs); |
@@ -805,15 +805,15 @@ static int i5000_get_devices(struct mem_ctl_info *mci, int dev_idx) | |||
805 | if (pvt->maxch >= CHANNELS_PER_BRANCH) { | 805 | if (pvt->maxch >= CHANNELS_PER_BRANCH) { |
806 | pdev = NULL; | 806 | pdev = NULL; |
807 | pdev = pci_get_device(PCI_VENDOR_ID_INTEL, | 807 | pdev = pci_get_device(PCI_VENDOR_ID_INTEL, |
808 | PCI_DEVICE_ID_I5000_BRANCH_1, pdev); | 808 | PCI_DEVICE_ID_I5000_BRANCH_1, pdev); |
809 | 809 | ||
810 | if (pdev == NULL) { | 810 | if (pdev == NULL) { |
811 | i5000_printk(KERN_ERR, | 811 | i5000_printk(KERN_ERR, |
812 | "MC: 'BRANCH 1' device not found:" | 812 | "MC: 'BRANCH 1' device not found:" |
813 | "vendor 0x%x device 0x%x Func 0 " | 813 | "vendor 0x%x device 0x%x Func 0 " |
814 | "(broken BIOS?)\n", | 814 | "(broken BIOS?)\n", |
815 | PCI_VENDOR_ID_INTEL, | 815 | PCI_VENDOR_ID_INTEL, |
816 | PCI_DEVICE_ID_I5000_BRANCH_1); | 816 | PCI_DEVICE_ID_I5000_BRANCH_1); |
817 | 817 | ||
818 | pci_dev_put(pvt->branchmap_werrors); | 818 | pci_dev_put(pvt->branchmap_werrors); |
819 | pci_dev_put(pvt->fsb_error_regs); | 819 | pci_dev_put(pvt->fsb_error_regs); |
@@ -917,7 +917,7 @@ static void decode_mtr(int slot_row, u16 mtr) | |||
917 | } | 917 | } |
918 | 918 | ||
919 | static void handle_channel(struct i5000_pvt *pvt, int csrow, int channel, | 919 | static void handle_channel(struct i5000_pvt *pvt, int csrow, int channel, |
920 | struct i5000_dimm_info *dinfo) | 920 | struct i5000_dimm_info *dinfo) |
921 | { | 921 | { |
922 | int mtr; | 922 | int mtr; |
923 | int amb_present_reg; | 923 | int amb_present_reg; |
@@ -932,7 +932,7 @@ static void handle_channel(struct i5000_pvt *pvt, int csrow, int channel, | |||
932 | dinfo->dual_rank = MTR_DIMM_RANK(mtr); | 932 | dinfo->dual_rank = MTR_DIMM_RANK(mtr); |
933 | 933 | ||
934 | if (!((dinfo->dual_rank == 0) && | 934 | if (!((dinfo->dual_rank == 0) && |
935 | ((csrow & 0x1) == 0x1))) { | 935 | ((csrow & 0x1) == 0x1))) { |
936 | /* Start with the number of bits for a Bank | 936 | /* Start with the number of bits for a Bank |
937 | * on the DRAM */ | 937 | * on the DRAM */ |
938 | addrBits = MTR_DRAM_BANKS_ADDR_BITS(mtr); | 938 | addrBits = MTR_DRAM_BANKS_ADDR_BITS(mtr); |
@@ -970,7 +970,7 @@ static void calculate_dimm_size(struct i5000_pvt *pvt) | |||
970 | mem_buffer = p = kmalloc(space, GFP_KERNEL); | 970 | mem_buffer = p = kmalloc(space, GFP_KERNEL); |
971 | if (p == NULL) { | 971 | if (p == NULL) { |
972 | i5000_printk(KERN_ERR, "MC: %s:%s() kmalloc() failed\n", | 972 | i5000_printk(KERN_ERR, "MC: %s:%s() kmalloc() failed\n", |
973 | __FILE__, __func__); | 973 | __FILE__, __func__); |
974 | return; | 974 | return; |
975 | } | 975 | } |
976 | 976 | ||
@@ -990,7 +990,7 @@ static void calculate_dimm_size(struct i5000_pvt *pvt) | |||
990 | * then reset the message buffer */ | 990 | * then reset the message buffer */ |
991 | if (csrow & 0x1) { | 991 | if (csrow & 0x1) { |
992 | n = snprintf(p, space, "---------------------------" | 992 | n = snprintf(p, space, "---------------------------" |
993 | "--------------------------------"); | 993 | "--------------------------------"); |
994 | p += n; | 994 | p += n; |
995 | space -= n; | 995 | space -= n; |
996 | debugf2("%s\n", mem_buffer); | 996 | debugf2("%s\n", mem_buffer); |
@@ -1015,7 +1015,7 @@ static void calculate_dimm_size(struct i5000_pvt *pvt) | |||
1015 | 1015 | ||
1016 | /* Output the last bottom 'boundary' marker */ | 1016 | /* Output the last bottom 'boundary' marker */ |
1017 | n = snprintf(p, space, "---------------------------" | 1017 | n = snprintf(p, space, "---------------------------" |
1018 | "--------------------------------\n"); | 1018 | "--------------------------------\n"); |
1019 | p += n; | 1019 | p += n; |
1020 | space -= n; | 1020 | space -= n; |
1021 | 1021 | ||
@@ -1056,9 +1056,9 @@ static void i5000_get_mc_regs(struct mem_ctl_info *mci) | |||
1056 | pvt = (struct i5000_pvt *)mci->pvt_info; | 1056 | pvt = (struct i5000_pvt *)mci->pvt_info; |
1057 | 1057 | ||
1058 | pci_read_config_dword(pvt->system_address, AMBASE, | 1058 | pci_read_config_dword(pvt->system_address, AMBASE, |
1059 | (u32 *) & pvt->ambase); | 1059 | (u32 *) & pvt->ambase); |
1060 | pci_read_config_dword(pvt->system_address, AMBASE + sizeof(u32), | 1060 | pci_read_config_dword(pvt->system_address, AMBASE + sizeof(u32), |
1061 | ((u32 *) & pvt->ambase) + sizeof(u32)); | 1061 | ((u32 *) & pvt->ambase) + sizeof(u32)); |
1062 | 1062 | ||
1063 | maxdimmperch = pvt->maxdimmperch; | 1063 | maxdimmperch = pvt->maxdimmperch; |
1064 | maxch = pvt->maxch; | 1064 | maxch = pvt->maxch; |
@@ -1098,14 +1098,14 @@ static void i5000_get_mc_regs(struct mem_ctl_info *mci) | |||
1098 | int where = MTR0 + (slot_row * sizeof(u32)); | 1098 | int where = MTR0 + (slot_row * sizeof(u32)); |
1099 | 1099 | ||
1100 | pci_read_config_word(pvt->branch_0, where, | 1100 | pci_read_config_word(pvt->branch_0, where, |
1101 | &pvt->b0_mtr[slot_row]); | 1101 | &pvt->b0_mtr[slot_row]); |
1102 | 1102 | ||
1103 | debugf2("MTR%d where=0x%x B0 value=0x%x\n", slot_row, where, | 1103 | debugf2("MTR%d where=0x%x B0 value=0x%x\n", slot_row, where, |
1104 | pvt->b0_mtr[slot_row]); | 1104 | pvt->b0_mtr[slot_row]); |
1105 | 1105 | ||
1106 | if (pvt->maxch >= CHANNELS_PER_BRANCH) { | 1106 | if (pvt->maxch >= CHANNELS_PER_BRANCH) { |
1107 | pci_read_config_word(pvt->branch_1, where, | 1107 | pci_read_config_word(pvt->branch_1, where, |
1108 | &pvt->b1_mtr[slot_row]); | 1108 | &pvt->b1_mtr[slot_row]); |
1109 | debugf2("MTR%d where=0x%x B1 value=0x%x\n", slot_row, | 1109 | debugf2("MTR%d where=0x%x B1 value=0x%x\n", slot_row, |
1110 | where, pvt->b0_mtr[slot_row]); | 1110 | where, pvt->b0_mtr[slot_row]); |
1111 | } else { | 1111 | } else { |
@@ -1120,10 +1120,10 @@ static void i5000_get_mc_regs(struct mem_ctl_info *mci) | |||
1120 | decode_mtr(slot_row, pvt->b0_mtr[slot_row]); | 1120 | decode_mtr(slot_row, pvt->b0_mtr[slot_row]); |
1121 | } | 1121 | } |
1122 | pci_read_config_word(pvt->branch_0, AMB_PRESENT_0, | 1122 | pci_read_config_word(pvt->branch_0, AMB_PRESENT_0, |
1123 | &pvt->b0_ambpresent0); | 1123 | &pvt->b0_ambpresent0); |
1124 | debugf2("\t\tAMB-Branch 0-present0 0x%x:\n", pvt->b0_ambpresent0); | 1124 | debugf2("\t\tAMB-Branch 0-present0 0x%x:\n", pvt->b0_ambpresent0); |
1125 | pci_read_config_word(pvt->branch_0, AMB_PRESENT_1, | 1125 | pci_read_config_word(pvt->branch_0, AMB_PRESENT_1, |
1126 | &pvt->b0_ambpresent1); | 1126 | &pvt->b0_ambpresent1); |
1127 | debugf2("\t\tAMB-Branch 0-present1 0x%x:\n", pvt->b0_ambpresent1); | 1127 | debugf2("\t\tAMB-Branch 0-present1 0x%x:\n", pvt->b0_ambpresent1); |
1128 | 1128 | ||
1129 | /* Only if we have 2 branchs (4 channels) */ | 1129 | /* Only if we have 2 branchs (4 channels) */ |
@@ -1137,11 +1137,11 @@ static void i5000_get_mc_regs(struct mem_ctl_info *mci) | |||
1137 | decode_mtr(slot_row, pvt->b1_mtr[slot_row]); | 1137 | decode_mtr(slot_row, pvt->b1_mtr[slot_row]); |
1138 | } | 1138 | } |
1139 | pci_read_config_word(pvt->branch_1, AMB_PRESENT_0, | 1139 | pci_read_config_word(pvt->branch_1, AMB_PRESENT_0, |
1140 | &pvt->b1_ambpresent0); | 1140 | &pvt->b1_ambpresent0); |
1141 | debugf2("\t\tAMB-Branch 1-present0 0x%x:\n", | 1141 | debugf2("\t\tAMB-Branch 1-present0 0x%x:\n", |
1142 | pvt->b1_ambpresent0); | 1142 | pvt->b1_ambpresent0); |
1143 | pci_read_config_word(pvt->branch_1, AMB_PRESENT_1, | 1143 | pci_read_config_word(pvt->branch_1, AMB_PRESENT_1, |
1144 | &pvt->b1_ambpresent1); | 1144 | &pvt->b1_ambpresent1); |
1145 | debugf2("\t\tAMB-Branch 1-present1 0x%x:\n", | 1145 | debugf2("\t\tAMB-Branch 1-present1 0x%x:\n", |
1146 | pvt->b1_ambpresent1); | 1146 | pvt->b1_ambpresent1); |
1147 | } | 1147 | } |
@@ -1234,13 +1234,13 @@ static void i5000_enable_error_reporting(struct mem_ctl_info *mci) | |||
1234 | 1234 | ||
1235 | /* Read the FBD Error Mask Register */ | 1235 | /* Read the FBD Error Mask Register */ |
1236 | pci_read_config_dword(pvt->branchmap_werrors, EMASK_FBD, | 1236 | pci_read_config_dword(pvt->branchmap_werrors, EMASK_FBD, |
1237 | &fbd_error_mask); | 1237 | &fbd_error_mask); |
1238 | 1238 | ||
1239 | /* Enable with a '0' */ | 1239 | /* Enable with a '0' */ |
1240 | fbd_error_mask &= ~(ENABLE_EMASK_ALL); | 1240 | fbd_error_mask &= ~(ENABLE_EMASK_ALL); |
1241 | 1241 | ||
1242 | pci_write_config_dword(pvt->branchmap_werrors, EMASK_FBD, | 1242 | pci_write_config_dword(pvt->branchmap_werrors, EMASK_FBD, |
1243 | fbd_error_mask); | 1243 | fbd_error_mask); |
1244 | } | 1244 | } |
1245 | 1245 | ||
1246 | /****************************************************************************** | 1246 | /****************************************************************************** |
@@ -1250,8 +1250,8 @@ static void i5000_enable_error_reporting(struct mem_ctl_info *mci) | |||
1250 | * as well | 1250 | * as well |
1251 | */ | 1251 | */ |
1252 | static void i5000_get_dimm_and_channel_counts(struct pci_dev *pdev, | 1252 | static void i5000_get_dimm_and_channel_counts(struct pci_dev *pdev, |
1253 | int *num_dimms_per_channel, | 1253 | int *num_dimms_per_channel, |
1254 | int *num_channels) | 1254 | int *num_channels) |
1255 | { | 1255 | { |
1256 | u8 value; | 1256 | u8 value; |
1257 | 1257 | ||
@@ -1313,7 +1313,7 @@ static int i5000_probe1(struct pci_dev *pdev, int dev_idx) | |||
1313 | * some fancy mobo determination. | 1313 | * some fancy mobo determination. |
1314 | */ | 1314 | */ |
1315 | i5000_get_dimm_and_channel_counts(pdev, &num_dimms_per_channel, | 1315 | i5000_get_dimm_and_channel_counts(pdev, &num_dimms_per_channel, |
1316 | &num_channels); | 1316 | &num_channels); |
1317 | num_csrows = num_dimms_per_channel * 2; | 1317 | num_csrows = num_dimms_per_channel * 2; |
1318 | 1318 | ||
1319 | debugf0("MC: %s(): Number of - Channels= %d DIMMS= %d CSROWS= %d\n", | 1319 | debugf0("MC: %s(): Number of - Channels= %d DIMMS= %d CSROWS= %d\n", |
@@ -1392,11 +1392,11 @@ static int i5000_probe1(struct pci_dev *pdev, int dev_idx) | |||
1392 | return 0; | 1392 | return 0; |
1393 | 1393 | ||
1394 | /* Error exit unwinding stack */ | 1394 | /* Error exit unwinding stack */ |
1395 | fail1: | 1395 | fail1: |
1396 | 1396 | ||
1397 | i5000_put_devices(mci); | 1397 | i5000_put_devices(mci); |
1398 | 1398 | ||
1399 | fail0: | 1399 | fail0: |
1400 | edac_mc_free(mci); | 1400 | edac_mc_free(mci); |
1401 | return -ENODEV; | 1401 | return -ENODEV; |
1402 | } | 1402 | } |
@@ -1409,7 +1409,7 @@ static int i5000_probe1(struct pci_dev *pdev, int dev_idx) | |||
1409 | * count (>= 0) | 1409 | * count (>= 0) |
1410 | */ | 1410 | */ |
1411 | static int __devinit i5000_init_one(struct pci_dev *pdev, | 1411 | static int __devinit i5000_init_one(struct pci_dev *pdev, |
1412 | const struct pci_device_id *id) | 1412 | const struct pci_device_id *id) |
1413 | { | 1413 | { |
1414 | int rc; | 1414 | int rc; |
1415 | 1415 | ||
@@ -1503,6 +1503,6 @@ MODULE_LICENSE("GPL"); | |||
1503 | MODULE_AUTHOR | 1503 | MODULE_AUTHOR |
1504 | ("Linux Networx (http://lnxi.com) Doug Thompson <norsk5@xmission.com>"); | 1504 | ("Linux Networx (http://lnxi.com) Doug Thompson <norsk5@xmission.com>"); |
1505 | MODULE_DESCRIPTION("MC Driver for Intel I5000 memory controllers - " | 1505 | MODULE_DESCRIPTION("MC Driver for Intel I5000 memory controllers - " |
1506 | I5000_REVISION); | 1506 | I5000_REVISION); |
1507 | module_param(edac_op_state, int, 0444); | 1507 | module_param(edac_op_state, int, 0444); |
1508 | MODULE_PARM_DESC(edac_op_state, "EDAC Error Reporting state: 0=Poll,1=NMI"); | 1508 | MODULE_PARM_DESC(edac_op_state, "EDAC Error Reporting state: 0=Poll,1=NMI"); |