|
@@ -1788,13 +1788,33 @@ void pci_bus_release_busn_res(struct pci_bus *b)
|
|
struct pci_bus * __devinit pci_scan_root_bus(struct device *parent, int bus,
|
|
struct pci_bus * __devinit pci_scan_root_bus(struct device *parent, int bus,
|
|
struct pci_ops *ops, void *sysdata, struct list_head *resources)
|
|
struct pci_ops *ops, void *sysdata, struct list_head *resources)
|
|
{
|
|
{
|
|
|
|
+ struct pci_host_bridge_window *window;
|
|
|
|
+ bool found = false;
|
|
struct pci_bus *b;
|
|
struct pci_bus *b;
|
|
|
|
+ int max;
|
|
|
|
+
|
|
|
|
+ list_for_each_entry(window, resources, list)
|
|
|
|
+ if (window->res->flags & IORESOURCE_BUS) {
|
|
|
|
+ found = true;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
b = pci_create_root_bus(parent, bus, ops, sysdata, resources);
|
|
b = pci_create_root_bus(parent, bus, ops, sysdata, resources);
|
|
if (!b)
|
|
if (!b)
|
|
return NULL;
|
|
return NULL;
|
|
|
|
|
|
- b->busn_res.end = pci_scan_child_bus(b);
|
|
|
|
|
|
+ if (!found) {
|
|
|
|
+ dev_info(&b->dev,
|
|
|
|
+ "No busn resource found for root bus, will use [bus %02x-ff]\n",
|
|
|
|
+ bus);
|
|
|
|
+ pci_bus_insert_busn_res(b, bus, 255);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ max = pci_scan_child_bus(b);
|
|
|
|
+
|
|
|
|
+ if (!found)
|
|
|
|
+ pci_bus_update_busn_res_end(b, max);
|
|
|
|
+
|
|
pci_bus_add_devices(b);
|
|
pci_bus_add_devices(b);
|
|
return b;
|
|
return b;
|
|
}
|
|
}
|