aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2008-10-01 02:12:27 -0400
committerPaul Mundt <lethal@linux-sh.org>2008-10-01 02:12:27 -0400
commit64c9627c2628bc3bd3291710b8ee6f8335883f8b (patch)
treefee0816511f68f687f500a7e7ae7c8adf92a0f45
parentbdeb3be7cc6911477b7169dad62a427d7a263d02 (diff)
sh: Fix up the __raw_read/writeX() definitions.
These were doing largely bogus things and using the wrong typing for the address. Bring these in line with the ARM definitions. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
-rw-r--r--arch/sh/include/asm/io.h77
-rw-r--r--arch/sh/lib/io.c8
2 files changed, 40 insertions, 45 deletions
diff --git a/arch/sh/include/asm/io.h b/arch/sh/include/asm/io.h
index 1857666136f2..d9e794eff830 100644
--- a/arch/sh/include/asm/io.h
+++ b/arch/sh/include/asm/io.h
@@ -101,44 +101,33 @@
101#define outsw __outsw 101#define outsw __outsw
102#define outsl __outsl 102#define outsl __outsl
103 103
104#define __raw_readb(a) __readb((void __iomem *)(a)) 104#define __raw_writeb(v,a) (__chk_io_ptr(a), *(volatile unsigned char __force *)(a) = (v))
105#define __raw_readw(a) __readw((void __iomem *)(a)) 105#define __raw_writew(v,a) (__chk_io_ptr(a), *(volatile unsigned short __force *)(a) = (v))
106#define __raw_readl(a) __readl((void __iomem *)(a)) 106#define __raw_writel(v,a) (__chk_io_ptr(a), *(volatile unsigned int __force *)(a) = (v))
107#define __raw_writeb(v, a) __writeb(v, (void __iomem *)(a))
108#define __raw_writew(v, a) __writew(v, (void __iomem *)(a))
109#define __raw_writel(v, a) __writel(v, (void __iomem *)(a))
110 107
111void __raw_writesl(unsigned long addr, const void *data, int longlen); 108#define __raw_readb(a) (__chk_io_ptr(a), *(volatile unsigned char __force *)(a))
112void __raw_readsl(unsigned long addr, void *data, int longlen); 109#define __raw_readw(a) (__chk_io_ptr(a), *(volatile unsigned short __force *)(a))
110#define __raw_readl(a) (__chk_io_ptr(a), *(volatile unsigned int __force *)(a))
111
112void __raw_writesl(void __iomem *addr, const void *data, int longlen);
113void __raw_readsl(const void __iomem *addr, void *data, int longlen);
113 114
114/* 115/*
115 * The platform header files may define some of these macros to use 116 * The platform header files may define some of these macros to use
116 * the inlined versions where appropriate. These macros may also be 117 * the inlined versions where appropriate. These macros may also be
117 * redefined by userlevel programs. 118 * redefined by userlevel programs.
118 */ 119 */
119#ifdef __readb 120#define readb(a) ({ unsigned int r_ = __readb(a); mb(); r_; })
120# define readb(a) ({ unsigned int r_ = __raw_readb(a); mb(); r_; }) 121#define readw(a) ({ unsigned int r_ = __readw(a); mb(); r_; })
121#endif 122#define readl(a) ({ unsigned int r_ = __readl(a); mb(); r_; })
122#ifdef __raw_readw
123# define readw(a) ({ unsigned int r_ = __raw_readw(a); mb(); r_; })
124#endif
125#ifdef __raw_readl
126# define readl(a) ({ unsigned int r_ = __raw_readl(a); mb(); r_; })
127#endif
128 123
129#ifdef __raw_writeb 124#define writeb(v,a) ({ __writeb((v),(a)); mb(); })
130# define writeb(v,a) ({ __raw_writeb((v),(a)); mb(); }) 125#define writew(v,a) ({ __writew((v),(a)); mb(); })
131#endif 126#define writel(v,a) ({ __writel((v),(a)); mb(); })
132#ifdef __raw_writew
133# define writew(v,a) ({ __raw_writew((v),(a)); mb(); })
134#endif
135#ifdef __raw_writel
136# define writel(v,a) ({ __raw_writel((v),(a)); mb(); })
137#endif
138 127
139#define __BUILD_MEMORY_STRING(bwlq, type) \ 128#define __BUILD_MEMORY_STRING(bwlq, type) \
140 \ 129 \
141static inline void writes##bwlq(volatile void __iomem *mem, \ 130static inline void __raw_writes##bwlq(volatile void __iomem *mem, \
142 const void *addr, unsigned int count) \ 131 const void *addr, unsigned int count) \
143{ \ 132{ \
144 const volatile type *__addr = addr; \ 133 const volatile type *__addr = addr; \
@@ -149,8 +138,8 @@ static inline void writes##bwlq(volatile void __iomem *mem, \
149 } \ 138 } \
150} \ 139} \
151 \ 140 \
152static inline void reads##bwlq(volatile void __iomem *mem, void *addr, \ 141static inline void __raw_reads##bwlq(volatile void __iomem *mem, \
153 unsigned int count) \ 142 void *addr, unsigned int count) \
154{ \ 143{ \
155 volatile type *__addr = addr; \ 144 volatile type *__addr = addr; \
156 \ 145 \
@@ -162,7 +151,13 @@ static inline void reads##bwlq(volatile void __iomem *mem, void *addr, \
162 151
163__BUILD_MEMORY_STRING(b, u8) 152__BUILD_MEMORY_STRING(b, u8)
164__BUILD_MEMORY_STRING(w, u16) 153__BUILD_MEMORY_STRING(w, u16)
154
155#define writesb __raw_writesb
156#define writesw __raw_writesw
165#define writesl __raw_writesl 157#define writesl __raw_writesl
158
159#define readsb __raw_readsb
160#define readsw __raw_readsw
166#define readsl __raw_readsl 161#define readsl __raw_readsl
167 162
168#define readb_relaxed(a) readb(a) 163#define readb_relaxed(a) readb(a)
@@ -170,25 +165,25 @@ __BUILD_MEMORY_STRING(w, u16)
170#define readl_relaxed(a) readl(a) 165#define readl_relaxed(a) readl(a)
171 166
172/* Simple MMIO */ 167/* Simple MMIO */
173#define ioread8(a) readb(a) 168#define ioread8(a) __raw_readb(a)
174#define ioread16(a) readw(a) 169#define ioread16(a) __raw_readw(a)
175#define ioread16be(a) be16_to_cpu(__raw_readw((a))) 170#define ioread16be(a) be16_to_cpu(__raw_readw((a)))
176#define ioread32(a) readl(a) 171#define ioread32(a) __raw_readl(a)
177#define ioread32be(a) be32_to_cpu(__raw_readl((a))) 172#define ioread32be(a) be32_to_cpu(__raw_readl((a)))
178 173
179#define iowrite8(v,a) writeb((v),(a)) 174#define iowrite8(v,a) __raw_writeb((v),(a))
180#define iowrite16(v,a) writew((v),(a)) 175#define iowrite16(v,a) __raw_writew((v),(a))
181#define iowrite16be(v,a) __raw_writew(cpu_to_be16((v)),(a)) 176#define iowrite16be(v,a) __raw_writew(cpu_to_be16((v)),(a))
182#define iowrite32(v,a) writel((v),(a)) 177#define iowrite32(v,a) __raw_writel((v),(a))
183#define iowrite32be(v,a) __raw_writel(cpu_to_be32((v)),(a)) 178#define iowrite32be(v,a) __raw_writel(cpu_to_be32((v)),(a))
184 179
185#define ioread8_rep(a, d, c) readsb((a), (d), (c)) 180#define ioread8_rep(a, d, c) __raw_readsb((a), (d), (c))
186#define ioread16_rep(a, d, c) readsw((a), (d), (c)) 181#define ioread16_rep(a, d, c) __raw_readsw((a), (d), (c))
187#define ioread32_rep(a, d, c) readsl((a), (d), (c)) 182#define ioread32_rep(a, d, c) __raw_readsl((a), (d), (c))
188 183
189#define iowrite8_rep(a, s, c) writesb((a), (s), (c)) 184#define iowrite8_rep(a, s, c) __raw_writesb((a), (s), (c))
190#define iowrite16_rep(a, s, c) writesw((a), (s), (c)) 185#define iowrite16_rep(a, s, c) __raw_writesw((a), (s), (c))
191#define iowrite32_rep(a, s, c) writesl((a), (s), (c)) 186#define iowrite32_rep(a, s, c) __raw_writesl((a), (s), (c))
192 187
193#define mmiowb() wmb() /* synco on SH-4A, otherwise a nop */ 188#define mmiowb() wmb() /* synco on SH-4A, otherwise a nop */
194 189
diff --git a/arch/sh/lib/io.c b/arch/sh/lib/io.c
index 4f54ec43516f..88dfe6e396bc 100644
--- a/arch/sh/lib/io.c
+++ b/arch/sh/lib/io.c
@@ -14,12 +14,12 @@
14#include <linux/module.h> 14#include <linux/module.h>
15#include <linux/io.h> 15#include <linux/io.h>
16 16
17void __raw_readsl(unsigned long addr, void *datap, int len) 17void __raw_readsl(const void __iomem *addr, void *datap, int len)
18{ 18{
19 u32 *data; 19 u32 *data;
20 20
21 for (data = datap; (len != 0) && (((u32)data & 0x1f) != 0); len--) 21 for (data = datap; (len != 0) && (((u32)data & 0x1f) != 0); len--)
22 *data++ = ctrl_inl(addr); 22 *data++ = __raw_readl(addr);
23 23
24 if (likely(len >= (0x20 >> 2))) { 24 if (likely(len >= (0x20 >> 2))) {
25 int tmp2, tmp3, tmp4, tmp5, tmp6; 25 int tmp2, tmp3, tmp4, tmp5, tmp6;
@@ -59,11 +59,11 @@ void __raw_readsl(unsigned long addr, void *datap, int len)
59 } 59 }
60 60
61 for (; len != 0; len--) 61 for (; len != 0; len--)
62 *data++ = ctrl_inl(addr); 62 *data++ = __raw_readl(addr);
63} 63}
64EXPORT_SYMBOL(__raw_readsl); 64EXPORT_SYMBOL(__raw_readsl);
65 65
66void __raw_writesl(unsigned long addr, const void *data, int len) 66void __raw_writesl(void __iomem *addr, const void *data, int len)
67{ 67{
68 if (likely(len != 0)) { 68 if (likely(len != 0)) {
69 int tmp1; 69 int tmp1;