Thread (67 messages) flat view 67 messages, 6 authors, 2012-03-07
STALE5292d REVIEWED: 1 (0M)

1 review trailer.

[PATCH v3 02/30] ARM: provide runtime hook for ioremap/iounmap

From: nico@fluxnic.net (Nicolas Pitre)
Date: 2012-03-05 19:21:47

On Thu, 1 Mar 2012, Rob Herring wrote:
From: Rob Herring <redacted>

We have compile time over-ride of ioremap and iounmap, but an run-time
override is needed for multi-platform builds.

Signed-off-by: Rob Herring <redacted>
Cc: Russell King <redacted>
Acked-by: Nicolas Pitre <redacted>

I was hoping that the number of platform requiring this would have been 
small enough to just leave them with a compile time override and simply 
keep them out of a multi-SOC kernel.  But it looks like even some modern 
architectures require this.

Given that the majority of existing platforms don't need the 
indirection, should we make this indirection conditional on 
CONFIG_NEED_IOREMAP_HOOK and let those who need it select it?  Or maybe 
this isn't performance critical and we just don't care?  In any case I'd 
like to see such reasoning captured in the commit log.
quoted hunk ↗ jump to hunk
---
 arch/arm/include/asm/io.h |    8 ++++++--
 arch/arm/mm/ioremap.c     |    6 ++++++
 2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/arch/arm/include/asm/io.h b/arch/arm/include/asm/io.h
index 9275828..9bf9d00 100644
--- a/arch/arm/include/asm/io.h
+++ b/arch/arm/include/asm/io.h
@@ -264,9 +264,13 @@ extern void _memset_io(volatile void __iomem *, int, size_t);
  * Documentation/io-mapping.txt.
  *
  */
+
+extern void __iomem * (*arch_ioremap)(unsigned long, size_t, unsigned int);
+extern void (*arch_iounmap)(volatile void __iomem *);
+
 #ifndef __arch_ioremap
-#define __arch_ioremap			__arm_ioremap
-#define __arch_iounmap			__iounmap
+#define __arch_ioremap			arch_ioremap
+#define __arch_iounmap			arch_iounmap
 #endif
 
 #define ioremap(cookie,size)		__arch_ioremap((cookie), (size), MT_DEVICE)
diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c
index 80632e8..d164dea 100644
--- a/arch/arm/mm/ioremap.c
+++ b/arch/arm/mm/ioremap.c
@@ -314,6 +314,9 @@ __arm_ioremap(unsigned long phys_addr, size_t size, unsigned int mtype)
 }
 EXPORT_SYMBOL(__arm_ioremap);
 
+void __iomem * (*arch_ioremap)(unsigned long , size_t , unsigned int ) = __arm_ioremap;
+EXPORT_SYMBOL(arch_ioremap);
+
 /*
  * Remap an arbitrary physical address space into the kernel virtual
  * address space as memory. Needed when the kernel wants to execute
@@ -370,3 +373,6 @@ void __iounmap(volatile void __iomem *io_addr)
 	vunmap(addr);
 }
 EXPORT_SYMBOL(__iounmap);
+
+void (*arch_iounmap)(volatile void __iomem *) = __iounmap;
+EXPORT_SYMBOL(arch_iounmap);
-- 
1.7.5.4
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help