aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorRob Herring <rob.herring@calxeda.com>2012-02-29 11:56:15 -0500
committerRob Herring <rob.herring@calxeda.com>2012-03-06 22:23:18 -0500
commit1dfe34ae794c13b11192baac022826f9c53fe377 (patch)
tree7a54775a34316da1c10e8850dc1885091de96922 /arch
parentb12e9ba59c83f7df846602b201b64e4ddf28ccee (diff)
ARM: iop13xx: use runtime ioremap hook
Convert iop13xx platforms to use run-time ioremap hook instead of the compile time hook. The custom ioremap is still needed for 64-bit address handling. Signed-off-by: Rob Herring <rob.herring@calxeda.com> Cc: Russell King <linux@arm.linux.org.uk>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-iop13xx/include/mach/io.h7
-rw-r--r--arch/arm/mach-iop13xx/io.c18
-rw-r--r--arch/arm/mach-iop13xx/iq81340mc.c1
-rw-r--r--arch/arm/mach-iop13xx/iq81340sc.c1
4 files changed, 12 insertions, 15 deletions
diff --git a/arch/arm/mach-iop13xx/include/mach/io.h b/arch/arm/mach-iop13xx/include/mach/io.h
index dffb234bb967..2a69fc0c7223 100644
--- a/arch/arm/mach-iop13xx/include/mach/io.h
+++ b/arch/arm/mach-iop13xx/include/mach/io.h
@@ -26,16 +26,9 @@
26#define __mem_isa(a) (a) 26#define __mem_isa(a) (a)
27 27
28extern void __iomem * __iop13xx_io(unsigned long io_addr); 28extern void __iomem * __iop13xx_io(unsigned long io_addr);
29extern void __iomem *__iop13xx_ioremap(unsigned long cookie, size_t size,
30 unsigned int mtype);
31extern void __iop13xx_iounmap(void __iomem *addr);
32
33extern u32 iop13xx_atue_mem_base; 29extern u32 iop13xx_atue_mem_base;
34extern u32 iop13xx_atux_mem_base; 30extern u32 iop13xx_atux_mem_base;
35extern size_t iop13xx_atue_mem_size; 31extern size_t iop13xx_atue_mem_size;
36extern size_t iop13xx_atux_mem_size; 32extern size_t iop13xx_atux_mem_size;
37 33
38#define __arch_ioremap __iop13xx_ioremap
39#define __arch_iounmap __iop13xx_iounmap
40
41#endif 34#endif
diff --git a/arch/arm/mach-iop13xx/io.c b/arch/arm/mach-iop13xx/io.c
index 48642e66c566..6dd5b4924107 100644
--- a/arch/arm/mach-iop13xx/io.c
+++ b/arch/arm/mach-iop13xx/io.c
@@ -40,8 +40,8 @@ void * __iomem __iop13xx_io(unsigned long io_addr)
40} 40}
41EXPORT_SYMBOL(__iop13xx_io); 41EXPORT_SYMBOL(__iop13xx_io);
42 42
43void * __iomem __iop13xx_ioremap(unsigned long cookie, size_t size, 43static void __iomem *__iop13xx_ioremap_caller(unsigned long cookie,
44 unsigned int mtype) 44 size_t size, unsigned int mtype, void *caller)
45{ 45{
46 void __iomem * retval; 46 void __iomem * retval;
47 47
@@ -76,17 +76,14 @@ void * __iomem __iop13xx_ioremap(unsigned long cookie, size_t size,
76 break; 76 break;
77 default: 77 default:
78 retval = __arm_ioremap_caller(cookie, size, mtype, 78 retval = __arm_ioremap_caller(cookie, size, mtype,
79 __builtin_return_address(0)); 79 caller);
80 } 80 }
81 81
82 return retval; 82 return retval;
83} 83}
84EXPORT_SYMBOL(__iop13xx_ioremap);
85 84
86void __iop13xx_iounmap(void __iomem *addr) 85static void __iop13xx_iounmap(volatile void __iomem *addr)
87{ 86{
88 extern void __iounmap(volatile void __iomem *addr);
89
90 if (iop13xx_atue_mem_base) 87 if (iop13xx_atue_mem_base)
91 if (addr >= (void __iomem *) iop13xx_atue_mem_base && 88 if (addr >= (void __iomem *) iop13xx_atue_mem_base &&
92 addr < (void __iomem *) (iop13xx_atue_mem_base + 89 addr < (void __iomem *) (iop13xx_atue_mem_base +
@@ -110,4 +107,9 @@ void __iop13xx_iounmap(void __iomem *addr)
110skip: 107skip:
111 return; 108 return;
112} 109}
113EXPORT_SYMBOL(__iop13xx_iounmap); 110
111void __init iop13xx_init_early(void)
112{
113 arch_ioremap_caller = __iop13xx_ioremap_caller;
114 arch_iounmap = __iop13xx_iounmap;
115}
diff --git a/arch/arm/mach-iop13xx/iq81340mc.c b/arch/arm/mach-iop13xx/iq81340mc.c
index abaee8833588..5c96b73e6964 100644
--- a/arch/arm/mach-iop13xx/iq81340mc.c
+++ b/arch/arm/mach-iop13xx/iq81340mc.c
@@ -92,6 +92,7 @@ static struct sys_timer iq81340mc_timer = {
92MACHINE_START(IQ81340MC, "Intel IQ81340MC") 92MACHINE_START(IQ81340MC, "Intel IQ81340MC")
93 /* Maintainer: Dan Williams <dan.j.williams@intel.com> */ 93 /* Maintainer: Dan Williams <dan.j.williams@intel.com> */
94 .atag_offset = 0x100, 94 .atag_offset = 0x100,
95 .init_early = iop13xx_init_early,
95 .map_io = iop13xx_map_io, 96 .map_io = iop13xx_map_io,
96 .init_irq = iop13xx_init_irq, 97 .init_irq = iop13xx_init_irq,
97 .timer = &iq81340mc_timer, 98 .timer = &iq81340mc_timer,
diff --git a/arch/arm/mach-iop13xx/iq81340sc.c b/arch/arm/mach-iop13xx/iq81340sc.c
index 690916a09dc6..aa4dd750135a 100644
--- a/arch/arm/mach-iop13xx/iq81340sc.c
+++ b/arch/arm/mach-iop13xx/iq81340sc.c
@@ -94,6 +94,7 @@ static struct sys_timer iq81340sc_timer = {
94MACHINE_START(IQ81340SC, "Intel IQ81340SC") 94MACHINE_START(IQ81340SC, "Intel IQ81340SC")
95 /* Maintainer: Dan Williams <dan.j.williams@intel.com> */ 95 /* Maintainer: Dan Williams <dan.j.williams@intel.com> */
96 .atag_offset = 0x100, 96 .atag_offset = 0x100,
97 .init_early = iop13xx_init_early,
97 .map_io = iop13xx_map_io, 98 .map_io = iop13xx_map_io,
98 .init_irq = iop13xx_init_irq, 99 .init_irq = iop13xx_init_irq,
99 .timer = &iq81340sc_timer, 100 .timer = &iq81340sc_timer,