1313#include <asm/byteorder.h>
1414#include <asm/page.h>
1515
16+ #ifdef CONFIG_ISA_ARCV2
17+ #include <asm/barrier.h>
18+ #define __iormb () rmb()
19+ #define __iowmb () wmb()
20+ #else
21+ #define __iormb () do { } while (0)
22+ #define __iowmb () do { } while (0)
23+ #endif
24+
1625extern void __iomem * ioremap (unsigned long physaddr , unsigned long size );
1726extern void __iomem * ioremap_prot (phys_addr_t offset , unsigned long size ,
1827 unsigned long flags );
@@ -22,6 +31,15 @@ extern void iounmap(const void __iomem *addr);
2231#define ioremap_wc (phy , sz ) ioremap(phy, sz)
2332#define ioremap_wt (phy , sz ) ioremap(phy, sz)
2433
34+ /*
35+ * io{read,write}{16,32}be() macros
36+ */
37+ #define ioread16be (p ) ({ u16 __v = be16_to_cpu((__force __be16)__raw_readw(p)); __iormb(); __v; })
38+ #define ioread32be (p ) ({ u32 __v = be32_to_cpu((__force __be32)__raw_readl(p)); __iormb(); __v; })
39+
40+ #define iowrite16be (v ,p ) ({ __iowmb(); __raw_writew((__force u16)cpu_to_be16(v), p); })
41+ #define iowrite32be (v ,p ) ({ __iowmb(); __raw_writel((__force u32)cpu_to_be32(v), p); })
42+
2543/* Change struct page to physical address */
2644#define page_to_phys (page ) (page_to_pfn(page) << PAGE_SHIFT)
2745
@@ -99,15 +117,6 @@ static inline void __raw_writel(u32 w, volatile void __iomem *addr)
99117
100118}
101119
102- #ifdef CONFIG_ISA_ARCV2
103- #include <asm/barrier.h>
104- #define __iormb () rmb()
105- #define __iowmb () wmb()
106- #else
107- #define __iormb () do { } while (0)
108- #define __iowmb () do { } while (0)
109- #endif
110-
111120/*
112121 * MMIO can also get buffered/optimized in micro-arch, so barriers needed
113122 * Based on ARM model for the typical use case
0 commit comments