diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2008-01-20 19:32:50 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2008-01-25 06:52:53 -0500 |
commit | 9d5f49283b85d925f17fa07af5e4879465e179d6 (patch) | |
tree | 3906b8f09e5bd75bb4771b82cc4d4aa6bbbffe7b /arch/powerpc/kernel/pci_64.c | |
parent | 335675a3a2e6f3dc8f47111f73362aae8acc36bc (diff) |
[POWERPC] Always hookup PHB IO resource even when empty
We must always hookup the pci_bus resource 0 to the PHB io_resource
even if the latter is empty (the bus has no IO support). Otherwise,
some other code will end up hooking it up to something bogus and the
resource tree will end up being broken.
This fixes boot on QS20 Cell blades where the IDE driver failed to
allocate the IO resources due to breakage of the resource tree.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/kernel/pci_64.c')
-rw-r--r-- | arch/powerpc/kernel/pci_64.c | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/arch/powerpc/kernel/pci_64.c b/arch/powerpc/kernel/pci_64.c index 1930f393d01c..52750745edfd 100644 --- a/arch/powerpc/kernel/pci_64.c +++ b/arch/powerpc/kernel/pci_64.c | |||
@@ -357,7 +357,6 @@ void __devinit scan_phb(struct pci_controller *hose) | |||
357 | struct pci_bus *bus; | 357 | struct pci_bus *bus; |
358 | struct device_node *node = hose->dn; | 358 | struct device_node *node = hose->dn; |
359 | int i, mode; | 359 | int i, mode; |
360 | struct resource *res; | ||
361 | 360 | ||
362 | DBG("PCI: Scanning PHB %s\n", node ? node->full_name : "<NO NAME>"); | 361 | DBG("PCI: Scanning PHB %s\n", node ? node->full_name : "<NO NAME>"); |
363 | 362 | ||
@@ -375,12 +374,10 @@ void __devinit scan_phb(struct pci_controller *hose) | |||
375 | pcibios_map_io_space(bus); | 374 | pcibios_map_io_space(bus); |
376 | 375 | ||
377 | /* Wire up PHB bus resources */ | 376 | /* Wire up PHB bus resources */ |
378 | if (hose->io_resource.flags) { | 377 | DBG("PCI: PHB IO resource = %016lx-%016lx [%lx]\n", |
379 | DBG("PCI: PHB IO resource = %016lx-%016lx [%lx]\n", | 378 | hose->io_resource.start, hose->io_resource.end, |
380 | hose->io_resource.start, hose->io_resource.end, | 379 | hose->io_resource.flags); |
381 | hose->io_resource.flags); | 380 | bus->resource[0] = &hose->io_resource; |
382 | bus->resource[0] = res = &hose->io_resource; | ||
383 | } | ||
384 | for (i = 0; i < 3; ++i) { | 381 | for (i = 0; i < 3; ++i) { |
385 | DBG("PCI: PHB MEM resource %d = %016lx-%016lx [%lx]\n", i, | 382 | DBG("PCI: PHB MEM resource %d = %016lx-%016lx [%lx]\n", i, |
386 | hose->mem_resources[i].start, | 383 | hose->mem_resources[i].start, |