Commit 7aff4a2d authored by Mark Rutland's avatar Mark Rutland Committed by Will Deacon

arm64: sysreg: allow write_sysreg to use XZR

Currently write_sysreg has to allocate a temporary register to write
zero to a system register, which is unfortunate given that the MSR
instruction accepts XZR as an operand.

Allow XZR to be used when appropriate by fiddling with the assembly
constraints.

Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
Reviewed-by: default avatarRobin Murphy <robin.murphy@arm.com>
Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
parent ee5e41b5
...@@ -273,10 +273,14 @@ static inline void config_sctlr_el1(u32 clear, u32 set) ...@@ -273,10 +273,14 @@ static inline void config_sctlr_el1(u32 clear, u32 set)
__val; \ __val; \
}) })
/*
* The "Z" constraint normally means a zero immediate, but when combined with
* the "%x0" template means XZR.
*/
#define write_sysreg(v, r) do { \ #define write_sysreg(v, r) do { \
u64 __val = (u64)v; \ u64 __val = (u64)v; \
asm volatile("msr " __stringify(r) ", %0" \ asm volatile("msr " __stringify(r) ", %x0" \
: : "r" (__val)); \ : : "rZ" (__val)); \
} while (0) } while (0)
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment