sh: Limit ioremap_prot() to 32bit pgprot parts.
authorPaul Mundt <lethal@linux-sh.org>
Tue, 19 Jan 2010 05:00:14 +0000 (14:00 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Tue, 19 Jan 2010 05:00:14 +0000 (14:00 +0900)
Presently ioremap_prot() uses an unsigned long to pass the pgprot value
around. This results in the upper half of the pgprot being chomped when
using 64-bit pgprots on a 32-bit ABI (X2TLB and SH-5).

As the only users of ioremap_prot() are presently legacy parts, this
doesn't cause too much of an issue. In the future when the interface is
converted to use pgprot_t directly this can be re-enabled for the other
parts, too.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
arch/sh/Kconfig
arch/sh/include/asm/io.h

index 5ac0115..8d0eabb 100644 (file)
@@ -13,7 +13,6 @@ config SUPERH
        select HAVE_LMB
        select HAVE_OPROFILE
        select HAVE_GENERIC_DMA_COHERENT
-       select HAVE_IOREMAP_PROT if MMU
        select HAVE_ARCH_TRACEHOOK
        select HAVE_DMA_API_DEBUG
        select HAVE_DMA_ATTRS
@@ -36,6 +35,7 @@ config SUPERH32
        def_bool ARCH = "sh"
        select HAVE_KPROBES
        select HAVE_KRETPROBES
+       select HAVE_IOREMAP_PROT if MMU && !X2TLB
        select HAVE_FUNCTION_TRACER
        select HAVE_FTRACE_MCOUNT_RECORD
        select HAVE_DYNAMIC_FTRACE
index c32a556..4bad72a 100644 (file)
@@ -321,11 +321,13 @@ ioremap_cache(unsigned long offset, unsigned long size)
        return __ioremap_mode(offset, size, PAGE_KERNEL);
 }
 
+#ifdef CONFIG_HAVE_IOREMAP_PROT
 static inline void __iomem *
 ioremap_prot(resource_size_t offset, unsigned long size, unsigned long flags)
 {
        return __ioremap_mode(offset, size, __pgprot(flags));
 }
+#endif
 
 #define ioremap_nocache        ioremap
 #define iounmap                __iounmap