The Arm SMC calling convention standard v1.2 allows 8 input and output
parameter registers. The FF-A specification relies on this
communication. This patch extends the number of output registers
returned by ArmCallSvc() to match this convention.
Signed-off-by: Achin Gupta <achin.gupta@arm.com>
Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
/**\r
Trigger an SVC call\r
\r
- SVC calls can take up to 7 arguments and return up to 4 return values.\r
- Therefore, the 4 first fields in the ARM_SVC_ARGS structure are used\r
+ SVC calls can take up to 8 arguments and return up to 8 return values.\r
+ Therefore, the 8 first fields in the ARM_SVC_ARGS structure are used\r
for both input and output values.\r
\r
+ @param[in, out] Args Arguments to be passed as part of the SVC call\r
+ The return values of the SVC call are also placed\r
+ in the same structure\r
+\r
+ @retval None\r
+\r
**/\r
VOID\r
ArmCallSvc (\r
ldr x9, [sp, #16]\r
\r
// Store the SVC returned values into the ARM_SVC_ARGS structure.\r
- // A SVC call can return up to 4 values - we do not need to store back x4-x7.\r
+ // A SVC call can return up to 8 values\r
stp x0, x1, [x9, #0]\r
stp x2, x3, [x9, #16]\r
+ stp x4, x5, [x9, #32]\r
+ stp x6, x7, [x9, #48]\r
\r
mov x0, x9\r
\r