|
@@ -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);
|