* [PATCH v1 1/1] ArmPkg/OpteeLib: Add dummy RPC handler
@ 2018-12-05 11:57 Sumit Garg
2018-12-06 16:58 ` Ard Biesheuvel
0 siblings, 1 reply; 2+ messages in thread
From: Sumit Garg @ 2018-12-05 11:57 UTC (permalink / raw)
To: edk2-devel; +Cc: tee-dev, Sumit Garg, Ard Biesheuvel, Leif Lindholm
Add dummy RPC handler for RPCs that are not implemented as control
should be returned back to OP-TEE in case any RPC is invoked.
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Leif Lindholm <leif.lindholm@linaro.org>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Sumit Garg <sumit.garg@linaro.org>
---
ArmPkg/Library/OpteeLib/OpteeSmc.h | 3 ++
ArmPkg/Library/OpteeLib/Optee.c | 34 ++++++++++++++++----
2 files changed, 30 insertions(+), 7 deletions(-)
diff --git a/ArmPkg/Library/OpteeLib/OpteeSmc.h b/ArmPkg/Library/OpteeLib/OpteeSmc.h
index 9cccd81810c9..6209782aaed7 100644
--- a/ArmPkg/Library/OpteeLib/OpteeSmc.h
+++ b/ArmPkg/Library/OpteeLib/OpteeSmc.h
@@ -25,6 +25,9 @@
#define OPTEE_SMC_SHARED_MEMORY_CACHED 1
+#define OPTEE_SMC_RETURN_UNKNOWN_FUNCTION 0xffffffff
+#define OPTEE_SMC_RETURN_RPC_PREFIX_MASK 0xffff0000
+#define OPTEE_SMC_RETURN_RPC_PREFIX 0xffff0000
#define OPTEE_SMC_RETURN_RPC_FOREIGN_INTERRUPT 0xffff0004
#define OPTEE_MESSAGE_COMMAND_OPEN_SESSION 0
diff --git a/ArmPkg/Library/OpteeLib/Optee.c b/ArmPkg/Library/OpteeLib/Optee.c
index 55dcc7853b59..ed2a03c593c2 100644
--- a/ArmPkg/Library/OpteeLib/Optee.c
+++ b/ArmPkg/Library/OpteeLib/Optee.c
@@ -123,6 +123,17 @@ OpteeInit (
return EFI_SUCCESS;
}
+STATIC
+BOOLEAN
+IsOpteeSmcReturnRpc (
+ UINT32 Return
+ )
+{
+ return (Return != OPTEE_SMC_RETURN_UNKNOWN_FUNCTION) &&
+ ((Return & OPTEE_SMC_RETURN_RPC_PREFIX_MASK) ==
+ OPTEE_SMC_RETURN_RPC_PREFIX);
+}
+
/**
Does Standard SMC to OP-TEE in secure world.
@@ -147,13 +158,22 @@ OpteeCallWithArg (
while (TRUE) {
ArmCallSmc (&ArmSmcArgs);
- if (ArmSmcArgs.Arg0 == OPTEE_SMC_RETURN_RPC_FOREIGN_INTERRUPT) {
- //
- // A foreign interrupt was raised while secure world was
- // executing, since they are handled in UEFI a dummy RPC is
- // performed to let UEFI take the interrupt through the normal
- // vector.
- //
+ if (IsOpteeSmcReturnRpc (ArmSmcArgs.Arg0)) {
+ switch (ArmSmcArgs.Arg0) {
+ case OPTEE_SMC_RETURN_RPC_FOREIGN_INTERRUPT:
+ //
+ // A foreign interrupt was raised while secure world was
+ // executing, since they are handled in UEFI a dummy RPC is
+ // performed to let UEFI take the interrupt through the normal
+ // vector.
+ //
+ break;
+
+ default:
+ // Do nothing in case RPC is not implemented.
+ break;
+ }
+
ArmSmcArgs.Arg0 = OPTEE_SMC_RETURN_FROM_RPC;
} else {
break;
--
2.7.4
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH v1 1/1] ArmPkg/OpteeLib: Add dummy RPC handler
2018-12-05 11:57 [PATCH v1 1/1] ArmPkg/OpteeLib: Add dummy RPC handler Sumit Garg
@ 2018-12-06 16:58 ` Ard Biesheuvel
0 siblings, 0 replies; 2+ messages in thread
From: Ard Biesheuvel @ 2018-12-06 16:58 UTC (permalink / raw)
To: Sumit Garg; +Cc: edk2-devel@lists.01.org, tee-dev, Leif Lindholm
On Wed, 5 Dec 2018 at 12:58, Sumit Garg <sumit.garg@linaro.org> wrote:
>
> Add dummy RPC handler for RPCs that are not implemented as control
> should be returned back to OP-TEE in case any RPC is invoked.
>
> Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
> Cc: Leif Lindholm <leif.lindholm@linaro.org>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Sumit Garg <sumit.garg@linaro.org>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Pushed as bc39c5cbea30..088a5334809d
Thanks
> ---
> ArmPkg/Library/OpteeLib/OpteeSmc.h | 3 ++
> ArmPkg/Library/OpteeLib/Optee.c | 34 ++++++++++++++++----
> 2 files changed, 30 insertions(+), 7 deletions(-)
>
> diff --git a/ArmPkg/Library/OpteeLib/OpteeSmc.h b/ArmPkg/Library/OpteeLib/OpteeSmc.h
> index 9cccd81810c9..6209782aaed7 100644
> --- a/ArmPkg/Library/OpteeLib/OpteeSmc.h
> +++ b/ArmPkg/Library/OpteeLib/OpteeSmc.h
> @@ -25,6 +25,9 @@
>
> #define OPTEE_SMC_SHARED_MEMORY_CACHED 1
>
> +#define OPTEE_SMC_RETURN_UNKNOWN_FUNCTION 0xffffffff
> +#define OPTEE_SMC_RETURN_RPC_PREFIX_MASK 0xffff0000
> +#define OPTEE_SMC_RETURN_RPC_PREFIX 0xffff0000
> #define OPTEE_SMC_RETURN_RPC_FOREIGN_INTERRUPT 0xffff0004
>
> #define OPTEE_MESSAGE_COMMAND_OPEN_SESSION 0
> diff --git a/ArmPkg/Library/OpteeLib/Optee.c b/ArmPkg/Library/OpteeLib/Optee.c
> index 55dcc7853b59..ed2a03c593c2 100644
> --- a/ArmPkg/Library/OpteeLib/Optee.c
> +++ b/ArmPkg/Library/OpteeLib/Optee.c
> @@ -123,6 +123,17 @@ OpteeInit (
> return EFI_SUCCESS;
> }
>
> +STATIC
> +BOOLEAN
> +IsOpteeSmcReturnRpc (
> + UINT32 Return
> + )
> +{
> + return (Return != OPTEE_SMC_RETURN_UNKNOWN_FUNCTION) &&
> + ((Return & OPTEE_SMC_RETURN_RPC_PREFIX_MASK) ==
> + OPTEE_SMC_RETURN_RPC_PREFIX);
> +}
> +
> /**
> Does Standard SMC to OP-TEE in secure world.
>
> @@ -147,13 +158,22 @@ OpteeCallWithArg (
> while (TRUE) {
> ArmCallSmc (&ArmSmcArgs);
>
> - if (ArmSmcArgs.Arg0 == OPTEE_SMC_RETURN_RPC_FOREIGN_INTERRUPT) {
> - //
> - // A foreign interrupt was raised while secure world was
> - // executing, since they are handled in UEFI a dummy RPC is
> - // performed to let UEFI take the interrupt through the normal
> - // vector.
> - //
> + if (IsOpteeSmcReturnRpc (ArmSmcArgs.Arg0)) {
> + switch (ArmSmcArgs.Arg0) {
> + case OPTEE_SMC_RETURN_RPC_FOREIGN_INTERRUPT:
> + //
> + // A foreign interrupt was raised while secure world was
> + // executing, since they are handled in UEFI a dummy RPC is
> + // performed to let UEFI take the interrupt through the normal
> + // vector.
> + //
> + break;
> +
> + default:
> + // Do nothing in case RPC is not implemented.
> + break;
> + }
> +
> ArmSmcArgs.Arg0 = OPTEE_SMC_RETURN_FROM_RPC;
> } else {
> break;
> --
> 2.7.4
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2018-12-06 16:58 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-12-05 11:57 [PATCH v1 1/1] ArmPkg/OpteeLib: Add dummy RPC handler Sumit Garg
2018-12-06 16:58 ` Ard Biesheuvel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox