|
@@ -617,6 +617,36 @@ static void pci_bus_register_of_sysfs(struct pci_bus *bus)
|
|
|
pci_bus_register_of_sysfs(child_bus);
|
|
|
}
|
|
|
|
|
|
+static void pci_claim_bus_resources(struct pci_bus *bus)
|
|
|
+{
|
|
|
+ struct pci_bus *child_bus;
|
|
|
+ struct pci_dev *dev;
|
|
|
+
|
|
|
+ list_for_each_entry(dev, &bus->devices, bus_list) {
|
|
|
+ int i;
|
|
|
+
|
|
|
+ for (i = 0; i < PCI_NUM_RESOURCES; i++) {
|
|
|
+ struct resource *r = &dev->resource[i];
|
|
|
+
|
|
|
+ if (r->parent || !r->start || !r->flags)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ if (ofpci_verbose)
|
|
|
+ printk("PCI: Claiming %s: "
|
|
|
+ "Resource %d: %016llx..%016llx [%x]\n",
|
|
|
+ pci_name(dev), i,
|
|
|
+ (unsigned long long)r->start,
|
|
|
+ (unsigned long long)r->end,
|
|
|
+ (unsigned int)r->flags);
|
|
|
+
|
|
|
+ pci_claim_resource(dev, i);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ list_for_each_entry(child_bus, &bus->children, node)
|
|
|
+ pci_claim_bus_resources(child_bus);
|
|
|
+}
|
|
|
+
|
|
|
struct pci_bus *pci_scan_one_pbm(struct pci_pbm_info *pbm,
|
|
|
struct device *parent)
|
|
|
{
|
|
@@ -647,6 +677,8 @@ struct pci_bus *pci_scan_one_pbm(struct pci_pbm_info *pbm,
|
|
|
pci_bus_add_devices(bus);
|
|
|
pci_bus_register_of_sysfs(bus);
|
|
|
|
|
|
+ pci_claim_bus_resources(bus);
|
|
|
+
|
|
|
return bus;
|
|
|
}
|
|
|
|