[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>
This commit is contained in:
committed by
Paul Mackerras
parent
68a64357d1
commit
757db1ed9b
@@ -185,53 +185,6 @@ extern void _memcpy_toio(volatile void __iomem *dest, const void *src,
|
|||||||
* of the accessors.
|
* of the accessors.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Non ordered and non-swapping "raw" accessors
|
|
||||||
*/
|
|
||||||
|
|
||||||
static inline unsigned char __raw_readb(const volatile void __iomem *addr)
|
|
||||||
{
|
|
||||||
return *(volatile unsigned char __force *)addr;
|
|
||||||
}
|
|
||||||
static inline unsigned short __raw_readw(const volatile void __iomem *addr)
|
|
||||||
{
|
|
||||||
return *(volatile unsigned short __force *)addr;
|
|
||||||
}
|
|
||||||
static inline unsigned int __raw_readl(const volatile void __iomem *addr)
|
|
||||||
{
|
|
||||||
return *(volatile unsigned int __force *)addr;
|
|
||||||
}
|
|
||||||
static inline void __raw_writeb(unsigned char v, volatile void __iomem *addr)
|
|
||||||
{
|
|
||||||
*(volatile unsigned char __force *)addr = v;
|
|
||||||
}
|
|
||||||
static inline void __raw_writew(unsigned short v, volatile void __iomem *addr)
|
|
||||||
{
|
|
||||||
*(volatile unsigned short __force *)addr = v;
|
|
||||||
}
|
|
||||||
static inline void __raw_writel(unsigned int v, volatile void __iomem *addr)
|
|
||||||
{
|
|
||||||
*(volatile unsigned int __force *)addr = v;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef __powerpc64__
|
|
||||||
static inline unsigned long __raw_readq(const volatile void __iomem *addr)
|
|
||||||
{
|
|
||||||
return *(volatile unsigned long __force *)addr;
|
|
||||||
}
|
|
||||||
static inline void __raw_writeq(unsigned long v, volatile void __iomem *addr)
|
|
||||||
{
|
|
||||||
*(volatile unsigned long __force *)addr = v;
|
|
||||||
}
|
|
||||||
#endif /* __powerpc64__ */
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
* PCI PIO and MMIO accessors.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Include the EEH definitions when EEH is enabled only so they don't get
|
* Include the EEH definitions when EEH is enabled only so they don't get
|
||||||
* in the way when building for 32 bits
|
* in the way when building for 32 bits
|
||||||
@@ -291,7 +244,52 @@ do { \
|
|||||||
#define PCI_FIX_ADDR(addr) (addr)
|
#define PCI_FIX_ADDR(addr) (addr)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
* Non ordered and non-swapping "raw" accessors
|
||||||
|
*/
|
||||||
|
|
||||||
|
static inline unsigned char __raw_readb(const volatile void __iomem *addr)
|
||||||
|
{
|
||||||
|
return *(volatile unsigned char __force *)PCI_FIX_ADDR(addr);
|
||||||
|
}
|
||||||
|
static inline unsigned short __raw_readw(const volatile void __iomem *addr)
|
||||||
|
{
|
||||||
|
return *(volatile unsigned short __force *)PCI_FIX_ADDR(addr);
|
||||||
|
}
|
||||||
|
static inline unsigned int __raw_readl(const volatile void __iomem *addr)
|
||||||
|
{
|
||||||
|
return *(volatile unsigned int __force *)PCI_FIX_ADDR(addr);
|
||||||
|
}
|
||||||
|
static inline void __raw_writeb(unsigned char v, volatile void __iomem *addr)
|
||||||
|
{
|
||||||
|
*(volatile unsigned char __force *)PCI_FIX_ADDR(addr) = v;
|
||||||
|
}
|
||||||
|
static inline void __raw_writew(unsigned short v, volatile void __iomem *addr)
|
||||||
|
{
|
||||||
|
*(volatile unsigned short __force *)PCI_FIX_ADDR(addr) = v;
|
||||||
|
}
|
||||||
|
static inline void __raw_writel(unsigned int v, volatile void __iomem *addr)
|
||||||
|
{
|
||||||
|
*(volatile unsigned int __force *)PCI_FIX_ADDR(addr) = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __powerpc64__
|
||||||
|
static inline unsigned long __raw_readq(const volatile void __iomem *addr)
|
||||||
|
{
|
||||||
|
return *(volatile unsigned long __force *)PCI_FIX_ADDR(addr);
|
||||||
|
}
|
||||||
|
static inline void __raw_writeq(unsigned long v, volatile void __iomem *addr)
|
||||||
|
{
|
||||||
|
*(volatile unsigned long __force *)PCI_FIX_ADDR(addr) = v;
|
||||||
|
}
|
||||||
|
#endif /* __powerpc64__ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* PCI PIO and MMIO accessors.
|
||||||
|
*
|
||||||
|
*
|
||||||
* On 32 bits, PIO operations have a recovery mechanism in case they trigger
|
* On 32 bits, PIO operations have a recovery mechanism in case they trigger
|
||||||
* machine checks (which they occasionally do when probing non existing
|
* machine checks (which they occasionally do when probing non existing
|
||||||
* IO ports on some platforms, like PowerMac and 8xx).
|
* IO ports on some platforms, like PowerMac and 8xx).
|
||||||
|
Reference in New Issue
Block a user