Skip to content

Commit

Permalink
[ARM] 4591/1: ns9xxx: simplify REGSET, REGGET and introduce ..._IDX v…
Browse files Browse the repository at this point in the history
…ariants

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>
  • Loading branch information
Uwe Kleine-König authored and Russell King committed Oct 12, 2007
1 parent 689f2a0 commit f02e579
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 13 deletions.
4 changes: 2 additions & 2 deletions include/asm-arm/arch-ns9xxx/clock.h
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down
39 changes: 28 additions & 11 deletions include/asm-arm/arch-ns9xxx/hardware.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,11 @@
#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__

Expand All @@ -39,21 +41,36 @@
# 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

Expand Down

0 comments on commit f02e579

Please sign in to comment.