summaryrefslogtreecommitdiffstats
path: root/arch/arm64/include/asm/sysreg.h
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2018-06-26 08:07:17 +0900
committerDavid S. Miller <davem@davemloft.net>2018-06-26 08:07:17 +0900
commit9ff3b40e411c00870d1c29cd6b843fca7c4160ae (patch)
tree4d58943bf8907f5704ba004fd5383c0d7683c61f /arch/arm64/include/asm/sysreg.h
parent823819507095135b475a99048f0b0b6e75580fbc (diff)
parent6f0d349d922ba44e4348a17a78ea51b7135965b1 (diff)
downloadblackbird-obmc-linux-9ff3b40e411c00870d1c29cd6b843fca7c4160ae.tar.gz
blackbird-obmc-linux-9ff3b40e411c00870d1c29cd6b843fca7c4160ae.zip
Merge ra.kernel.org:/pub/scm/linux/kernel/git/davem/net
Diffstat (limited to 'arch/arm64/include/asm/sysreg.h')
-rw-r--r--arch/arm64/include/asm/sysreg.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/sysreg.h
index 6171178075dc..a8f84812c6e8 100644
--- a/arch/arm64/include/asm/sysreg.h
+++ b/arch/arm64/include/asm/sysreg.h
@@ -728,6 +728,17 @@ asm(
asm volatile("msr_s " __stringify(r) ", %x0" : : "rZ" (__val)); \
} while (0)
+/*
+ * Modify bits in a sysreg. Bits in the clear mask are zeroed, then bits in the
+ * set mask are set. Other bits are left as-is.
+ */
+#define sysreg_clear_set(sysreg, clear, set) do { \
+ u64 __scs_val = read_sysreg(sysreg); \
+ u64 __scs_new = (__scs_val & ~(u64)(clear)) | (set); \
+ if (__scs_new != __scs_val) \
+ write_sysreg(__scs_new, sysreg); \
+} while (0)
+
static inline void config_sctlr_el1(u32 clear, u32 set)
{
u32 val;
OpenPOWER on IntegriCloud