From: Volodymyr Babchuk Date: Tue, 10 Oct 2017 15:52:41 +0000 (+0300) Subject: arm: traps: use only least 32 bits of fid in PSCI handler X-Git-Tag: archive/raspbian/4.11.1-1+rpi1~1^2~66^2~1125 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=248b8eee6faf7c229c5c50b6c524175e1a5f7851;p=xen.git arm: traps: use only least 32 bits of fid in PSCI handler According to SMCCC (ARM DEN 0028B, page 12), function id is stored in least 32 bits of r0/x0 register: The least significant 32-bits are used, and the most significant 32-bits are zero. Signed-off-by: Volodymyr Babchuk Acked-by: Julien Grall --- diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c index 701fdc841d..0cff83e431 100644 --- a/xen/arch/arm/traps.c +++ b/xen/arch/arm/traps.c @@ -1463,14 +1463,14 @@ static void do_debug_trap(struct cpu_user_regs *regs, unsigned int code) #endif /* helper function for checking arm mode 32/64 bit */ -static inline int psci_mode_check(struct domain *d, register_t fid) +static inline int psci_mode_check(struct domain *d, uint32_t fid) { return !( is_64bit_domain(d)^( (fid & PSCI_0_2_64BIT) >> 30 ) ); } static void do_trap_psci(struct cpu_user_regs *regs) { - register_t fid = PSCI_ARG(regs,0); + uint32_t fid = PSCI_ARG32(regs,0); /* preloading in case psci_mode_check fails */ PSCI_RESULT_REG(regs) = PSCI_INVALID_PARAMETERS;