[POWERPC] Make pci_read_irq_line the default
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Sat, 11 Nov 2006 06:24:51 +0000 (17:24 +1100)
committerPaul Mackerras <paulus@samba.org>
Mon, 4 Dec 2006 05:00:04 +0000 (16:00 +1100)
This patch reworks the way IRQs are fixed up on PCI for arch powerpc.

It makes pci_read_irq_line() called by default in the PCI code for
devices that are probed, and add an optional per-device fixup in
ppc_md for platforms that really need to correct what they obtain
from pci_read_irq_line().

It also removes ppc_md.irq_bus_setup which was only used by pSeries
and should not be needed anymore.

I've also removed the pSeries s7a workaround as it can't work with
the current interrupt code anyway. I'm trying to get one of these
machines working so I can test a proper fix for that problem.

I also haven't updated the old-style fixup code from 85xx_cds.c
because it's actually buggy :) It assigns pci_dev->irq hard coded
numbers which is no good with the new IRQ mapping code. It should
at least use irq_create_mapping(NULL, hard_coded_number); and possibly
also set_irq_type() to set them as level low.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
27 files changed:
arch/powerpc/kernel/pci_32.c
arch/powerpc/kernel/pci_64.c
arch/powerpc/platforms/82xx/mpc82xx_ads.c
arch/powerpc/platforms/83xx/mpc834x_itx.c
arch/powerpc/platforms/83xx/mpc834x_sys.c
arch/powerpc/platforms/83xx/mpc83xx.h
arch/powerpc/platforms/83xx/pci.c
arch/powerpc/platforms/85xx/mpc85xx_ads.c
arch/powerpc/platforms/86xx/mpc86xx_hpcn.c
arch/powerpc/platforms/cell/setup.c
arch/powerpc/platforms/chrp/chrp.h
arch/powerpc/platforms/chrp/pci.c
arch/powerpc/platforms/chrp/setup.c
arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c
arch/powerpc/platforms/maple/maple.h
arch/powerpc/platforms/maple/pci.c
arch/powerpc/platforms/maple/setup.c
arch/powerpc/platforms/pasemi/pasemi.h
arch/powerpc/platforms/pasemi/pci.c
arch/powerpc/platforms/pasemi/setup.c
arch/powerpc/platforms/powermac/pci.c
arch/powerpc/platforms/powermac/pmac.h
arch/powerpc/platforms/powermac/setup.c
arch/powerpc/platforms/pseries/pci.c
arch/powerpc/platforms/pseries/setup.c
include/asm-powerpc/machdep.h
include/asm-powerpc/ppc-pci.h

index 0d9ff72e28526a7d2f2990388354a5fd37be13ef..853ecef81780f8b8e24fff378a25efee09d0f628 100644 (file)
@@ -12,6 +12,7 @@
 #include <linux/errno.h>
 #include <linux/bootmem.h>
 #include <linux/irq.h>
+#include <linux/list.h>
 
 #include <asm/processor.h>
 #include <asm/io.h>
@@ -1338,6 +1339,7 @@ void __init pcibios_fixup_bus(struct pci_bus *bus)
        struct pci_controller *hose = (struct pci_controller *) bus->sysdata;
        unsigned long io_offset;
        struct resource *res;
+       struct pci_dev *dev;
        int i;
 
        io_offset = (unsigned long)hose->io_base_virt - isa_io_base;
@@ -1390,8 +1392,16 @@ void __init pcibios_fixup_bus(struct pci_bus *bus)
                }
        }
 
+       /* Platform specific bus fixups */
        if (ppc_md.pcibios_fixup_bus)
                ppc_md.pcibios_fixup_bus(bus);
+
+       /* Read default IRQs and fixup if necessary */
+       list_for_each_entry(dev, &bus->devices, bus_list) {
+               pci_read_irq_line(dev);
+               if (ppc_md.pci_irq_fixup)
+                       ppc_md.pci_irq_fixup(dev);
+       }
 }
 
 char __init *pcibios_setup(char *str)
index 80ae9ea15cdccffa7019ebf3e76db1bf0a498473..9a6bb80a8cd436e7b17a7e73dbdb03ceb1400735 100644 (file)
@@ -1215,8 +1215,12 @@ static void __devinit do_bus_setup(struct pci_bus *bus)
        list_for_each_entry(dev, &bus->devices, bus_list)
                ppc_md.iommu_dev_setup(dev);
 
-       if (ppc_md.irq_bus_setup)
-               ppc_md.irq_bus_setup(bus);
+       /* Read default IRQs and fixup if necessary */
+       list_for_each_entry(dev, &bus->devices, bus_list) {
+               pci_read_irq_line(dev);
+               if (ppc_md.pci_irq_fixup)
+                       ppc_md.pci_irq_fixup(dev);
+       }
 }
 
 void __devinit pcibios_fixup_bus(struct pci_bus *bus)
index bb9acbb98176049545240b81ddf8c70ee2ff68c7..ea880f1f0dcd4e71d73cad97b5e90ae9c833cd50 100644 (file)
@@ -515,16 +515,6 @@ static int m82xx_pci_exclude_device(u_char bus, u_char devfn)
                return PCIBIOS_SUCCESSFUL;
 }
 
-static void
-__init mpc82xx_pcibios_fixup(void)
-{
-       struct pci_dev *dev = NULL;
-
-       for_each_pci_dev(dev) {
-               pci_read_irq_line(dev);
-       }
-}
-
 void __init add_bridge(struct device_node *np)
 {
        int len;
@@ -597,9 +587,6 @@ static void __init mpc82xx_ads_setup_arch(void)
                add_bridge(np);
 
        of_node_put(np);
-       ppc_md.pci_map_irq = NULL;
-       ppc_md.pcibios_fixup = mpc82xx_pcibios_fixup;
-       ppc_md.pcibios_fixup_bus = NULL;
 #endif
 
 #ifdef  CONFIG_ROOT_NFS
index e2bcaaf6b329338ef48bfb1335709c5c9adbe6d7..314c42ac604834ea7dcf508bfe9a92c81a11bada 100644 (file)
@@ -118,7 +118,4 @@ define_machine(mpc834x_itx) {
        .time_init              = mpc83xx_time_init,
        .calibrate_decr         = generic_calibrate_decr,
        .progress               = udbg_progress,
-#ifdef CONFIG_PCI
-       .pcibios_fixup          = mpc83xx_pcibios_fixup,
-#endif
 };
index 677196187a4e67783a67702cc0a27fc644c39c8b..80b735a414d913c9840d3ccb776b470a431785e0 100644 (file)
@@ -137,7 +137,4 @@ define_machine(mpc834x_sys) {
        .time_init              = mpc83xx_time_init,
        .calibrate_decr         = generic_calibrate_decr,
        .progress               = udbg_progress,
-#ifdef CONFIG_PCI
-       .pcibios_fixup          = mpc83xx_pcibios_fixup,
-#endif
 };
index 2c82bca9bfbbe32c826e855a08f16e1035b11cab..01cae106912bec714d4df34105c3305971970554 100644 (file)
@@ -11,7 +11,6 @@
 
 extern int add_bridge(struct device_node *dev);
 extern int mpc83xx_exclude_device(u_char bus, u_char devfn);
-extern void mpc83xx_pcibios_fixup(void);
 extern void mpc83xx_restart(char *cmd);
 extern long mpc83xx_time_init(void);
 
index 4557ac5255c1fda03f7fe43025d93f333465a677..9c3650555144d91b8a4d9ebdd8a9a0915ad2263c 100644 (file)
@@ -45,15 +45,6 @@ int mpc83xx_exclude_device(u_char bus, u_char devfn)
        return PCIBIOS_SUCCESSFUL;
 }
 
-void __init mpc83xx_pcibios_fixup(void)
-{
-       struct pci_dev *dev = NULL;
-
-       /* map all the PCI irqs */
-       for_each_pci_dev(dev)
-               pci_read_irq_line(dev);
-}
-
 int __init add_bridge(struct device_node *dev)
 {
        int len;
index d3e669d69c735c2f0dfbfed753784378942129d5..bda2e55e6c4c1db7e5f84eadd8a2c18d18682894 100644 (file)
@@ -53,15 +53,6 @@ mpc85xx_exclude_device(u_char bus, u_char devfn)
        else
                return PCIBIOS_SUCCESSFUL;
 }
-
-void __init
-mpc85xx_pcibios_fixup(void)
-{
-       struct pci_dev *dev = NULL;
-
-       for_each_pci_dev(dev)
-               pci_read_irq_line(dev);
-}
 #endif /* CONFIG_PCI */
 
 #ifdef CONFIG_CPM2
@@ -253,8 +244,6 @@ static void __init mpc85xx_ads_setup_arch(void)
 #ifdef CONFIG_PCI
        for (np = NULL; (np = of_find_node_by_type(np, "pci")) != NULL;)
                add_bridge(np);
-
-       ppc_md.pcibios_fixup = mpc85xx_pcibios_fixup;
        ppc_md.pci_exclude_device = mpc85xx_exclude_device;
 #endif
 
index 1a1c226ad4d960a76ddc076224b5944f99370938..f4dd5f2f8a28f262911afba39eb20016784432ab 100644 (file)
@@ -398,15 +398,6 @@ mpc86xx_hpcn_show_cpuinfo(struct seq_file *m)
 }
 
 
-void __init mpc86xx_hpcn_pcibios_fixup(void)
-{
-       struct pci_dev *dev = NULL;
-
-       for_each_pci_dev(dev)
-               pci_read_irq_line(dev);
-}
-
-
 /*
  * Called very early, device-tree isn't unflattened
  */
@@ -461,7 +452,6 @@ define_machine(mpc86xx_hpcn) {
        .setup_arch             = mpc86xx_hpcn_setup_arch,
        .init_IRQ               = mpc86xx_hpcn_init_irq,
        .show_cpuinfo           = mpc86xx_hpcn_show_cpuinfo,
-       .pcibios_fixup          = mpc86xx_hpcn_pcibios_fixup,
        .get_irq                = mpic_get_irq,
        .restart                = mpc86xx_restart,
        .time_init              = mpc86xx_time_init,
index 22c228a49c3373af2cd287b325cea089ad961efa..1944bb413f04e38e3de051cb7a16b154ba1f4379 100644 (file)
@@ -80,14 +80,6 @@ static void cell_progress(char *s, unsigned short hex)
        printk("*** %04x : %s\n", hex, s ? s : "");
 }
 
