
Hi Alexander,
-----Original Message----- From: Alexander Graf agraf@suse.de Sent: 18 February 2019 13:50 To: Ibai Erkiaga Elorza IBAIE@xilinx.com; u-boot@lists.denx.de Cc: Sumit Garg sumit.garg@linaro.org; Heinrich Schuchardt xypron.glpk@gmx.de; Tom Rini trini@konsulko.com; Albert Aribaud albert.u.boot@aribaud.net Subject: Re: [PATCH] arm: fix hvc call
On 18.02.19 14:10, Ibai Erkiaga wrote:
HVC call makes use of 6 arguments rather than 7 in the same way as SMC calls. The 7th argument is optional for both HVC and SMC but is implemented as 16-bit parameter and register R7 or W7.
The patch description is lacking a bit more context. Why not change SMC to also include x7?
Definitively both approaches might be valid. The aim of the patch is just avoid compilation error due to an invalid asm code in the HVC call so that's why I'm removing the 7th argument. The Client ID (7th argument) could be used either for SMC or HVC but I don't have a testcase for it and seems that nobody is using up to date.
Signed-off-by: Ibai Erkiaga ibai.erkiaga-elorza@xilinx.com
The issue does not report any error in a normal build as hvc_call is not used at all and is optimized by the compiler. Using -O0 triggers the error so the patch is intended to fix issues on a ongoing effor to build U-Boot with -O0.
This should definitely not go below the --- line as it's critical information for anyone who later on reads the commit message in the log.
Alex
arch/arm/cpu/armv8/fwcall.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/arch/arm/cpu/armv8/fwcall.c b/arch/arm/cpu/armv8/fwcall.c index 9957c29..b0aca1b 100644 --- a/arch/arm/cpu/armv8/fwcall.c +++ b/arch/arm/cpu/armv8/fwcall.c @@ -28,7 +28,6 @@ static void hvc_call(struct pt_regs *args) "ldr x4, %4\n" "ldr x5, %5\n" "ldr x6, %6\n"
"ldr x7, %7\n" "hvc #0\n" "str x0, %0\n" "str x1, %1\n"
@@ -37,7 +36,7 @@ static void hvc_call(struct pt_regs *args) : "+m" (args->regs[0]), "+m" (args->regs[1]), "+m" (args->regs[2]), "+m" (args->regs[3]) : "m" (args->regs[4]), "m" (args->regs[5]),
"m" (args->regs[6]), "m" (args->regs[7])
"m" (args->regs[6]) : "x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16", "x17");
-- 1.8.3.1