aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc64/kernel/pci_psycho.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sparc64/kernel/pci_psycho.c')
-rw-r--r--arch/sparc64/kernel/pci_psycho.c28
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,