summaryrefslogtreecommitdiff
path: root/include/asm-ppc64
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2004-09-20 17:11:36 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-09-20 17:11:36 -0700
commitb3047281c042bdbff515533fb3d540a7834620f2 (patch)
tree94eb024d0e2215e5b776f247bce5867a9c556fac /include/asm-ppc64
parent088b415479acab7baa6c87512b85b4267e466830 (diff)
[PATCH] ppc64: Fix __raw_* IO accessors
Linus removed the "volatile" statement from the definition of the __raw_* IO accessors on ppc64, which cause some real bad optisations to happen in some fbdev's like matroxfb to happen (just imagine that matroxfb loops reading an IO register waiting for a bit to change). The __raw_xxxx() functions still want ordered accesses (they avoid the byteswap, though) Signed-off-by: Benjamin Herrenschmidt <benh@kenrel.crashing.org>
Diffstat (limited to 'include/asm-ppc64')
-rw-r--r--include/asm-ppc64/io.h16
1 files changed, 8 insertions, 8 deletions
diff --git a/include/asm-ppc64/io.h b/include/asm-ppc64/io.h
index 1e9cd557352e..46d47573d1a4 100644
--- a/include/asm-ppc64/io.h
+++ b/include/asm-ppc64/io.h
@@ -71,35 +71,35 @@ extern unsigned long pci_io_base;
static inline unsigned char __raw_readb(const volatile void __iomem *addr)
{
- return *(unsigned char __force *)addr;
+ return *(volatile unsigned char __force *)addr;
}
static inline unsigned short __raw_readw(const volatile void __iomem *addr)
{
- return *(unsigned short __force *)addr;
+ return *(volatile unsigned short __force *)addr;
}
static inline unsigned int __raw_readl(const volatile void __iomem *addr)
{
- return *(unsigned int __force *)addr;
+ return *(volatile unsigned int __force *)addr;
}
static inline unsigned long __raw_readq(const volatile void __iomem *addr)
{
- return *(unsigned long __force *)addr;
+ return *(volatile unsigned long __force *)addr;
}
static inline void __raw_writeb(unsigned char v, volatile void __iomem *addr)
{
- *(unsigned char __force *)addr = v;
+ *(volatile unsigned char __force *)addr = v;
}
static inline void __raw_writew(unsigned short v, volatile void __iomem *addr)
{
- *(unsigned short __force *)addr = v;
+ *(volatile unsigned short __force *)addr = v;
}
static inline void __raw_writel(unsigned int v, volatile void __iomem *addr)
{
- *(unsigned int __force *)addr = v;
+ *(volatile unsigned int __force *)addr = v;
}
static inline void __raw_writeq(unsigned long v, volatile void __iomem *addr)
{
- *(unsigned long __force *)addr = v;
+ *(volatile unsigned long __force *)addr = v;
}
#define readb(addr) eeh_readb(addr)
#define readw(addr) eeh_readw(addr)