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