diff options
author | Jeffrey Kardatzke <jkardatzke@google.com> | 2023-03-02 12:02:51 -0800 |
---|---|---|
committer | Jeffrey Kardatzke <jkardatzke@google.com> | 2023-03-09 20:18:13 +0100 |
commit | 85ab88238183be1e27835e14e3588fb73e0f6aa7 (patch) | |
tree | a928eb712e3003e0df91eb5855bdbbe758552572 | |
parent | 4121a2c3205e12da62d0be8c3ca4e44fada2fcf1 (diff) | |
download | arm-trusted-firmware-85ab88238183be1e27835e14e3588fb73e0f6aa7.tar.gz |
fix(optee): return UUID for image loading service
This adds return of a UUID when TF-A is in the state where it needs to
receive the SMC call to load the OP-TEE image. It also changes the OEN
used for the image loading call to match the OEN used for the UUID call.
Signed-off-by: Jeffrey Kardatzke <jkardatzke@google.com>
Change-Id: I713cb602d8e53b3f20d179b5fb5162da6a2ed057
-rw-r--r-- | services/spd/opteed/opteed_main.c | 8 | ||||
-rw-r--r-- | services/spd/opteed/teesmc_opteed.h | 9 | ||||
-rw-r--r-- | services/spd/opteed/teesmc_opteed_macros.h | 2 |
3 files changed, 18 insertions, 1 deletions
diff --git a/services/spd/opteed/opteed_main.c b/services/spd/opteed/opteed_main.c index ff09e7e0f..f069775d2 100644 --- a/services/spd/opteed/opteed_main.c +++ b/services/spd/opteed/opteed_main.c @@ -47,6 +47,10 @@ uint32_t opteed_rw; #if OPTEE_ALLOW_SMC_LOAD static bool opteed_allow_load; +/* OP-TEE image loading service UUID */ +DEFINE_SVC_UUID2(optee_image_load_uuid, + 0xb1eafba3, 0x5d31, 0x4612, 0xb9, 0x06, + 0xc4, 0xc7, 0xa4, 0xbe, 0x3c, 0xc0); #else static int32_t opteed_init(void); #endif @@ -335,6 +339,10 @@ static uintptr_t opteed_smc_handler(uint32_t smc_fid, if (is_caller_non_secure(flags)) { #if OPTEE_ALLOW_SMC_LOAD + if (opteed_allow_load && smc_fid == NSSMC_OPTEED_CALL_UID) { + /* Provide the UUID of the image loading service. */ + SMC_UUID_RET(handle, optee_image_load_uuid); + } if (smc_fid == NSSMC_OPTEED_CALL_LOAD_IMAGE) { /* * TODO: Consider wiping the code for SMC loading from diff --git a/services/spd/opteed/teesmc_opteed.h b/services/spd/opteed/teesmc_opteed.h index eae3ed2ae..4026fa4da 100644 --- a/services/spd/opteed/teesmc_opteed.h +++ b/services/spd/opteed/teesmc_opteed.h @@ -157,4 +157,13 @@ #define NSSMC_OPTEED_CALL_LOAD_IMAGE \ NSSMC_OPTEED_CALL(NSSMC_OPTEED_FUNCID_LOAD_IMAGE) +/* + * Returns the UID of the OP-TEE image loading service if image loading is + * enabled and the image had not been loaded yet. Otherwise this call will be + * passed through to OP-TEE where it will return the OP-TEE UID. + */ +#define NSSMC_OPTEED_FUNCID_CALLS_UID 0xFF01 +#define NSSMC_OPTEED_CALL_UID \ + NSSMC_OPTEED_CALL(NSSMC_OPTEED_FUNCID_CALLS_UID) + #endif /*TEESMC_OPTEED_H*/ diff --git a/services/spd/opteed/teesmc_opteed_macros.h b/services/spd/opteed/teesmc_opteed_macros.h index ad3ed754f..721914063 100644 --- a/services/spd/opteed/teesmc_opteed_macros.h +++ b/services/spd/opteed/teesmc_opteed_macros.h @@ -17,7 +17,7 @@ #define NSSMC_OPTEED_CALL(func_num) \ ((SMC_TYPE_FAST << FUNCID_TYPE_SHIFT) | \ ((SMC_32) << FUNCID_CC_SHIFT) | \ - (50 << FUNCID_OEN_SHIFT) | \ + (63 << FUNCID_OEN_SHIFT) | \ ((func_num) & FUNCID_NUM_MASK)) #endif /* TEESMC_OPTEED_MACROS_H */ |