diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2006-11-11 01:25:05 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-12-04 04:38:43 -0500 |
commit | e557a1c96c82f4d1a91b5c2e2e0275b5999c297d (patch) | |
tree | 973b9234d0aa18453bd783b92d7fa96719f92e3a /arch/powerpc | |
parent | 868108784ccf0add6ac593bfbc2eb5a0804af48d (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')
-rw-r--r-- | arch/powerpc/kernel/pci_64.c | 6 |
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) |