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