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