xref: /rk3399_rockchip-uboot/include/optee_include/teesmc_optee.h (revision abdd24375050db7ce121b48477cc332d6c8c40f6)
1*abdd2437Shisping /*
2*abdd2437Shisping  * Copyright 2017, Rockchip Electronics Co., Ltd
3*abdd2437Shisping  * hisping lin, <hisping.lin@rock-chips.com>
4*abdd2437Shisping  *
5*abdd2437Shisping  * SPDX-License-Identifier:	GPL-2.0+
6*abdd2437Shisping  */
7*abdd2437Shisping #ifndef TEESMC_OPTEE_H
8*abdd2437Shisping #define TEESMC_OPTEE_H
9*abdd2437Shisping 
10*abdd2437Shisping #include <optee_include/tee_base_types.h>
11*abdd2437Shisping 
12*abdd2437Shisping #define TEESMC_OPTEE_RETURN_NOTAVAIL	0x5700
13*abdd2437Shisping 
14*abdd2437Shisping /*
15*abdd2437Shisping  * Get Shared Memory Config
16*abdd2437Shisping  *
17*abdd2437Shisping  * Returns the Secure/Non-secure shared memory config.
18*abdd2437Shisping  *
19*abdd2437Shisping  * Call register usage:
20*abdd2437Shisping  * r0	SMC Function ID, TEESMC32_OPTEE_FASTCALL_GET_SHM_CONFIG
21*abdd2437Shisping  * r1-6	Not used
22*abdd2437Shisping  * r7	Hypervisor Client ID register
23*abdd2437Shisping  *
24*abdd2437Shisping  * Have config return register usage:
25*abdd2437Shisping  * r0	TEESMC_RETURN_OK
26*abdd2437Shisping  * r1	Physical address of start of SHM
27*abdd2437Shisping  * r2	Size of of SHM
28*abdd2437Shisping  * r3	1 if SHM is cached, 0 if uncached.
29*abdd2437Shisping  * r4-7	Preserved
30*abdd2437Shisping  *
31*abdd2437Shisping  * Not available register usage:
32*abdd2437Shisping  * r0	TEESMC_OPTEE_RETURN_NOTAVAIL
33*abdd2437Shisping  * r1-3 Not used
34*abdd2437Shisping  * r4-7	Preserved
35*abdd2437Shisping  */
36*abdd2437Shisping #define TEESMC_OPTEE_FUNCID_GET_SHM_CONFIG	0x5700
37*abdd2437Shisping #define TEESMC32_OPTEE_FASTCALL_GET_SHM_CONFIG \
38*abdd2437Shisping 	TEESMC_CALL_VAL(TEESMC_32, TEESMC_FAST_CALL, TEESMC_OWNER_TRUSTED_OS, \
39*abdd2437Shisping 			TEESMC_OPTEE_FUNCID_GET_SHM_CONFIG)
40*abdd2437Shisping 
41*abdd2437Shisping /*
42*abdd2437Shisping  * Configures L2CC mutex
43*abdd2437Shisping  *
44*abdd2437Shisping  * Disables, enables usage of L2CC mutex. Returns or sets physical address
45*abdd2437Shisping  * of L2CC mutex.
46*abdd2437Shisping  *
47*abdd2437Shisping  * Call register usage:
48*abdd2437Shisping  * r0	SMC Function ID, TEESMC32_OPTEE_FASTCALL_L2CC_MUTEX
49*abdd2437Shisping  * r1	TEESMC_OPTEE_L2CC_MUTEX_GET_ADDR Get physical address of mutex
50*abdd2437Shisping  *	TEESMC_OPTEE_L2CC_MUTEX_SET_ADDR Set physical address of mutex
51*abdd2437Shisping  *	TEESMC_OPTEE_L2CC_MUTEX_ENABLE	 Enable usage of mutex
52*abdd2437Shisping  *	TEESMC_OPTEE_L2CC_MUTEX_DISABLE	 Disable usage of mutex
53*abdd2437Shisping  * r2	if r1 == TEESMC_OPTEE_L2CC_MUTEX_SET_ADDR, physical address of mutex
54*abdd2437Shisping  * r3-6	Not used
55*abdd2437Shisping  * r7	Hypervisor Client ID register
56*abdd2437Shisping  *
57*abdd2437Shisping  * Have config return register usage:
58*abdd2437Shisping  * r0	TEESMC_RETURN_OK
59*abdd2437Shisping  * r1	Preserved
60*abdd2437Shisping  * r2	if r1 == 0, physical address of L2CC mutex
61*abdd2437Shisping  * r3-7	Preserved
62*abdd2437Shisping  *
63*abdd2437Shisping  * Error return register usage:
64*abdd2437Shisping  * r0	TEESMC_OPTEE_RETURN_NOTAVAIL	Physical address not available
65*abdd2437Shisping  *	TEESMC_RETURN_EBADADDR		Bad supplied physical address
66*abdd2437Shisping  *	TEESMC_RETURN_EBADCMD		Unsupported value in r1
67*abdd2437Shisping  * r1-7	Preserved
68*abdd2437Shisping  */
69*abdd2437Shisping #define TEESMC_OPTEE_L2CC_MUTEX_GET_ADDR	0
70*abdd2437Shisping #define TEESMC_OPTEE_L2CC_MUTEX_SET_ADDR	1
71*abdd2437Shisping #define TEESMC_OPTEE_L2CC_MUTEX_ENABLE	2
72*abdd2437Shisping #define TEESMC_OPTEE_L2CC_MUTEX_DISABLE	3
73*abdd2437Shisping #define TEESMC_OPTEE_FUNCID_L2CC_MUTEX	0x5701
74*abdd2437Shisping #define TEESMC32_OPTEE_FASTCALL_L2CC_MUTEX \
75*abdd2437Shisping 	TEESMC_CALL_VAL(TEESMC_32, TEESMC_FAST_CALL, TEESMC_OWNER_TRUSTED_OS, \
76*abdd2437Shisping 			TEESMC_OPTEE_FUNCID_L2CC_MUTEX)
77*abdd2437Shisping 
78*abdd2437Shisping /*
79*abdd2437Shisping  * Allocate payload memory for RPC parameter passing.
80*abdd2437Shisping  *
81*abdd2437Shisping  * "Call" register usage:
82*abdd2437Shisping  * r0/x0	This value, TEESMC_RETURN_OPTEE_RPC_ALLOC_PAYLOAD
83*abdd2437Shisping  * r1/x1	Size in bytes of required payload memory
84*abdd2437Shisping  * r2/x2	Not used
85*abdd2437Shisping  * r3-7/x3-7	Resume information, must be preserved
86*abdd2437Shisping  *
87*abdd2437Shisping  * "Return" register usage:
88*abdd2437Shisping  * r0/x0	SMC Function ID, TEESMC32_CALL_RETURN_FROM_RPC if it was an
89*abdd2437Shisping  *		AArch32 SMC return or TEESMC64_CALL_RETURN_FROM_RPC for
90*abdd2437Shisping  *		AArch64 SMC return
91*abdd2437Shisping  * r1/x1	Physical pointer to allocated payload memory, 0 if size
92*abdd2437Shisping  *		was 0 or if memory can't be allocated
93*abdd2437Shisping  * r2/x2	Shared memory cookie used when freeing the memory
94*abdd2437Shisping  * r3-7/x3-7	Preserved
95*abdd2437Shisping  */
96*abdd2437Shisping #define TEESMC_OPTEE_RPC_FUNC_ALLOC_PAYLOAD	0x5700
97*abdd2437Shisping #define TEESMC_RETURN_OPTEE_RPC_ALLOC_PAYLOAD	\
98*abdd2437Shisping 		TEESMC_RPC_VAL(TEESMC_OPTEE_RPC_FUNC_ALLOC_PAYLOAD)
99*abdd2437Shisping 
100*abdd2437Shisping 
101*abdd2437Shisping /*
102*abdd2437Shisping  * Free memory previously allocated by TEESMC_RETURN_OPTEE_RPC_ALLOC_PAYLOAD
103*abdd2437Shisping  *
104*abdd2437Shisping  * "Call" register usage:
105*abdd2437Shisping  * r0/x0	This value, TEESMC_RETURN_OPTEE_RPC_FREE_PAYLOAD
106*abdd2437Shisping  * r1/x1	Shared memory cookie belonging to this payload memory
107*abdd2437Shisping  * r2-7/x2-7	Resume information, must be preserved
108*abdd2437Shisping  *
109*abdd2437Shisping  * "Return" register usage:
110*abdd2437Shisping  * r0/x0	SMC Function ID, TEESMC32_CALL_RETURN_FROM_RPC if it was an
111*abdd2437Shisping  *		AArch32 SMC return or TEESMC64_CALL_RETURN_FROM_RPC for
112*abdd2437Shisping  *		AArch64 SMC return
113*abdd2437Shisping  * r2-7/x2-7	Preserved
114*abdd2437Shisping  */
115*abdd2437Shisping #define TEESMC_OPTEE_RPC_FUNC_FREE_PAYLOAD		0x5701
116*abdd2437Shisping #define TEESMC_RETURN_OPTEE_RPC_FREE_PAYLOAD	\
117*abdd2437Shisping 		TEESMC_RPC_VAL(TEESMC_OPTEE_RPC_FUNC_FREE_PAYLOAD)
118*abdd2437Shisping 
119*abdd2437Shisping /*
120*abdd2437Shisping  * Overriding default UID of the API since the it has OP-TEE extensions
121*abdd2437Shisping  * 384fb3e0-e7f8-11e3-af63-0002a5d5c51b : Only 32 bit calls are supported
122*abdd2437Shisping  * 384fb3e0-e7f8-11e3-af63-0002a5d5c51c : Both 32 and 64 bit calls are supported
123*abdd2437Shisping  */
124*abdd2437Shisping #define TEESMC_OPTEE_UID_R0		0x384fb3e0
125*abdd2437Shisping #define TEESMC_OPTEE_UID_R1		0xe7f811e3
126*abdd2437Shisping #define TEESMC_OPTEE_UID_R2		0xaf630002
127*abdd2437Shisping #define TEESMC_OPTEE_UID32_R3		0xa5d5c51b
128*abdd2437Shisping #define TEESMC_OPTEE_UID64_R3		0xa5d5c51c
129*abdd2437Shisping 
130*abdd2437Shisping #define TEESMC_OPTEE_REVISION_MAJOR	1
131*abdd2437Shisping #define TEESMC_OPTEE_REVISION_MINOR	0
132*abdd2437Shisping 
133*abdd2437Shisping /*
134*abdd2437Shisping  * UUID for OP-TEE
135*abdd2437Shisping  * 486178e0-e7f8-11e3-bc5e-0002a5d5c51b
136*abdd2437Shisping  */
137*abdd2437Shisping #define TEESMC_OS_OPTEE_UUID_R0		0x486178e0
138*abdd2437Shisping #define TEESMC_OS_OPTEE_UUID_R1		0xe7f811e3
139*abdd2437Shisping #define TEESMC_OS_OPTEE_UUID_R2		0xbc5e0002
140*abdd2437Shisping #define TEESMC_OS_OPTEE_UUID_R3		0xa5d5c51b
141*abdd2437Shisping 
142*abdd2437Shisping #define TEESMC_OS_OPTEE_REVISION_MAJOR	1
143*abdd2437Shisping #define TEESMC_OS_OPTEE_REVISION_MINOR	0
144*abdd2437Shisping 
145*abdd2437Shisping #endif /*TEESMC_OPTEE_H*/
146