From: Stephen Rothwell Date: Thu, 6 Dec 2007 14:56:55 +0000 (+1100) Subject: [POWERPC] iSeries: Reduce dependence on pci_dn bussubno X-Git-Tag: v2.6.25-rc1~1131^2~330 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3b32c162bb2be2075508cdc2260e6a6853335581;p=linux-2.6 [POWERPC] iSeries: Reduce dependence on pci_dn bussubno Signed-off-by: Stephen Rothwell Signed-off-by: Paul Mackerras --- diff --git a/arch/powerpc/platforms/iseries/pci.c b/arch/powerpc/platforms/iseries/pci.c index b46d8c5709..7e00e35b86 100644 --- a/arch/powerpc/platforms/iseries/pci.c +++ b/arch/powerpc/platforms/iseries/pci.c @@ -190,6 +190,7 @@ void __init iSeries_pci_final_fixup(void) for_each_pci_dev(pdev) { struct pci_dn *pdn; const u32 *agent; + const u32 *sub_bus; node = find_device_node(pdev->bus->number, pdev->devfn); printk("pci dev %p (%x.%x), node %p\n", pdev, @@ -202,23 +203,23 @@ void __init iSeries_pci_final_fixup(void) pdn = PCI_DN(node); agent = of_get_property(node, "linux,agent-id", NULL); - if (pdn && agent) { - u8 irq = iSeries_allocate_IRQ(pdn->busno, 0, - pdn->bussubno); + sub_bus = of_get_property(node, "linux,subbus", NULL); + if (pdn && agent && sub_bus) { + u8 irq = iSeries_allocate_IRQ(pdn->busno, 0, *sub_bus); int err; - err = HvCallXm_connectBusUnit(pdn->busno, pdn->bussubno, + err = HvCallXm_connectBusUnit(pdn->busno, *sub_bus, *agent, irq); if (err) pci_log_error("Connect Bus Unit", - pdn->busno, pdn->bussubno, *agent, err); + pdn->busno, *sub_bus, *agent, err); else { err = HvCallPci_configStore8(pdn->busno, - pdn->bussubno, *agent, + *sub_bus, *agent, PCI_INTERRUPT_LINE, irq); if (err) pci_log_error("PciCfgStore Irq Failed!", - pdn->busno, pdn->bussubno, + pdn->busno, *sub_bus, *agent, err); else pdev->irq = irq; @@ -229,8 +230,7 @@ void __init iSeries_pci_final_fixup(void) pdev->sysdata = node; PCI_DN(node)->pcidev = pdev; allocate_device_bars(pdev); - iSeries_Device_Information(pdev, num_dev, pdn->busno, - pdn->bussubno); + iSeries_Device_Information(pdev, num_dev, pdn->busno, *sub_bus); iommu_devnode_init_iSeries(pdev, node); } iSeries_activate_IRQs();