aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms/pseries/pci_dlpar.c
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2007-12-19 22:54:51 -0500
committerPaul Mackerras <paulus@samba.org>2007-12-20 00:18:09 -0500
commitbf5e2ba28f24f82a64524ef4772c9ebe12e2cd2a (patch)
treef35c139d124a9276b71260c13c8bddf0aa02b4d7 /arch/powerpc/platforms/pseries/pci_dlpar.c
parentfe2d338cdcc628e0abdb4f70570a7fa864c617db (diff)
[POWERPC] Merge PCI resource fixups
The PCI code in 32 and 64 bits fixes up resources differently. 32 bits uses a header quirk plus handles bridges in pcibios_fixup_bus() while 64 bits does things in various places depending on whether you are using OF probing, using PCI hotplug, etc... This merges those by basically using the 32 bits approach for both, with various tweaks to make 64 bits work with the new approach. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/platforms/pseries/pci_dlpar.c')
-rw-r--r--arch/powerpc/platforms/pseries/pci_dlpar.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/arch/powerpc/platforms/pseries/pci_dlpar.c b/arch/powerpc/platforms/pseries/pci_dlpar.c
index 47f0e0857f0e..5a5a19e40bb4 100644
--- a/arch/powerpc/platforms/pseries/pci_dlpar.c
+++ b/arch/powerpc/platforms/pseries/pci_dlpar.c
@@ -83,7 +83,7 @@ EXPORT_SYMBOL_GPL(pcibios_remove_pci_devices);
83 83
84/* Must be called before pci_bus_add_devices */ 84/* Must be called before pci_bus_add_devices */
85void 85void
86pcibios_fixup_new_pci_devices(struct pci_bus *bus, int fix_bus) 86pcibios_fixup_new_pci_devices(struct pci_bus *bus)
87{ 87{
88 struct pci_dev *dev; 88 struct pci_dev *dev;
89 89
@@ -98,8 +98,6 @@ pcibios_fixup_new_pci_devices(struct pci_bus *bus, int fix_bus)
98 /* Fill device archdata and setup iommu table */ 98 /* Fill device archdata and setup iommu table */
99 pcibios_setup_new_device(dev); 99 pcibios_setup_new_device(dev);
100 100
101 if(fix_bus)
102 pcibios_fixup_device_resources(dev, bus);
103 pci_read_irq_line(dev); 101 pci_read_irq_line(dev);
104 for (i = 0; i < PCI_NUM_RESOURCES; i++) { 102 for (i = 0; i < PCI_NUM_RESOURCES; i++) {
105 struct resource *r = &dev->resource[i]; 103 struct resource *r = &dev->resource[i];
@@ -132,8 +130,8 @@ pcibios_pci_config_bridge(struct pci_dev *dev)
132 130
133 pci_scan_child_bus(child_bus); 131 pci_scan_child_bus(child_bus);
134 132
135 /* Fixup new pci devices without touching bus struct */ 133 /* Fixup new pci devices */
136 pcibios_fixup_new_pci_devices(child_bus, 0); 134 pcibios_fixup_new_pci_devices(child_bus);
137 135
138 /* Make the discovered devices available */ 136 /* Make the discovered devices available */
139 pci_bus_add_devices(child_bus); 137 pci_bus_add_devices(child_bus);
@@ -169,7 +167,7 @@ pcibios_add_pci_devices(struct pci_bus * bus)
169 /* use ofdt-based probe */ 167 /* use ofdt-based probe */
170 of_scan_bus(dn, bus); 168 of_scan_bus(dn, bus);
171 if (!list_empty(&bus->devices)) { 169 if (!list_empty(&bus->devices)) {
172 pcibios_fixup_new_pci_devices(bus, 0); 170 pcibios_fixup_new_pci_devices(bus);
173 pci_bus_add_devices(bus); 171 pci_bus_add_devices(bus);
174 eeh_add_device_tree_late(bus); 172 eeh_add_device_tree_late(bus);
175 } 173 }
@@ -178,7 +176,7 @@ pcibios_add_pci_devices(struct pci_bus * bus)
178 slotno = PCI_SLOT(PCI_DN(dn->child)->devfn); 176 slotno = PCI_SLOT(PCI_DN(dn->child)->devfn);
179 num = pci_scan_slot(bus, PCI_DEVFN(slotno, 0)); 177 num = pci_scan_slot(bus, PCI_DEVFN(slotno, 0));
180 if (num) { 178 if (num) {
181 pcibios_fixup_new_pci_devices(bus, 1); 179 pcibios_fixup_new_pci_devices(bus);
182 pci_bus_add_devices(bus); 180 pci_bus_add_devices(bus);
183 eeh_add_device_tree_late(bus); 181 eeh_add_device_tree_late(bus);
184 } 182 }
@@ -208,7 +206,7 @@ struct pci_controller * __devinit init_phb_dynamic(struct device_node *dn)
208 eeh_add_device_tree_early(dn); 206 eeh_add_device_tree_early(dn);
209 207
210 scan_phb(phb); 208 scan_phb(phb);
211 pcibios_fixup_new_pci_devices(phb->bus, 0); 209 pcibios_fixup_new_pci_devices(phb->bus);
212 pci_bus_add_devices(phb->bus); 210 pci_bus_add_devices(phb->bus);
213 eeh_add_device_tree_late(phb->bus); 211 eeh_add_device_tree_late(phb->bus);
214 212