From: Paul Mackerras This patch is from Jake Moilanen , reformatted by me. Signed-off-by: Jake Moilanen Signed-off-by: Paul Mackerras The `assigned-addresses' property in the Open Firmware device tree nodes for PCI devices has 64 bits of PCI bus address, but we were only using 32. This patch fixes it so we use all 64. Signed-off-by: Andrew Morton --- 25-akpm/arch/ppc64/kernel/prom.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff -puN arch/ppc64/kernel/prom.c~ppc64-addresses-from-of-getting-truncated-to-32-bits arch/ppc64/kernel/prom.c --- 25/arch/ppc64/kernel/prom.c~ppc64-addresses-from-of-getting-truncated-to-32-bits 2005-03-07 20:41:25.000000000 -0800 +++ 25-akpm/arch/ppc64/kernel/prom.c 2005-03-07 20:41:25.000000000 -0800 @@ -335,7 +335,8 @@ static unsigned long __init interpret_pc while ((l -= sizeof(struct pci_reg_property)) >= 0) { if (!measure_only) { adr[i].space = pci_addrs[i].addr.a_hi; - adr[i].address = pci_addrs[i].addr.a_lo; + adr[i].address = pci_addrs[i].addr.a_lo | + ((u64)pci_addrs[i].addr.a_mid << 32); adr[i].size = pci_addrs[i].size_lo; } ++i; @@ -1721,7 +1722,8 @@ static int of_finish_dynamic_node(struct } while ((l -= sizeof(struct pci_reg_property)) >= 0) { adr[i].space = pci_addrs[i].addr.a_hi; - adr[i].address = pci_addrs[i].addr.a_lo; + adr[i].address = pci_addrs[i].addr.a_lo | + ((u64)pci_addrs[i].addr.a_mid << 32); adr[i].size = pci_addrs[i].size_lo; ++i; } _