diff options
author | Benjamin Herrenschmidt <benh@au1.ibm.com> | 2006-11-20 20:35:29 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-12-04 04:39:07 -0500 |
commit | 757db1ed9b50d28cd4c1e7d9925c9ea7783b2f91 (patch) | |
tree | 1dd122c4d66ceb6e7c590b6be87695d124db6b57 /include/asm-powerpc | |
parent | 68a64357d15ae4f596e92715719071952006e83c (diff) |
[POWERPC] Fix __raw* accessors
The new IO accessor code allows to stick a token in the top bit of MMIO
addresses which gets masked out during actual accesses. However, the
__raw_* accessors forgot to mask it out. This fixes it.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'include/asm-powerpc')
-rw-r--r-- | include/asm-powerpc/io.h | 92 |
1 files changed, 45 insertions, 47 deletions
diff --git a/include/asm-powerpc/io.h b/include/asm-powerpc/io.h index 53bff8bd39b9..75df3bce9ccb 100644 --- a/include/asm-powerpc/io.h +++ b/include/asm-powerpc/io.h | |||
@@ -185,53 +185,6 @@ extern void _memcpy_toio(volatile void __iomem *dest, const void *src, | |||
185 | * of the accessors. | 185 | * of the accessors. |
186 | */ | 186 | */ |
187 | 187 | ||
188 | |||
189 | /* | ||
190 | * Non ordered and non-swapping "raw" accessors | ||
191 | */ | ||
192 | |||
193 | static inline unsigned char __raw_readb(const volatile void __iomem *addr) | ||
194 | { | ||
195 | return *(volatile unsigned char __force *)addr; | ||
196 | } | ||
197 | static inline unsigned short __raw_readw(const volatile void __iomem *addr) | ||
198 | { | ||
199 | return *(volatile unsigned short __force *)addr; | ||
200 | } | ||
201 | static inline unsigned int __raw_readl(const volatile void __iomem *addr) | ||
202 | { | ||
203 | return *(volatile unsigned int __force *)addr; | ||
204 | } | ||
205 | static inline void __raw_writeb(unsigned char v, volatile void __iomem *addr) | ||
206 | { | ||
207 | *(volatile unsigned char __force *)addr = v; | ||
208 | } | ||
209 | static inline void __raw_writew(unsigned short v, volatile void __iomem *addr) | ||
210 | { | ||
211 | *(volatile unsigned short __force *)addr = v; | ||
212 | } | ||
213 | static inline void __raw_writel(unsigned int v, volatile void __iomem *addr) | ||
214 | { | ||
215 | *(volatile unsigned int __force *)addr = v; | ||
216 | } | ||
217 | |||
218 | #ifdef __powerpc64__ | ||
219 | static inline unsigned long __raw_readq(const volatile void __iomem *addr) | ||
220 | { | ||
221 | return *(volatile unsigned long __force *)addr; | ||
222 | } | ||
223 | static inline void __raw_writeq(unsigned long v, volatile void __iomem *addr) | ||
224 | { | ||
225 | *(volatile unsigned long __force *)addr = v; | ||
226 | } | ||
227 | #endif /* __powerpc64__ */ | ||
228 | |||
229 | /* | ||
230 | * | ||
231 | * PCI PIO and MMIO accessors. | ||
232 | * | ||
233 | */ | ||
234 | |||
235 | /* | 188 | /* |
236 | * Include the EEH definitions when EEH is enabled only so they don't get | 189 | * Include the EEH definitions when EEH is enabled only so they don't get |
237 | * in the way when building for 32 bits | 190 | * in the way when building for 32 bits |
@@ -291,7 +244,52 @@ do { \ | |||
291 | #define PCI_FIX_ADDR(addr) (addr) | 244 | #define PCI_FIX_ADDR(addr) (addr) |
292 | #endif | 245 | #endif |
293 | 246 | ||
247 | |||
248 | /* | ||
249 | * Non ordered and non-swapping "raw" accessors | ||
250 | */ | ||
251 | |||
252 | static inline unsigned char __raw_readb(const volatile void __iomem *addr) | ||
253 | { | ||
254 | return *(volatile unsigned char __force *)PCI_FIX_ADDR(addr); | ||
255 | } | ||
256 | static inline unsigned short __raw_readw(const volatile void __iomem *addr) | ||
257 | { | ||
258 | return *(volatile unsigned short __force *)PCI_FIX_ADDR(addr); | ||
259 | } | ||
260 | static inline unsigned int __raw_readl(const volatile void __iomem *addr) | ||
261 | { | ||
262 | return *(volatile unsigned int __force *)PCI_FIX_ADDR(addr); | ||
263 | } | ||
264 | static inline void __raw_writeb(unsigned char v, volatile void __iomem *addr) | ||
265 | { | ||
266 | *(volatile unsigned char __force *)PCI_FIX_ADDR(addr) = v; | ||
267 | } | ||
268 | static inline void __raw_writew(unsigned short v, volatile void __iomem *addr) | ||
269 | { | ||
270 | *(volatile unsigned short __force *)PCI_FIX_ADDR(addr) = v; | ||
271 | } | ||
272 | static inline void __raw_writel(unsigned int v, volatile void __iomem *addr) | ||
273 | { | ||
274 | *(volatile unsigned int __force *)PCI_FIX_ADDR(addr) = v; | ||
275 | } | ||
276 | |||
277 | #ifdef __powerpc64__ | ||
278 | static inline unsigned long __raw_readq(const volatile void __iomem *addr) | ||
279 | { | ||
280 | return *(volatile unsigned long __force *)PCI_FIX_ADDR(addr); | ||
281 | } | ||
282 | static inline void __raw_writeq(unsigned long v, volatile void __iomem *addr) | ||
283 | { | ||
284 | *(volatile unsigned long __force *)PCI_FIX_ADDR(addr) = v; | ||
285 | } | ||
286 | #endif /* __powerpc64__ */ | ||
287 | |||
294 | /* | 288 | /* |
289 | * | ||
290 | * PCI PIO and MMIO accessors. | ||
291 | * | ||
292 | * | ||
295 | * On 32 bits, PIO operations have a recovery mechanism in case they trigger | 293 | * On 32 bits, PIO operations have a recovery mechanism in case they trigger |
296 | * machine checks (which they occasionally do when probing non existing | 294 | * machine checks (which they occasionally do when probing non existing |
297 | * IO ports on some platforms, like PowerMac and 8xx). | 295 | * IO ports on some platforms, like PowerMac and 8xx). |