ArmPkg/ArmSvcLib: Return x4-x7 in output parameters

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>
This commit is contained in:
Achin Gupta 2021-02-19 12:05:55 +05:30 committed by mergify[bot]
parent 37ef4bb1a7
commit af0c597e98
2 changed files with 11 additions and 3 deletions

View File

@ -27,10 +27,16 @@ typedef struct {
/**
Trigger an SVC call
SVC calls can take up to 7 arguments and return up to 4 return values.
Therefore, the 4 first fields in the ARM_SVC_ARGS structure are used
SVC calls can take up to 8 arguments and return up to 8 return values.
Therefore, the 8 first fields in the ARM_SVC_ARGS structure are used
for both input and output values.
@param[in, out] Args Arguments to be passed as part of the SVC call
The return values of the SVC call are also placed
in the same structure
@retval None
**/
VOID
ArmCallSvc (

View File

@ -33,9 +33,11 @@ ASM_PFX(ArmCallSvc):
ldr x9, [sp, #16]
// Store the SVC returned values into the ARM_SVC_ARGS structure.
// A SVC call can return up to 4 values - we do not need to store back x4-x7.
// A SVC call can return up to 8 values
stp x0, x1, [x9, #0]
stp x2, x3, [x9, #16]
stp x4, x5, [x9, #32]
stp x6, x7, [x9, #48]
mov x0, x9