diff options
author | Will Deacon <will.deacon@arm.com> | 2013-09-04 06:34:08 -0400 |
---|---|---|
committer | Will Deacon <will.deacon@arm.com> | 2014-10-20 13:49:18 -0400 |
commit | 1191ccb34cf810a0fefaaf5ca3cfe3c5d7675927 (patch) | |
tree | 1700dadabaaa2d658fa0c34580edd6c99e0bb205 /arch/sparc | |
parent | 5da590574cbc39e48d1b71d87b62766c044b9b52 (diff) |
sparc: io: implement dummy relaxed accessor macros for writes
write{b,w,l,q}_relaxed are implemented by some architectures in order to
permit memory-mapped I/O accesses with weaker barrier semantics than the
non-relaxed variants.
This patch adds dummy macros for the write accessors to sparc, in the
same vein as the dummy definitions for the relaxed read accessors. The
existing relaxed read{b,w,l} accessors are moved into asm/io.h, since
they are identical between 32-bit and 64-bit machines.
Acked-by: "David S. Miller" <davem@davemloft.net>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Diffstat (limited to 'arch/sparc')
-rw-r--r-- | arch/sparc/include/asm/io.h | 9 | ||||
-rw-r--r-- | arch/sparc/include/asm/io_32.h | 4 | ||||
-rw-r--r-- | arch/sparc/include/asm/io_64.h | 8 |
3 files changed, 11 insertions, 10 deletions
diff --git a/arch/sparc/include/asm/io.h b/arch/sparc/include/asm/io.h index f6902cf3cbe9..493f22c4684f 100644 --- a/arch/sparc/include/asm/io.h +++ b/arch/sparc/include/asm/io.h | |||
@@ -10,6 +10,15 @@ | |||
10 | * Defines used for both SPARC32 and SPARC64 | 10 | * Defines used for both SPARC32 and SPARC64 |
11 | */ | 11 | */ |
12 | 12 | ||
13 | /* Relaxed accessors for MMIO */ | ||
14 | #define readb_relaxed(__addr) readb(__addr) | ||
15 | #define readw_relaxed(__addr) readw(__addr) | ||
16 | #define readl_relaxed(__addr) readl(__addr) | ||
17 | |||
18 | #define writeb_relaxed(__b, __addr) writeb(__b, __addr) | ||
19 | #define writew_relaxed(__w, __addr) writew(__w, __addr) | ||
20 | #define writel_relaxed(__l, __addr) writel(__l, __addr) | ||
21 | |||
13 | /* Big endian versions of memory read/write routines */ | 22 | /* Big endian versions of memory read/write routines */ |
14 | #define readb_be(__addr) __raw_readb(__addr) | 23 | #define readb_be(__addr) __raw_readb(__addr) |
15 | #define readw_be(__addr) __raw_readw(__addr) | 24 | #define readw_be(__addr) __raw_readw(__addr) |
diff --git a/arch/sparc/include/asm/io_32.h b/arch/sparc/include/asm/io_32.h index 9f532902627c..407ac14295f4 100644 --- a/arch/sparc/include/asm/io_32.h +++ b/arch/sparc/include/asm/io_32.h | |||
@@ -4,10 +4,6 @@ | |||
4 | #include <linux/kernel.h> | 4 | #include <linux/kernel.h> |
5 | #include <linux/ioport.h> /* struct resource */ | 5 | #include <linux/ioport.h> /* struct resource */ |
6 | 6 | ||
7 | #define readb_relaxed(__addr) readb(__addr) | ||
8 | #define readw_relaxed(__addr) readw(__addr) | ||
9 | #define readl_relaxed(__addr) readl(__addr) | ||
10 | |||
11 | #define IO_SPACE_LIMIT 0xffffffff | 7 | #define IO_SPACE_LIMIT 0xffffffff |
12 | 8 | ||
13 | #define memset_io(d,c,sz) _memset_io(d,c,sz) | 9 | #define memset_io(d,c,sz) _memset_io(d,c,sz) |
diff --git a/arch/sparc/include/asm/io_64.h b/arch/sparc/include/asm/io_64.h index 80b54b326d49..d50e6127325d 100644 --- a/arch/sparc/include/asm/io_64.h +++ b/arch/sparc/include/asm/io_64.h | |||
@@ -136,6 +136,7 @@ static inline u32 readl(const volatile void __iomem *addr) | |||
136 | } | 136 | } |
137 | 137 | ||
138 | #define readq readq | 138 | #define readq readq |
139 | #define readq_relaxed readq | ||
139 | static inline u64 readq(const volatile void __iomem *addr) | 140 | static inline u64 readq(const volatile void __iomem *addr) |
140 | { u64 ret; | 141 | { u64 ret; |
141 | 142 | ||
@@ -175,6 +176,7 @@ static inline void writel(u32 l, volatile void __iomem *addr) | |||
175 | } | 176 | } |
176 | 177 | ||
177 | #define writeq writeq | 178 | #define writeq writeq |
179 | #define writeq_relaxed writeq | ||
178 | static inline void writeq(u64 q, volatile void __iomem *addr) | 180 | static inline void writeq(u64 q, volatile void __iomem *addr) |
179 | { | 181 | { |
180 | __asm__ __volatile__("stxa\t%r0, [%1] %2\t/* pci_writeq */" | 182 | __asm__ __volatile__("stxa\t%r0, [%1] %2\t/* pci_writeq */" |
@@ -183,7 +185,6 @@ static inline void writeq(u64 q, volatile void __iomem *addr) | |||
183 | : "memory"); | 185 | : "memory"); |
184 | } | 186 | } |
185 | 187 | ||
186 | |||
187 | #define inb inb | 188 | #define inb inb |
188 | static inline u8 inb(unsigned long addr) | 189 | static inline u8 inb(unsigned long addr) |
189 | { | 190 | { |
@@ -264,11 +265,6 @@ static inline void iowrite32_rep(void __iomem *port, const void *buf, unsigned l | |||
264 | outsl((unsigned long __force)port, buf, count); | 265 | outsl((unsigned long __force)port, buf, count); |
265 | } | 266 | } |
266 | 267 | ||
267 | #define readb_relaxed(__addr) readb(__addr) | ||
268 | #define readw_relaxed(__addr) readw(__addr) | ||
269 | #define readl_relaxed(__addr) readl(__addr) | ||
270 | #define readq_relaxed(__addr) readq(__addr) | ||
271 | |||
272 | /* Valid I/O Space regions are anywhere, because each PCI bus supported | 268 | /* Valid I/O Space regions are anywhere, because each PCI bus supported |
273 | * can live in an arbitrary area of the physical address range. | 269 | * can live in an arbitrary area of the physical address range. |
274 | */ | 270 | */ |