From: Hirokazu Takata Here is a patch to update ioremap*.c for m32r, taken from "Add __iomem modifier to the return value type of __ioremap() for much stricter type-checking." * arch/m32r/mm/ioremap.c: ditto. - Add __iomem modifier to the return value type of __ioremap() for much stricter type-checking. * arch/m32r/mm/ioremap-nommu.c: ditto. * include/asm-m32r/io.h: - Modified for much stricter type-checking. - Change __inline__ to inline. Signed-off-by: Hirokazu Takata Signed-off-by: Andrew Morton --- 25-akpm/arch/m32r/mm/ioremap-nommu.c | 7 ++--- 25-akpm/arch/m32r/mm/ioremap.c | 22 +++++++++------- 25-akpm/include/asm-m32r/io.h | 47 +++++++++++++++++++++++------------ 3 files changed, 48 insertions(+), 28 deletions(-) diff -puN arch/m32r/mm/ioremap.c~m32r-update-ioremap-routine arch/m32r/mm/ioremap.c --- 25/arch/m32r/mm/ioremap.c~m32r-update-ioremap-routine Thu Sep 30 16:19:46 2004 +++ 25-akpm/arch/m32r/mm/ioremap.c Thu Sep 30 16:19:46 2004 @@ -1,5 +1,5 @@ /* - * linux/arch/m32r/mm/io_remap.c + * linux/arch/m32r/mm/ioremap.c * * Copyright (c) 2001, 2002 Hiroyuki Kondo * @@ -25,8 +25,9 @@ #include #include -static inline void remap_area_pte(pte_t * pte, unsigned long address, unsigned long size, - unsigned long phys_addr, unsigned long flags) +static inline void +remap_area_pte(pte_t * pte, unsigned long address, unsigned long size, + unsigned long phys_addr, unsigned long flags) { unsigned long end; unsigned long pfn; @@ -52,8 +53,9 @@ static inline void remap_area_pte(pte_t } while (address && (address < end)); } -static inline int remap_area_pmd(pmd_t * pmd, unsigned long address, unsigned long size, - unsigned long phys_addr, unsigned long flags) +static inline int +remap_area_pmd(pmd_t * pmd, unsigned long address, unsigned long size, + unsigned long phys_addr, unsigned long flags) { unsigned long end; @@ -75,8 +77,9 @@ static inline int remap_area_pmd(pmd_t * return 0; } -static int remap_area_pages(unsigned long address, unsigned long phys_addr, - unsigned long size, unsigned long flags) +static int +remap_area_pages(unsigned long address, unsigned long phys_addr, + unsigned long size, unsigned long flags) { int error; pgd_t * dir; @@ -122,7 +125,8 @@ static int remap_area_pages(unsigned lon #define IS_LOW512(addr) (!((unsigned long)(addr) & ~0x1fffffffUL)) -void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags) +void __iomem * +__ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags) { void __iomem * addr; struct vm_struct * area; @@ -180,7 +184,7 @@ void __iomem * __ioremap(unsigned long p #define IS_KSEG1(addr) (((unsigned long)(addr) & ~0x1fffffffUL) == KSEG1) -void iounmap(void *addr) +void iounmap(volatile void __iomem *addr) { if (!IS_KSEG1(addr)) vfree((void *) (PAGE_MASK & (unsigned long) addr)); diff -puN arch/m32r/mm/ioremap-nommu.c~m32r-update-ioremap-routine arch/m32r/mm/ioremap-nommu.c --- 25/arch/m32r/mm/ioremap-nommu.c~m32r-update-ioremap-routine Thu Sep 30 16:19:46 2004 +++ 25-akpm/arch/m32r/mm/ioremap-nommu.c Thu Sep 30 16:19:46 2004 @@ -1,5 +1,5 @@ /* - * linux/arch/m32r/mm/io_remap.c + * linux/arch/m32r/mm/ioremap-nommu.c * * Copyright (c) 2001, 2002 Hiroyuki Kondo * @@ -38,14 +38,15 @@ #define IS_LOW512(addr) (!((unsigned long)(addr) & ~0x1fffffffUL)) -void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags) +void __iomem * +__ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags) { return (void *)phys_addr; } #define IS_KSEG1(addr) (((unsigned long)(addr) & ~0x1fffffffUL) == KSEG1) -void iounmap(void *addr) +void iounmap(volatile void __iomem *addr) { } diff -puN include/asm-m32r/io.h~m32r-update-ioremap-routine include/asm-m32r/io.h --- 25/include/asm-m32r/io.h~m32r-update-ioremap-routine Thu Sep 30 16:19:46 2004 +++ 25-akpm/include/asm-m32r/io.h Thu Sep 30 16:19:46 2004 @@ -1,8 +1,8 @@ #ifndef _ASM_M32R_IO_H #define _ASM_M32R_IO_H -/* $Id$ */ - +#include +#include #include /* __va */ #ifdef __KERNEL__ @@ -22,7 +22,7 @@ * this function */ -static __inline__ unsigned long virt_to_phys(volatile void * address) +static inline unsigned long virt_to_phys(volatile void * address) { return __pa(address); } @@ -40,12 +40,13 @@ static __inline__ unsigned long virt_to_ * this function */ -static __inline__ void *phys_to_virt(unsigned long address) +static inline void *phys_to_virt(unsigned long address) { return __va(address); } -extern void * __ioremap(unsigned long offset, unsigned long size, unsigned long flags); +extern void __iomem * +__ioremap(unsigned long offset, unsigned long size, unsigned long flags); /** * ioremap - map bus memory into CPU space @@ -59,12 +60,12 @@ extern void * __ioremap(unsigned long of * address. */ -static __inline__ void * ioremap(unsigned long offset, unsigned long size) +static inline void * ioremap(unsigned long offset, unsigned long size) { return __ioremap(offset, size, 0); } -extern void iounmap(void *addr); +extern void iounmap(volatile void __iomem *addr); #define ioremap_nocache(off,size) ioremap(off,size) /* @@ -95,32 +96,32 @@ extern void _outsl(unsigned int, const v static inline unsigned char _readb(unsigned long addr) { - return *(volatile unsigned char *)addr; + return *(volatile unsigned char __force *)addr; } static inline unsigned short _readw(unsigned long addr) { - return *(volatile unsigned short *)addr; + return *(volatile unsigned short __force *)addr; } static inline unsigned long _readl(unsigned long addr) { - return *(volatile unsigned long *)addr; + return *(volatile unsigned long __force *)addr; } static inline void _writeb(unsigned char b, unsigned long addr) { - *(volatile unsigned char *)addr = b; + *(volatile unsigned char __force *)addr = b; } static inline void _writew(unsigned short w, unsigned long addr) { - *(volatile unsigned short *)addr = w; + *(volatile unsigned short __force *)addr = w; } static inline void _writel(unsigned long l, unsigned long addr) { - *(volatile unsigned long *)addr = l; + *(volatile unsigned long __force *)addr = l; } #define inb _inb @@ -197,9 +198,23 @@ out: return retval; } -#define memset_io(a, b, c) memset((void *)(a), (b), (c)) -#define memcpy_fromio(a, b, c) memcpy((a), (void *)(b), (c)) -#define memcpy_toio(a, b, c) memcpy((void *)(a), (b), (c)) +static inline void +memset_io(volatile void __iomem *addr, unsigned char val, int count) +{ + memset((void __force *) addr, val, count); +} + +static inline void +memcpy_fromio(void *dst, volatile void __iomem *src, int count) +{ + memcpy(dst, (void __force *) src, count); +} + +static inline void +memcpy_toio(volatile void __iomem *dst, const void *src, int count) +{ + memcpy((void __force *) dst, src, count); +} #endif /* __KERNEL__ */ _