Merge branch 'of-pci' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc
[linux-2.6.git] / arch / x86 / kernel / devicetree.c
index 9aeb78a..a621f34 100644 (file)
@@ -134,6 +134,24 @@ static int __init add_bus_probe(void)
 module_init(add_bus_probe);
 
 #ifdef CONFIG_PCI
+struct device_node *pcibios_get_phb_of_node(struct pci_bus *bus)
+{
+       struct device_node *np;
+
+       for_each_node_by_type(np, "pci") {
+               const void *prop;
+               unsigned int bus_min;
+
+               prop = of_get_property(np, "bus-range", NULL);
+               if (!prop)
+                       continue;
+               bus_min = be32_to_cpup(prop);
+               if (bus->number == bus_min)
+                       return np;
+       }
+       return NULL;
+}
+
 static int x86_of_pci_irq_enable(struct pci_dev *dev)
 {
        struct of_irq oirq;
@@ -165,50 +183,8 @@ static void x86_of_pci_irq_disable(struct pci_dev *dev)
 
 void __cpuinit x86_of_pci_init(void)
 {
-       struct device_node *np;
-
        pcibios_enable_irq = x86_of_pci_irq_enable;
        pcibios_disable_irq = x86_of_pci_irq_disable;
-
-       for_each_node_by_type(np, "pci") {
-               const void *prop;
-               struct pci_bus *bus;
-               unsigned int bus_min;
-               struct device_node *child;
-
-               prop = of_get_property(np, "bus-range", NULL);
-               if (!prop)
-                       continue;
-               bus_min = be32_to_cpup(prop);
-
-               bus = pci_find_bus(0, bus_min);
-               if (!bus) {
-                       printk(KERN_ERR "Can't find a node for bus %s.\n",
-                                       np->full_name);
-                       continue;
-               }
-
-               if (bus->self)
-                       bus->self->dev.of_node = np;
-               else
-                       bus->dev.of_node = np;
-
-               for_each_child_of_node(np, child) {
-                       struct pci_dev *dev;
-                       u32 devfn;
-
-                       prop = of_get_property(child, "reg", NULL);
-                       if (!prop)
-                               continue;
-
-                       devfn = (be32_to_cpup(prop) >> 8) & 0xff;
-                       dev = pci_get_slot(bus, devfn);
-                       if (!dev)
-                               continue;
-                       dev->dev.of_node = child;
-                       pci_dev_put(dev);
-               }
-       }
 }
 #endif