提交 3f4cd389 编写于 作者: A Al Viro 提交者: Linus Torvalds

[PATCH] frv: basic __iomem annotations

Add annotations to the FRV I/O handling functions for sparse.
Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
Signed-off-by: NDavid Howells <dhowells@redhat.com>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 a8a77573
...@@ -31,15 +31,15 @@ ...@@ -31,15 +31,15 @@
* Map some physical address range into the kernel address space. * Map some physical address range into the kernel address space.
*/ */
void *__ioremap(unsigned long physaddr, unsigned long size, int cacheflag) void __iomem *__ioremap(unsigned long physaddr, unsigned long size, int cacheflag)
{ {
return (void *)physaddr; return (void __iomem *)physaddr;
} }
/* /*
* Unmap a ioremap()ed region again * Unmap a ioremap()ed region again
*/ */
void iounmap(void *addr) void iounmap(void volatile __iomem *addr)
{ {
} }
......
...@@ -40,13 +40,13 @@ static inline unsigned long _swapl(unsigned long v) ...@@ -40,13 +40,13 @@ static inline unsigned long _swapl(unsigned long v)
//#define __iormb() asm volatile("membar") //#define __iormb() asm volatile("membar")
//#define __iowmb() asm volatile("membar") //#define __iowmb() asm volatile("membar")
#define __raw_readb(addr) __builtin_read8((void *) (addr)) #define __raw_readb __builtin_read8
#define __raw_readw(addr) __builtin_read16((void *) (addr)) #define __raw_readw __builtin_read16
#define __raw_readl(addr) __builtin_read32((void *) (addr)) #define __raw_readl __builtin_read32
#define __raw_writeb(datum, addr) __builtin_write8((void *) (addr), datum) #define __raw_writeb(datum, addr) __builtin_write8(addr, datum)
#define __raw_writew(datum, addr) __builtin_write16((void *) (addr), datum) #define __raw_writew(datum, addr) __builtin_write16(addr, datum)
#define __raw_writel(datum, addr) __builtin_write32((void *) (addr), datum) #define __raw_writel(datum, addr) __builtin_write32(addr, datum)
static inline void io_outsb(unsigned int addr, const void *buf, int len) static inline void io_outsb(unsigned int addr, const void *buf, int len)
{ {
...@@ -128,12 +128,12 @@ static inline void memcpy_toio(volatile void __iomem *dst, const void *src, int ...@@ -128,12 +128,12 @@ static inline void memcpy_toio(volatile void __iomem *dst, const void *src, int
static inline uint8_t inb(unsigned long addr) static inline uint8_t inb(unsigned long addr)
{ {
return __builtin_read8((void *)addr); return __builtin_read8((void __iomem *)addr);
} }
static inline uint16_t inw(unsigned long addr) static inline uint16_t inw(unsigned long addr)
{ {
uint16_t ret = __builtin_read16((void *)addr); uint16_t ret = __builtin_read16((void __iomem *)addr);
if (__is_PCI_IO(addr)) if (__is_PCI_IO(addr))
ret = _swapw(ret); ret = _swapw(ret);
...@@ -143,7 +143,7 @@ static inline uint16_t inw(unsigned long addr) ...@@ -143,7 +143,7 @@ static inline uint16_t inw(unsigned long addr)
static inline uint32_t inl(unsigned long addr) static inline uint32_t inl(unsigned long addr)
{ {
uint32_t ret = __builtin_read32((void *)addr); uint32_t ret = __builtin_read32((void __iomem *)addr);
if (__is_PCI_IO(addr)) if (__is_PCI_IO(addr))
ret = _swapl(ret); ret = _swapl(ret);
...@@ -153,21 +153,21 @@ static inline uint32_t inl(unsigned long addr) ...@@ -153,21 +153,21 @@ static inline uint32_t inl(unsigned long addr)
static inline void outb(uint8_t datum, unsigned long addr) static inline void outb(uint8_t datum, unsigned long addr)
{ {
__builtin_write8((void *)addr, datum); __builtin_write8((void __iomem *)addr, datum);
} }
static inline void outw(uint16_t datum, unsigned long addr) static inline void outw(uint16_t datum, unsigned long addr)
{ {
if (__is_PCI_IO(addr)) if (__is_PCI_IO(addr))
datum = _swapw(datum); datum = _swapw(datum);
__builtin_write16((void *)addr, datum); __builtin_write16((void __iomem *)addr, datum);
} }
static inline void outl(uint32_t datum, unsigned long addr) static inline void outl(uint32_t datum, unsigned long addr)
{ {
if (__is_PCI_IO(addr)) if (__is_PCI_IO(addr))
datum = _swapl(datum); datum = _swapl(datum);
__builtin_write32((void *)addr, datum); __builtin_write32((void __iomem *)addr, datum);
} }
#define inb_p(addr) inb(addr) #define inb_p(addr) inb(addr)
...@@ -189,12 +189,12 @@ static inline void outl(uint32_t datum, unsigned long addr) ...@@ -189,12 +189,12 @@ static inline void outl(uint32_t datum, unsigned long addr)
static inline uint8_t readb(const volatile void __iomem *addr) static inline uint8_t readb(const volatile void __iomem *addr)
{ {
return __builtin_read8((volatile uint8_t __force *) addr); return __builtin_read8((__force void volatile __iomem *) addr);
} }
static inline uint16_t readw(const volatile void __iomem *addr) static inline uint16_t readw(const volatile void __iomem *addr)
{ {
uint16_t ret = __builtin_read16((volatile uint16_t __force *)addr); uint16_t ret = __builtin_read16((__force void volatile __iomem *)addr);
if (__is_PCI_MEM(addr)) if (__is_PCI_MEM(addr))
ret = _swapw(ret); ret = _swapw(ret);
...@@ -203,7 +203,7 @@ static inline uint16_t readw(const volatile void __iomem *addr) ...@@ -203,7 +203,7 @@ static inline uint16_t readw(const volatile void __iomem *addr)
static inline uint32_t readl(const volatile void __iomem *addr) static inline uint32_t readl(const volatile void __iomem *addr)
{ {
uint32_t ret = __builtin_read32((volatile uint32_t __force *)addr); uint32_t ret = __builtin_read32((__force void volatile __iomem *)addr);
if (__is_PCI_MEM(addr)) if (__is_PCI_MEM(addr))
ret = _swapl(ret); ret = _swapl(ret);
...@@ -217,7 +217,7 @@ static inline uint32_t readl(const volatile void __iomem *addr) ...@@ -217,7 +217,7 @@ static inline uint32_t readl(const volatile void __iomem *addr)
static inline void writeb(uint8_t datum, volatile void __iomem *addr) static inline void writeb(uint8_t datum, volatile void __iomem *addr)
{ {
__builtin_write8((volatile uint8_t __force *) addr, datum); __builtin_write8(addr, datum);
if (__is_PCI_MEM(addr)) if (__is_PCI_MEM(addr))
__flush_PCI_writes(); __flush_PCI_writes();
} }
...@@ -227,7 +227,7 @@ static inline void writew(uint16_t datum, volatile void __iomem *addr) ...@@ -227,7 +227,7 @@ static inline void writew(uint16_t datum, volatile void __iomem *addr)
if (__is_PCI_MEM(addr)) if (__is_PCI_MEM(addr))
datum = _swapw(datum); datum = _swapw(datum);
__builtin_write16((volatile uint16_t __force *) addr, datum); __builtin_write16(addr, datum);
if (__is_PCI_MEM(addr)) if (__is_PCI_MEM(addr))
__flush_PCI_writes(); __flush_PCI_writes();
} }
...@@ -237,7 +237,7 @@ static inline void writel(uint32_t datum, volatile void __iomem *addr) ...@@ -237,7 +237,7 @@ static inline void writel(uint32_t datum, volatile void __iomem *addr)
if (__is_PCI_MEM(addr)) if (__is_PCI_MEM(addr))
datum = _swapl(datum); datum = _swapl(datum);
__builtin_write32((volatile uint32_t __force *) addr, datum); __builtin_write32(addr, datum);
if (__is_PCI_MEM(addr)) if (__is_PCI_MEM(addr))
__flush_PCI_writes(); __flush_PCI_writes();
} }
...@@ -271,7 +271,7 @@ static inline void __iomem *ioremap_fullcache(unsigned long physaddr, unsigned l ...@@ -271,7 +271,7 @@ static inline void __iomem *ioremap_fullcache(unsigned long physaddr, unsigned l
return __ioremap(physaddr, size, IOMAP_FULL_CACHING); return __ioremap(physaddr, size, IOMAP_FULL_CACHING);
} }
extern void iounmap(void __iomem *addr); extern void iounmap(void volatile __iomem *addr);
static inline void __iomem *ioport_map(unsigned long port, unsigned int nr) static inline void __iomem *ioport_map(unsigned long port, unsigned int nr)
{ {
......
...@@ -16,6 +16,17 @@ ...@@ -16,6 +16,17 @@
#include <asm/sections.h> #include <asm/sections.h>
#include <asm/mem-layout.h> #include <asm/mem-layout.h>
#ifndef __ASSEMBLY__
/* gcc builtins, annotated */
unsigned long __builtin_read8(volatile void __iomem *);
unsigned long __builtin_read16(volatile void __iomem *);
unsigned long __builtin_read32(volatile void __iomem *);
void __builtin_write8(volatile void __iomem *, unsigned char);
void __builtin_write16(volatile void __iomem *, unsigned short);
void __builtin_write32(volatile void __iomem *, unsigned long);
#endif
#define __region_IO KERNEL_IO_START /* the region from 0xe0000000 to 0xffffffff has suitable #define __region_IO KERNEL_IO_START /* the region from 0xe0000000 to 0xffffffff has suitable
* protection laid over the top for use in memory-mapped * protection laid over the top for use in memory-mapped
* I/O * I/O
...@@ -59,7 +70,7 @@ ...@@ -59,7 +70,7 @@
#define __region_PCI_MEM (__region_CS2 + 0x08000000UL) #define __region_PCI_MEM (__region_CS2 + 0x08000000UL)
#define __flush_PCI_writes() \ #define __flush_PCI_writes() \
do { \ do { \
__builtin_write8((volatile void *) __region_PCI_MEM, 0); \ __builtin_write8((volatile void __iomem *) __region_PCI_MEM, 0); \
} while(0) } while(0)
#define __is_PCI_IO(addr) \ #define __is_PCI_IO(addr) \
...@@ -83,15 +94,15 @@ extern int __nongprelbss mb93090_mb00_detected; ...@@ -83,15 +94,15 @@ extern int __nongprelbss mb93090_mb00_detected;
#define __set_LEDS(X) \ #define __set_LEDS(X) \
do { \ do { \
if (mb93090_mb00_detected) \ if (mb93090_mb00_detected) \
__builtin_write32((void *) __addr_LEDS(), ~(X)); \ __builtin_write32((void __iomem *) __addr_LEDS(), ~(X)); \
} while (0) } while (0)
#else #else
#define __set_LEDS(X) #define __set_LEDS(X)
#endif #endif
#define __addr_LCD() (__region_CS2 + 0x01200008UL) #define __addr_LCD() (__region_CS2 + 0x01200008UL)
#define __get_LCD(B) __builtin_read32((volatile void *) (B)) #define __get_LCD(B) __builtin_read32((volatile void __iomem *) (B))
#define __set_LCD(B,X) __builtin_write32((volatile void *) (B), (X)) #define __set_LCD(B,X) __builtin_write32((volatile void __iomem *) (B), (X))
#define LCD_D 0x000000ff /* LCD data bus */ #define LCD_D 0x000000ff /* LCD data bus */
#define LCD_RW 0x00000100 /* LCD R/W signal */ #define LCD_RW 0x00000100 /* LCD R/W signal */
...@@ -161,11 +172,11 @@ do { \ ...@@ -161,11 +172,11 @@ do { \
#define __get_CLKIN() 66000000UL #define __get_CLKIN() 66000000UL
#define __addr_LEDS() (__region_CS2 + 0x00000023UL) #define __addr_LEDS() (__region_CS2 + 0x00000023UL)
#define __set_LEDS(X) __builtin_write8((volatile void *) __addr_LEDS(), (X)) #define __set_LEDS(X) __builtin_write8((volatile void __iomem *) __addr_LEDS(), (X))
#define __addr_FPGATR() (__region_CS2 + 0x00000030UL) #define __addr_FPGATR() (__region_CS2 + 0x00000030UL)
#define __set_FPGATR(X) __builtin_write32((volatile void *) __addr_FPGATR(), (X)) #define __set_FPGATR(X) __builtin_write32((volatile void __iomem *) __addr_FPGATR(), (X))
#define __get_FPGATR() __builtin_read32((volatile void *) __addr_FPGATR()) #define __get_FPGATR() __builtin_read32((volatile void __iomem *) __addr_FPGATR())
#define MB93093_FPGA_FPGATR_AUDIO_CLK 0x00000003 #define MB93093_FPGA_FPGATR_AUDIO_CLK 0x00000003
...@@ -180,7 +191,7 @@ do { \ ...@@ -180,7 +191,7 @@ do { \
#define MB93093_FPGA_SWR_PUSHSWMASK (0x1F<<26) #define MB93093_FPGA_SWR_PUSHSWMASK (0x1F<<26)
#define MB93093_FPGA_SWR_PUSHSW4 (1<<29) #define MB93093_FPGA_SWR_PUSHSW4 (1<<29)
#define __addr_FPGA_SWR ((volatile void *)(__region_CS2 + 0x28UL)) #define __addr_FPGA_SWR ((volatile void __iomem *)(__region_CS2 + 0x28UL))
#define __get_FPGA_PUSHSW1_5() (__builtin_read32(__addr_FPGA_SWR) & MB93093_FPGA_SWR_PUSHSWMASK) #define __get_FPGA_PUSHSW1_5() (__builtin_read32(__addr_FPGA_SWR) & MB93093_FPGA_SWR_PUSHSWMASK)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册