Thread (15 messages) 15 messages, 8 authors, 2013-06-23
STALE4765d

[PATCH] ARM: optimize memset_io()/memcpy_fromio()/memcpy_toio()

From: Russell King - ARM Linux <hidden>
Date: 2013-06-13 11:05:02

On Tue, Jun 11, 2013 at 08:16:18PM +0200, Dirk Behme wrote:
On 05.06.2013 08:02, Dirk Behme wrote:
quoted
On 28.09.2012 00:02, Russell King wrote:
quoted
If we are building for a LE platform, and we haven't overriden the
MMIO ops, then we can optimize the mem*io operations using the
standard string functions.

Signed-off-by: Russell King <redacted>
---
  arch/arm/include/asm/io.h |   25 +++++++++++++++++++++++++
  1 files changed, 25 insertions(+), 0 deletions(-)
diff --git a/arch/arm/include/asm/io.h b/arch/arm/include/asm/io.h
index 815c669..ed0577e 100644
--- a/arch/arm/include/asm/io.h
+++ b/arch/arm/include/asm/io.h
@@ -23,6 +23,7 @@

  #ifdef __KERNEL__

+#include <linux/string.h>
  #include <linux/types.h>
  #include <asm/byteorder.h>
  #include <asm/memory.h>
@@ -249,9 +250,33 @@ extern void _memset_io(volatile void __iomem *,
int, size_t);
  #define writesw(p,d,l)        __raw_writesw(p,d,l)
  #define writesl(p,d,l)        __raw_writesl(p,d,l)

+#ifndef __ARMBE__
+static inline void memset_io(volatile void __iomem *dst, unsigned c,
+    size_t count)
+{
+    memset((void __force *)dst, c, count);
+}
+#define memset_io(dst,c,count) memset_io(dst,c,count)
+
+static inline void memcpy_fromio(void *to, const volatile void
__iomem *from,
+    size_t count)
+{
+    memcpy(to, (const void __force *)from, count);
+}
+#define memcpy_fromio(to,from,count) memcpy_fromio(to,from,count)
+
+static inline void memcpy_toio(volatile void __iomem *to, const
void *from,
+    size_t count)
+{
+    memcpy((void __force *)to, from, count);
+}
+#define memcpy_toio(to,from,count) memcpy_toio(to,from,count)
+
+#else
  #define memset_io(c,v,l)    _memset_io(c,(v),(l))
  #define memcpy_fromio(a,c,l)    _memcpy_fromio((a),c,(l))
  #define memcpy_toio(c,a,l)    _memcpy_toio(c,(a),(l))
+#endif

  #endif    /* readl */
I'd like to ask if there is any chance to get anything like this or
the even older proposal

http://lists.infradead.org/pipermail/linux-arm-kernel/2009-November/004077.html


merged? Maybe an updated version incorporating the discussion
conclusions?


In the discussion of

http://lists.infradead.org/pipermail/linux-arm-kernel/2009-November/004077.html


there have been some doubts if it's a good idea to enable it for all
SoCs. Therefore that patch introduced a

config OPTIMIZED_IOMEM_MEMCPY

which would allow us to enable it for only known to be compatible
SoCs. Just in case this helps to get it applied ;)
Any opinion on this?
Yes, unfortunately it should be selectable by platform, though it needs
to be done carefully.  Some ARM platforms can't cope with full 32-bit
accesses to MMIO.

I don't think any of those intersect with the single zImage project, so
those should be fine to have it always enabled - it's only the older
platforms that might have issues.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help