aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-arm
diff options
context:
space:
mode:
authorRussell King <rmk@dyn-67.arm.linux.org.uk>2007-05-05 15:59:27 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2007-05-05 15:59:27 -0400
commit3603ab2b62ad8372fc93816b080b370dd55d7cec (patch)
treee9012ae43fe5988c288074ee12fc4a0fc2f6b63a /include/asm-arm
parent0af92befeb4b330c46cce6b520b2cc775cd6931f (diff)
[ARM] mm 10: allow memory type to be specified with ioremap
__ioremap() took a set of page table flags (specifically the cacheable and bufferable bits) to control the mapping type. However, with the advent of ARMv6, this is far too limited. Replace the page table flags with a memory type index, so that the desired attributes can be selected from the mem_type table. Finally, to prevent silent miscompilation due to the differing arguments, rename the __ioremap() and __ioremap_pfn() functions. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'include/asm-arm')
-rw-r--r--include/asm-arm/arch-ixp23xx/io.h4
-rw-r--r--include/asm-arm/arch-ixp4xx/io.h4
-rw-r--r--include/asm-arm/io.h33
-rw-r--r--include/asm-arm/mach/map.h7
4 files changed, 28 insertions, 20 deletions
diff --git a/include/asm-arm/arch-ixp23xx/io.h b/include/asm-arm/arch-ixp23xx/io.h
index 18415a81ac74..66f5bafc315c 100644
--- a/include/asm-arm/arch-ixp23xx/io.h
+++ b/include/asm-arm/arch-ixp23xx/io.h
@@ -23,7 +23,7 @@
23#include <linux/kernel.h> /* For BUG */ 23#include <linux/kernel.h> /* For BUG */
24 24
25static inline void __iomem * 25static inline void __iomem *
26ixp23xx_ioremap(unsigned long addr, unsigned long size, unsigned long flags) 26ixp23xx_ioremap(unsigned long addr, unsigned long size, unsigned int mtype)
27{ 27{
28 if (addr >= IXP23XX_PCI_MEM_START && 28 if (addr >= IXP23XX_PCI_MEM_START &&
29 addr <= IXP23XX_PCI_MEM_START + IXP23XX_PCI_MEM_SIZE) { 29 addr <= IXP23XX_PCI_MEM_START + IXP23XX_PCI_MEM_SIZE) {
@@ -34,7 +34,7 @@ ixp23xx_ioremap(unsigned long addr, unsigned long size, unsigned long flags)
34 ((addr - IXP23XX_PCI_MEM_START) + IXP23XX_PCI_MEM_VIRT); 34 ((addr - IXP23XX_PCI_MEM_START) + IXP23XX_PCI_MEM_VIRT);
35 } 35 }
36 36
37 return __ioremap(addr, size, flags); 37 return __arm_ioremap(addr, size, mtype);
38} 38}
39 39
40static inline void 40static inline void
diff --git a/include/asm-arm/arch-ixp4xx/io.h b/include/asm-arm/arch-ixp4xx/io.h
index a41ba229c564..b27c910adf9d 100644
--- a/include/asm-arm/arch-ixp4xx/io.h
+++ b/include/asm-arm/arch-ixp4xx/io.h
@@ -59,10 +59,10 @@ extern int ixp4xx_pci_write(u32 addr, u32 cmd, u32 data);
59 * fallback to the default. 59 * fallback to the default.
60 */ 60 */
61static inline void __iomem * 61static inline void __iomem *
62__ixp4xx_ioremap(unsigned long addr, size_t size, unsigned long flags) 62__ixp4xx_ioremap(unsigned long addr, size_t size, unsigned int mtype)
63{ 63{
64 if((addr < 0x48000000) || (addr > 0x4fffffff)) 64 if((addr < 0x48000000) || (addr > 0x4fffffff))
65 return __ioremap(addr, size, flags); 65 return __arm_ioremap(addr, size, mtype);
66 66
67 return (void *)addr; 67 return (void *)addr;
68} 68}
diff --git a/include/asm-arm/io.h b/include/asm-arm/io.h
index 5f60b4220906..8261ff9e7955 100644
--- a/include/asm-arm/io.h
+++ b/include/asm-arm/io.h
@@ -56,13 +56,22 @@ extern void __raw_readsl(const void __iomem *addr, void *data, int longlen);
56 56
57/* 57/*
58 * Architecture ioremap implementation. 58 * Architecture ioremap implementation.
59 *
60 * __ioremap takes CPU physical address.
61 *
62 * __ioremap_pfn takes a Page Frame Number and an offset into that page
63 */ 59 */
64extern void __iomem * __ioremap_pfn(unsigned long, unsigned long, size_t, unsigned long); 60#define MT_DEVICE 0
65extern void __iomem * __ioremap(unsigned long, size_t, unsigned long); 61#define MT_DEVICE_NONSHARED 1
62#define MT_DEVICE_CACHED 2
63#define MT_DEVICE_IXP2000 3
64/*
65 * types 4 onwards can be found in asm/mach/map.h and are undefined
66 * for ioremap
67 */
68
69/*
70 * __arm_ioremap takes CPU physical address.
71 * __arm_ioremap_pfn takes a Page Frame Number and an offset into that page
72 */
73extern void __iomem * __arm_ioremap_pfn(unsigned long, unsigned long, size_t, unsigned int);
74extern void __iomem * __arm_ioremap(unsigned long, size_t, unsigned int);
66extern void __iounmap(volatile void __iomem *addr); 75extern void __iounmap(volatile void __iomem *addr);
67 76
68/* 77/*
@@ -203,14 +212,14 @@ extern void _memset_io(volatile void __iomem *, int, size_t);
203 * 212 *
204 */ 213 */
205#ifndef __arch_ioremap 214#ifndef __arch_ioremap
206#define ioremap(cookie,size) __ioremap(cookie,size,0) 215#define ioremap(cookie,size) __arm_ioremap(cookie, size, MT_DEVICE)
207#define ioremap_nocache(cookie,size) __ioremap(cookie,size,0) 216#define ioremap_nocache(cookie,size) __arm_ioremap(cookie, size, MT_DEVICE)
208#define ioremap_cached(cookie,size) __ioremap(cookie,size,L_PTE_CACHEABLE) 217#define ioremap_cached(cookie,size) __arm_ioremap(cookie, size, MT_DEVICE_CACHED)
209#define iounmap(cookie) __iounmap(cookie) 218#define iounmap(cookie) __iounmap(cookie)
210#else 219#else
211#define ioremap(cookie,size) __arch_ioremap((cookie),(size),0) 220#define ioremap(cookie,size) __arch_ioremap((cookie), (size), MT_DEVICE)
212#define ioremap_nocache(cookie,size) __arch_ioremap((cookie),(size),0) 221#define ioremap_nocache(cookie,size) __arch_ioremap((cookie), (size), MT_DEVICE)
213#define ioremap_cached(cookie,size) __arch_ioremap((cookie),(size),L_PTE_CACHEABLE) 222#define ioremap_cached(cookie,size) __arch_ioremap((cookie), (size), MT_DEVICE_CACHED)
214#define iounmap(cookie) __arch_iounmap(cookie) 223#define iounmap(cookie) __arch_iounmap(cookie)
215#endif 224#endif
216 225
diff --git a/include/asm-arm/mach/map.h b/include/asm-arm/mach/map.h
index 8afef40730af..7ef3c8390180 100644
--- a/include/asm-arm/mach/map.h
+++ b/include/asm-arm/mach/map.h
@@ -9,6 +9,8 @@
9 * 9 *
10 * Page table mapping constructs and function prototypes 10 * Page table mapping constructs and function prototypes
11 */ 11 */
12#include <asm/io.h>
13
12struct map_desc { 14struct map_desc {
13 unsigned long virtual; 15 unsigned long virtual;
14 unsigned long pfn; 16 unsigned long pfn;
@@ -16,10 +18,7 @@ struct map_desc {
16 unsigned int type; 18 unsigned int type;
17}; 19};
18 20
19#define MT_DEVICE 0 21/* types 0-3 are defined in asm/io.h */
20#define MT_DEVICE_NONSHARED 1
21#define MT_DEVICE_CACHED 2
22#define MT_DEVICE_IXP2000 3
23#define MT_CACHECLEAN 4 22#define MT_CACHECLEAN 4
24#define MT_MINICLEAN 5 23#define MT_MINICLEAN 5
25#define MT_LOW_VECTORS 6 24#define MT_LOW_VECTORS 6