ARM: tegra: annotate IO_*_VIRT pointers
authorOlof Johansson <olof@lixom.net>
Mon, 10 Oct 2011 04:05:44 +0000 (21:05 -0700)
committerOlof Johansson <olof@lixom.net>
Thu, 13 Oct 2011 21:07:38 +0000 (14:07 -0700)
Provide __iomem annotation for IO_*_VIRT pointers, which will propagate
up through IO_TO_VIRT(). Also fixes a 0 to NULL conversion of the base
case to silence sparse.

Unfortunately map_desc takes an unsigned long for the pointer instead of
a void __iomem *. For now, cast explicitly for those cases.

v2: change define to use IOMEM() like many other mach platforms per
comment from Russell.

Signed-off-by: Olof Johansson <olof@lixom.net>
Acked-by: Stephen Warren <swarren@nvidia.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
arch/arm/mach-tegra/include/mach/io.h
arch/arm/mach-tegra/io.c

index 4cea223..35a011f 100644 (file)
  *
  */
 
+#ifdef __ASSEMBLY__
+#define IOMEM(x)       (x)
+#else
+#define IOMEM(x)       ((void __force __iomem *)(x))
+#endif
+
 #define IO_IRAM_PHYS   0x40000000
-#define IO_IRAM_VIRT   0xFE400000
+#define IO_IRAM_VIRT   IOMEM(0xFE400000)
 #define IO_IRAM_SIZE   SZ_256K
 
 #define IO_CPU_PHYS     0x50040000
-#define IO_CPU_VIRT     0xFE000000
+#define IO_CPU_VIRT     IOMEM(0xFE000000)
 #define IO_CPU_SIZE    SZ_16K
 
 #define IO_PPSB_PHYS   0x60000000
-#define IO_PPSB_VIRT   0xFE200000
+#define IO_PPSB_VIRT   IOMEM(0xFE200000)
 #define IO_PPSB_SIZE   SZ_1M
 
 #define IO_APB_PHYS    0x70000000
-#define IO_APB_VIRT    0xFE300000
+#define IO_APB_VIRT    IOMEM(0xFE300000)
 #define IO_APB_SIZE    SZ_1M
 
 #define IO_TO_VIRT_BETWEEN(p, st, sz)  ((p) >= (st) && (p) < ((st) + (sz)))
@@ -61,7 +67,7 @@
                IO_TO_VIRT_XLATE((n), IO_CPU_PHYS, IO_CPU_VIRT) :       \
        IO_TO_VIRT_BETWEEN((n), IO_IRAM_PHYS, IO_IRAM_SIZE) ?           \
                IO_TO_VIRT_XLATE((n), IO_IRAM_PHYS, IO_IRAM_VIRT) :     \
-       0)
+       NULL)
 
 #ifndef __ASSEMBLER__
 
@@ -71,7 +77,7 @@
 void __iomem *tegra_ioremap(unsigned long phys, size_t size, unsigned int type);
 void tegra_iounmap(volatile void __iomem *addr);
 
-#define IO_ADDRESS(n) ((void __iomem *) IO_TO_VIRT(n))
+#define IO_ADDRESS(n) (IO_TO_VIRT(n))
 
 #ifdef CONFIG_TEGRA_PCI
 extern void __iomem *tegra_pcie_io_base;
index ea50fe2..5489f8b 100644 (file)
 
 static struct map_desc tegra_io_desc[] __initdata = {
        {
-               .virtual = IO_PPSB_VIRT,
+               .virtual = (unsigned long)IO_PPSB_VIRT,
                .pfn = __phys_to_pfn(IO_PPSB_PHYS),
                .length = IO_PPSB_SIZE,
                .type = MT_DEVICE,
        },
        {
-               .virtual = IO_APB_VIRT,
+               .virtual = (unsigned long)IO_APB_VIRT,
                .pfn = __phys_to_pfn(IO_APB_PHYS),
                .length = IO_APB_SIZE,
                .type = MT_DEVICE,
        },
        {
-               .virtual = IO_CPU_VIRT,
+               .virtual = (unsigned long)IO_CPU_VIRT,
                .pfn = __phys_to_pfn(IO_CPU_PHYS),
                .length = IO_CPU_SIZE,
                .type = MT_DEVICE,
        },
        {
-               .virtual = IO_IRAM_VIRT,
+               .virtual = (unsigned long)IO_IRAM_VIRT,
                .pfn = __phys_to_pfn(IO_IRAM_PHYS),
                .length = IO_IRAM_SIZE,
                .type = MT_DEVICE,