arch/*/io.h: Add ioremap_wt() to all architectures
authorToshi Kani <toshi.kani@hp.com>
Thu, 4 Jun 2015 16:55:16 +0000 (18:55 +0200)
committerIngo Molnar <mingo@kernel.org>
Sun, 7 Jun 2015 13:28:57 +0000 (15:28 +0200)
Add ioremap_wt() to all arch-specific asm/io.h headers which
define ioremap_wc() locally. These headers do not include
<asm-generic/iomap.h>. Some of them include <asm-generic/io.h>,
but ioremap_wt() is defined for consistency since they define
all ioremap_xxx locally.

In all architectures without Write-Through support, ioremap_wt()
is defined indentical to ioremap_nocache().

frv and m68k already have ioremap_writethrough(). On those we
add ioremap_wt() indetical to ioremap_writethrough() and defines
ARCH_HAS_IOREMAP_WT in both architectures.

The ioremap_wt() interface is exported to drivers.

Signed-off-by: Toshi Kani <toshi.kani@hp.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Elliott@hp.com
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Luis R. Rodriguez <mcgrof@suse.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: arnd@arndb.de
Cc: hch@lst.de
Cc: hmh@hmh.eng.br
Cc: jgross@suse.com
Cc: konrad.wilk@oracle.com
Cc: linux-mm <linux-mm@kvack.org>
Cc: linux-nvdimm@lists.01.org
Cc: stefan.bader@canonical.com
Cc: yigal@plexistor.com
Link: http://lkml.kernel.org/r/1433436928-31903-9-git-send-email-bp@alien8.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
17 files changed:
arch/arc/include/asm/io.h
arch/arm/include/asm/io.h
arch/arm64/include/asm/io.h
arch/avr32/include/asm/io.h
arch/frv/include/asm/io.h
arch/m32r/include/asm/io.h
arch/m68k/include/asm/io_mm.h
arch/m68k/include/asm/io_no.h
arch/metag/include/asm/io.h
arch/microblaze/include/asm/io.h
arch/mn10300/include/asm/io.h
arch/nios2/include/asm/io.h
arch/s390/include/asm/io.h
arch/sparc/include/asm/io_32.h
arch/sparc/include/asm/io_64.h
arch/tile/include/asm/io.h
arch/xtensa/include/asm/io.h

index cabd518cb253d95e3bf532d07bfbc5c2214d19fc..7cc4ced5dbf4e4894c6b7d594a9810df74ab26d0 100644 (file)
@@ -20,6 +20,7 @@ extern void iounmap(const void __iomem *addr);
 
 #define ioremap_nocache(phy, sz)       ioremap(phy, sz)
 #define ioremap_wc(phy, sz)            ioremap(phy, sz)
+#define ioremap_wt(phy, sz)            ioremap(phy, sz)
 
 /* Change struct page to physical address */
 #define page_to_phys(page)             (page_to_pfn(page) << PAGE_SHIFT)
index db58deb00aa74c8176380075d06b60e6b0858009..1b7677d1e5e12063167dbbd05745d7ea82506678 100644 (file)
@@ -336,6 +336,7 @@ extern void _memset_io(volatile void __iomem *, int, size_t);
 #define ioremap_nocache(cookie,size)   __arm_ioremap((cookie), (size), MT_DEVICE)
 #define ioremap_cache(cookie,size)     __arm_ioremap((cookie), (size), MT_DEVICE_CACHED)
 #define ioremap_wc(cookie,size)                __arm_ioremap((cookie), (size), MT_DEVICE_WC)
