[U-Boot] [PATCH V5.1 1/6] io: add and* and or* operation api to set and clear bit
Lei Wen
leiwen at marvell.com
Tue Mar 29 04:53:38 CEST 2011
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 at marvell.com>
---
Changelog:
V2:
V3:
V4:
Move original driver specific bit set to the general place
V5:
fix code style issue
V5.1:
Add parentheses for the around incoming parameters to prevent
parsing the complex expression wrong.
arch/arm/include/asm/io.h | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
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.
--
1.7.0.4
More information about the U-Boot
mailing list