ARM: ux500: avoid warning in ux500_read_asicid
authorArnd Bergmann <arnd@arndb.de>
Fri, 31 May 2013 20:47:04 +0000 (22:47 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Tue, 4 Jun 2013 09:21:58 +0000 (11:21 +0200)
phys_addr_t may be 64 bit, which causes this harmless warning
in ux500_read_asicid:

arch/arm/mach-ux500/id.c: In function 'ux500_read_asicid':
arch/arm/include/asm/io.h:159:19: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
 #define IOMEM(x) ((void __force __iomem *)(x))
                   ^
arch/arm/mach-ux500/id.c:40:9: note: in expansion of macro 'readl'
  return readl(IOMEM(UX500_VIRT_ROM + (addr & 0xfff)));

We can solve this in a nicer way by making UX500_VIRT_ROM have a proper
type to start with and calculating the address using pointer arithmetic.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
arch/arm/mach-ux500/db8500-regs.h
arch/arm/mach-ux500/id.c

index 1055c54caf787843dd23ba57c043cd4bb4a7c8a6..27399553c841aa9151fa97a019d52ef53f2c502b 100644 (file)
 #define U8500_IO_VIRTUAL       0xf0000000
 #define U8500_IO_PHYSICAL      0xa0000000
 /* This is where we map in the ROM to check ASIC IDs */
-#define UX500_VIRT_ROM         0xf0000000
+#define UX500_VIRT_ROM         IOMEM(0xf0000000)
 
 /* This macro is used in assembly, so no cast */
 #define IO_ADDRESS(x)           \
index 0d33d1a0695593c0d0acbcabdc343c65000f8b59..392f2fdb37d05fbba89ac4517d9a4ee1ac7c4857 100644 (file)
 
 struct dbx500_asic_id dbx500_id;
 
-static unsigned int ux500_read_asicid(phys_addr_t addr)
+static unsigned int __init ux500_read_asicid(phys_addr_t addr)
 {
        phys_addr_t base = addr & ~0xfff;
        struct map_desc desc = {
-               .virtual        = UX500_VIRT_ROM,
+               .virtual        = (unsigned long)UX500_VIRT_ROM,
                .pfn            = __phys_to_pfn(base),
                .length         = SZ_16K,
                .type           = MT_DEVICE,
@@ -37,7 +37,7 @@ static unsigned int ux500_read_asicid(phys_addr_t addr)
        local_flush_tlb_all();
        flush_cache_all();
 
-       return readl(IOMEM(UX500_VIRT_ROM + (addr & 0xfff)));
+       return readl(UX500_VIRT_ROM + (addr & 0xfff));
 }
 
 static void ux500_print_soc_info(unsigned int asicid)