diff options
Diffstat (limited to 'arch/sparc64/kernel/pci_psycho.c')
-rw-r--r-- | arch/sparc64/kernel/pci_psycho.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/arch/sparc64/kernel/pci_psycho.c b/arch/sparc64/kernel/pci_psycho.c index 401e5dfe9bd5..2edcb1dd13c3 100644 --- a/arch/sparc64/kernel/pci_psycho.c +++ b/arch/sparc64/kernel/pci_psycho.c | |||
@@ -836,6 +836,7 @@ static void psycho_register_error_handlers(struct pci_pbm_info *pbm) | |||
836 | struct of_device *op = of_find_device_by_node(pbm->prom_node); | 836 | struct of_device *op = of_find_device_by_node(pbm->prom_node); |
837 | unsigned long base = pbm->controller_regs; | 837 | unsigned long base = pbm->controller_regs; |
838 | u64 tmp; | 838 | u64 tmp; |
839 | int err; | ||
839 | 840 | ||
840 | if (!op) | 841 | if (!op) |
841 | return; | 842 | return; |
@@ -852,12 +853,27 @@ static void psycho_register_error_handlers(struct pci_pbm_info *pbm) | |||
852 | if (op->num_irqs < 6) | 853 | if (op->num_irqs < 6) |
853 | return; | 854 | return; |
854 | 855 | ||
855 | request_irq(op->irqs[1], psycho_ue_intr, 0, | 856 | /* We really mean to ignore the return result here. Two |
856 | "PSYCHO_UE", pbm); | 857 | * PCI controller share the same interrupt numbers and |
857 | request_irq(op->irqs[2], psycho_ce_intr, 0, | 858 | * drive the same front-end hardware. Whichever of the |
858 | "PSYCHO_CE", pbm); | 859 | * two get in here first will register the IRQ handler |
859 | request_irq(op->irqs[0], psycho_pcierr_intr, 0, | 860 | * the second will just error out since we do not pass in |
860 | "PSYCHO_PCIERR", pbm); | 861 | * IRQF_SHARED. |
862 | */ | ||
863 | err = request_irq(op->irqs[1], psycho_ue_intr, 0, | ||
864 | "PSYCHO_UE", pbm); | ||
865 | err = request_irq(op->irqs[2], psycho_ce_intr, 0, | ||
866 | "PSYCHO_CE", pbm); | ||
867 | |||
868 | /* This one, however, ought not to fail. We can just warn | ||
869 | * about it since the system can still operate properly even | ||
870 | * if this fails. | ||
871 | */ | ||
872 | err = request_irq(op->irqs[0], psycho_pcierr_intr, 0, | ||
873 | "PSYCHO_PCIERR", pbm); | ||
874 | if (err) | ||
875 | printk(KERN_WARNING "%s: Could not register PCIERR, " | ||
876 | "err=%d\n", pbm->name, err); | ||
861 | 877 | ||
862 | /* Enable UE and CE interrupts for controller. */ | 878 | /* Enable UE and CE interrupts for controller. */ |
863 | psycho_write(base + PSYCHO_ECC_CTRL, | 879 | psycho_write(base + PSYCHO_ECC_CTRL, |