ia64/PCI: SN: convert to pci_scan_root_bus() for correct root bus resources
authorBjorn Helgaas <bhelgaas@google.com>
Fri, 24 Feb 2012 03:19:01 +0000 (20:19 -0700)
committerBjorn Helgaas <bhelgaas@google.com>
Fri, 24 Feb 2012 03:19:01 +0000 (20:19 -0700)
Convert from pci_scan_bus() to pci_scan_root_bus().  Supply the root
bus resources from bussoft.  When we move the resource adjustment from
pcibios_fixup_resources() to the PCI core, it will be important to have
the root bus resources correct from the beginning.

CC: Tony Luck <tony.luck@intel.com>
CC: Jack Steiner <steiner@sgi.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
arch/ia64/sn/kernel/io_init.c

index 0a36f082eaf1d9e10ab95484c9e1118714d3c44a..c99c2ca0636b487dcd1f6425a2ba2252f6af8740 100644 (file)
@@ -297,7 +297,8 @@ sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus)
        s64 status = 0;
        struct pci_controller *controller;
        struct pcibus_bussoft *prom_bussoft_ptr;
-
+       LIST_HEAD(resources);
+       int i;
 
        status = sal_get_pcibus_info((u64) segment, (u64) busnum,
                                     (u64) ia64_tpa(&prom_bussoft_ptr));
@@ -315,7 +316,13 @@ sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus)
         */
        controller->platform_data = prom_bussoft_ptr;
 
-       bus = pci_scan_bus(busnum, &pci_root_ops, controller);
+       sn_legacy_pci_window_fixup(controller,
+                                  prom_bussoft_ptr->bs_legacy_io,
+                                  prom_bussoft_ptr->bs_legacy_mem);
+       for (i = 0; i < controller->windows; i++)
+               pci_add_resource(&resources, &controller->window[i].resource);
+       bus = pci_scan_root_bus(NULL, busnum, &pci_root_ops, controller,
+                               &resources);
        if (bus == NULL)
                goto error_return; /* error, or bus already scanned */
 
@@ -348,9 +355,6 @@ sn_bus_fixup(struct pci_bus *bus)
                        return;
                }
                sn_common_bus_fixup(bus, prom_bussoft_ptr);
-               sn_legacy_pci_window_fixup(PCI_CONTROLLER(bus),
-                                          prom_bussoft_ptr->bs_legacy_io,
-                                          prom_bussoft_ptr->bs_legacy_mem);
         }
         list_for_each_entry(pci_dev, &bus->devices, bus_list) {
                 sn_io_slot_fixup(pci_dev);