Commit | Line | Data |
---|---|---|
7c6337e2 KH |
1 | /* |
2 | * DaVinci I/O mapping code | |
3 | * | |
4 | * Copyright (C) 2005-2006 Texas Instruments | |
5 | * | |
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. | |
9 | */ | |
10 | ||
11 | #include <linux/module.h> | |
fced80c7 | 12 | #include <linux/io.h> |
7c6337e2 KH |
13 | |
14 | #include <asm/tlb.h> | |
bcd6a1c6 | 15 | #include <asm/mach/map.h> |
3e062b07 | 16 | |
bcd6a1c6 | 17 | #include <mach/common.h> |
f5c122da KH |
18 | |
19 | /* | |
20 | * Intercept ioremap() requests for addresses in our fixed mapping regions. | |
21 | */ | |
22 | void __iomem *davinci_ioremap(unsigned long p, size_t size, unsigned int type) | |
23 | { | |
bcd6a1c6 CC |
24 | struct map_desc *desc = davinci_soc_info.io_desc; |
25 | int desc_num = davinci_soc_info.io_desc_num; | |
26 | int i; | |
f5c122da | 27 | |
bcd6a1c6 CC |
28 | for (i = 0; i < desc_num; i++, desc++) { |
29 | unsigned long iophys = __pfn_to_phys(desc->pfn); | |
30 | unsigned long iosize = desc->length; | |
31 | ||
32 | if (p >= iophys && (p + size) <= (iophys + iosize)) | |
33 | return __io(desc->virtual + p - iophys); | |
34 | } | |
35 | ||
36 | return __arm_ioremap_caller(p, size, type, | |
37 | __builtin_return_address(0)); | |
f5c122da KH |
38 | } |
39 | EXPORT_SYMBOL(davinci_ioremap); | |
40 | ||
41 | void davinci_iounmap(volatile void __iomem *addr) | |
3e062b07 | 42 | { |
f5c122da KH |
43 | unsigned long virt = (unsigned long)addr; |
44 | ||
45 | if (virt >= VMALLOC_START && virt < VMALLOC_END) | |
46 | __iounmap(addr); | |
3e062b07 | 47 | } |
f5c122da | 48 | EXPORT_SYMBOL(davinci_iounmap); |