mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-20 03:44:55 +00:00
drivers: tee: sandbox: SCP03 control emulator
Adds support for a working SCP03 emulation. Input parameters are validated however the commands (enable, provision) executed by the TEE are assumed to always succeed. Signed-off-by: Jorge Ramirez-Ortiz <jorge@foundries.io> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
26839e5dde
commit
5a8783c80c
2 changed files with 59 additions and 1 deletions
|
@ -31,6 +31,12 @@ config OPTEE_TA_RPC_TEST
|
||||||
permits to test reverse RPC calls to TEE supplicant. Should
|
permits to test reverse RPC calls to TEE supplicant. Should
|
||||||
be used only in sandbox env.
|
be used only in sandbox env.
|
||||||
|
|
||||||
|
config OPTEE_TA_SCP03
|
||||||
|
bool "Support SCP03 TA"
|
||||||
|
default y
|
||||||
|
help
|
||||||
|
Enables support for controlling (enabling, provisioning) the
|
||||||
|
Secure Channel Protocol 03 operation in the OP-TEE SCP03 TA.
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include <tee.h>
|
#include <tee.h>
|
||||||
#include <tee/optee_ta_avb.h>
|
#include <tee/optee_ta_avb.h>
|
||||||
#include <tee/optee_ta_rpc_test.h>
|
#include <tee/optee_ta_rpc_test.h>
|
||||||
|
#include <tee/optee_ta_scp03.h>
|
||||||
|
|
||||||
#include "optee/optee_msg.h"
|
#include "optee/optee_msg.h"
|
||||||
#include "optee/optee_private.h"
|
#include "optee/optee_private.h"
|
||||||
|
@ -68,6 +69,7 @@ void *optee_alloc_and_init_page_list(void *buf, ulong len,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_OPTEE_TA_SCP03) || defined(CONFIG_OPTEE_TA_AVB)
|
||||||
static u32 get_attr(uint n, uint num_params, struct tee_param *params)
|
static u32 get_attr(uint n, uint num_params, struct tee_param *params)
|
||||||
{
|
{
|
||||||
if (n >= num_params)
|
if (n >= num_params)
|
||||||
|
@ -79,7 +81,7 @@ static u32 get_attr(uint n, uint num_params, struct tee_param *params)
|
||||||
static u32 check_params(u8 p0, u8 p1, u8 p2, u8 p3, uint num_params,
|
static u32 check_params(u8 p0, u8 p1, u8 p2, u8 p3, uint num_params,
|
||||||
struct tee_param *params)
|
struct tee_param *params)
|
||||||
{
|
{
|
||||||
u8 p[] = { p0, p1, p2, p3};
|
u8 p[] = { p0, p1, p2, p3 };
|
||||||
uint n;
|
uint n;
|
||||||
|
|
||||||
for (n = 0; n < ARRAY_SIZE(p); n++)
|
for (n = 0; n < ARRAY_SIZE(p); n++)
|
||||||
|
@ -97,6 +99,50 @@ bad_params:
|
||||||
|
|
||||||
return TEE_ERROR_BAD_PARAMETERS;
|
return TEE_ERROR_BAD_PARAMETERS;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_OPTEE_TA_SCP03
|
||||||
|
static u32 pta_scp03_open_session(struct udevice *dev, uint num_params,
|
||||||
|
struct tee_param *params)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* We don't expect additional parameters when opening a session to
|
||||||
|
* this TA.
|
||||||
|
*/
|
||||||
|
return check_params(TEE_PARAM_ATTR_TYPE_NONE, TEE_PARAM_ATTR_TYPE_NONE,
|
||||||
|
TEE_PARAM_ATTR_TYPE_NONE, TEE_PARAM_ATTR_TYPE_NONE,
|
||||||
|
num_params, params);
|
||||||
|
}
|
||||||
|
|
||||||
|
static u32 pta_scp03_invoke_func(struct udevice *dev, u32 func, uint num_params,
|
||||||
|
struct tee_param *params)
|
||||||
|
{
|
||||||
|
u32 res;
|
||||||
|
static bool enabled;
|
||||||
|
|
||||||
|
switch (func) {
|
||||||
|
case PTA_CMD_ENABLE_SCP03:
|
||||||
|
res = check_params(TEE_PARAM_ATTR_TYPE_VALUE_INPUT,
|
||||||
|
TEE_PARAM_ATTR_TYPE_NONE,
|
||||||
|
TEE_PARAM_ATTR_TYPE_NONE,
|
||||||
|
TEE_PARAM_ATTR_TYPE_NONE,
|
||||||
|
num_params, params);
|
||||||
|
if (res)
|
||||||
|
return res;
|
||||||
|
|
||||||
|
if (!enabled) {
|
||||||
|
enabled = true;
|
||||||
|
} else {
|
||||||
|
}
|
||||||
|
|
||||||
|
if (params[0].u.value.a)
|
||||||
|
|
||||||
|
return TEE_SUCCESS;
|
||||||
|
default:
|
||||||
|
return TEE_ERROR_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_OPTEE_TA_AVB
|
#ifdef CONFIG_OPTEE_TA_AVB
|
||||||
static u32 ta_avb_open_session(struct udevice *dev, uint num_params,
|
static u32 ta_avb_open_session(struct udevice *dev, uint num_params,
|
||||||
|
@ -357,6 +403,12 @@ static const struct ta_entry ta_entries[] = {
|
||||||
.invoke_func = ta_rpc_test_invoke_func,
|
.invoke_func = ta_rpc_test_invoke_func,
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_OPTEE_TA_SCP03
|
||||||
|
{ .uuid = PTA_SCP03_UUID,
|
||||||
|
.open_session = pta_scp03_open_session,
|
||||||
|
.invoke_func = pta_scp03_invoke_func,
|
||||||
|
},
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static void sandbox_tee_get_version(struct udevice *dev,
|
static void sandbox_tee_get_version(struct udevice *dev,
|
||||||
|
|
Loading…
Add table
Reference in a new issue