MIPS: CPS: Introduce register modify (set/clear/change) accessors
For read-write registers introduce accessor functions that simplify the task of modifying a subset of bits within the register. set_* functions set bits to 1, clear_* functions clear bits to 0 & change_* functions set bits specified in a mask to an arbitrary value. Signed-off-by: Paul Burton <paul.burton@imgtec.com> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/17004/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
829ca2be9c
commit
ed7eb5aad7
@ -71,6 +71,26 @@ static inline void write_##unit##_##name(uint##sz##_t val) \
|
||||
} \
|
||||
}
|
||||
|
||||
#define CPS_ACCESSOR_M(unit, sz, name) \
|
||||
static inline void change_##unit##_##name(uint##sz##_t mask, \
|
||||
uint##sz##_t val) \
|
||||
{ \
|
||||
uint##sz##_t reg_val = read_##unit##_##name(); \
|
||||
reg_val &= ~mask; \
|
||||
reg_val |= val; \
|
||||
write_##unit##_##name(reg_val); \
|
||||
} \
|
||||
\
|
||||
static inline void set_##unit##_##name(uint##sz##_t val) \
|
||||
{ \
|
||||
change_##unit##_##name(val, val); \
|
||||
} \
|
||||
\
|
||||
static inline void clear_##unit##_##name(uint##sz##_t val) \
|
||||
{ \
|
||||
change_##unit##_##name(val, 0); \
|
||||
}
|
||||
|
||||
#define CPS_ACCESSOR_RO(unit, sz, off, name) \
|
||||
CPS_ACCESSOR_A(unit, off, name) \
|
||||
CPS_ACCESSOR_R(unit, sz, name)
|
||||
@ -82,6 +102,7 @@ static inline void write_##unit##_##name(uint##sz##_t val) \
|
||||
#define CPS_ACCESSOR_RW(unit, sz, off, name) \
|
||||
CPS_ACCESSOR_A(unit, off, name) \
|
||||
CPS_ACCESSOR_R(unit, sz, name) \
|
||||
CPS_ACCESSOR_W(unit, sz, name)
|
||||
CPS_ACCESSOR_W(unit, sz, name) \
|
||||
CPS_ACCESSOR_M(unit, sz, name)
|
||||
|
||||
#endif /* __MIPS_ASM_MIPS_CPS_H__ */
|
||||
|
Loading…
Reference in New Issue
Block a user