aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2006-11-11 01:25:05 -0500
committerPaul Mackerras <paulus@samba.org>2006-12-04 04:38:43 -0500
commite557a1c96c82f4d1a91b5c2e2e0275b5999c297d (patch)
tree973b9234d0aa18453bd783b92d7fa96719f92e3a /arch/powerpc/kernel
parent868108784ccf0add6ac593bfbc2eb5a0804af48d (diff)
[POWERPC] Resolve the parent address of a PCI bus range
When parsing the OF "ranges" properties of PCI host busses to determine the mapping of a PCI bus, we need to translate the "parent" address using the prom_parse.c routines in order to obtain a CPU physical address. This wasn't necessary while PCI busses were always at the root of the device-tree but this is no longer the case on Cell where they can be anywhere in the tree. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/kernel')
-rw-r--r--arch/powerpc/kernel/pci_64.c6
1 files changed, 1 insertions, 5 deletions
diff --git a/arch/powerpc/kernel/pci_64.c b/arch/powerpc/kernel/pci_64.c
index 88b78484b944..5ffab8787b93 100644
--- a/arch/powerpc/kernel/pci_64.c
+++ b/arch/powerpc/kernel/pci_64.c
@@ -967,11 +967,7 @@ void __devinit pci_process_bridge_OF_ranges(struct pci_controller *hose,
967 res = NULL; 967 res = NULL;
968 pci_space = ranges[0]; 968 pci_space = ranges[0];
969 pci_addr = ((unsigned long)ranges[1] << 32) | ranges[2]; 969 pci_addr = ((unsigned long)ranges[1] << 32) | ranges[2];
970 970 cpu_phys_addr = of_translate_address(dev, &ranges[3]);
971 cpu_phys_addr = ranges[3];
972 if (na >= 2)
973 cpu_phys_addr = (cpu_phys_addr << 32) | ranges[4];
974
975 size = ((unsigned long)ranges[na+3] << 32) | ranges[na+4]; 971 size = ((unsigned long)ranges[na+3] << 32) | ranges[na+4];
976 ranges += np; 972 ranges += np;
977 if (size == 0) 973 if (size == 0)