Subject: [PATCH] ARM: ixp4xx: Add "ask" handler for timer interrupts

From: [email-masked] (Arnd Bergmann)
Date: Mon, 3 Dec 2012 23:40:10 +0000

On Sunday 02 December 2012, Alexander Shiyan wrote:
> > > > -#define IXP4XX_EXP_REG(x) ((volatile u32 __iomem *)(IXP4XX_EXP_CFG_BASE_VIRT+(x)))
> > > > +#define IXP4XX_EXP_REG(x) (IXP4XX_EXP_CFG_BASE_VIRT+(x))
> > > Modify this to:
> > > #define IXP4XX_EXP_REG(x) IOMEM(IXP4XX_EXP_CFG_BASE_VIRT+(x))
> > > to avoid compiler warnings.
> > > 
> > 
> > Hmm, not sure what went wrong here. Actually the definition of 
> > IXP4XX_EXP_CFG_BASE_VIRT itself should use the IOMEM() macro, like
> > all the other IXP4XX_*_BASE_VIRT do.
> 
> But without this is produce warnings:
>   CC      arch/arm/common/dmabounce.o
> In file included from arch/arm/mach-ixp4xx/include/mach/hardware.h:30,
>                  from arch/arm/mach-ixp4xx/include/mach/io.h:18,
>                  from /home/git/linux-next/arch/arm/include/asm/io.h:180,
>                  from include/linux/scatterlist.h:10,
>                  from include/linux/dma-mapping.h:9,
>                  from arch/arm/common/dmabounce.c:30:
> arch/arm/mach-ixp4xx/include/mach/cpu.h: In function 'ixp4xx_read_feature_bits':
> arch/arm/mach-ixp4xx/include/mach/cpu.h:41: warning: passing argument 1 of '__raw_readl' makes pointer from integer without a cast
> arch/arm/mach-ixp4xx/include/mach/cpu.h: In function 'ixp4xx_write_feature_bits':
> arch/arm/mach-ixp4xx/include/mach/cpu.h:55: warning: passing argument 2 of '__raw_writel' makes pointer from integer without a cast 
> 

I understand what the problem is, my point was that a better solution is to do

diff --git a/arch/arm/mach-ixp4xx/include/mach/ixp4xx-regs.h b/arch/arm/mach-ixp4xx/include/mach/ixp4xx-regs.h
index c5bae9c..daf5c4e 100644
--- a/arch/arm/mach-ixp4xx/include/mach/ixp4xx-regs.h
+++ b/arch/arm/mach-ixp4xx/include/mach/ixp4xx-regs.h
@@ -65,7 +65,7 @@
  * Expansion BUS Configuration registers
  */
 #define IXP4XX_EXP_CFG_BASE_PHYS	0xC4000000
-#define IXP4XX_EXP_CFG_BASE_VIRT	0xFEF14000
+#define IXP4XX_EXP_CFG_BASE_VIRT	IOMEM(0xFEF14000)
 #define IXP4XX_EXP_CFG_REGION_SIZE	0x00001000
 
 #define IXP4XX_EXP_CS0_OFFSET	0x00

instead of your suggested fix, because that matches how all the other _VIRT macros in that
file are defined. I found now that it was correct until recently, but b7b23db72f accidentally
broke it while fixing the MMIO location.

	Arnd