[ARM] 4591/1: ns9xxx: simplify REGSET, REGGET and introduce ..._IDX variants
authorUwe Kleine-König <ukleinek@informatik.uni-freiburg.de>
Sun, 30 Sep 2007 19:35:27 +0000 (20:35 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 12 Oct 2007 22:43:36 +0000 (23:43 +0100)
The semantic of the REGSET macros didn't change, but hopefully
it's more obvious as it's now.

REGGET is changed to return the unshifted value, analogous to
REGSET.  REGGETIM behaves as REGGET before.  All callers changed.

..._IDX is used to work with registers that need a parameter like
BBU_GCONFb1.

Signed-off-by: Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
include/asm-arm/arch-ns9xxx/clock.h
include/asm-arm/arch-ns9xxx/hardware.h

index bf30cbdcc2bf2d3ec47a7a5fd519015a7c77b931..90604d48d5615f971c1f01a8ad1fc08e2bc2dc25 100644 (file)
@@ -46,8 +46,8 @@ static inline u32 ns9xxx_systemclock(void)
         *
         * Fine.
         */
-       return CRYSTAL * (REGGET(pll, SYS_PLL, ND) + 1)
-               >> REGGET(pll, SYS_PLL, FS);
+       return CRYSTAL * (REGGETIM(pll, SYS_PLL, ND) + 1)
+               >> REGGETIM(pll, SYS_PLL, FS);
 }
 
 static inline u32 ns9xxx_cpuclock(void) __attribute__((const));
index 25600554c4fe7df1d1d3b293a27133a5256ac185..b5d66f963981462a39897dadcce5ece38a716924 100644 (file)
 #define io_v2p(x)      ((((x) & 0x0f000000) << 4) \
                         + ((x) & 0x00ffffff))
 
+#define __REGSHIFT(mask)       ((mask) & (-(mask)))
+
 #define __REGBIT(bit)          ((u32)1 << (bit))
 #define __REGBITS(hbit, lbit)  ((((u32)1 << ((hbit) - (lbit) + 1)) - 1) << (lbit))
-#define __REGVAL(mask, value)  (((value) * ((mask) & (-(mask))) & (mask)))
+#define __REGVAL(mask, value)  (((value) * __REGSHIFT(mask)) & (mask))
 
 #ifndef __ASSEMBLY__
 
 #  define __REGB(x)    (*((volatile u8 *)io_p2v((x))))
 #  define __REGB2(x)   (*((volatile u8 *)io_p2v((x)) + (y)))
 
+#  define __REGSET(var, field, value)                                  \
+       ((var) = (((var) & ~((field) & ~(value))) | (value)))
+
 #  define REGSET(var, reg, field, value)                               \
-       ((var) = (((var)                                                \
-                  & ~(reg ## _ ## field &                              \
-                      ~ reg ## _ ## field ## _ ## value))              \
-                 | (reg ## _ ## field ## _ ## value)))
+       __REGSET(var, reg ## _ ## field, reg ## _ ## field ## _ ## value)
+
+#  define REGSET_IDX(var, reg, field, idx, value)                      \
+       __REGSET(var, reg ## _ ## field((idx)), reg ## _ ## field ## _ ## value((idx)))
 
 #  define REGSETIM(var, reg, field, value)                             \
-       ((var) = (((var)                                                \
-                  & ~(reg ## _ ## field &                              \
-                      ~(__REGVAL(reg ## _ ## field, value))))          \
-                 | (__REGVAL(reg ## _ ## field, value))))
+       __REGSET(var, reg ## _ ## field, __REGVAL(reg ## _ ## field, (value)))
+
+#  define REGSETIM_IDX(var, reg, field, idx, value)                    \
+       __REGSET(var, reg ## _ ## field((idx)), __REGVAL(reg ## _ ## field((idx)), (value)))
+
+#  define __REGGET(var, field)                                         \
+       (((var) & (field)))
 
 #  define REGGET(var, reg, field)                                      \
-       ((var & (reg ## _ ## field)) /                                  \
-        ((reg ## _ ## field) & (-(reg ## _ ## field))))
+        __REGGET(var, reg ## _ ## field)
+
+#  define REGGET_IDX(var, reg, field, idx)                             \
+        __REGGET(var, reg ## _ ## field((idx)))
+
+#  define REGGETIM(var, reg, field)                                    \
+        __REGGET(var, reg ## _ ## field) / __REGSHIFT(reg ## _ ## field)
+
+#  define REGGETIM_IDX(var, reg, field, idx)                           \
+        __REGGET(var, reg ## _ ## field((idx))) /                      \
+        __REGSHIFT(reg ## _ ## field((idx)))
 
 #else