Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -273,10 +273,14 @@ static inline void config_sctlr_el1(u32 clear, u32 set)
	__val;							\
})

/*
 * The "Z" constraint normally means a zero immediate, but when combined with
 * the "%x0" template means XZR.
 */
#define write_sysreg(v, r) do {					\
	u64 __val = (u64)v;					\
	asm volatile("msr " __stringify(r) ", %0"		\
		     : : "r" (__val));				\
	asm volatile("msr " __stringify(r) ", %x0"		\
		     : : "rZ" (__val));				\
} while (0)

#endif