+#define ioremap_wt(cookie,size)                __arm_ioremap((cookie), (size), MT_DEVICE)
 #define iounmap                                __arm_iounmap
 
 /*
index 540f7c0aea8250a082c718c8b97f9c1c8c151169..7116d3973058200943148d2b2f7a4fe9ac0b7901 100644 (file)
@@ -170,6 +170,7 @@ extern void __iomem *ioremap_cache(phys_addr_t phys_addr, size_t size);
 #define ioremap(addr, size)            __ioremap((addr), (size), __pgprot(PROT_DEVICE_nGnRE))
 #define ioremap_nocache(addr, size)    __ioremap((addr), (size), __pgprot(PROT_DEVICE_nGnRE))
 #define ioremap_wc(addr, size)         __ioremap((addr), (size), __pgprot(PROT_NORMAL_NC))
+#define ioremap_wt(addr, size)         __ioremap((addr), (size), __pgprot(PROT_DEVICE_nGnRE))
 #define iounmap                                __iounmap
 
 /*
index 4f5ec2bb71727279a952843051f44e3297c7b222..e998ff5d8e1a540aa8274e07c9bc8f7443ed7633 100644 (file)
@@ -296,6 +296,7 @@ extern void __iounmap(void __iomem *addr);
        __iounmap(addr)
 
 #define ioremap_wc ioremap_nocache
+#define ioremap_wt ioremap_nocache
 
 #define cached(addr) P1SEGADDR(addr)
 #define uncached(addr) P2SEGADDR(addr)
index 0b78bc89e8402f867fcdbb31e85ff2cffa693494..1fe98febc08195670d81a7b027bd2300769a1910 100644 (file)
@@ -17,6 +17,8 @@
 
 #ifdef __KERNEL__
 
+#define ARCH_HAS_IOREMAP_WT
+
 #include <linux/types.h>
 #include <asm/virtconvert.h>
 #include <asm/string.h>
@@ -270,6 +272,11 @@ static inline void __iomem *ioremap_writethrough(unsigned long physaddr, unsigne
        return __ioremap(physaddr, size, IOMAP_WRITETHROUGH);
 }
 
+static inline void __iomem *ioremap_wt(unsigned long physaddr, unsigned long size)
+{
+       return __ioremap(physaddr, size, IOMAP_WRITETHROUGH);
+}
+
 static inline void __iomem *ioremap_fullcache(unsigned long physaddr, unsigned long size)
 {
        return __ioremap(physaddr, size, IOMAP_FULL_CACHING);
index 9cc00dbd59cef4096b186fd1ffe5e4b51766f430..0c3f25ee3381d9fad606ea36bb09682d362a87d8 100644 (file)
@@ -68,6 +68,7 @@ static inline void __iomem *ioremap(unsigned long offset, unsigned long size)
 extern void iounmap(volatile void __iomem *addr);
 #define ioremap_nocache(off,size) ioremap(off,size)
 #define ioremap_wc ioremap_nocache
+#define ioremap_wt ioremap_nocache
 
 /*
  * IO bus memory addresses are also 1:1 with the physical address
index 8955b40a5dc4304a37c6ff88b328a333f1df13cd..7c12138bb3cb979c2bc8ef36dda1f51247e4270e 100644 (file)
@@ -20,6 +20,8 @@
 
 #ifdef __KERNEL__
 
+#define ARCH_HAS_IOREMAP_WT
+
 #include <linux/compiler.h>
 #include <asm/raw_io.h>
 #include <asm/virtconvert.h>
@@ -470,6 +472,11 @@ static inline void __iomem *ioremap_writethrough(unsigned long physaddr,
 {
        return __ioremap(physaddr, size, IOMAP_WRITETHROUGH);
 }
+static inline void __iomem *ioremap_wt(unsigned long physaddr,
+                                        unsigned long size)
+{
+       return __ioremap(physaddr, size, IOMAP_WRITETHROUGH);
+}
 static inline void __iomem *ioremap_fullcache(unsigned long physaddr,
                                      unsigned long size)
 {
index a93c8cde4d382fc171798affe7090cc59a60f46d..5fff9a22296e3769db0279e60699b14ea503c933 100644 (file)
@@ -3,6 +3,8 @@
 
 #ifdef __KERNEL__
 
+#define ARCH_HAS_IOREMAP_WT
+
 #include <asm/virtconvert.h>
 #include <asm-generic/iomap.h>
 
@@ -157,6 +159,10 @@ static inline void *ioremap_writethrough(unsigned long physaddr, unsigned long s
 {
        return __ioremap(physaddr, size, IOMAP_WRITETHROUGH);
 }
+static inline void *ioremap_wt(unsigned long physaddr, unsigned long size)
+{
+       return __ioremap(physaddr, size, IOMAP_WRITETHROUGH);
+}
 static inline void *ioremap_fullcache(unsigned long physaddr, unsigned long size)
 {
        return __ioremap(physaddr, size, IOMAP_FULL_CACHING);
index d5779b0ec5730a01963a4a86940d1f5eb500084e..9890f21eadbe867ef4c48f5141ce4ceadb54965f 100644 (file)
@@ -160,6 +160,9 @@ extern void __iounmap(void __iomem *addr);
 #define ioremap_wc(offset, size)                \
        __ioremap((offset), (size), _PAGE_WR_COMBINE)
 
+#define ioremap_wt(offset, size)                \
+       __ioremap((offset), (size), 0)
+
 #define iounmap(addr)                           \
        __iounmap(addr)
 
index 940f5fc1d1da13f3988fe99fd69a7d02e0825c8d..ec3da113599477641debce92ddd2149bf3b29155 100644 (file)
@@ -43,6 +43,7 @@ extern void __iomem *ioremap(phys_addr_t address, unsigned long size);
 #define ioremap_nocache(addr, size)            ioremap((addr), (size))
 #define ioremap_fullcache(addr, size)          ioremap((addr), (size))
 #define ioremap_wc(addr, size)                 ioremap((addr), (size))
+#define ioremap_wt(addr, size)                 ioremap((addr), (size))
 
 #endif /* CONFIG_MMU */
 
index cc4a2ba9e228998c7ccbd5af24d5e5d9c5c42fb6..07c5b4a3903ba61ede14417e63f0d9b7a630f7db 100644 (file)
@@ -282,6 +282,7 @@ static inline void __iomem *ioremap_nocache(unsigned long offset, unsigned long
 }
 
 #define ioremap_wc ioremap_nocache
+#define ioremap_wt ioremap_nocache
 
 static inline void iounmap(void __iomem *addr)
 {
index 6e24d7cceb0c1407db80f7354e662f11b5f7d339..c5a62da22cd2eb40b5e0bc16588f23f0cc7ecdd4 100644 (file)
@@ -46,6 +46,7 @@ static inline void iounmap(void __iomem *addr)
 }
 
 #define ioremap_wc ioremap_nocache
+#define ioremap_wt ioremap_nocache
 
 /* Pages to physical address... */
 #define page_to_phys(page)     virt_to_phys(page_to_virt(page))
index 30fd5c84680e84f60fe438f6e9c0bc5b45f58ba4..cb5fdf3a78fc8205929fa995676961afe3d90798 100644 (file)
@@ -29,6 +29,7 @@ void unxlate_dev_mem_ptr(phys_addr_t phys, void *addr);
 
 #define ioremap_nocache(addr, size)    ioremap(addr, size)
 #define ioremap_wc                     ioremap_nocache
+#define ioremap_wt                     ioremap_nocache
 
 static inline void __iomem *ioremap(unsigned long offset, unsigned long size)
 {
index 407ac14295f43ec01e93141e1673794d5e3f024c..57f26c398dc9d21961e3d811ac1e11c8ea4ccf71 100644 (file)
@@ -129,6 +129,7 @@ static inline void sbus_memcpy_toio(volatile void __iomem *dst,
 void __iomem *ioremap(unsigned long offset, unsigned long size);
 #define ioremap_nocache(X,Y)   ioremap((X),(Y))
 #define ioremap_wc(X,Y)                ioremap((X),(Y))
+#define ioremap_wt(X,Y)                ioremap((X),(Y))
 void iounmap(volatile void __iomem *addr);
 
 /* Create a virtual mapping cookie for an IO port range */
index 50d4840d9aebbfa036c7a110e9f866fa77007647..c32fa3f752c8ea4954d2d2faeb7bc3f1c2015453 100644 (file)
@@ -402,6 +402,7 @@ static inline void __iomem *ioremap(unsigned long offset, unsigned long size)
 
 #define ioremap_nocache(X,Y)           ioremap((X),(Y))
 #define ioremap_wc(X,Y)                        ioremap((X),(Y))
+#define ioremap_wt(X,Y)                        ioremap((X),(Y))
 
 static inline void iounmap(volatile void __iomem *addr)
 {
index 6ef4ecab1df29bb86b5dbca9c0f900f0ae7133f7..9c3d950a723134b226db8e1076d9796dd295fa94 100644 (file)
@@ -54,6 +54,7 @@ extern void iounmap(volatile void __iomem *addr);
 
 #define ioremap_nocache(physaddr, size)                ioremap(physaddr, size)
 #define ioremap_wc(physaddr, size)             ioremap(physaddr, size)
+#define ioremap_wt(physaddr, size)             ioremap(physaddr, size)
 #define ioremap_writethrough(physaddr, size)   ioremap(physaddr, size)
 #define ioremap_fullcache(physaddr, size)      ioremap(physaddr, size)
 
index fe1600a094384e8c18a988e91862b531031984f3..c39bb6e61911e3577274bc4794a08084d4035aaa 100644 (file)
@@ -59,6 +59,7 @@ static inline void __iomem *ioremap_cache(unsigned long offset,
 }
 
 #define ioremap_wc ioremap_nocache
+#define ioremap_wt ioremap_nocache
 
 static inline void __iomem *ioremap(unsigned long offset, unsigned long size)
 {