xref: /rk3399_rockchip-uboot/include/optee_include/teesmc_v2.h (revision 1d30eaa5cee0c484510623d18e5ae237a22cdfad)
11f25ada2SHisping Lin /*
21f25ada2SHisping Lin  * (C) Copyright 2017 Rockchip Electronics Co., Ltd
31f25ada2SHisping Lin  *
41f25ada2SHisping Lin  * SPDX-License-Identifier:     GPL-2.0+
51f25ada2SHisping Lin  */
61f25ada2SHisping Lin 
71f25ada2SHisping Lin #ifndef TEESMC_V2_H
81f25ada2SHisping Lin #define TEESMC_V2_H
91f25ada2SHisping Lin 
101f25ada2SHisping Lin #define OPTEE_SMC_CALL_WITH_ARG_V2 0x32000004
111f25ada2SHisping Lin 
121f25ada2SHisping Lin struct optee_msg_param_tmem_v2 {
131f25ada2SHisping Lin 	uint64_t buf_ptr;
141f25ada2SHisping Lin 	uint64_t size;
151f25ada2SHisping Lin 	uint64_t shm_ref;
161f25ada2SHisping Lin };
171f25ada2SHisping Lin 
181f25ada2SHisping Lin struct optee_msg_param_rmem_v2 {
191f25ada2SHisping Lin 	uint64_t offs;
201f25ada2SHisping Lin 	uint64_t size;
211f25ada2SHisping Lin 	uint64_t shm_ref;
221f25ada2SHisping Lin };
231f25ada2SHisping Lin 
241f25ada2SHisping Lin struct optee_msg_param_value_v2 {
251f25ada2SHisping Lin 	uint64_t a;
261f25ada2SHisping Lin 	uint64_t b;
271f25ada2SHisping Lin 	uint64_t c;
281f25ada2SHisping Lin };
291f25ada2SHisping Lin 
301f25ada2SHisping Lin struct optee_msg_param_v2 {
311f25ada2SHisping Lin 	uint64_t attr;
321f25ada2SHisping Lin 	union {
331f25ada2SHisping Lin 		struct optee_msg_param_tmem_v2 memref;
341f25ada2SHisping Lin 		struct optee_msg_param_rmem_v2 rmem;
351f25ada2SHisping Lin 		struct optee_msg_param_value_v2 value;
361f25ada2SHisping Lin 	} u;
371f25ada2SHisping Lin };
381f25ada2SHisping Lin 
391f25ada2SHisping Lin struct optee_msg_arg_v2 {
401f25ada2SHisping Lin 	uint32_t cmd;
411f25ada2SHisping Lin 	uint32_t ta_func;
421f25ada2SHisping Lin 	uint32_t session;
431f25ada2SHisping Lin 	uint32_t cancel_id;
441f25ada2SHisping Lin 	uint32_t pad;
451f25ada2SHisping Lin 	uint32_t ret;
461f25ada2SHisping Lin 	uint32_t ret_origin;
471f25ada2SHisping Lin 	uint32_t num_params;
481f25ada2SHisping Lin 
491f25ada2SHisping Lin 	/* num_params tells the actual number of element in params */
501f25ada2SHisping Lin 	struct optee_msg_param_v2 params[];
511f25ada2SHisping Lin };
521f25ada2SHisping Lin 
531f25ada2SHisping Lin typedef struct optee_msg_arg_v2        t_teesmc32_arg;
541f25ada2SHisping Lin typedef struct optee_msg_param_v2      t_teesmc32_param;
551f25ada2SHisping Lin 
561f25ada2SHisping Lin #define TEESMC32_GET_ARG_SIZE(num_params) \
571f25ada2SHisping Lin 	(sizeof(struct optee_msg_arg_v2) + \
581f25ada2SHisping Lin 	 sizeof(struct optee_msg_param_v2) * (num_params))
591f25ada2SHisping Lin 
601f25ada2SHisping Lin #define TEESMC32_GET_PARAMS(x) \
611f25ada2SHisping Lin 	(struct optee_msg_param_v2 *)(((struct optee_msg_arg_v2 *)(x)) + 1)
621f25ada2SHisping Lin 
631f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_NONE_V2		0x0
641f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_VALUE_INPUT_V2		0x1
651f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_VALUE_OUTPUT_V2		0x2
661f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_VALUE_INOUT_V2		0x3
671f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_RMEM_INPUT_V2		0x5
681f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_RMEM_OUTPUT_V2		0x6
691f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_RMEM_INOUT_V2		0x7
701f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_TMEM_INPUT_V2		0x9
711f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_TMEM_OUTPUT_V2		0xa
721f25ada2SHisping Lin #define OPTEE_MSG_ATTR_TYPE_TMEM_INOUT_V2		0xb
731f25ada2SHisping Lin 
741f25ada2SHisping Lin #define OPTEE_MSG_ATTR_META_V2			(1 << (8))
751f25ada2SHisping Lin 
761f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_SHM_ALLOC_V2	6
771f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_SHM_FREE_V2	7
781f25ada2SHisping Lin 
791f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_LOAD_TA_V2	0
801f25ada2SHisping Lin 
811f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_RPMB_V2		1
821f25ada2SHisping Lin 
831f25ada2SHisping Lin #define OPTEE_MSG_RPC_CMD_FS_V2		2
841f25ada2SHisping Lin 
85981b7916SHisping Lin #define OPTEE_SMC_32_V2			0
86981b7916SHisping Lin #define OPTEE_SMC_64_V2			0x40000000
87981b7916SHisping Lin #define OPTEE_SMC_FAST_CALL_V2		0x80000000
88981b7916SHisping Lin #define OPTEE_SMC_STD_CALL_V2		0
89981b7916SHisping Lin 
90981b7916SHisping Lin #define OPTEE_SMC_OWNER_MASK_V2		0x3F
91981b7916SHisping Lin #define OPTEE_SMC_OWNER_SHIFT_V2		24
92981b7916SHisping Lin 
93981b7916SHisping Lin #define OPTEE_SMC_FUNC_MASK_V2		0xFFFF
94981b7916SHisping Lin 
95981b7916SHisping Lin #define OPTEE_SMC_OWNER_TRUSTED_OS_V2	50
9674eb6027SHisping Lin #define OPTEE_SMC_OWNER_TRUSTED_OS_API	63
97981b7916SHisping Lin 
98981b7916SHisping Lin #define OPTEE_SMC_FUNCID_GET_SHM_CONFIG_V2	7
99981b7916SHisping Lin #define OPTEE_SMC_GET_SHM_CONFIG_V2 \
100981b7916SHisping Lin 	OPTEE_SMC_FAST_CALL_VAL_V2(OPTEE_SMC_FUNCID_GET_SHM_CONFIG_V2)
101981b7916SHisping Lin 
102*1d30eaa5SHisping Lin 
103*1d30eaa5SHisping Lin /* Secure world is built with virtualization support */
104*1d30eaa5SHisping Lin #define OPTEE_SMC_SEC_CAP_VIRTUALIZATION	(1 << 3)
105*1d30eaa5SHisping Lin 
106*1d30eaa5SHisping Lin #define OPTEE_SMC_FUNCID_EXCHANGE_CAPABILITIES	9
107*1d30eaa5SHisping Lin #define OPTEE_SMC_EXCHANGE_CAPABILITIES \
108*1d30eaa5SHisping Lin 	OPTEE_SMC_FAST_CALL_VAL_V2(OPTEE_SMC_FUNCID_EXCHANGE_CAPABILITIES)
109*1d30eaa5SHisping Lin 
110*1d30eaa5SHisping Lin #define OPTEE_SMC_FUNCID_VM_CREATED	13
111*1d30eaa5SHisping Lin #define OPTEE_SMC_VM_CREATED \
112*1d30eaa5SHisping Lin 	OPTEE_SMC_FAST_CALL_VAL_V2(OPTEE_SMC_FUNCID_VM_CREATED)
113*1d30eaa5SHisping Lin 
114*1d30eaa5SHisping Lin #define OPTEE_SMC_FUNCID_VM_DESTROYED	14
115*1d30eaa5SHisping Lin #define OPTEE_SMC_VM_DESTROYED \
116*1d30eaa5SHisping Lin 	OPTEE_SMC_FAST_CALL_VAL_V2(OPTEE_SMC_FUNCID_VM_DESTROYED)
117*1d30eaa5SHisping Lin 
11874eb6027SHisping Lin #define OPTEE_SMC_FUNCID_CALLS_REVISION	0xFF03
11974eb6027SHisping Lin #define OPTEE_SMC_CALLS_REVISION \
12074eb6027SHisping Lin 	OPTEE_SMC_CALL_VAL_V2(OPTEE_SMC_32_V2, OPTEE_SMC_FAST_CALL_V2, \
12174eb6027SHisping Lin 			      OPTEE_SMC_OWNER_TRUSTED_OS_API, \
12274eb6027SHisping Lin 			      OPTEE_SMC_FUNCID_CALLS_REVISION)
12374eb6027SHisping Lin 
124981b7916SHisping Lin #define OPTEE_SMC_FAST_CALL_VAL_V2(func_num) \
125981b7916SHisping Lin 	OPTEE_SMC_CALL_VAL_V2(OPTEE_SMC_32_V2, OPTEE_SMC_FAST_CALL_V2, \
126981b7916SHisping Lin 			   OPTEE_SMC_OWNER_TRUSTED_OS_V2, (func_num))
127981b7916SHisping Lin 
128981b7916SHisping Lin #define OPTEE_SMC_CALL_VAL_V2(type, calling_convention, owner, func_num) \
129981b7916SHisping Lin 			((type) | (calling_convention) | \
130981b7916SHisping Lin 			(((owner) & OPTEE_SMC_OWNER_MASK_V2) << \
131981b7916SHisping Lin 				OPTEE_SMC_OWNER_SHIFT_V2) |\
132981b7916SHisping Lin 			((func_num) & OPTEE_SMC_FUNC_MASK_V2))
1331f25ada2SHisping Lin 
1341f25ada2SHisping Lin #endif /* TEESMC_V2_H */
135