[ARM/tegra] Add Tegra3 support
[linux-2.6.git] / arch / arm / mach-tegra / io.c
index ea50fe2..35db99f 100644 (file)
@@ -54,6 +54,24 @@ static struct map_desc tegra_io_desc[] __initdata = {
                .length = IO_IRAM_SIZE,
                .type = MT_DEVICE,
        },
+       {
+               .virtual = IO_HOST1X_VIRT,
+               .pfn = __phys_to_pfn(IO_HOST1X_PHYS),
+               .length = IO_HOST1X_SIZE,
+               .type = MT_DEVICE,
+       },
+       {
+               .virtual = IO_USB_VIRT,
+               .pfn = __phys_to_pfn(IO_USB_PHYS),
+               .length = IO_USB_SIZE,
+               .type = MT_DEVICE,
+       },
+       {
+               .virtual = IO_SDMMC_VIRT,
+               .pfn = __phys_to_pfn(IO_SDMMC_PHYS),
+               .length = IO_SDMMC_SIZE,
+               .type = MT_DEVICE,
+       },
 };
 
 void __init tegra_map_common_io(void)
@@ -67,8 +85,20 @@ void __init tegra_map_common_io(void)
 void __iomem *tegra_ioremap(unsigned long p, size_t size, unsigned int type)
 {
        void __iomem *v = IO_ADDRESS(p);
-       if (v == NULL)
+
+       /*
+        * __arm_ioremap fails to set the domain of ioremapped memory
+        * correctly, only use it on physical memory.
+        */
+       if (v == NULL && p < SZ_1G)
                v = __arm_ioremap(p, size, type);
+
+       /*
+        * If the physical address was not physical memory or statically
+        * mapped, there's nothing we can do to map it safely.
+        */
+       BUG_ON(v == NULL);
+
        return v;
 }
 EXPORT_SYMBOL(tegra_ioremap);