Thread (6 messages) 6 messages, 4 authors, 2007-01-29

Re: [PATCH] ppc: ioremap() on PPC44x platforms now accepts 64bit addresses

From: Sergei Shtylyov <hidden>
Date: 2007-01-29 13:04:19

Hello.

Stefan Roese wrote:
[PATCH] ppc: ioremap() on PPC44x platforms now accepts 64bit addresses
On systems that supply a real 64bit address (with
CONFIG_RESOURCES_64BIT enabled), don't use the fixup function. This
allows us to use the fixup function when no ERPN is specified and use
the 64 bit address when the ERPN is supplied.
Signed-off-by: Stefan Roese <sr@denx.de>
[...]
quoted hunk ↗ jump to hunk
diff --git a/arch/ppc/mm/pgtable.c b/arch/ppc/mm/pgtable.c
index 354a940..2f9a311 100644
--- a/arch/ppc/mm/pgtable.c
+++ b/arch/ppc/mm/pgtable.c
@@ -156,9 +156,19 @@ ioremap64(unsigned long long addr, unsigned long size)
 void __iomem *
 ioremap(phys_addr_t addr, unsigned long size)
 {
-	phys_addr_t addr64 = fixup_bigphys_addr(addr, size);
-
-	return ioremap64(addr64, size);
+	/*
+	 * On systems that supply a real 64bit address
+	 * (with CONFIG_RESOURCES_64BIT enabled), don't use the
+	 * fixup function.
+	 * This allows us to use the fixup function when no ERPN
+	 * is specified and use the 64 bit address when the ERPN
+	 * is suppied.
+	 */
+	if ((unsigned long long)addr & 0xffffffff00000000ULL)
+		return ioremap64(addr, size);
    I'm sorry but is this actually needed? From looking at the 
arch/ppc/syslib/ibm44x_common.c and include/asm-ppc/ibm44x.h I got an 
impression that fixup_bigphys_addr() returns addresses >= 4GB intact anyway
+	else
+		return ioremap64(fixup_bigphys_addr(addr, size),
+				 size);
 }
 #endif /* CONFIG_PHYS_64BIT */
WBR, Sergei
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help