diff mbox

[U-Boot,V5,1/6] io: add and* and or* operation api to set and clear bit

Message ID 1301295228-12752-2-git-send-email-leiwen@marvell.com
State Superseded
Headers show

Commit Message

Lei Wen March 28, 2011, 6:53 a.m. UTC
Those api take use of read*/write* to align the current dmb usage.
Also this could short the code length in one line.

Signed-off-by: Lei Wen <leiwen@marvell.com>
---
Changelog:
V2:
V3:
V4:
Move original driver specific bit set to the general place

V5:
fix code style issue

 arch/arm/include/asm/io.h |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)
diff mbox

Patch

diff --git a/arch/arm/include/asm/io.h b/arch/arm/include/asm/io.h
index 1fbc531..71e85e8 100644
--- a/arch/arm/include/asm/io.h
+++ b/arch/arm/include/asm/io.h
@@ -141,6 +141,14 @@  extern inline void __raw_readsl(unsigned int addr, void *data, int longlen)
 #define readw(c)	({ u16 __v = __arch_getw(c); __iormb(); __v; })
 #define readl(c)	({ u32 __v = __arch_getl(c); __iormb(); __v; })
 
+#define orb(v, c)       writeb(readb(c) | v, c)
+#define orw(v, c)       writew(readw(c) | v, c)
+#define orl(v, c)       writel(readl(c) | v, c)
+
+#define andb(v, c)      writeb(readb(c) & v, c)
+#define andw(v, c)      writew(readw(c) & v, c)
+#define andl(v, c)      writel(readl(c) & v, c)
+
 /*
  * The compiler seems to be incapable of optimising constants
  * properly.  Spell it out to the compiler in some cases.