2 * DaVinci I/O mapping code
4 * Copyright (C) 2005-2006 Texas Instruments
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
11 #include <linux/module.h>
12 #include <linux/kernel.h>
13 #include <linux/init.h>
17 #include <asm/memory.h>
19 #include <asm/mach/map.h>
20 #include <mach/clock.h>
22 extern void davinci_check_revision(void);
25 * The machine specific code may provide the extra mapping besides the
26 * default mapping provided here.
28 static struct map_desc davinci_io_desc[] __initdata = {
31 .pfn = __phys_to_pfn(IO_PHYS),
37 void __init davinci_map_common_io(void)
39 iotable_init(davinci_io_desc, ARRAY_SIZE(davinci_io_desc));
41 /* Normally devicemaps_init() would flush caches and tlb after
42 * mdesc->map_io(), but we must also do it here because of the CPU
43 * revision check below.
45 local_flush_tlb_all();
48 /* We want to check CPU revision early for cpu_is_xxxx() macros.
49 * IO space mapping must be initialized before we can do that.
51 davinci_check_revision();
54 #define BETWEEN(p, st, sz) ((p) >= (st) && (p) < ((st) + (sz)))
55 #define XLATE(p, pst, vst) ((void __iomem *)((p) - (pst) + (vst)))
58 * Intercept ioremap() requests for addresses in our fixed mapping regions.
60 void __iomem *davinci_ioremap(unsigned long p, size_t size, unsigned int type)
62 if (BETWEEN(p, IO_PHYS, IO_SIZE))
63 return XLATE(p, IO_PHYS, IO_VIRT);
65 return __arm_ioremap(p, size, type);
67 EXPORT_SYMBOL(davinci_ioremap);
69 void davinci_iounmap(volatile void __iomem *addr)
71 unsigned long virt = (unsigned long)addr;
73 if (virt >= VMALLOC_START && virt < VMALLOC_END)
76 EXPORT_SYMBOL(davinci_iounmap);