Merge tag 'asm-generic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic
Pull asm-generic asm/io.h rewrite from Arnd Bergmann:
"While there normally is no reason to have a pull request for
asm-generic but have all changes get merged through whichever tree
needs them, I do have a series for 3.19.
There are two sets of patches that change significant portions of
asm/io.h, and this branch contains both in order to resolve the
conflicts:
- Will Deacon has done a set of patches to ensure that all
architectures define {read,write}{b,w,l,q}_relaxed() functions or
get them by including asm-generic/io.h.
These functions are commonly used on ARM specific drivers to avoid
expensive L2 cache synchronization implied by the normal
{read,write}{b,w,l,q}, but we need to define them on all
architectures in order to share the drivers across architectures
and to enable CONFIG_COMPILE_TEST configurations for them
- Thierry Reding has done an unrelated set of patches that extends
the asm-generic/io.h file to the degree necessary to make it useful
on ARM64 and potentially other architectures"
* tag 'asm-generic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic: (29 commits)
ARM64: use GENERIC_PCI_IOMAP
sparc: io: remove duplicate relaxed accessors on sparc32
ARM: sa11x0: Use void __iomem * in MMIO accessors
arm64: Use include/asm-generic/io.h
ARM: Use include/asm-generic/io.h
asm-generic/io.h: Implement generic {read,write}s*()
asm-generic/io.h: Reconcile I/O accessor overrides
/dev/mem: Use more consistent data types
Change xlate_dev_{kmem,mem}_ptr() prototypes
ARM: ixp4xx: Properly override I/O accessors
ARM: ixp4xx: Fix build with IXP4XX_INDIRECT_PCI
ARM: ebsa110: Properly override I/O accessors
ARC: Remove redundant PCI_IOBASE declaration
documentation: memory-barriers: clarify relaxed io accessor semantics
x86: io: implement dummy relaxed accessor macros for writes
tile: io: implement dummy relaxed accessor macros for writes
sparc: io: implement dummy relaxed accessor macros for writes
powerpc: io: implement dummy relaxed accessor macros for writes
parisc: io: implement dummy relaxed accessor macros for writes
mn10300: io: implement dummy relaxed accessor macros for writes
...
This commit is contained in:
@@ -4,10 +4,6 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/ioport.h> /* struct resource */
|
||||
|
||||
#define readb_relaxed(__addr) readb(__addr)
|
||||
#define readw_relaxed(__addr) readw(__addr)
|
||||
#define readl_relaxed(__addr) readl(__addr)
|
||||
|
||||
#define IO_SPACE_LIMIT 0xffffffff
|
||||
|
||||
#define memset_io(d,c,sz) _memset_io(d,c,sz)
|
||||
|
||||
@@ -101,6 +101,7 @@ static inline void __raw_writeq(u64 q, const volatile void __iomem *addr)
|
||||
* the cache by using ASI_PHYS_BYPASS_EC_E_L
|
||||
*/
|
||||
#define readb readb
|
||||
#define readb_relaxed readb
|
||||
static inline u8 readb(const volatile void __iomem *addr)
|
||||
{ u8 ret;
|
||||
|
||||
@@ -112,6 +113,7 @@ static inline u8 readb(const volatile void __iomem *addr)
|
||||
}
|
||||
|
||||
#define readw readw
|
||||
#define readw_relaxed readw
|
||||
static inline u16 readw(const volatile void __iomem *addr)
|
||||
{ u16 ret;
|
||||
|
||||
@@ -124,6 +126,7 @@ static inline u16 readw(const volatile void __iomem *addr)
|
||||
}
|
||||
|
||||
#define readl readl
|
||||
#define readl_relaxed readl
|
||||
static inline u32 readl(const volatile void __iomem *addr)
|
||||
{ u32 ret;
|
||||
|
||||
@@ -136,6 +139,7 @@ static inline u32 readl(const volatile void __iomem *addr)
|
||||
}
|
||||
|
||||
#define readq readq
|
||||
#define readq_relaxed readq
|
||||
static inline u64 readq(const volatile void __iomem *addr)
|
||||
{ u64 ret;
|
||||
|
||||
@@ -148,6 +152,7 @@ static inline u64 readq(const volatile void __iomem *addr)
|
||||
}
|
||||
|
||||
#define writeb writeb
|
||||
#define writeb_relaxed writeb
|
||||
static inline void writeb(u8 b, volatile void __iomem *addr)
|
||||
{
|
||||
__asm__ __volatile__("stba\t%r0, [%1] %2\t/* pci_writeb */"
|
||||
@@ -157,6 +162,7 @@ static inline void writeb(u8 b, volatile void __iomem *addr)
|
||||
}
|
||||
|
||||
#define writew writew
|
||||
#define writew_relaxed writew
|
||||
static inline void writew(u16 w, volatile void __iomem *addr)
|
||||
{
|
||||
__asm__ __volatile__("stha\t%r0, [%1] %2\t/* pci_writew */"
|
||||
@@ -166,6 +172,7 @@ static inline void writew(u16 w, volatile void __iomem *addr)
|
||||
}
|
||||
|
||||
#define writel writel
|
||||
#define writel_relaxed writel
|
||||
static inline void writel(u32 l, volatile void __iomem *addr)
|
||||
{
|
||||
__asm__ __volatile__("stwa\t%r0, [%1] %2\t/* pci_writel */"
|
||||
@@ -175,6 +182,7 @@ static inline void writel(u32 l, volatile void __iomem *addr)
|
||||
}
|
||||
|
||||
#define writeq writeq
|
||||
#define writeq_relaxed writeq
|
||||
static inline void writeq(u64 q, volatile void __iomem *addr)
|
||||
{
|
||||
__asm__ __volatile__("stxa\t%r0, [%1] %2\t/* pci_writeq */"
|
||||
@@ -183,7 +191,6 @@ static inline void writeq(u64 q, volatile void __iomem *addr)
|
||||
: "memory");
|
||||
}
|
||||
|
||||
|
||||
#define inb inb
|
||||
static inline u8 inb(unsigned long addr)
|
||||
{
|
||||
@@ -264,11 +271,6 @@ static inline void iowrite32_rep(void __iomem *port, const void *buf, unsigned l
|
||||
outsl((unsigned long __force)port, buf, count);
|
||||
}
|
||||
|
||||
#define readb_relaxed(__addr) readb(__addr)
|
||||
#define readw_relaxed(__addr) readw(__addr)
|
||||
#define readl_relaxed(__addr) readl(__addr)
|
||||
#define readq_relaxed(__addr) readq(__addr)
|
||||
|
||||
/* Valid I/O Space regions are anywhere, because each PCI bus supported
|
||||
* can live in an arbitrary area of the physical address range.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user