-static void __init cell_pcibios_fixup(void)
-{
-       struct pci_dev *dev = NULL;
-
-       for_each_pci_dev(dev)
-               pci_read_irq_line(dev);
-}
-
 static void __init cell_init_irq(void)
 {
        iic_init_IRQ();
@@ -180,7 +172,6 @@ define_machine(cell) {
        .check_legacy_ioport    = cell_check_legacy_ioport,
        .progress               = cell_progress,
        .init_IRQ               = cell_init_irq,
-       .pcibios_fixup          = cell_pcibios_fixup,
 #ifdef CONFIG_KEXEC
        .machine_kexec          = default_machine_kexec,
        .machine_kexec_prepare  = default_machine_kexec_prepare,
index 996c28744e96a6d206a5f778dd562b5f30b3cf44..63f0aee4c158e97df652e49b43d00551aaa21e03 100644 (file)
@@ -9,4 +9,3 @@ extern long chrp_time_init(void);
 
 extern void chrp_find_bridges(void);
 extern void chrp_event_scan(unsigned long);
-extern void chrp_pcibios_fixup(void);
index 0f4340506c758bda68b119dd22cba485c065b6fb..ddb4a116ea89b7d0be044c7531cd87aeb59d7093 100644 (file)
@@ -156,15 +156,6 @@ hydra_init(void)
        return 1;
 }
 
-void __init
-chrp_pcibios_fixup(void)
-{
-       struct pci_dev *dev = NULL;
-
-       for_each_pci_dev(dev)
-               pci_read_irq_line(dev);
-}
-
 #define PRG_CL_RESET_VALID 0x00010000
 
 static void __init
index 49b8dabcbc992996db5a3c53dd00b9035f7e5a05..e6807d6d75bf03c27c292f7581e9b9f37c1790c8 100644 (file)
@@ -600,7 +600,6 @@ define_machine(chrp) {
        .init                   = chrp_init2,
        .show_cpuinfo           = chrp_show_cpuinfo,
        .init_IRQ               = chrp_init_IRQ,
-       .pcibios_fixup          = chrp_pcibios_fixup,
        .restart                = rtas_restart,
        .power_off              = rtas_power_off,
        .halt                   = rtas_halt,
index bdb475c65cba267bc039bb8efc2b30368a284b21..c6113c39009ee48254e44971e46e0464ad3df39d 100644 (file)
@@ -89,7 +89,7 @@ u8 find_slot_by_devfn(unsigned int *interrupt_map, unsigned int devfn)
 /*
  * Scans the interrupt map for pci device
  */
-void mpc7448_hpc2_fixup_irq(struct pci_dev *dev)
+void __devinit mpc7448_hpc2_fixup_irq(struct pci_dev *dev)
 {
        struct pci_controller *hose;
        struct device_node *node;
@@ -117,19 +117,13 @@ void mpc7448_hpc2_fixup_irq(struct pci_dev *dev)
                pin = 1;
        pin--;
        dev->irq  = interrupt[slot*4*7 + pin*7 + 5];
+
+       pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq);
+
        DBG("TSI_PCI: dev->irq = 0x%x\n", dev->irq);
 }
 /* temporary pci irq map fixup*/
 
-void __init mpc7448_hpc2_pcibios_fixup(void)
-{
-       struct pci_dev *dev = NULL;
-       for_each_pci_dev(dev) {
-               mpc7448_hpc2_fixup_irq(dev);
-               pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq);
-       }
-}
-
 static void __init mpc7448_hpc2_setup_arch(void)
 {
        struct device_node *cpu;
@@ -300,7 +294,7 @@ define_machine(mpc7448_hpc2){
        .init_IRQ               = mpc7448_hpc2_init_IRQ,
        .show_cpuinfo           = mpc7448_hpc2_show_cpuinfo,
        .get_irq                = mpic_get_irq,
-       .pcibios_fixup          = mpc7448_hpc2_pcibios_fixup,
+       .pci_irq_fixup          = mpc7448_hpc2_fixup_irq,
        .restart                = mpc7448_hpc2_restart,
        .calibrate_decr         = generic_calibrate_decr,
        .machine_check_exception= mpc7448_machine_check_exception,
index 0657c579b8406081007ba83136aa4651d33b0877..c6911ddc479fc309bec1066a77fc044b6af7cd04 100644 (file)
@@ -8,5 +8,5 @@ extern void maple_get_rtc_time(struct rtc_time *tm);
 extern unsigned long maple_get_boot_time(void);
 extern void maple_calibrate_decr(void);
 extern void maple_pci_init(void);
-extern void maple_pcibios_fixup(void);
+extern void maple_pci_irq_fixup(struct pci_dev *dev);
 extern int maple_pci_get_legacy_ide_irq(struct pci_dev *dev, int channel);
index 63b4d1bff359b226a4dd882efbe8757dfcdd2e07..3a32deda765dab3487e1174467f923ceede19fc6 100644 (file)
@@ -502,38 +502,29 @@ static int __init add_bridge(struct device_node *dev)
 }
 
 
-void __init maple_pcibios_fixup(void)
+void __devinit maple_pci_irq_fixup(struct pci_dev *dev)
 {
-       struct pci_dev *dev = NULL;
-
-       DBG(" -> maple_pcibios_fixup\n");
-
-       for_each_pci_dev(dev) {
-               /* Fixup IRQ for PCIe host */
-               if (u4_pcie != NULL && dev->bus->number == 0 &&
-                   pci_bus_to_host(dev->bus) == u4_pcie) {
-                       printk(KERN_DEBUG "Fixup U4 PCIe IRQ\n");
-                       dev->irq = irq_create_mapping(NULL, 1);
-                       if (dev->irq != NO_IRQ)
-                               set_irq_type(dev->irq, IRQ_TYPE_LEVEL_LOW);
-                       continue;
-               }
-
-               /* Hide AMD8111 IDE interrupt when in legacy mode so
-                * the driver calls pci_get_legacy_ide_irq()
-                */
-               if (dev->vendor == PCI_VENDOR_ID_AMD &&
-                   dev->device == PCI_DEVICE_ID_AMD_8111_IDE &&
-                   (dev->class & 5) != 5) {
-                       dev->irq = NO_IRQ;
-                       continue;
-               }
+       DBG(" -> maple_pci_irq_fixup\n");
+
+       /* Fixup IRQ for PCIe host */
+       if (u4_pcie != NULL && dev->bus->number == 0 &&
+           pci_bus_to_host(dev->bus) == u4_pcie) {
+               printk(KERN_DEBUG "Fixup U4 PCIe IRQ\n");
+               dev->irq = irq_create_mapping(NULL, 1);
+               if (dev->irq != NO_IRQ)
+                       set_irq_type(dev->irq, IRQ_TYPE_LEVEL_LOW);
+       }
 
-               /* For all others, map the interrupt from the device-tree */
-               pci_read_irq_line(dev);
+       /* Hide AMD8111 IDE interrupt when in legacy mode so
+        * the driver calls pci_get_legacy_ide_irq()
+        */
+       if (dev->vendor == PCI_VENDOR_ID_AMD &&
+           dev->device == PCI_DEVICE_ID_AMD_8111_IDE &&
+           (dev->class & 5) != 5) {
+               dev->irq = NO_IRQ;
        }
 
-       DBG(" <- maple_pcibios_fixup\n");
+       DBG(" <- maple_pci_irq_fixup\n");
 }
 
 static void __init maple_fixup_phb_resources(void)
index fe6b9bff61b9754cc968491df3e0362bae50ebb7..094989d50babaf0bdfe46db5e4b3ab1cd1531924 100644 (file)
@@ -312,7 +312,7 @@ define_machine(maple_md) {
        .setup_arch             = maple_setup_arch,
        .init_early             = maple_init_early,
        .init_IRQ               = maple_init_IRQ,
-       .pcibios_fixup          = maple_pcibios_fixup,
+       .pci_irq_fixup          = maple_pci_irq_fixup,
        .pci_get_legacy_ide_irq = maple_pci_get_legacy_ide_irq,
        .restart                = maple_restart,
        .power_off              = maple_power_off,
index fd71d72736b27a27d64aad78190d01396d717cb4..51c2a2397ecf100b8caba82c46c6b3af827f8309 100644 (file)
@@ -3,6 +3,5 @@
 
 extern unsigned long pas_get_boot_time(void);
 extern void pas_pci_init(void);
-extern void pas_pcibios_fixup(void);
 
 #endif /* _PASEMI_PASEMI_H */
index 39020c1fa13db6f609035d4d5d96af59c047e3a9..faa618e0404767217430eaa86d5a03f075efc8b8 100644 (file)
@@ -148,14 +148,6 @@ static int __init add_bridge(struct device_node *dev)
 }
 
 
-void __init pas_pcibios_fixup(void)
-{
-       struct pci_dev *dev = NULL;
-
-       for_each_pci_dev(dev)
-               pci_read_irq_line(dev);
-}
-
 static void __init pas_fixup_phb_resources(void)
 {
        struct pci_controller *hose, *tmp;
index 106896c3b60a56c0a119222444ea1895238bc8de..eb2457567f8a39eb7bec087df1b5bb1c2167c626 100644 (file)
@@ -176,7 +176,6 @@ define_machine(pas) {
        .init_early             = pas_init_early,
        .init_IRQ               = pas_init_IRQ,
        .get_irq                = mpic_get_irq,
-       .pcibios_fixup          = pas_pcibios_fixup,
        .restart                = pas_restart,
        .power_off              = pas_power_off,
        .halt                   = pas_halt,
index 257dc9068468c2b97de3a0c466ace797ee845014..f42475b27c153c324f150d9e4ff3a352c4cafba3 100644 (file)
@@ -984,30 +984,23 @@ static int __init add_bridge(struct device_node *dev)
        return 0;
 }
 
-void __init pmac_pcibios_fixup(void)
+void __devinit pmac_pci_irq_fixup(struct pci_dev *dev)
 {
-       struct pci_dev* dev = NULL;
-
-       for_each_pci_dev(dev) {
-               /* Read interrupt from the device-tree */
-               pci_read_irq_line(dev);
-
 #ifdef CONFIG_PPC32
-               /* Fixup interrupt for the modem/ethernet combo controller.
-                * on machines with a second ohare chip.
-                * The number in the device tree (27) is bogus (correct for
-                * the ethernet-only board but not the combo ethernet/modem
-                * board). The real interrupt is 28 on the second controller
-                * -> 28+32 = 60.
-                */
-               if (has_second_ohare &&
-                   dev->vendor == PCI_VENDOR_ID_DEC &&
-                   dev->device == PCI_DEVICE_ID_DEC_TULIP_PLUS) {
-                       dev->irq = irq_create_mapping(NULL, 60);
-                       set_irq_type(dev->irq, IRQ_TYPE_LEVEL_LOW);
-               }
-#endif /* CONFIG_PPC32 */
+       /* Fixup interrupt for the modem/ethernet combo controller.
+        * on machines with a second ohare chip.
+        * The number in the device tree (27) is bogus (correct for
+        * the ethernet-only board but not the combo ethernet/modem
+        * board). The real interrupt is 28 on the second controller
+        * -> 28+32 = 60.
+        */
+       if (has_second_ohare &&
+           dev->vendor == PCI_VENDOR_ID_DEC &&
+           dev->device == PCI_DEVICE_ID_DEC_TULIP_PLUS) {
+               dev->irq = irq_create_mapping(NULL, 60);
+               set_irq_type(dev->irq, IRQ_TYPE_LEVEL_LOW);
        }
+#endif /* CONFIG_PPC32 */
 }
 
 #ifdef CONFIG_PPC64
index 94e7b24b840b82df1cbc32d8f173e3f856bfca7d..6e090a7dea83b3428d73ff05d9b0c09f942b0d53 100644 (file)
@@ -20,7 +20,7 @@ extern void pmac_get_rtc_time(struct rtc_time *);
 extern int pmac_set_rtc_time(struct rtc_time *);
 extern void pmac_read_rtc_time(void);
 extern void pmac_calibrate_decr(void);
-extern void pmac_pcibios_fixup(void);
+extern void pmac_pci_irq_fixup(struct pci_dev *);
 extern void pmac_pci_init(void);
 extern unsigned long pmac_ide_get_base(int index);
 extern void pmac_ide_init_hwif_ports(hw_regs_t *hw,
index cb1c342061e20e438083bc6b8314df8eda8c21a0..805791d76fdfedaaceff7a324d39d785caf8ed1a 100644 (file)
@@ -727,7 +727,7 @@ define_machine(powermac) {
        .show_cpuinfo           = pmac_show_cpuinfo,
        .init_IRQ               = pmac_pic_init,
        .get_irq                = NULL, /* changed later */
-       .pcibios_fixup          = pmac_pcibios_fixup,
+       .pci_irq_fixup          = pmac_pci_irq_fixup,
        .restart                = pmac_restart,
        .power_off              = pmac_power_off,
        .halt                   = pmac_halt,
index 410a6bcc4ca008b9444e92ed567d9f29ac487577..715db5c89908f73435c178ba820a2a15bc3cb8d1 100644 (file)
@@ -29,8 +29,6 @@
 #include <asm/prom.h>
 #include <asm/ppc-pci.h>
 
-static int __devinitdata s7a_workaround = -1;
-
 #if 0
 void pcibios_name_device(struct pci_dev *dev)
 {
@@ -57,39 +55,6 @@ void pcibios_name_device(struct pci_dev *dev)
 DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pcibios_name_device);
 #endif
 
-static void __devinit check_s7a(void)
-{
-       struct device_node *root;
-       const char *model;
-
-       s7a_workaround = 0;
-       root = of_find_node_by_path("/");
-       if (root) {
-               model = get_property(root, "model", NULL);
-               if (model && !strcmp(model, "IBM,7013-S7A"))
-                       s7a_workaround = 1;
-               of_node_put(root);
-       }
-}
-
-void __devinit pSeries_irq_bus_setup(struct pci_bus *bus)
-{
-       struct pci_dev *dev;
-
-       if (s7a_workaround < 0)
-               check_s7a();
-       list_for_each_entry(dev, &bus->devices, bus_list) {
-               pci_read_irq_line(dev);
-               if (s7a_workaround) {
-                       if (dev->irq > 16) {
-                               dev->irq -= 3;
-                               pci_write_config_byte(dev, PCI_INTERRUPT_LINE,
-                                       dev->irq);
-                       }
-               }
-       }
-}
-
 static void __init pSeries_request_regions(void)
 {
        if (!isa_io_base)
index 89a8119f988d697f0c7fa0b8edfdf3f3feb3240a..a8f3812aa38edf8ef9471d2c23a4197cb674b430 100644 (file)
@@ -553,7 +553,6 @@ define_machine(pseries) {
        .log_error              = pSeries_log_error,
        .pcibios_fixup          = pSeries_final_fixup,
        .pci_probe_mode         = pSeries_pci_probe_mode,
-       .irq_bus_setup          = pSeries_irq_bus_setup,
        .restart                = rtas_restart,
        .power_off              = rtas_power_off,
        .halt                   = rtas_halt,
index dac90dc341cb06cadac12c6787f86276f974f2fc..3810f131901c54566dde5e5a0e91258eb69b5b3e 100644 (file)
@@ -86,7 +86,6 @@ struct machdep_calls {
        void            (*tce_flush)(struct iommu_table *tbl);
        void            (*iommu_dev_setup)(struct pci_dev *dev);
        void            (*iommu_bus_setup)(struct pci_bus *bus);
-       void            (*irq_bus_setup)(struct pci_bus *bus);
 #endif /* CONFIG_PPC64 */
 
        int             (*probe)(void);
@@ -106,6 +105,7 @@ struct machdep_calls {
        /* Called after scanning the bus, before allocating resources */
        void            (*pcibios_fixup)(void);
        int             (*pci_probe_mode)(struct pci_bus *);
+       void            (*pci_irq_fixup)(struct pci_dev *dev);
 
        void            (*restart)(char *cmd);
        void            (*power_off)(void);
index 1115756c79f941a2ea2262030ab60f56a130b69f..8894d1d4226b33ff443eacfa5331a847377f398e 100644 (file)
@@ -47,7 +47,6 @@ unsigned long get_phb_buid (struct device_node *);
 
 /* From pSeries_pci.h */
 extern void pSeries_final_fixup(void);
-extern void pSeries_irq_bus_setup(struct pci_bus *bus);
 
 extern unsigned long pci_probe_only;