]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - arch/arm/mach-davinci/io.c
Merge branch 'copy_user' of git://git.marvell.com/orion into devel
[mv-sheeva.git] / arch / arm / mach-davinci / io.c
index 299515f70b8b05611e920404773a533dfb54ed4d..49912b48b1b0f7a26c2b65729686687f84bb460a 100644 (file)
@@ -9,49 +9,30 @@
  */
 
 #include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/init.h>
 #include <linux/io.h>
 
 #include <asm/tlb.h>
-#include <asm/memory.h>
 
-#include <asm/mach/map.h>
-#include <mach/clock.h>
-
-extern void davinci_check_revision(void);
+#define BETWEEN(p, st, sz)     ((p) >= (st) && (p) < ((st) + (sz)))
+#define XLATE(p, pst, vst)     ((void __iomem *)((p) - (pst) + (vst)))
 
 /*
- * The machine specific code may provide the extra mapping besides the
- * default mapping provided here.
+ * Intercept ioremap() requests for addresses in our fixed mapping regions.
  */
-static struct map_desc davinci_io_desc[] __initdata = {
-       {
-               .virtual        = IO_VIRT,
-               .pfn            = __phys_to_pfn(IO_PHYS),
-               .length         = IO_SIZE,
-               .type           = MT_DEVICE
-       },
-};
-
-void __init davinci_map_common_io(void)
+void __iomem *davinci_ioremap(unsigned long p, size_t size, unsigned int type)
 {
-       iotable_init(davinci_io_desc, ARRAY_SIZE(davinci_io_desc));
+       if (BETWEEN(p, IO_PHYS, IO_SIZE))
+               return XLATE(p, IO_PHYS, IO_VIRT);
 
-       /* Normally devicemaps_init() would flush caches and tlb after
-        * mdesc->map_io(), but we must also do it here because of the CPU
-        * revision check below.
-        */
-       local_flush_tlb_all();
-       flush_cache_all();
-
-       /* We want to check CPU revision early for cpu_is_xxxx() macros.
-        * IO space mapping must be initialized before we can do that.
-        */
-       davinci_check_revision();
+       return __arm_ioremap(p, size, type);
 }
+EXPORT_SYMBOL(davinci_ioremap);
 
-void __init davinci_init_common_hw(void)
+void davinci_iounmap(volatile void __iomem *addr)
 {
-       davinci_clk_init();
+       unsigned long virt = (unsigned long)addr;
+
+       if (virt >= VMALLOC_START && virt < VMALLOC_END)
+               __iounmap(addr);
 }
+EXPORT_SYMBOL(davinci_iounmap);