diff options
-rw-r--r-- | arch/powerpc/include/asm/eeh.h | 9 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/eeh.c | 13 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/eeh_cache.c | 3 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/eeh_driver.c | 6 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/eeh_sysfs.c | 9 |
5 files changed, 8 insertions, 32 deletions
diff --git a/arch/powerpc/include/asm/eeh.h b/arch/powerpc/include/asm/eeh.h index d25a693595f8..792d2d789751 100644 --- a/arch/powerpc/include/asm/eeh.h +++ b/arch/powerpc/include/asm/eeh.h | |||
@@ -77,20 +77,13 @@ struct eeh_pe { | |||
77 | * another tree except the currently existing tree of PCI | 77 | * another tree except the currently existing tree of PCI |
78 | * buses and PCI devices | 78 | * buses and PCI devices |
79 | */ | 79 | */ |
80 | #define EEH_MODE_SUPPORTED (1<<0) /* EEH supported on the device */ | 80 | #define EEH_DEV_IRQ_DISABLED (1<<0) /* Interrupt disabled */ |
81 | #define EEH_MODE_NOCHECK (1<<1) /* EEH check should be skipped */ | ||
82 | #define EEH_MODE_ISOLATED (1<<2) /* The device has been isolated */ | ||
83 | #define EEH_MODE_RECOVERING (1<<3) /* Recovering the device */ | ||
84 | #define EEH_MODE_IRQ_DISABLED (1<<4) /* Interrupt disabled */ | ||
85 | 81 | ||
86 | struct eeh_dev { | 82 | struct eeh_dev { |
87 | int mode; /* EEH mode */ | 83 | int mode; /* EEH mode */ |
88 | int class_code; /* Class code of the device */ | 84 | int class_code; /* Class code of the device */ |
89 | int config_addr; /* Config address */ | 85 | int config_addr; /* Config address */ |
90 | int pe_config_addr; /* PE config address */ | 86 | int pe_config_addr; /* PE config address */ |
91 | int check_count; /* Times of ignored error */ | ||
92 | int freeze_count; /* Times of froze up */ | ||
93 | int false_positives; /* Times of reported #ff's */ | ||
94 | u32 config_space[16]; /* Saved PCI config space */ | 87 | u32 config_space[16]; /* Saved PCI config space */ |
95 | struct eeh_pe *pe; /* Associated PE */ | 88 | struct eeh_pe *pe; /* Associated PE */ |
96 | struct list_head list; /* Form link list in the PE */ | 89 | struct list_head list; /* Form link list in the PE */ |
diff --git a/arch/powerpc/platforms/pseries/eeh.c b/arch/powerpc/platforms/pseries/eeh.c index 56a022b03651..6d4323025793 100644 --- a/arch/powerpc/platforms/pseries/eeh.c +++ b/arch/powerpc/platforms/pseries/eeh.c | |||
@@ -537,7 +537,7 @@ static void eeh_reset_pe_once(struct eeh_pe *pe) | |||
537 | * pci slot reset line is dropped. Make sure we don't miss | 537 | * pci slot reset line is dropped. Make sure we don't miss |
538 | * these, and clear the flag now. | 538 | * these, and clear the flag now. |
539 | */ | 539 | */ |
540 | eeh_pe_state_clear(pe, EEH_MODE_ISOLATED); | 540 | eeh_pe_state_clear(pe, EEH_PE_ISOLATED); |
541 | 541 | ||
542 | eeh_ops->reset(pe, EEH_RESET_DEACTIVATE); | 542 | eeh_ops->reset(pe, EEH_RESET_DEACTIVATE); |
543 | 543 | ||
@@ -625,9 +625,6 @@ static void *eeh_early_enable(struct device_node *dn, void *data) | |||
625 | 625 | ||
626 | edev->class_code = 0; | 626 | edev->class_code = 0; |
627 | edev->mode = 0; | 627 | edev->mode = 0; |
628 | edev->check_count = 0; | ||
629 | edev->freeze_count = 0; | ||
630 | edev->false_positives = 0; | ||
631 | 628 | ||
632 | if (!of_device_is_available(dn)) | 629 | if (!of_device_is_available(dn)) |
633 | return NULL; | 630 | return NULL; |
@@ -637,10 +634,8 @@ static void *eeh_early_enable(struct device_node *dn, void *data) | |||
637 | return NULL; | 634 | return NULL; |
638 | 635 | ||
639 | /* There is nothing to check on PCI to ISA bridges */ | 636 | /* There is nothing to check on PCI to ISA bridges */ |
640 | if (dn->type && !strcmp(dn->type, "isa")) { | 637 | if (dn->type && !strcmp(dn->type, "isa")) |
641 | edev->mode |= EEH_MODE_NOCHECK; | ||
642 | return NULL; | 638 | return NULL; |
643 | } | ||
644 | edev->class_code = *class_code; | 639 | edev->class_code = *class_code; |
645 | 640 | ||
646 | /* Ok... see if this device supports EEH. Some do, some don't, | 641 | /* Ok... see if this device supports EEH. Some do, some don't, |
@@ -679,7 +674,6 @@ static void *eeh_early_enable(struct device_node *dn, void *data) | |||
679 | 674 | ||
680 | if (enable) { | 675 | if (enable) { |
681 | eeh_subsystem_enabled = 1; | 676 | eeh_subsystem_enabled = 1; |
682 | edev->mode |= EEH_MODE_SUPPORTED; | ||
683 | 677 | ||
684 | eeh_add_to_parent_pe(edev); | 678 | eeh_add_to_parent_pe(edev); |
685 | 679 | ||
@@ -692,9 +686,8 @@ static void *eeh_early_enable(struct device_node *dn, void *data) | |||
692 | * EEH parent, in which case we mark it as supported. | 686 | * EEH parent, in which case we mark it as supported. |
693 | */ | 687 | */ |
694 | if (dn->parent && of_node_to_eeh_dev(dn->parent) && | 688 | if (dn->parent && of_node_to_eeh_dev(dn->parent) && |
695 | (of_node_to_eeh_dev(dn->parent)->mode & EEH_MODE_SUPPORTED)) { | 689 | of_node_to_eeh_dev(dn->parent)->pe) { |
696 | /* Parent supports EEH. */ | 690 | /* Parent supports EEH. */ |
697 | edev->mode |= EEH_MODE_SUPPORTED; | ||
698 | edev->config_addr = of_node_to_eeh_dev(dn->parent)->config_addr; | 691 | edev->config_addr = of_node_to_eeh_dev(dn->parent)->config_addr; |
699 | edev->pe_config_addr = of_node_to_eeh_dev(dn->parent)->pe_config_addr; | 692 | edev->pe_config_addr = of_node_to_eeh_dev(dn->parent)->pe_config_addr; |
700 | 693 | ||
diff --git a/arch/powerpc/platforms/pseries/eeh_cache.c b/arch/powerpc/platforms/pseries/eeh_cache.c index f50b717286fb..a1910579d7aa 100644 --- a/arch/powerpc/platforms/pseries/eeh_cache.c +++ b/arch/powerpc/platforms/pseries/eeh_cache.c | |||
@@ -192,8 +192,7 @@ static void __pci_addr_cache_insert_device(struct pci_dev *dev) | |||
192 | } | 192 | } |
193 | 193 | ||
194 | /* Skip any devices for which EEH is not enabled. */ | 194 | /* Skip any devices for which EEH is not enabled. */ |
195 | if (!(edev->mode & EEH_MODE_SUPPORTED) || | 195 | if (!edev->pe) { |
196 | edev->mode & EEH_MODE_NOCHECK) { | ||
197 | #ifdef DEBUG | 196 | #ifdef DEBUG |
198 | pr_info("PCI: skip building address cache for=%s - %s\n", | 197 | pr_info("PCI: skip building address cache for=%s - %s\n", |
199 | pci_name(dev), dn->full_name); | 198 | pci_name(dev), dn->full_name); |
diff --git a/arch/powerpc/platforms/pseries/eeh_driver.c b/arch/powerpc/platforms/pseries/eeh_driver.c index 343c807e608a..8370ce7d5931 100644 --- a/arch/powerpc/platforms/pseries/eeh_driver.c +++ b/arch/powerpc/platforms/pseries/eeh_driver.c | |||
@@ -93,7 +93,7 @@ static void eeh_disable_irq(struct pci_dev *dev) | |||
93 | if (!irq_has_action(dev->irq)) | 93 | if (!irq_has_action(dev->irq)) |
94 | return; | 94 | return; |
95 | 95 | ||
96 | edev->mode |= EEH_MODE_IRQ_DISABLED; | 96 | edev->mode |= EEH_DEV_IRQ_DISABLED; |
97 | disable_irq_nosync(dev->irq); | 97 | disable_irq_nosync(dev->irq); |
98 | } | 98 | } |
99 | 99 | ||
@@ -108,8 +108,8 @@ static void eeh_enable_irq(struct pci_dev *dev) | |||
108 | { | 108 | { |
109 | struct eeh_dev *edev = pci_dev_to_eeh_dev(dev); | 109 | struct eeh_dev *edev = pci_dev_to_eeh_dev(dev); |
110 | 110 | ||
111 | if ((edev->mode) & EEH_MODE_IRQ_DISABLED) { | 111 | if ((edev->mode) & EEH_DEV_IRQ_DISABLED) { |
112 | edev->mode &= ~EEH_MODE_IRQ_DISABLED; | 112 | edev->mode &= ~EEH_DEV_IRQ_DISABLED; |
113 | enable_irq(dev->irq); | 113 | enable_irq(dev->irq); |
114 | } | 114 | } |
115 | } | 115 | } |
diff --git a/arch/powerpc/platforms/pseries/eeh_sysfs.c b/arch/powerpc/platforms/pseries/eeh_sysfs.c index 243b3510d70f..d37708360f2e 100644 --- a/arch/powerpc/platforms/pseries/eeh_sysfs.c +++ b/arch/powerpc/platforms/pseries/eeh_sysfs.c | |||
@@ -53,9 +53,6 @@ static DEVICE_ATTR(_name, S_IRUGO, eeh_show_##_name, NULL); | |||
53 | EEH_SHOW_ATTR(eeh_mode, mode, "0x%x"); | 53 | EEH_SHOW_ATTR(eeh_mode, mode, "0x%x"); |
54 | EEH_SHOW_ATTR(eeh_config_addr, config_addr, "0x%x"); | 54 | EEH_SHOW_ATTR(eeh_config_addr, config_addr, "0x%x"); |
55 | EEH_SHOW_ATTR(eeh_pe_config_addr, pe_config_addr, "0x%x"); | 55 | EEH_SHOW_ATTR(eeh_pe_config_addr, pe_config_addr, "0x%x"); |
56 | EEH_SHOW_ATTR(eeh_check_count, check_count, "%d" ); | ||
57 | EEH_SHOW_ATTR(eeh_freeze_count, freeze_count, "%d" ); | ||
58 | EEH_SHOW_ATTR(eeh_false_positives, false_positives, "%d" ); | ||
59 | 56 | ||
60 | void eeh_sysfs_add_device(struct pci_dev *pdev) | 57 | void eeh_sysfs_add_device(struct pci_dev *pdev) |
61 | { | 58 | { |
@@ -64,9 +61,6 @@ void eeh_sysfs_add_device(struct pci_dev *pdev) | |||
64 | rc += device_create_file(&pdev->dev, &dev_attr_eeh_mode); | 61 | rc += device_create_file(&pdev->dev, &dev_attr_eeh_mode); |
65 | rc += device_create_file(&pdev->dev, &dev_attr_eeh_config_addr); | 62 | rc += device_create_file(&pdev->dev, &dev_attr_eeh_config_addr); |
66 | rc += device_create_file(&pdev->dev, &dev_attr_eeh_pe_config_addr); | 63 | rc += device_create_file(&pdev->dev, &dev_attr_eeh_pe_config_addr); |
67 | rc += device_create_file(&pdev->dev, &dev_attr_eeh_check_count); | ||
68 | rc += device_create_file(&pdev->dev, &dev_attr_eeh_false_positives); | ||
69 | rc += device_create_file(&pdev->dev, &dev_attr_eeh_freeze_count); | ||
70 | 64 | ||
71 | if (rc) | 65 | if (rc) |
72 | printk(KERN_WARNING "EEH: Unable to create sysfs entries\n"); | 66 | printk(KERN_WARNING "EEH: Unable to create sysfs entries\n"); |
@@ -77,8 +71,5 @@ void eeh_sysfs_remove_device(struct pci_dev *pdev) | |||
77 | device_remove_file(&pdev->dev, &dev_attr_eeh_mode); | 71 | device_remove_file(&pdev->dev, &dev_attr_eeh_mode); |
78 | device_remove_file(&pdev->dev, &dev_attr_eeh_config_addr); | 72 | device_remove_file(&pdev->dev, &dev_attr_eeh_config_addr); |
79 | device_remove_file(&pdev->dev, &dev_attr_eeh_pe_config_addr); | 73 | device_remove_file(&pdev->dev, &dev_attr_eeh_pe_config_addr); |
80 | device_remove_file(&pdev->dev, &dev_attr_eeh_check_count); | ||
81 | device_remove_file(&pdev->dev, &dev_attr_eeh_false_positives); | ||
82 | device_remove_file(&pdev->dev, &dev_attr_eeh_freeze_count); | ||
83 | } | 74 | } |
84 | 75 | ||