1ae8ec5e1SHisping Lin /* 2ae8ec5e1SHisping Lin * Copyright 2017, Rockchip Electronics Co., Ltd 3ae8ec5e1SHisping Lin * hisping lin, <hisping.lin@rock-chips.com> 4ae8ec5e1SHisping Lin * 5ae8ec5e1SHisping Lin * SPDX-License-Identifier: GPL-2.0+ 6ae8ec5e1SHisping Lin */ 7ae8ec5e1SHisping Lin 8ae8ec5e1SHisping Lin #include <common.h> 9ae8ec5e1SHisping Lin #include <optee_include/OpteeClientApiLib.h> 10ae8ec5e1SHisping Lin #include <optee_include/tee_client_api.h> 11*3251364cSHisping Lin #include <boot_rkimg.h> 12ae8ec5e1SHisping Lin 13ae8ec5e1SHisping Lin void test_optee(void) 14ae8ec5e1SHisping Lin { 15ae8ec5e1SHisping Lin TEEC_Result TeecResult; 16ae8ec5e1SHisping Lin TEEC_Context TeecContext; 17ae8ec5e1SHisping Lin TEEC_Session TeecSession; 18ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 19ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 20ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 21ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 22ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 23*3251364cSHisping Lin struct blk_desc *dev_desc; 24*3251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 25ae8ec5e1SHisping Lin 26ae8ec5e1SHisping Lin debug("testmm start\n"); 27ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 28ae8ec5e1SHisping Lin 29ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 30ae8ec5e1SHisping Lin 31*3251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 32*3251364cSHisping Lin TEEC_NONE, 33*3251364cSHisping Lin TEEC_NONE, 34*3251364cSHisping Lin TEEC_NONE); 35*3251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 36*3251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 37*3251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 38*3251364cSHisping Lin TeecOperation.params[0].value.a = 0; 39*3251364cSHisping Lin #endif 40*3251364cSHisping Lin 41ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 42ae8ec5e1SHisping Lin &TeecSession, 43ae8ec5e1SHisping Lin TeecUuid, 44ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 45ae8ec5e1SHisping Lin NULL, 46*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 47ae8ec5e1SHisping Lin NULL, 48*3251364cSHisping Lin #endif 49*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 50*3251364cSHisping Lin &TeecOperation, 51*3251364cSHisping Lin #endif 52ae8ec5e1SHisping Lin &ErrorOrigin); 53ae8ec5e1SHisping Lin 54ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 55ae8ec5e1SHisping Lin 56ae8ec5e1SHisping Lin SharedMem0.size = sizeof("filename_test"); 57ae8ec5e1SHisping Lin SharedMem0.flags = 0; 58ae8ec5e1SHisping Lin 59ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 60ae8ec5e1SHisping Lin 61ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "filename_test", SharedMem0.size); 62ae8ec5e1SHisping Lin 63ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 64ae8ec5e1SHisping Lin 65ae8ec5e1SHisping Lin SharedMem1.size = 32; 66ae8ec5e1SHisping Lin SharedMem1.flags = 0; 67ae8ec5e1SHisping Lin 68ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 69ae8ec5e1SHisping Lin 70ae8ec5e1SHisping Lin memset(SharedMem1.buffer, 'a', SharedMem1.size); 71ae8ec5e1SHisping Lin 72ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 73ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 74ae8ec5e1SHisping Lin 75ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 76ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 77ae8ec5e1SHisping Lin 78ae8ec5e1SHisping Lin 79ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 80ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 81ae8ec5e1SHisping Lin TEEC_NONE, 82ae8ec5e1SHisping Lin TEEC_NONE); 83ae8ec5e1SHisping Lin 84ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 85ae8ec5e1SHisping Lin 1, 86ae8ec5e1SHisping Lin &TeecOperation, 87ae8ec5e1SHisping Lin &ErrorOrigin); 88ae8ec5e1SHisping Lin 89ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 90ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 91ae8ec5e1SHisping Lin 92ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 93ae8ec5e1SHisping Lin 9446b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 95ae8ec5e1SHisping Lin 96ae8ec5e1SHisping Lin debug("testmm end\n"); 97ae8ec5e1SHisping Lin debug("TeecResult %x\n", TeecResult); 98ae8ec5e1SHisping Lin } 99ae8ec5e1SHisping Lin 100ae8ec5e1SHisping Lin static uint8_t b2hs_add_base(uint8_t in) 101ae8ec5e1SHisping Lin { 102ae8ec5e1SHisping Lin if (in > 9) 103ae8ec5e1SHisping Lin return in + 55; 104ae8ec5e1SHisping Lin else 105ae8ec5e1SHisping Lin return in + 48; 106ae8ec5e1SHisping Lin } 107ae8ec5e1SHisping Lin 108ae8ec5e1SHisping Lin uint32_t b2hs(uint8_t *b, uint8_t *hs, uint32_t blen, uint32_t hslen) 109ae8ec5e1SHisping Lin { 110ae8ec5e1SHisping Lin uint32_t i = 0; 111ae8ec5e1SHisping Lin 112ae8ec5e1SHisping Lin if (blen * 2 + 1 > hslen) 113ae8ec5e1SHisping Lin return 0; 114ae8ec5e1SHisping Lin 115ae8ec5e1SHisping Lin for (; i < blen; i++) { 116ae8ec5e1SHisping Lin hs[i * 2 + 1] = b2hs_add_base(b[i] & 0xf); 117ae8ec5e1SHisping Lin hs[i * 2] = b2hs_add_base(b[i] >> 4); 118ae8ec5e1SHisping Lin } 119ae8ec5e1SHisping Lin hs[blen * 2] = 0; 120ae8ec5e1SHisping Lin 121ae8ec5e1SHisping Lin return blen * 2; 122ae8ec5e1SHisping Lin } 123ae8ec5e1SHisping Lin 124ae8ec5e1SHisping Lin 125ae8ec5e1SHisping Lin uint32_t trusty_read_rollback_index(uint32_t slot, uint64_t *value) 126ae8ec5e1SHisping Lin { 127ae8ec5e1SHisping Lin TEEC_Result TeecResult; 128ae8ec5e1SHisping Lin TEEC_Context TeecContext; 129ae8ec5e1SHisping Lin TEEC_Session TeecSession; 130ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 131ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 132ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 133ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 134ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 135ae8ec5e1SHisping Lin uint8_t hs[9]; 136ae8ec5e1SHisping Lin 137*3251364cSHisping Lin struct blk_desc *dev_desc; 138*3251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 139*3251364cSHisping Lin 140ae8ec5e1SHisping Lin b2hs((uint8_t *)&slot, hs, 4, 9); 141ae8ec5e1SHisping Lin debug("testmm start\n"); 142ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 143ae8ec5e1SHisping Lin 144ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 145ae8ec5e1SHisping Lin 146*3251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 147*3251364cSHisping Lin TEEC_NONE, 148*3251364cSHisping Lin TEEC_NONE, 149*3251364cSHisping Lin TEEC_NONE); 150*3251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 151*3251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 152*3251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 153*3251364cSHisping Lin TeecOperation.params[0].value.a = 0; 154*3251364cSHisping Lin #endif 155*3251364cSHisping Lin 156ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 157ae8ec5e1SHisping Lin &TeecSession, 158ae8ec5e1SHisping Lin TeecUuid, 159ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 160ae8ec5e1SHisping Lin NULL, 161*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 162ae8ec5e1SHisping Lin NULL, 163*3251364cSHisping Lin #endif 164*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 165*3251364cSHisping Lin &TeecOperation, 166*3251364cSHisping Lin #endif 167ae8ec5e1SHisping Lin &ErrorOrigin); 168ae8ec5e1SHisping Lin 169ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 170ae8ec5e1SHisping Lin 171ae8ec5e1SHisping Lin SharedMem0.size = 8; 172ae8ec5e1SHisping Lin SharedMem0.flags = 0; 173ae8ec5e1SHisping Lin 174ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 175ae8ec5e1SHisping Lin 176ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, hs, SharedMem0.size); 177ae8ec5e1SHisping Lin 178ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 179ae8ec5e1SHisping Lin 180ae8ec5e1SHisping Lin SharedMem1.size = 8; 181ae8ec5e1SHisping Lin SharedMem1.flags = 0; 182ae8ec5e1SHisping Lin 183ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 184ae8ec5e1SHisping Lin 185ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 186ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 187ae8ec5e1SHisping Lin 188ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 189ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 190ae8ec5e1SHisping Lin 191ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 192ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 193ae8ec5e1SHisping Lin TEEC_NONE, 194ae8ec5e1SHisping Lin TEEC_NONE); 195ae8ec5e1SHisping Lin 196ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 197ae8ec5e1SHisping Lin 0, 198ae8ec5e1SHisping Lin &TeecOperation, 199ae8ec5e1SHisping Lin &ErrorOrigin); 20046b2a054SHisping Lin if (TeecResult == TEEC_SUCCESS) 201ae8ec5e1SHisping Lin memcpy((char *)value, SharedMem1.buffer, SharedMem1.size); 202ae8ec5e1SHisping Lin 203ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 204ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 205ae8ec5e1SHisping Lin 206ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 207ae8ec5e1SHisping Lin 20846b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 209ae8ec5e1SHisping Lin 210ae8ec5e1SHisping Lin debug("testmm end\n"); 211ae8ec5e1SHisping Lin return TeecResult; 212ae8ec5e1SHisping Lin } 213ae8ec5e1SHisping Lin 214ae8ec5e1SHisping Lin uint32_t trusty_write_rollback_index(uint32_t slot, uint64_t value) 215ae8ec5e1SHisping Lin { 216ae8ec5e1SHisping Lin TEEC_Result TeecResult; 217ae8ec5e1SHisping Lin TEEC_Context TeecContext; 218ae8ec5e1SHisping Lin TEEC_Session TeecSession; 219ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 220ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 221ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 222ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 223ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 224ae8ec5e1SHisping Lin uint8_t hs[9]; 225*3251364cSHisping Lin struct blk_desc *dev_desc; 226*3251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 227*3251364cSHisping Lin 228ae8ec5e1SHisping Lin b2hs((uint8_t *)&slot, hs, 4, 9); 229ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 230ae8ec5e1SHisping Lin 231ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 232ae8ec5e1SHisping Lin 233*3251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 234*3251364cSHisping Lin TEEC_NONE, 235*3251364cSHisping Lin TEEC_NONE, 236*3251364cSHisping Lin TEEC_NONE); 237*3251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 238*3251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 239*3251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 240*3251364cSHisping Lin TeecOperation.params[0].value.a = 0; 241*3251364cSHisping Lin #endif 242*3251364cSHisping Lin 243ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 244ae8ec5e1SHisping Lin &TeecSession, 245ae8ec5e1SHisping Lin TeecUuid, 246ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 247ae8ec5e1SHisping Lin NULL, 248*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 249ae8ec5e1SHisping Lin NULL, 250*3251364cSHisping Lin #endif 251*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 252*3251364cSHisping Lin &TeecOperation, 253*3251364cSHisping Lin #endif 254ae8ec5e1SHisping Lin &ErrorOrigin); 255ae8ec5e1SHisping Lin 256ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 257ae8ec5e1SHisping Lin 258ae8ec5e1SHisping Lin SharedMem0.size = 8; 259ae8ec5e1SHisping Lin SharedMem0.flags = 0; 260ae8ec5e1SHisping Lin 261ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 262ae8ec5e1SHisping Lin 263ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, hs, SharedMem0.size); 264ae8ec5e1SHisping Lin 265ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 266ae8ec5e1SHisping Lin 267ae8ec5e1SHisping Lin SharedMem1.size = 8; 268ae8ec5e1SHisping Lin SharedMem1.flags = 0; 269ae8ec5e1SHisping Lin 270ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 271ae8ec5e1SHisping Lin 272ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, (char *)&value, SharedMem1.size); 273ae8ec5e1SHisping Lin 274ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 275ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 276ae8ec5e1SHisping Lin 277ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 278ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 279ae8ec5e1SHisping Lin 280ae8ec5e1SHisping Lin 281ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 282ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 283ae8ec5e1SHisping Lin TEEC_NONE, 284ae8ec5e1SHisping Lin TEEC_NONE); 285ae8ec5e1SHisping Lin 286ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 287ae8ec5e1SHisping Lin 1, 288ae8ec5e1SHisping Lin &TeecOperation, 289ae8ec5e1SHisping Lin &ErrorOrigin); 290ae8ec5e1SHisping Lin 291ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 292ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 293ae8ec5e1SHisping Lin 294ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 295ae8ec5e1SHisping Lin 29646b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 297ae8ec5e1SHisping Lin 298ae8ec5e1SHisping Lin debug("testmm end\n"); 299ae8ec5e1SHisping Lin 300ae8ec5e1SHisping Lin return TeecResult; 301ae8ec5e1SHisping Lin } 302ae8ec5e1SHisping Lin 303ae8ec5e1SHisping Lin uint32_t trusty_read_permanent_attributes(uint8_t *attributes, uint32_t size) 304ae8ec5e1SHisping Lin { 305ae8ec5e1SHisping Lin TEEC_Result TeecResult; 306ae8ec5e1SHisping Lin TEEC_Context TeecContext; 307ae8ec5e1SHisping Lin TEEC_Session TeecSession; 308ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 30946b2a054SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 31046b2a054SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 311ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 312ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 313*3251364cSHisping Lin struct blk_desc *dev_desc; 314*3251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 315ae8ec5e1SHisping Lin 316ae8ec5e1SHisping Lin debug("testmm start\n"); 317ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 318ae8ec5e1SHisping Lin 319ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 320ae8ec5e1SHisping Lin 321*3251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 322*3251364cSHisping Lin TEEC_NONE, 323*3251364cSHisping Lin TEEC_NONE, 324*3251364cSHisping Lin TEEC_NONE); 325*3251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 326*3251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 327*3251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 328*3251364cSHisping Lin TeecOperation.params[0].value.a = 0; 329*3251364cSHisping Lin #endif 330*3251364cSHisping Lin 331ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 332ae8ec5e1SHisping Lin &TeecSession, 333ae8ec5e1SHisping Lin TeecUuid, 334ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 335ae8ec5e1SHisping Lin NULL, 336*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 337ae8ec5e1SHisping Lin NULL, 338*3251364cSHisping Lin #endif 339*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 340*3251364cSHisping Lin &TeecOperation, 341*3251364cSHisping Lin #endif 342ae8ec5e1SHisping Lin &ErrorOrigin); 343ae8ec5e1SHisping Lin 344ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 345ae8ec5e1SHisping Lin 346ae8ec5e1SHisping Lin SharedMem0.size = sizeof("attributes"); 347ae8ec5e1SHisping Lin SharedMem0.flags = 0; 348ae8ec5e1SHisping Lin 349ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 350ae8ec5e1SHisping Lin 351ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "attributes", SharedMem0.size); 352ae8ec5e1SHisping Lin 353ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 354ae8ec5e1SHisping Lin 355ae8ec5e1SHisping Lin SharedMem1.size = size; 356ae8ec5e1SHisping Lin SharedMem1.flags = 0; 357ae8ec5e1SHisping Lin 358ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 359ae8ec5e1SHisping Lin 360ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 361ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 362ae8ec5e1SHisping Lin 363ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 364ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 365ae8ec5e1SHisping Lin 366ae8ec5e1SHisping Lin 367ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 368ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 369ae8ec5e1SHisping Lin TEEC_NONE, 370ae8ec5e1SHisping Lin TEEC_NONE); 371ae8ec5e1SHisping Lin 372ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 37346b2a054SHisping Lin 142, 374ae8ec5e1SHisping Lin &TeecOperation, 375ae8ec5e1SHisping Lin &ErrorOrigin); 37646b2a054SHisping Lin if (TeecResult == TEEC_SUCCESS) 377ae8ec5e1SHisping Lin memcpy(attributes, SharedMem1.buffer, SharedMem1.size); 378ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 379ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 380ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 38146b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 382ae8ec5e1SHisping Lin debug("testmm end\n"); 383ae8ec5e1SHisping Lin 384ae8ec5e1SHisping Lin return TeecResult; 385ae8ec5e1SHisping Lin } 386ae8ec5e1SHisping Lin 387ae8ec5e1SHisping Lin uint32_t trusty_write_permanent_attributes(uint8_t *attributes, uint32_t size) 388ae8ec5e1SHisping Lin { 389ae8ec5e1SHisping Lin TEEC_Result TeecResult; 390ae8ec5e1SHisping Lin TEEC_Context TeecContext; 391ae8ec5e1SHisping Lin TEEC_Session TeecSession; 392ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 39346b2a054SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 39446b2a054SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 395ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 396ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 397*3251364cSHisping Lin struct blk_desc *dev_desc; 398*3251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 399ae8ec5e1SHisping Lin 400ae8ec5e1SHisping Lin debug("testmm start\n"); 401ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 402ae8ec5e1SHisping Lin 403ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 404ae8ec5e1SHisping Lin 405*3251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 406*3251364cSHisping Lin TEEC_NONE, 407*3251364cSHisping Lin TEEC_NONE, 408*3251364cSHisping Lin TEEC_NONE); 409*3251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 410*3251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 411*3251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 412*3251364cSHisping Lin TeecOperation.params[0].value.a = 0; 413*3251364cSHisping Lin #endif 414*3251364cSHisping Lin 415ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 416ae8ec5e1SHisping Lin &TeecSession, 417ae8ec5e1SHisping Lin TeecUuid, 418ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 419ae8ec5e1SHisping Lin NULL, 420*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 421ae8ec5e1SHisping Lin NULL, 422*3251364cSHisping Lin #endif 423*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 424*3251364cSHisping Lin &TeecOperation, 425*3251364cSHisping Lin #endif 426ae8ec5e1SHisping Lin &ErrorOrigin); 427ae8ec5e1SHisping Lin 428ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 429ae8ec5e1SHisping Lin 430ae8ec5e1SHisping Lin SharedMem0.size = sizeof("attributes"); 431ae8ec5e1SHisping Lin SharedMem0.flags = 0; 432ae8ec5e1SHisping Lin 433ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 434ae8ec5e1SHisping Lin 435ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "attributes", SharedMem0.size); 436ae8ec5e1SHisping Lin 437ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 438ae8ec5e1SHisping Lin 439ae8ec5e1SHisping Lin SharedMem1.size = size; 440ae8ec5e1SHisping Lin SharedMem1.flags = 0; 441ae8ec5e1SHisping Lin 442ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 443ae8ec5e1SHisping Lin 444ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, attributes, SharedMem1.size); 445ae8ec5e1SHisping Lin 446ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 447ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 448ae8ec5e1SHisping Lin 449ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 450ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 451ae8ec5e1SHisping Lin 452ae8ec5e1SHisping Lin 453ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 454ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 455ae8ec5e1SHisping Lin TEEC_NONE, 456ae8ec5e1SHisping Lin TEEC_NONE); 457ae8ec5e1SHisping Lin 458ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 45946b2a054SHisping Lin 141, 460ae8ec5e1SHisping Lin &TeecOperation, 461ae8ec5e1SHisping Lin &ErrorOrigin); 462ae8ec5e1SHisping Lin 463ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 464ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 465ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 46646b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 467ae8ec5e1SHisping Lin debug("testmm end\n"); 468ae8ec5e1SHisping Lin 469ae8ec5e1SHisping Lin return TeecResult; 470ae8ec5e1SHisping Lin } 471ae8ec5e1SHisping Lin 472ae8ec5e1SHisping Lin uint32_t trusty_read_lock_state(uint8_t *lock_state) 473ae8ec5e1SHisping Lin { 474ae8ec5e1SHisping Lin TEEC_Result TeecResult; 475ae8ec5e1SHisping Lin TEEC_Context TeecContext; 476ae8ec5e1SHisping Lin TEEC_Session TeecSession; 477ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 478ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 479ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 480ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 481ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 482*3251364cSHisping Lin struct blk_desc *dev_desc; 483*3251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 484ae8ec5e1SHisping Lin 485ae8ec5e1SHisping Lin debug("testmm start\n"); 486ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 487ae8ec5e1SHisping Lin 488ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 489ae8ec5e1SHisping Lin 490*3251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 491*3251364cSHisping Lin TEEC_NONE, 492*3251364cSHisping Lin TEEC_NONE, 493*3251364cSHisping Lin TEEC_NONE); 494*3251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 495*3251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 496*3251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 497*3251364cSHisping Lin TeecOperation.params[0].value.a = 0; 498*3251364cSHisping Lin #endif 499ae8ec5e1SHisping Lin 500ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 501ae8ec5e1SHisping Lin &TeecSession, 502ae8ec5e1SHisping Lin TeecUuid, 503ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 504ae8ec5e1SHisping Lin NULL, 505*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 506ae8ec5e1SHisping Lin NULL, 507*3251364cSHisping Lin #endif 508*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 509*3251364cSHisping Lin &TeecOperation, 510*3251364cSHisping Lin #endif 511ae8ec5e1SHisping Lin &ErrorOrigin); 512ae8ec5e1SHisping Lin 513ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 514ae8ec5e1SHisping Lin 515ae8ec5e1SHisping Lin SharedMem0.size = sizeof("lock_state"); 516ae8ec5e1SHisping Lin SharedMem0.flags = 0; 517ae8ec5e1SHisping Lin 518ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 519ae8ec5e1SHisping Lin 520ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "lock_state", SharedMem0.size); 521ae8ec5e1SHisping Lin 522ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 523ae8ec5e1SHisping Lin 524ae8ec5e1SHisping Lin SharedMem1.size = 1; 525ae8ec5e1SHisping Lin SharedMem1.flags = 0; 526ae8ec5e1SHisping Lin 527ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 528ae8ec5e1SHisping Lin 529ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 530ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 531ae8ec5e1SHisping Lin 532ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 533ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 534ae8ec5e1SHisping Lin 535ae8ec5e1SHisping Lin 536ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 537ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 538ae8ec5e1SHisping Lin TEEC_NONE, 539ae8ec5e1SHisping Lin TEEC_NONE); 540ae8ec5e1SHisping Lin 541ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 542ae8ec5e1SHisping Lin 0, 543ae8ec5e1SHisping Lin &TeecOperation, 544ae8ec5e1SHisping Lin &ErrorOrigin); 54546b2a054SHisping Lin if (TeecResult == TEEC_SUCCESS) 546ae8ec5e1SHisping Lin memcpy(lock_state, SharedMem1.buffer, SharedMem1.size); 547ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 548ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 549ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 55046b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 551ae8ec5e1SHisping Lin debug("testmm end\n"); 552ae8ec5e1SHisping Lin 553ae8ec5e1SHisping Lin return TeecResult; 554ae8ec5e1SHisping Lin } 555ae8ec5e1SHisping Lin 556ae8ec5e1SHisping Lin uint32_t trusty_write_lock_state(uint8_t lock_state) 557ae8ec5e1SHisping Lin { 558ae8ec5e1SHisping Lin TEEC_Result TeecResult; 559ae8ec5e1SHisping Lin TEEC_Context TeecContext; 560ae8ec5e1SHisping Lin TEEC_Session TeecSession; 561ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 562ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 563ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 564ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 565ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 566*3251364cSHisping Lin struct blk_desc *dev_desc; 567*3251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 568ae8ec5e1SHisping Lin 569ae8ec5e1SHisping Lin debug("testmm start\n"); 570ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 571ae8ec5e1SHisping Lin 572ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 573ae8ec5e1SHisping Lin 574*3251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 575*3251364cSHisping Lin TEEC_NONE, 576*3251364cSHisping Lin TEEC_NONE, 577*3251364cSHisping Lin TEEC_NONE); 578*3251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 579*3251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 580*3251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 581*3251364cSHisping Lin TeecOperation.params[0].value.a = 0; 582*3251364cSHisping Lin #endif 583*3251364cSHisping Lin 584ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 585ae8ec5e1SHisping Lin &TeecSession, 586ae8ec5e1SHisping Lin TeecUuid, 587ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 588ae8ec5e1SHisping Lin NULL, 589*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 590ae8ec5e1SHisping Lin NULL, 591*3251364cSHisping Lin #endif 592*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 593*3251364cSHisping Lin &TeecOperation, 594*3251364cSHisping Lin #endif 595ae8ec5e1SHisping Lin &ErrorOrigin); 596ae8ec5e1SHisping Lin 597ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 598ae8ec5e1SHisping Lin 599ae8ec5e1SHisping Lin SharedMem0.size = sizeof("lock_state"); 600ae8ec5e1SHisping Lin SharedMem0.flags = 0; 601ae8ec5e1SHisping Lin 602ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 603ae8ec5e1SHisping Lin 604ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "lock_state", SharedMem0.size); 605ae8ec5e1SHisping Lin 606ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 607ae8ec5e1SHisping Lin 608ae8ec5e1SHisping Lin SharedMem1.size = 1; 609ae8ec5e1SHisping Lin SharedMem1.flags = 0; 610ae8ec5e1SHisping Lin 611ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 612ae8ec5e1SHisping Lin 613ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, &lock_state, SharedMem1.size); 614ae8ec5e1SHisping Lin 615ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 616ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 617ae8ec5e1SHisping Lin 618ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 619ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 620ae8ec5e1SHisping Lin 621ae8ec5e1SHisping Lin 622ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 623ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 624ae8ec5e1SHisping Lin TEEC_NONE, 625ae8ec5e1SHisping Lin TEEC_NONE); 626ae8ec5e1SHisping Lin 627ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 628ae8ec5e1SHisping Lin 1, 629ae8ec5e1SHisping Lin &TeecOperation, 630ae8ec5e1SHisping Lin &ErrorOrigin); 631ae8ec5e1SHisping Lin 632ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 633ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 634ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 63546b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 636ae8ec5e1SHisping Lin debug("testmm end\n"); 637ae8ec5e1SHisping Lin 638ae8ec5e1SHisping Lin return TeecResult; 639ae8ec5e1SHisping Lin } 640ae8ec5e1SHisping Lin 641ae8ec5e1SHisping Lin uint32_t trusty_read_flash_lock_state(uint8_t *flash_lock_state) 642ae8ec5e1SHisping Lin { 643ae8ec5e1SHisping Lin TEEC_Result TeecResult; 644ae8ec5e1SHisping Lin TEEC_Context TeecContext; 645ae8ec5e1SHisping Lin TEEC_Session TeecSession; 646ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 647ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 648ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 649ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 650ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 651*3251364cSHisping Lin struct blk_desc *dev_desc; 652*3251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 653ae8ec5e1SHisping Lin 654ae8ec5e1SHisping Lin debug("testmm start\n"); 655ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 656ae8ec5e1SHisping Lin 657ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 658ae8ec5e1SHisping Lin 659*3251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 660*3251364cSHisping Lin TEEC_NONE, 661*3251364cSHisping Lin TEEC_NONE, 662*3251364cSHisping Lin TEEC_NONE); 663*3251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 664*3251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 665*3251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 666*3251364cSHisping Lin TeecOperation.params[0].value.a = 0; 667*3251364cSHisping Lin #endif 668ae8ec5e1SHisping Lin 669ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 670ae8ec5e1SHisping Lin &TeecSession, 671ae8ec5e1SHisping Lin TeecUuid, 672ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 673ae8ec5e1SHisping Lin NULL, 674*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 675ae8ec5e1SHisping Lin NULL, 676*3251364cSHisping Lin #endif 677*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 678*3251364cSHisping Lin &TeecOperation, 679*3251364cSHisping Lin #endif 680ae8ec5e1SHisping Lin &ErrorOrigin); 681ae8ec5e1SHisping Lin 682ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 683ae8ec5e1SHisping Lin 684ae8ec5e1SHisping Lin SharedMem0.size = sizeof("flash_lock_state"); 685ae8ec5e1SHisping Lin SharedMem0.flags = 0; 686ae8ec5e1SHisping Lin 687ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 688ae8ec5e1SHisping Lin 689ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "flash_lock_state", SharedMem0.size); 690ae8ec5e1SHisping Lin 691ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 692ae8ec5e1SHisping Lin 693ae8ec5e1SHisping Lin SharedMem1.size = 1; 694ae8ec5e1SHisping Lin SharedMem1.flags = 0; 695ae8ec5e1SHisping Lin 696ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 697ae8ec5e1SHisping Lin 698ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 699ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 700ae8ec5e1SHisping Lin 701ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 702ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 703ae8ec5e1SHisping Lin 704ae8ec5e1SHisping Lin 705ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 706ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 707ae8ec5e1SHisping Lin TEEC_NONE, 708ae8ec5e1SHisping Lin TEEC_NONE); 709ae8ec5e1SHisping Lin 710ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 711ae8ec5e1SHisping Lin 0, 712ae8ec5e1SHisping Lin &TeecOperation, 713ae8ec5e1SHisping Lin &ErrorOrigin); 71446b2a054SHisping Lin if (TeecResult == TEEC_SUCCESS) 715ae8ec5e1SHisping Lin memcpy(flash_lock_state, SharedMem1.buffer, SharedMem1.size); 716ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 717ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 718ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 71946b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 720ae8ec5e1SHisping Lin debug("testmm end\n"); 721ae8ec5e1SHisping Lin 722ae8ec5e1SHisping Lin return TeecResult; 723ae8ec5e1SHisping Lin } 724ae8ec5e1SHisping Lin 725ae8ec5e1SHisping Lin 726ae8ec5e1SHisping Lin uint32_t trusty_write_flash_lock_state(uint8_t flash_lock_state) 727ae8ec5e1SHisping Lin { 728ae8ec5e1SHisping Lin TEEC_Result TeecResult; 729ae8ec5e1SHisping Lin TEEC_Context TeecContext; 730ae8ec5e1SHisping Lin TEEC_Session TeecSession; 731ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 732ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 733ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 734ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 735ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 736*3251364cSHisping Lin struct blk_desc *dev_desc; 737*3251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 738ae8ec5e1SHisping Lin 739ae8ec5e1SHisping Lin debug("testmm start\n"); 740ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 741ae8ec5e1SHisping Lin 742ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 743ae8ec5e1SHisping Lin 744*3251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 745*3251364cSHisping Lin TEEC_NONE, 746*3251364cSHisping Lin TEEC_NONE, 747*3251364cSHisping Lin TEEC_NONE); 748*3251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 749*3251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 750*3251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 751*3251364cSHisping Lin TeecOperation.params[0].value.a = 0; 752*3251364cSHisping Lin #endif 753*3251364cSHisping Lin 754ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 755ae8ec5e1SHisping Lin &TeecSession, 756ae8ec5e1SHisping Lin TeecUuid, 757ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 758ae8ec5e1SHisping Lin NULL, 759*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 760ae8ec5e1SHisping Lin NULL, 761*3251364cSHisping Lin #endif 762*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 763*3251364cSHisping Lin &TeecOperation, 764*3251364cSHisping Lin #endif 765ae8ec5e1SHisping Lin &ErrorOrigin); 766ae8ec5e1SHisping Lin 767ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 768ae8ec5e1SHisping Lin 769ae8ec5e1SHisping Lin SharedMem0.size = sizeof("flash_lock_state"); 770ae8ec5e1SHisping Lin SharedMem0.flags = 0; 771ae8ec5e1SHisping Lin 772ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 773ae8ec5e1SHisping Lin 774ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "flash_lock_state", SharedMem0.size); 775ae8ec5e1SHisping Lin 776ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 777ae8ec5e1SHisping Lin 778ae8ec5e1SHisping Lin SharedMem1.size = 1; 779ae8ec5e1SHisping Lin SharedMem1.flags = 0; 780ae8ec5e1SHisping Lin 781ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 782ae8ec5e1SHisping Lin 783ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, &flash_lock_state, SharedMem1.size); 784ae8ec5e1SHisping Lin 785ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 786ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 787ae8ec5e1SHisping Lin 788ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 789ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 790ae8ec5e1SHisping Lin 791ae8ec5e1SHisping Lin 792ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 793ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 794ae8ec5e1SHisping Lin TEEC_NONE, 795ae8ec5e1SHisping Lin TEEC_NONE); 796ae8ec5e1SHisping Lin 797ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 798ae8ec5e1SHisping Lin 1, 799ae8ec5e1SHisping Lin &TeecOperation, 800ae8ec5e1SHisping Lin &ErrorOrigin); 801ae8ec5e1SHisping Lin 802ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 803ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 804ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 80546b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 806ae8ec5e1SHisping Lin debug("testmm end\n"); 807ae8ec5e1SHisping Lin 808ae8ec5e1SHisping Lin return TeecResult; 809ae8ec5e1SHisping Lin } 810ae8ec5e1SHisping Lin 811ae8ec5e1SHisping Lin uint32_t write_to_keymaster(uint8_t *filename, 812ae8ec5e1SHisping Lin uint32_t filename_size, 813ae8ec5e1SHisping Lin uint8_t *data, 814ae8ec5e1SHisping Lin uint32_t data_size) 815ae8ec5e1SHisping Lin { 816ae8ec5e1SHisping Lin TEEC_Result TeecResult; 817ae8ec5e1SHisping Lin TEEC_Context TeecContext; 818ae8ec5e1SHisping Lin TEEC_Session TeecSession; 819ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 820ae8ec5e1SHisping Lin 821ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 822ae8ec5e1SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 823ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 824ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 825*3251364cSHisping Lin struct blk_desc *dev_desc; 826*3251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 827ae8ec5e1SHisping Lin 828ae8ec5e1SHisping Lin debug("write_to_keymaster\n"); 829ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 830ae8ec5e1SHisping Lin 831ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 832ae8ec5e1SHisping Lin 833*3251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 834*3251364cSHisping Lin TEEC_NONE, 835*3251364cSHisping Lin TEEC_NONE, 836*3251364cSHisping Lin TEEC_NONE); 837*3251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 838*3251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 839*3251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 840*3251364cSHisping Lin TeecOperation.params[0].value.a = 0; 841*3251364cSHisping Lin #endif 842*3251364cSHisping Lin 843ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 844ae8ec5e1SHisping Lin &TeecSession, 845ae8ec5e1SHisping Lin TeecUuid, 846ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 847ae8ec5e1SHisping Lin NULL, 848*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 849ae8ec5e1SHisping Lin NULL, 850*3251364cSHisping Lin #endif 851*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 852*3251364cSHisping Lin &TeecOperation, 853*3251364cSHisping Lin #endif 854ae8ec5e1SHisping Lin &ErrorOrigin); 855ae8ec5e1SHisping Lin 856ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 857ae8ec5e1SHisping Lin 858ae8ec5e1SHisping Lin SharedMem0.size = filename_size; 859ae8ec5e1SHisping Lin SharedMem0.flags = 0; 860ae8ec5e1SHisping Lin 861ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 862ae8ec5e1SHisping Lin 863ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, filename, SharedMem0.size); 864ae8ec5e1SHisping Lin 865ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 866ae8ec5e1SHisping Lin 867ae8ec5e1SHisping Lin SharedMem1.size = data_size; 868ae8ec5e1SHisping Lin SharedMem1.flags = 0; 869ae8ec5e1SHisping Lin 870ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 871ae8ec5e1SHisping Lin 872ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, data, SharedMem1.size); 873ae8ec5e1SHisping Lin 874ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 875ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 876ae8ec5e1SHisping Lin 877ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 878ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 879ae8ec5e1SHisping Lin 880ae8ec5e1SHisping Lin 881ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 882ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 883ae8ec5e1SHisping Lin TEEC_NONE, 884ae8ec5e1SHisping Lin TEEC_NONE); 885ae8ec5e1SHisping Lin 886ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 8871f25ada2SHisping Lin 141, 888ae8ec5e1SHisping Lin &TeecOperation, 889ae8ec5e1SHisping Lin &ErrorOrigin); 890ae8ec5e1SHisping Lin 891ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 892ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 893ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 89446b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 895ae8ec5e1SHisping Lin debug("testmm end\n"); 896ae8ec5e1SHisping Lin debug("TeecResult %x\n", TeecResult); 897ae8ec5e1SHisping Lin 898ae8ec5e1SHisping Lin return TeecResult; 899ae8ec5e1SHisping Lin } 9006ef445a4SHisping Lin 9016ef445a4SHisping Lin uint32_t trusty_read_attribute_hash(uint32_t *buf, uint32_t length) 9026ef445a4SHisping Lin { 9036ef445a4SHisping Lin TEEC_Result TeecResult; 9046ef445a4SHisping Lin TEEC_Context TeecContext; 9056ef445a4SHisping Lin TEEC_Session TeecSession; 9066ef445a4SHisping Lin uint32_t ErrorOrigin; 9076ef445a4SHisping Lin 9086ef445a4SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 9096ef445a4SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 9106ef445a4SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 9116ef445a4SHisping Lin TEEC_Operation TeecOperation = {0}; 9126ef445a4SHisping Lin 9136ef445a4SHisping Lin OpteeClientApiLibInitialize(); 9146ef445a4SHisping Lin 9156ef445a4SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 9166ef445a4SHisping Lin 9176ef445a4SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 9186ef445a4SHisping Lin &TeecSession, 9196ef445a4SHisping Lin TeecUuid, 9206ef445a4SHisping Lin TEEC_LOGIN_PUBLIC, 9216ef445a4SHisping Lin NULL, 9226ef445a4SHisping Lin NULL, 9236ef445a4SHisping Lin &ErrorOrigin); 9246ef445a4SHisping Lin 9256ef445a4SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 9266ef445a4SHisping Lin 9276ef445a4SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 9286ef445a4SHisping Lin SharedMem0.flags = 0; 9296ef445a4SHisping Lin 9306ef445a4SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 9316ef445a4SHisping Lin 9326ef445a4SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 9336ef445a4SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 9346ef445a4SHisping Lin 9356ef445a4SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, 9366ef445a4SHisping Lin TEEC_NONE, 9376ef445a4SHisping Lin TEEC_NONE, 9386ef445a4SHisping Lin TEEC_NONE); 9396ef445a4SHisping Lin 9406ef445a4SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 9416ef445a4SHisping Lin 0, 9426ef445a4SHisping Lin &TeecOperation, 9436ef445a4SHisping Lin &ErrorOrigin); 9446ef445a4SHisping Lin 9456ef445a4SHisping Lin if (TeecResult == TEEC_SUCCESS) 9466ef445a4SHisping Lin memcpy(buf, SharedMem0.buffer, SharedMem0.size); 9476ef445a4SHisping Lin 9486ef445a4SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 9496ef445a4SHisping Lin TEEC_CloseSession(&TeecSession); 9506ef445a4SHisping Lin TEEC_FinalizeContext(&TeecContext); 9516ef445a4SHisping Lin 9526ef445a4SHisping Lin return TeecResult; 9536ef445a4SHisping Lin } 9546ef445a4SHisping Lin 9556ef445a4SHisping Lin uint32_t trusty_write_attribute_hash(uint32_t *buf, uint32_t length) 9566ef445a4SHisping Lin { 9576ef445a4SHisping Lin TEEC_Result TeecResult; 9586ef445a4SHisping Lin TEEC_Context TeecContext; 9596ef445a4SHisping Lin TEEC_Session TeecSession; 9606ef445a4SHisping Lin uint32_t ErrorOrigin; 9616ef445a4SHisping Lin 9626ef445a4SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 9636ef445a4SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 9646ef445a4SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 9656ef445a4SHisping Lin TEEC_Operation TeecOperation = {0}; 9666ef445a4SHisping Lin 9676ef445a4SHisping Lin OpteeClientApiLibInitialize(); 9686ef445a4SHisping Lin 9696ef445a4SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 9706ef445a4SHisping Lin 9716ef445a4SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 9726ef445a4SHisping Lin &TeecSession, 9736ef445a4SHisping Lin TeecUuid, 9746ef445a4SHisping Lin TEEC_LOGIN_PUBLIC, 9756ef445a4SHisping Lin NULL, 9766ef445a4SHisping Lin NULL, 9776ef445a4SHisping Lin &ErrorOrigin); 9786ef445a4SHisping Lin 9796ef445a4SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 9806ef445a4SHisping Lin 9816ef445a4SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 9826ef445a4SHisping Lin SharedMem0.flags = 0; 9836ef445a4SHisping Lin 9846ef445a4SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 9856ef445a4SHisping Lin 9866ef445a4SHisping Lin memcpy(SharedMem0.buffer, buf, SharedMem0.size); 9876ef445a4SHisping Lin 9886ef445a4SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 9896ef445a4SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 9906ef445a4SHisping Lin 9916ef445a4SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 9926ef445a4SHisping Lin TEEC_NONE, 9936ef445a4SHisping Lin TEEC_NONE, 9946ef445a4SHisping Lin TEEC_NONE); 9956ef445a4SHisping Lin 9966ef445a4SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 9976ef445a4SHisping Lin 1, 9986ef445a4SHisping Lin &TeecOperation, 9996ef445a4SHisping Lin &ErrorOrigin); 10006ef445a4SHisping Lin 10016ef445a4SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 10026ef445a4SHisping Lin TEEC_CloseSession(&TeecSession); 10036ef445a4SHisping Lin TEEC_FinalizeContext(&TeecContext); 10046ef445a4SHisping Lin 10056ef445a4SHisping Lin return TeecResult; 10066ef445a4SHisping Lin } 100716539616SHisping Lin 100816539616SHisping Lin uint32_t notify_optee_rpmb_ta(void) 100916539616SHisping Lin { 101016539616SHisping Lin TEEC_Result TeecResult; 101116539616SHisping Lin TEEC_Context TeecContext; 101216539616SHisping Lin TEEC_Session TeecSession; 101316539616SHisping Lin uint32_t ErrorOrigin; 101416539616SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 101516539616SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 101616539616SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 101716539616SHisping Lin TEEC_Operation TeecOperation = {0}; 101816539616SHisping Lin 101916539616SHisping Lin OpteeClientApiLibInitialize(); 102016539616SHisping Lin 102116539616SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 102216539616SHisping Lin 102316539616SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 102416539616SHisping Lin &TeecSession, 102516539616SHisping Lin TeecUuid, 102616539616SHisping Lin TEEC_LOGIN_PUBLIC, 102716539616SHisping Lin NULL, 102816539616SHisping Lin NULL, 102916539616SHisping Lin &ErrorOrigin); 103016539616SHisping Lin 103116539616SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, 103216539616SHisping Lin TEEC_NONE, 103316539616SHisping Lin TEEC_NONE, 103416539616SHisping Lin TEEC_NONE); 103516539616SHisping Lin 103616539616SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 103716539616SHisping Lin 2, 103816539616SHisping Lin &TeecOperation, 103916539616SHisping Lin &ErrorOrigin); 104016539616SHisping Lin 104116539616SHisping Lin TEEC_CloseSession(&TeecSession); 104216539616SHisping Lin TEEC_FinalizeContext(&TeecContext); 104316539616SHisping Lin 104416539616SHisping Lin return TeecResult; 104516539616SHisping Lin } 104616539616SHisping Lin 104716539616SHisping Lin uint32_t notify_optee_efuse_ta(void) 104816539616SHisping Lin { 104916539616SHisping Lin TEEC_Result TeecResult; 105016539616SHisping Lin TEEC_Context TeecContext; 105116539616SHisping Lin TEEC_Session TeecSession; 105216539616SHisping Lin uint32_t ErrorOrigin; 105316539616SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 105416539616SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 105516539616SHisping Lin 105616539616SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 105716539616SHisping Lin TEEC_Operation TeecOperation = {0}; 105816539616SHisping Lin 105916539616SHisping Lin OpteeClientApiLibInitialize(); 106016539616SHisping Lin 106116539616SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 106216539616SHisping Lin 106316539616SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 106416539616SHisping Lin &TeecSession, 106516539616SHisping Lin TeecUuid, 106616539616SHisping Lin TEEC_LOGIN_PUBLIC, 106716539616SHisping Lin NULL, 106816539616SHisping Lin NULL, 106916539616SHisping Lin &ErrorOrigin); 107016539616SHisping Lin 107116539616SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, 107216539616SHisping Lin TEEC_NONE, 107316539616SHisping Lin TEEC_NONE, 107416539616SHisping Lin TEEC_NONE); 107516539616SHisping Lin 107616539616SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 107716539616SHisping Lin 2, 107816539616SHisping Lin &TeecOperation, 107916539616SHisping Lin &ErrorOrigin); 108016539616SHisping Lin 108116539616SHisping Lin TEEC_CloseSession(&TeecSession); 108216539616SHisping Lin TEEC_FinalizeContext(&TeecContext); 108316539616SHisping Lin 108416539616SHisping Lin return TeecResult; 108516539616SHisping Lin } 108616539616SHisping Lin 108716539616SHisping Lin uint32_t trusty_notify_optee_uboot_end(void) 108816539616SHisping Lin { 108916539616SHisping Lin TEEC_Result res; 109016539616SHisping Lin res = notify_optee_rpmb_ta(); 109116539616SHisping Lin res |= notify_optee_efuse_ta(); 109216539616SHisping Lin return res; 109316539616SHisping Lin } 10942cd27853SHisping Lin 10952cd27853SHisping Lin uint32_t trusty_read_vbootkey_hash(uint32_t *buf, uint32_t length) 10962cd27853SHisping Lin { 10972cd27853SHisping Lin TEEC_Result TeecResult; 10982cd27853SHisping Lin TEEC_Context TeecContext; 10992cd27853SHisping Lin TEEC_Session TeecSession; 11002cd27853SHisping Lin uint32_t ErrorOrigin; 11012cd27853SHisping Lin 11022cd27853SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 11032cd27853SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 11042cd27853SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 11052cd27853SHisping Lin TEEC_Operation TeecOperation = {0}; 11062cd27853SHisping Lin 11072cd27853SHisping Lin OpteeClientApiLibInitialize(); 11082cd27853SHisping Lin 11092cd27853SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 11102cd27853SHisping Lin 11112cd27853SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 11122cd27853SHisping Lin &TeecSession, 11132cd27853SHisping Lin TeecUuid, 11142cd27853SHisping Lin TEEC_LOGIN_PUBLIC, 11152cd27853SHisping Lin NULL, 11162cd27853SHisping Lin NULL, 11172cd27853SHisping Lin &ErrorOrigin); 11182cd27853SHisping Lin 11192cd27853SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 11202cd27853SHisping Lin 11212cd27853SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 11222cd27853SHisping Lin SharedMem0.flags = 0; 11232cd27853SHisping Lin 11242cd27853SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 11252cd27853SHisping Lin 11262cd27853SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 11272cd27853SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 11282cd27853SHisping Lin 11292cd27853SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, 11302cd27853SHisping Lin TEEC_NONE, 11312cd27853SHisping Lin TEEC_NONE, 11322cd27853SHisping Lin TEEC_NONE); 11332cd27853SHisping Lin 11342cd27853SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 11352cd27853SHisping Lin 3, 11362cd27853SHisping Lin &TeecOperation, 11372cd27853SHisping Lin &ErrorOrigin); 11382cd27853SHisping Lin 11392cd27853SHisping Lin if (TeecResult == TEEC_SUCCESS) 11402cd27853SHisping Lin memcpy(buf, SharedMem0.buffer, SharedMem0.size); 11412cd27853SHisping Lin 11422cd27853SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 11432cd27853SHisping Lin TEEC_CloseSession(&TeecSession); 11442cd27853SHisping Lin TEEC_FinalizeContext(&TeecContext); 11452cd27853SHisping Lin 11462cd27853SHisping Lin return TeecResult; 11472cd27853SHisping Lin } 11482cd27853SHisping Lin uint32_t trusty_write_vbootkey_hash(uint32_t *buf, uint32_t length) 11492cd27853SHisping Lin { 11502cd27853SHisping Lin TEEC_Result TeecResult; 11512cd27853SHisping Lin TEEC_Context TeecContext; 11522cd27853SHisping Lin TEEC_Session TeecSession; 11532cd27853SHisping Lin uint32_t ErrorOrigin; 11542cd27853SHisping Lin 11552cd27853SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 11562cd27853SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 11572cd27853SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 11582cd27853SHisping Lin TEEC_Operation TeecOperation = {0}; 11592cd27853SHisping Lin 11602cd27853SHisping Lin OpteeClientApiLibInitialize(); 11612cd27853SHisping Lin 11622cd27853SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 11632cd27853SHisping Lin 11642cd27853SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 11652cd27853SHisping Lin &TeecSession, 11662cd27853SHisping Lin TeecUuid, 11672cd27853SHisping Lin TEEC_LOGIN_PUBLIC, 11682cd27853SHisping Lin NULL, 11692cd27853SHisping Lin NULL, 11702cd27853SHisping Lin &ErrorOrigin); 11712cd27853SHisping Lin 11722cd27853SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 11732cd27853SHisping Lin 11742cd27853SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 11752cd27853SHisping Lin SharedMem0.flags = 0; 11762cd27853SHisping Lin 11772cd27853SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 11782cd27853SHisping Lin 11792cd27853SHisping Lin memcpy(SharedMem0.buffer, buf, SharedMem0.size); 11802cd27853SHisping Lin 11812cd27853SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 11822cd27853SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 11832cd27853SHisping Lin 11842cd27853SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 11852cd27853SHisping Lin TEEC_NONE, 11862cd27853SHisping Lin TEEC_NONE, 11872cd27853SHisping Lin TEEC_NONE); 11882cd27853SHisping Lin 11892cd27853SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 11902cd27853SHisping Lin 4, 11912cd27853SHisping Lin &TeecOperation, 11922cd27853SHisping Lin &ErrorOrigin); 11932cd27853SHisping Lin 11942cd27853SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 11952cd27853SHisping Lin TEEC_CloseSession(&TeecSession); 11962cd27853SHisping Lin TEEC_FinalizeContext(&TeecContext); 11972cd27853SHisping Lin 11982cd27853SHisping Lin return TeecResult; 11992cd27853SHisping Lin } 1200095e2a82SHisping Lin 1201468df3b2SHisping Lin uint32_t trusty_read_vbootkey_enable_flag(uint8_t *flag) 1202468df3b2SHisping Lin { 1203468df3b2SHisping Lin TEEC_Result TeecResult; 1204468df3b2SHisping Lin TEEC_Context TeecContext; 1205468df3b2SHisping Lin TEEC_Session TeecSession; 1206468df3b2SHisping Lin uint32_t ErrorOrigin; 1207468df3b2SHisping Lin uint32_t bootflag; 1208468df3b2SHisping Lin 1209468df3b2SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 1210468df3b2SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 1211468df3b2SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 1212468df3b2SHisping Lin TEEC_Operation TeecOperation = {0}; 1213468df3b2SHisping Lin 1214468df3b2SHisping Lin OpteeClientApiLibInitialize(); 1215468df3b2SHisping Lin 1216468df3b2SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 1217468df3b2SHisping Lin 1218468df3b2SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 1219468df3b2SHisping Lin &TeecSession, 1220468df3b2SHisping Lin TeecUuid, 1221468df3b2SHisping Lin TEEC_LOGIN_PUBLIC, 1222468df3b2SHisping Lin NULL, 1223468df3b2SHisping Lin NULL, 1224468df3b2SHisping Lin &ErrorOrigin); 1225468df3b2SHisping Lin 1226468df3b2SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 1227468df3b2SHisping Lin 1228468df3b2SHisping Lin SharedMem0.size = 1 * sizeof(uint32_t); 1229468df3b2SHisping Lin SharedMem0.flags = 0; 1230468df3b2SHisping Lin 1231468df3b2SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 1232468df3b2SHisping Lin 1233468df3b2SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 1234468df3b2SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 1235468df3b2SHisping Lin 1236468df3b2SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, 1237468df3b2SHisping Lin TEEC_NONE, 1238468df3b2SHisping Lin TEEC_NONE, 1239468df3b2SHisping Lin TEEC_NONE); 1240468df3b2SHisping Lin 1241468df3b2SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 1242468df3b2SHisping Lin 5, 1243468df3b2SHisping Lin &TeecOperation, 1244468df3b2SHisping Lin &ErrorOrigin); 1245468df3b2SHisping Lin 1246468df3b2SHisping Lin if (TeecResult == TEEC_SUCCESS) { 1247468df3b2SHisping Lin memcpy(&bootflag, SharedMem0.buffer, SharedMem0.size); 1248468df3b2SHisping Lin if (bootflag == 0x000000FF) 1249468df3b2SHisping Lin *flag = 1; 1250468df3b2SHisping Lin } 1251468df3b2SHisping Lin 1252468df3b2SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 1253468df3b2SHisping Lin TEEC_CloseSession(&TeecSession); 1254468df3b2SHisping Lin TEEC_FinalizeContext(&TeecContext); 1255468df3b2SHisping Lin 1256468df3b2SHisping Lin return TeecResult; 1257468df3b2SHisping Lin } 1258468df3b2SHisping Lin 1259095e2a82SHisping Lin uint32_t trusty_read_permanent_attributes_flag(uint8_t *attributes) 1260095e2a82SHisping Lin { 1261095e2a82SHisping Lin TEEC_Result TeecResult; 1262095e2a82SHisping Lin TEEC_Context TeecContext; 1263095e2a82SHisping Lin TEEC_Session TeecSession; 1264095e2a82SHisping Lin uint32_t ErrorOrigin; 1265095e2a82SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 1266095e2a82SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 1267095e2a82SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 1268095e2a82SHisping Lin TEEC_Operation TeecOperation = {0}; 1269*3251364cSHisping Lin struct blk_desc *dev_desc; 1270*3251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 1271095e2a82SHisping Lin 1272095e2a82SHisping Lin debug("testmm start\n"); 1273095e2a82SHisping Lin OpteeClientApiLibInitialize(); 1274095e2a82SHisping Lin 1275095e2a82SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 1276095e2a82SHisping Lin 1277*3251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 1278*3251364cSHisping Lin TEEC_NONE, 1279*3251364cSHisping Lin TEEC_NONE, 1280*3251364cSHisping Lin TEEC_NONE); 1281*3251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 1282*3251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 1283*3251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 1284*3251364cSHisping Lin TeecOperation.params[0].value.a = 0; 1285*3251364cSHisping Lin #endif 1286*3251364cSHisping Lin 1287095e2a82SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 1288095e2a82SHisping Lin &TeecSession, 1289095e2a82SHisping Lin TeecUuid, 1290095e2a82SHisping Lin TEEC_LOGIN_PUBLIC, 1291095e2a82SHisping Lin NULL, 1292*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 1293095e2a82SHisping Lin NULL, 1294*3251364cSHisping Lin #endif 1295*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 1296*3251364cSHisping Lin &TeecOperation, 1297*3251364cSHisping Lin #endif 1298095e2a82SHisping Lin &ErrorOrigin); 1299095e2a82SHisping Lin 1300095e2a82SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 1301095e2a82SHisping Lin 1302095e2a82SHisping Lin SharedMem0.size = sizeof("attributes_flag"); 1303095e2a82SHisping Lin SharedMem0.flags = 0; 1304095e2a82SHisping Lin 1305095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 1306095e2a82SHisping Lin 1307095e2a82SHisping Lin memcpy(SharedMem0.buffer, "attributes_flag", SharedMem0.size); 1308095e2a82SHisping Lin 1309095e2a82SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 1310095e2a82SHisping Lin 1311095e2a82SHisping Lin SharedMem1.size = 1; 1312095e2a82SHisping Lin SharedMem1.flags = 0; 1313095e2a82SHisping Lin 1314095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 1315095e2a82SHisping Lin 1316095e2a82SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 1317095e2a82SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 1318095e2a82SHisping Lin 1319095e2a82SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 1320095e2a82SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 1321095e2a82SHisping Lin 1322095e2a82SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 1323095e2a82SHisping Lin TEEC_MEMREF_TEMP_INOUT, 1324095e2a82SHisping Lin TEEC_NONE, 1325095e2a82SHisping Lin TEEC_NONE); 1326095e2a82SHisping Lin 1327095e2a82SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 1328095e2a82SHisping Lin 142, 1329095e2a82SHisping Lin &TeecOperation, 1330095e2a82SHisping Lin &ErrorOrigin); 1331095e2a82SHisping Lin if (TeecResult == TEEC_SUCCESS) 1332095e2a82SHisping Lin memcpy(attributes, SharedMem1.buffer, SharedMem1.size); 1333095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 1334095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 1335095e2a82SHisping Lin TEEC_CloseSession(&TeecSession); 1336095e2a82SHisping Lin TEEC_FinalizeContext(&TeecContext); 1337095e2a82SHisping Lin debug("testmm end\n"); 1338095e2a82SHisping Lin 1339095e2a82SHisping Lin return TeecResult; 1340095e2a82SHisping Lin } 1341095e2a82SHisping Lin 1342095e2a82SHisping Lin uint32_t trusty_write_permanent_attributes_flag(uint8_t attributes) 1343095e2a82SHisping Lin { 1344095e2a82SHisping Lin TEEC_Result TeecResult; 1345095e2a82SHisping Lin TEEC_Context TeecContext; 1346095e2a82SHisping Lin TEEC_Session TeecSession; 1347095e2a82SHisping Lin uint32_t ErrorOrigin; 1348095e2a82SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 1349095e2a82SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 1350095e2a82SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 1351095e2a82SHisping Lin TEEC_Operation TeecOperation = {0}; 1352*3251364cSHisping Lin struct blk_desc *dev_desc; 1353*3251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 1354095e2a82SHisping Lin 1355095e2a82SHisping Lin debug("testmm start\n"); 1356095e2a82SHisping Lin OpteeClientApiLibInitialize(); 1357095e2a82SHisping Lin 1358095e2a82SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 1359095e2a82SHisping Lin 1360*3251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 1361*3251364cSHisping Lin TEEC_NONE, 1362*3251364cSHisping Lin TEEC_NONE, 1363*3251364cSHisping Lin TEEC_NONE); 1364*3251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 1365*3251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 1366*3251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 1367*3251364cSHisping Lin TeecOperation.params[0].value.a = 0; 1368*3251364cSHisping Lin #endif 1369*3251364cSHisping Lin 1370095e2a82SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 1371095e2a82SHisping Lin &TeecSession, 1372095e2a82SHisping Lin TeecUuid, 1373095e2a82SHisping Lin TEEC_LOGIN_PUBLIC, 1374095e2a82SHisping Lin NULL, 1375*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 1376095e2a82SHisping Lin NULL, 1377*3251364cSHisping Lin #endif 1378*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 1379*3251364cSHisping Lin &TeecOperation, 1380*3251364cSHisping Lin #endif 1381095e2a82SHisping Lin &ErrorOrigin); 1382095e2a82SHisping Lin 1383095e2a82SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 1384095e2a82SHisping Lin 1385095e2a82SHisping Lin SharedMem0.size = sizeof("attributes_flag"); 1386095e2a82SHisping Lin SharedMem0.flags = 0; 1387095e2a82SHisping Lin 1388095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 1389095e2a82SHisping Lin 1390095e2a82SHisping Lin memcpy(SharedMem0.buffer, "attributes_flag", SharedMem0.size); 1391095e2a82SHisping Lin 1392095e2a82SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 1393095e2a82SHisping Lin 1394095e2a82SHisping Lin SharedMem1.size = 1; 1395095e2a82SHisping Lin SharedMem1.flags = 0; 1396095e2a82SHisping Lin 1397095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 1398095e2a82SHisping Lin 1399095e2a82SHisping Lin memcpy(SharedMem1.buffer, (char *)&attributes, SharedMem1.size); 1400095e2a82SHisping Lin 1401095e2a82SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 1402095e2a82SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 1403095e2a82SHisping Lin 1404095e2a82SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 1405095e2a82SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 1406095e2a82SHisping Lin 1407095e2a82SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 1408095e2a82SHisping Lin TEEC_MEMREF_TEMP_INOUT, 1409095e2a82SHisping Lin TEEC_NONE, 1410095e2a82SHisping Lin TEEC_NONE); 1411095e2a82SHisping Lin 1412095e2a82SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 1413095e2a82SHisping Lin 141, 1414095e2a82SHisping Lin &TeecOperation, 1415095e2a82SHisping Lin &ErrorOrigin); 1416095e2a82SHisping Lin 1417095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 1418095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 1419095e2a82SHisping Lin TEEC_CloseSession(&TeecSession); 1420095e2a82SHisping Lin TEEC_FinalizeContext(&TeecContext); 1421095e2a82SHisping Lin debug("testmm end\n"); 1422095e2a82SHisping Lin 1423095e2a82SHisping Lin return TeecResult; 1424095e2a82SHisping Lin } 14254aa61755SAndy Ye 14264aa61755SAndy Ye uint32_t trusty_attest_dh(uint8_t *dh, uint32_t *dh_size) 14274aa61755SAndy Ye { 14284aa61755SAndy Ye TEEC_Result TeecResult; 14294aa61755SAndy Ye TEEC_Context TeecContext; 14304aa61755SAndy Ye TEEC_Session TeecSession; 14314aa61755SAndy Ye uint32_t ErrorOrigin; 14324aa61755SAndy Ye TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 14334aa61755SAndy Ye { 0xa8, 0x69, 0x9c, 0xe6, 14344aa61755SAndy Ye 0x88, 0x6c, 0x5d, 0x5d 14354aa61755SAndy Ye } 14364aa61755SAndy Ye }; 14374aa61755SAndy Ye TEEC_UUID *TeecUuid = &tempuuid; 14384aa61755SAndy Ye TEEC_Operation TeecOperation = {0}; 1439*3251364cSHisping Lin struct blk_desc *dev_desc; 1440*3251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 14414aa61755SAndy Ye 14424aa61755SAndy Ye OpteeClientApiLibInitialize(); 14434aa61755SAndy Ye 14444aa61755SAndy Ye TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 14454aa61755SAndy Ye 1446*3251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 1447*3251364cSHisping Lin TEEC_NONE, 1448*3251364cSHisping Lin TEEC_NONE, 1449*3251364cSHisping Lin TEEC_NONE); 1450*3251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 1451*3251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 1452*3251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 1453*3251364cSHisping Lin TeecOperation.params[0].value.a = 0; 1454*3251364cSHisping Lin #endif 1455*3251364cSHisping Lin 14564aa61755SAndy Ye TeecResult = TEEC_OpenSession(&TeecContext, 14574aa61755SAndy Ye &TeecSession, 14584aa61755SAndy Ye TeecUuid, 14594aa61755SAndy Ye TEEC_LOGIN_PUBLIC, 14604aa61755SAndy Ye NULL, 1461*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 14624aa61755SAndy Ye NULL, 1463*3251364cSHisping Lin #endif 1464*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 1465*3251364cSHisping Lin &TeecOperation, 1466*3251364cSHisping Lin #endif 14674aa61755SAndy Ye &ErrorOrigin); 14684aa61755SAndy Ye 14694aa61755SAndy Ye TEEC_SharedMemory SharedMem0 = {0}; 14704aa61755SAndy Ye 14714aa61755SAndy Ye SharedMem0.size = *dh_size; 14724aa61755SAndy Ye SharedMem0.flags = 0; 14734aa61755SAndy Ye 14744aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 14754aa61755SAndy Ye 14764aa61755SAndy Ye TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 14774aa61755SAndy Ye TeecOperation.params[0].tmpref.size = SharedMem0.size; 14784aa61755SAndy Ye 14794aa61755SAndy Ye TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, 14804aa61755SAndy Ye TEEC_NONE, 14814aa61755SAndy Ye TEEC_NONE, 14824aa61755SAndy Ye TEEC_NONE); 14834aa61755SAndy Ye 14844aa61755SAndy Ye TeecResult = TEEC_InvokeCommand(&TeecSession, 14854aa61755SAndy Ye 143, 14864aa61755SAndy Ye &TeecOperation, 14874aa61755SAndy Ye &ErrorOrigin); 14884aa61755SAndy Ye 14894aa61755SAndy Ye *dh_size = TeecOperation.params[0].tmpref.size; 14904aa61755SAndy Ye memcpy(dh, SharedMem0.buffer, SharedMem0.size); 14914aa61755SAndy Ye 14924aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem0); 14934aa61755SAndy Ye 14944aa61755SAndy Ye TEEC_CloseSession(&TeecSession); 14954aa61755SAndy Ye TeecResult = TEEC_FinalizeContext(&TeecContext); 14964aa61755SAndy Ye 14974aa61755SAndy Ye return TeecResult; 14984aa61755SAndy Ye } 14994aa61755SAndy Ye 15004aa61755SAndy Ye uint32_t trusty_attest_uuid(uint8_t *uuid, uint32_t *uuid_size) 15014aa61755SAndy Ye { 15024aa61755SAndy Ye TEEC_Result TeecResult; 15034aa61755SAndy Ye TEEC_Context TeecContext; 15044aa61755SAndy Ye TEEC_Session TeecSession; 15054aa61755SAndy Ye uint32_t ErrorOrigin; 15064aa61755SAndy Ye TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 15074aa61755SAndy Ye { 0xa8, 0x69, 0x9c, 0xe6, 15084aa61755SAndy Ye 0x88, 0x6c, 0x5d, 0x5d 15094aa61755SAndy Ye } 15104aa61755SAndy Ye }; 15114aa61755SAndy Ye TEEC_UUID *TeecUuid = &tempuuid; 15124aa61755SAndy Ye TEEC_Operation TeecOperation = {0}; 1513*3251364cSHisping Lin struct blk_desc *dev_desc; 1514*3251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 15154aa61755SAndy Ye 15164aa61755SAndy Ye OpteeClientApiLibInitialize(); 15174aa61755SAndy Ye 15184aa61755SAndy Ye TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 15194aa61755SAndy Ye 1520*3251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 1521*3251364cSHisping Lin TEEC_NONE, 1522*3251364cSHisping Lin TEEC_NONE, 1523*3251364cSHisping Lin TEEC_NONE); 1524*3251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 1525*3251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 1526*3251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 1527*3251364cSHisping Lin TeecOperation.params[0].value.a = 0; 1528*3251364cSHisping Lin #endif 1529*3251364cSHisping Lin 15304aa61755SAndy Ye TeecResult = TEEC_OpenSession(&TeecContext, 15314aa61755SAndy Ye &TeecSession, 15324aa61755SAndy Ye TeecUuid, 15334aa61755SAndy Ye TEEC_LOGIN_PUBLIC, 15344aa61755SAndy Ye NULL, 1535*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 15364aa61755SAndy Ye NULL, 1537*3251364cSHisping Lin #endif 1538*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 1539*3251364cSHisping Lin &TeecOperation, 1540*3251364cSHisping Lin #endif 15414aa61755SAndy Ye &ErrorOrigin); 15424aa61755SAndy Ye 15434aa61755SAndy Ye TEEC_SharedMemory SharedMem0 = {0}; 15444aa61755SAndy Ye 15454aa61755SAndy Ye SharedMem0.size = *uuid_size; 15464aa61755SAndy Ye SharedMem0.flags = 0; 15474aa61755SAndy Ye 15484aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 15494aa61755SAndy Ye 15504aa61755SAndy Ye TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 15514aa61755SAndy Ye TeecOperation.params[0].tmpref.size = SharedMem0.size; 15524aa61755SAndy Ye 15534aa61755SAndy Ye TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, 15544aa61755SAndy Ye TEEC_NONE, 15554aa61755SAndy Ye TEEC_NONE, 15564aa61755SAndy Ye TEEC_NONE); 15574aa61755SAndy Ye 15584aa61755SAndy Ye TeecResult = TEEC_InvokeCommand(&TeecSession, 15594aa61755SAndy Ye 144, 15604aa61755SAndy Ye &TeecOperation, 15614aa61755SAndy Ye &ErrorOrigin); 15624aa61755SAndy Ye 15634aa61755SAndy Ye *uuid_size = TeecOperation.params[0].tmpref.size; 15644aa61755SAndy Ye memcpy(uuid, SharedMem0.buffer, SharedMem0.size); 15654aa61755SAndy Ye 15664aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem0); 15674aa61755SAndy Ye 15684aa61755SAndy Ye TEEC_CloseSession(&TeecSession); 15694aa61755SAndy Ye TeecResult = TEEC_FinalizeContext(&TeecContext); 15704aa61755SAndy Ye 15714aa61755SAndy Ye return TeecResult; 15724aa61755SAndy Ye } 15734aa61755SAndy Ye 15744aa61755SAndy Ye uint32_t trusty_attest_get_ca(uint8_t *operation_start, 15754aa61755SAndy Ye uint32_t *operation_size, 15764aa61755SAndy Ye uint8_t *out, 15774aa61755SAndy Ye uint32_t *out_len) 15784aa61755SAndy Ye { 15794aa61755SAndy Ye TEEC_Result TeecResult; 15804aa61755SAndy Ye TEEC_Context TeecContext; 15814aa61755SAndy Ye TEEC_Session TeecSession; 15824aa61755SAndy Ye uint32_t ErrorOrigin; 15834aa61755SAndy Ye 15844aa61755SAndy Ye OpteeClientApiLibInitialize(); 15854aa61755SAndy Ye 15864aa61755SAndy Ye TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 15874aa61755SAndy Ye { 0xa8, 0x69, 0x9c, 0xe6, 15884aa61755SAndy Ye 0x88, 0x6c, 0x5d, 0x5d 15894aa61755SAndy Ye } 15904aa61755SAndy Ye }; 15914aa61755SAndy Ye 15924aa61755SAndy Ye TEEC_UUID *TeecUuid = &tempuuid; 15934aa61755SAndy Ye TEEC_Operation TeecOperation = {0}; 1594*3251364cSHisping Lin struct blk_desc *dev_desc; 1595*3251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 15964aa61755SAndy Ye 15974aa61755SAndy Ye OpteeClientApiLibInitialize(); 15984aa61755SAndy Ye 15994aa61755SAndy Ye TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 16004aa61755SAndy Ye 1601*3251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 1602*3251364cSHisping Lin TEEC_NONE, 1603*3251364cSHisping Lin TEEC_NONE, 1604*3251364cSHisping Lin TEEC_NONE); 1605*3251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 1606*3251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 1607*3251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 1608*3251364cSHisping Lin TeecOperation.params[0].value.a = 0; 1609*3251364cSHisping Lin #endif 1610*3251364cSHisping Lin 16114aa61755SAndy Ye TeecResult = TEEC_OpenSession(&TeecContext, 16124aa61755SAndy Ye &TeecSession, 16134aa61755SAndy Ye TeecUuid, 16144aa61755SAndy Ye TEEC_LOGIN_PUBLIC, 16154aa61755SAndy Ye NULL, 1616*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 16174aa61755SAndy Ye NULL, 1618*3251364cSHisping Lin #endif 1619*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 1620*3251364cSHisping Lin &TeecOperation, 1621*3251364cSHisping Lin #endif 16224aa61755SAndy Ye &ErrorOrigin); 16234aa61755SAndy Ye 16244aa61755SAndy Ye TEEC_SharedMemory SharedMem0 = {0}; 16254aa61755SAndy Ye 16264aa61755SAndy Ye SharedMem0.size = *operation_size; 16274aa61755SAndy Ye SharedMem0.flags = 0; 16284aa61755SAndy Ye 16294aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 16304aa61755SAndy Ye 16314aa61755SAndy Ye memcpy(SharedMem0.buffer, operation_start, SharedMem0.size); 16324aa61755SAndy Ye 16334aa61755SAndy Ye TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 16344aa61755SAndy Ye TeecOperation.params[0].tmpref.size = SharedMem0.size; 16354aa61755SAndy Ye 16364aa61755SAndy Ye TEEC_SharedMemory SharedMem1 = {0}; 16374aa61755SAndy Ye 16384aa61755SAndy Ye SharedMem1.size = *out_len; 16394aa61755SAndy Ye SharedMem1.flags = 0; 16404aa61755SAndy Ye 16414aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 16424aa61755SAndy Ye 16434aa61755SAndy Ye TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 16444aa61755SAndy Ye TeecOperation.params[1].tmpref.size = SharedMem1.size; 16454aa61755SAndy Ye 16464aa61755SAndy Ye TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, 16474aa61755SAndy Ye TEEC_MEMREF_TEMP_INOUT, 16484aa61755SAndy Ye TEEC_NONE, 16494aa61755SAndy Ye TEEC_NONE); 16504aa61755SAndy Ye 16514aa61755SAndy Ye TeecResult = TEEC_InvokeCommand(&TeecSession, 16524aa61755SAndy Ye 145, 16534aa61755SAndy Ye &TeecOperation, 16544aa61755SAndy Ye &ErrorOrigin); 16554aa61755SAndy Ye 16564aa61755SAndy Ye *out_len = TeecOperation.params[1].tmpref.size; 16574aa61755SAndy Ye memcpy(out, SharedMem1.buffer, SharedMem1.size); 16584aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem0); 16594aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem1); 16604aa61755SAndy Ye 16614aa61755SAndy Ye return TeecResult; 16624aa61755SAndy Ye } 16634aa61755SAndy Ye 16644aa61755SAndy Ye uint32_t trusty_attest_set_ca(uint8_t *ca_response, uint32_t *ca_response_size) 16654aa61755SAndy Ye { 16664aa61755SAndy Ye TEEC_Result TeecResult; 16674aa61755SAndy Ye TEEC_Context TeecContext; 16684aa61755SAndy Ye TEEC_Session TeecSession; 16694aa61755SAndy Ye uint32_t ErrorOrigin; 16704aa61755SAndy Ye TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 16714aa61755SAndy Ye { 0xa8, 0x69, 0x9c, 0xe6, 16724aa61755SAndy Ye 0x88, 0x6c, 0x5d, 0x5d 16734aa61755SAndy Ye } 16744aa61755SAndy Ye }; 16754aa61755SAndy Ye TEEC_UUID *TeecUuid = &tempuuid; 16764aa61755SAndy Ye TEEC_Operation TeecOperation = {0}; 1677*3251364cSHisping Lin struct blk_desc *dev_desc; 1678*3251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 16794aa61755SAndy Ye 16804aa61755SAndy Ye TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 16814aa61755SAndy Ye 1682*3251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 1683*3251364cSHisping Lin TEEC_NONE, 1684*3251364cSHisping Lin TEEC_NONE, 1685*3251364cSHisping Lin TEEC_NONE); 1686*3251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 1687*3251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 1688*3251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 1689*3251364cSHisping Lin TeecOperation.params[0].value.a = 0; 1690*3251364cSHisping Lin #endif 1691*3251364cSHisping Lin 16924aa61755SAndy Ye TeecResult = TEEC_OpenSession(&TeecContext, 16934aa61755SAndy Ye &TeecSession, 16944aa61755SAndy Ye TeecUuid, 16954aa61755SAndy Ye TEEC_LOGIN_PUBLIC, 16964aa61755SAndy Ye NULL, 1697*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 16984aa61755SAndy Ye NULL, 1699*3251364cSHisping Lin #endif 1700*3251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 1701*3251364cSHisping Lin &TeecOperation, 1702*3251364cSHisping Lin #endif 17034aa61755SAndy Ye &ErrorOrigin); 17044aa61755SAndy Ye 17054aa61755SAndy Ye TEEC_SharedMemory SharedMem0 = {0}; 17064aa61755SAndy Ye 17074aa61755SAndy Ye SharedMem0.size = *ca_response_size; 17084aa61755SAndy Ye SharedMem0.flags = 0; 17094aa61755SAndy Ye 17104aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 17114aa61755SAndy Ye 17124aa61755SAndy Ye memcpy(SharedMem0.buffer, ca_response, SharedMem0.size); 17134aa61755SAndy Ye 17144aa61755SAndy Ye TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 17154aa61755SAndy Ye TeecOperation.params[0].tmpref.size = SharedMem0.size; 17164aa61755SAndy Ye 17174aa61755SAndy Ye TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, 17184aa61755SAndy Ye TEEC_NONE, 17194aa61755SAndy Ye TEEC_NONE, 17204aa61755SAndy Ye TEEC_NONE); 17214aa61755SAndy Ye 17224aa61755SAndy Ye TeecResult = TEEC_InvokeCommand(&TeecSession, 17234aa61755SAndy Ye 146, 17244aa61755SAndy Ye &TeecOperation, 17254aa61755SAndy Ye &ErrorOrigin); 17264aa61755SAndy Ye 17274aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem0); 17284aa61755SAndy Ye 17294aa61755SAndy Ye TEEC_CloseSession(&TeecSession); 17304aa61755SAndy Ye TeecResult = TEEC_FinalizeContext(&TeecContext); 17314aa61755SAndy Ye 17324aa61755SAndy Ye return TeecResult; 17334aa61755SAndy Ye } 1734