diff options
Diffstat (limited to 'drivers/tee/sandbox.c')
| -rw-r--r-- | drivers/tee/sandbox.c | 54 | 
1 files changed, 53 insertions, 1 deletions
| diff --git a/drivers/tee/sandbox.c b/drivers/tee/sandbox.c index 3a1d34d6fc0..35e8542fa37 100644 --- a/drivers/tee/sandbox.c +++ b/drivers/tee/sandbox.c @@ -8,6 +8,7 @@  #include <tee.h>  #include <tee/optee_ta_avb.h>  #include <tee/optee_ta_rpc_test.h> +#include <tee/optee_ta_scp03.h>  #include "optee/optee_msg.h"  #include "optee/optee_private.h" @@ -68,6 +69,7 @@ void *optee_alloc_and_init_page_list(void *buf, ulong len,  	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)  {  	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,  			struct tee_param *params)  { -	u8 p[] = { p0, p1, p2, p3}; +	u8 p[] = { p0, p1, p2, p3 };  	uint n;  	for (n = 0; n < ARRAY_SIZE(p); n++) @@ -97,6 +99,50 @@ bad_params:  	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  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,  	},  #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, | 
