Skip to contentSkip to conversation

ARM: ux500: avoid warning in ux500_read_asicid

PATCH New Arnd Bergmann 2 participants 3 messages May 31, 2013 – Jun 4, 2013

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ARM: ux500: avoid warning in ux500_read_asicid

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.

arch/arm/mach-ux500/db8500-regs.h +1 -1
index b2d7a0b..bb4cc41 100644
@@ -184,7 +184,7 @@
 #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)           \
arch/arm/mach-ux500/id.c +3 -3
index 0d33d1a..392f2fd 100644
@@ -21,11 +21,11 @@
 
 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)
#1 lore raw

PATCH 1/1 ARM: ux500: avoid warning in ux500_read_asicid

Quoted 7 lines · Arnd Bergmann

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))
                   ^
Quoted 8 lines

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.

Patch applied to ux500-core for v3.11, as it doesn't seem to be a dangerous regression.

You'll get this back by pull request soon-ish.

Yours,
Linus Walleij

#2 lore raw

PATCH 1/1 ARM: ux500: avoid warning in ux500_read_asicid

Quoted 10 lines · On Tuesday 04 June 2013 11:23:48 Linus Walleij wrote:
Quoted 3 lines · Arnd Bergmann

phys_addr_t may be 64 bit, which causes this harmless warning in ux500_read_asicid:

Patch applied to ux500-core for v3.11, as it doesn't seem to be a dangerous regression.

You'll get this back by pull request soon-ish.

Ok, thanks!

Arnd