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*78ef5fbdSqiujian #include <optee_include/tee_api_defines.h> 123251364cSHisping Lin #include <boot_rkimg.h> 13ae8ec5e1SHisping Lin 14ae8ec5e1SHisping Lin void test_optee(void) 15ae8ec5e1SHisping Lin { 16ae8ec5e1SHisping Lin TEEC_Result TeecResult; 17ae8ec5e1SHisping Lin TEEC_Context TeecContext; 18ae8ec5e1SHisping Lin TEEC_Session TeecSession; 19ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 20ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 21ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 22ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 23ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 243251364cSHisping Lin struct blk_desc *dev_desc; 253251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 26ae8ec5e1SHisping Lin 27ae8ec5e1SHisping Lin debug("testmm start\n"); 28ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 29ae8ec5e1SHisping Lin 30ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 31ae8ec5e1SHisping Lin 323251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 333251364cSHisping Lin TEEC_NONE, 343251364cSHisping Lin TEEC_NONE, 353251364cSHisping Lin TEEC_NONE); 363251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 373251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 383251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 393251364cSHisping Lin TeecOperation.params[0].value.a = 0; 403251364cSHisping Lin #endif 413251364cSHisping Lin 42ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 43ae8ec5e1SHisping Lin &TeecSession, 44ae8ec5e1SHisping Lin TeecUuid, 45ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 46ae8ec5e1SHisping Lin NULL, 473251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 48ae8ec5e1SHisping Lin NULL, 493251364cSHisping Lin #endif 503251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 513251364cSHisping Lin &TeecOperation, 523251364cSHisping Lin #endif 53ae8ec5e1SHisping Lin &ErrorOrigin); 54ae8ec5e1SHisping Lin 55ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 56ae8ec5e1SHisping Lin 57ae8ec5e1SHisping Lin SharedMem0.size = sizeof("filename_test"); 58ae8ec5e1SHisping Lin SharedMem0.flags = 0; 59ae8ec5e1SHisping Lin 60ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 61ae8ec5e1SHisping Lin 62ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "filename_test", SharedMem0.size); 63ae8ec5e1SHisping Lin 64ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 65ae8ec5e1SHisping Lin 66ae8ec5e1SHisping Lin SharedMem1.size = 32; 67ae8ec5e1SHisping Lin SharedMem1.flags = 0; 68ae8ec5e1SHisping Lin 69ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 70ae8ec5e1SHisping Lin 71ae8ec5e1SHisping Lin memset(SharedMem1.buffer, 'a', SharedMem1.size); 72ae8ec5e1SHisping Lin 73ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 74ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 75ae8ec5e1SHisping Lin 76ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 77ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 78ae8ec5e1SHisping Lin 79ae8ec5e1SHisping Lin 80ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 81ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 82ae8ec5e1SHisping Lin TEEC_NONE, 83ae8ec5e1SHisping Lin TEEC_NONE); 84ae8ec5e1SHisping Lin 85ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 86ae8ec5e1SHisping Lin 1, 87ae8ec5e1SHisping Lin &TeecOperation, 88ae8ec5e1SHisping Lin &ErrorOrigin); 89ae8ec5e1SHisping Lin 90ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 91ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 92ae8ec5e1SHisping Lin 93ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 94ae8ec5e1SHisping Lin 9546b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 96ae8ec5e1SHisping Lin 97ae8ec5e1SHisping Lin debug("testmm end\n"); 98ae8ec5e1SHisping Lin debug("TeecResult %x\n", TeecResult); 99ae8ec5e1SHisping Lin } 100ae8ec5e1SHisping Lin 101ae8ec5e1SHisping Lin static uint8_t b2hs_add_base(uint8_t in) 102ae8ec5e1SHisping Lin { 103ae8ec5e1SHisping Lin if (in > 9) 104ae8ec5e1SHisping Lin return in + 55; 105ae8ec5e1SHisping Lin else 106ae8ec5e1SHisping Lin return in + 48; 107ae8ec5e1SHisping Lin } 108ae8ec5e1SHisping Lin 109ae8ec5e1SHisping Lin uint32_t b2hs(uint8_t *b, uint8_t *hs, uint32_t blen, uint32_t hslen) 110ae8ec5e1SHisping Lin { 111ae8ec5e1SHisping Lin uint32_t i = 0; 112ae8ec5e1SHisping Lin 113ae8ec5e1SHisping Lin if (blen * 2 + 1 > hslen) 114ae8ec5e1SHisping Lin return 0; 115ae8ec5e1SHisping Lin 116ae8ec5e1SHisping Lin for (; i < blen; i++) { 117ae8ec5e1SHisping Lin hs[i * 2 + 1] = b2hs_add_base(b[i] & 0xf); 118ae8ec5e1SHisping Lin hs[i * 2] = b2hs_add_base(b[i] >> 4); 119ae8ec5e1SHisping Lin } 120ae8ec5e1SHisping Lin hs[blen * 2] = 0; 121ae8ec5e1SHisping Lin 122ae8ec5e1SHisping Lin return blen * 2; 123ae8ec5e1SHisping Lin } 124ae8ec5e1SHisping Lin 125ae8ec5e1SHisping Lin 126ae8ec5e1SHisping Lin uint32_t trusty_read_rollback_index(uint32_t slot, uint64_t *value) 127ae8ec5e1SHisping Lin { 128ae8ec5e1SHisping Lin TEEC_Result TeecResult; 129ae8ec5e1SHisping Lin TEEC_Context TeecContext; 130ae8ec5e1SHisping Lin TEEC_Session TeecSession; 131ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 132ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 133ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 134ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 135ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 136ae8ec5e1SHisping Lin uint8_t hs[9]; 137ae8ec5e1SHisping Lin 1383251364cSHisping Lin struct blk_desc *dev_desc; 1393251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 1403251364cSHisping Lin 141ae8ec5e1SHisping Lin b2hs((uint8_t *)&slot, hs, 4, 9); 142ae8ec5e1SHisping Lin debug("testmm start\n"); 143ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 144ae8ec5e1SHisping Lin 145ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 146ae8ec5e1SHisping Lin 1473251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 1483251364cSHisping Lin TEEC_NONE, 1493251364cSHisping Lin TEEC_NONE, 1503251364cSHisping Lin TEEC_NONE); 1513251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 1523251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 1533251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 1543251364cSHisping Lin TeecOperation.params[0].value.a = 0; 1553251364cSHisping Lin #endif 1563251364cSHisping Lin 157ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 158ae8ec5e1SHisping Lin &TeecSession, 159ae8ec5e1SHisping Lin TeecUuid, 160ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 161ae8ec5e1SHisping Lin NULL, 1623251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 163ae8ec5e1SHisping Lin NULL, 1643251364cSHisping Lin #endif 1653251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 1663251364cSHisping Lin &TeecOperation, 1673251364cSHisping Lin #endif 168ae8ec5e1SHisping Lin &ErrorOrigin); 169ae8ec5e1SHisping Lin 170ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 171ae8ec5e1SHisping Lin 172ae8ec5e1SHisping Lin SharedMem0.size = 8; 173ae8ec5e1SHisping Lin SharedMem0.flags = 0; 174ae8ec5e1SHisping Lin 175ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 176ae8ec5e1SHisping Lin 177ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, hs, SharedMem0.size); 178ae8ec5e1SHisping Lin 179ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 180ae8ec5e1SHisping Lin 181ae8ec5e1SHisping Lin SharedMem1.size = 8; 182ae8ec5e1SHisping Lin SharedMem1.flags = 0; 183ae8ec5e1SHisping Lin 184ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 185ae8ec5e1SHisping Lin 186ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 187ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 188ae8ec5e1SHisping Lin 189ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 190ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 191ae8ec5e1SHisping Lin 192ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 193ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 194ae8ec5e1SHisping Lin TEEC_NONE, 195ae8ec5e1SHisping Lin TEEC_NONE); 196ae8ec5e1SHisping Lin 197ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 198ae8ec5e1SHisping Lin 0, 199ae8ec5e1SHisping Lin &TeecOperation, 200ae8ec5e1SHisping Lin &ErrorOrigin); 20146b2a054SHisping Lin if (TeecResult == TEEC_SUCCESS) 202ae8ec5e1SHisping Lin memcpy((char *)value, SharedMem1.buffer, SharedMem1.size); 203ae8ec5e1SHisping Lin 204ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 205ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 206ae8ec5e1SHisping Lin 207ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 208ae8ec5e1SHisping Lin 20946b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 210ae8ec5e1SHisping Lin 211ae8ec5e1SHisping Lin debug("testmm end\n"); 212ae8ec5e1SHisping Lin return TeecResult; 213ae8ec5e1SHisping Lin } 214ae8ec5e1SHisping Lin 215ae8ec5e1SHisping Lin uint32_t trusty_write_rollback_index(uint32_t slot, uint64_t value) 216ae8ec5e1SHisping Lin { 217ae8ec5e1SHisping Lin TEEC_Result TeecResult; 218ae8ec5e1SHisping Lin TEEC_Context TeecContext; 219ae8ec5e1SHisping Lin TEEC_Session TeecSession; 220ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 221ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 222ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 223ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 224ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 225ae8ec5e1SHisping Lin uint8_t hs[9]; 2263251364cSHisping Lin struct blk_desc *dev_desc; 2273251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 2283251364cSHisping Lin 229ae8ec5e1SHisping Lin b2hs((uint8_t *)&slot, hs, 4, 9); 230ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 231ae8ec5e1SHisping Lin 232ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 233ae8ec5e1SHisping Lin 2343251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 2353251364cSHisping Lin TEEC_NONE, 2363251364cSHisping Lin TEEC_NONE, 2373251364cSHisping Lin TEEC_NONE); 2383251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 2393251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 2403251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 2413251364cSHisping Lin TeecOperation.params[0].value.a = 0; 2423251364cSHisping Lin #endif 2433251364cSHisping Lin 244ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 245ae8ec5e1SHisping Lin &TeecSession, 246ae8ec5e1SHisping Lin TeecUuid, 247ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 248ae8ec5e1SHisping Lin NULL, 2493251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 250ae8ec5e1SHisping Lin NULL, 2513251364cSHisping Lin #endif 2523251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 2533251364cSHisping Lin &TeecOperation, 2543251364cSHisping Lin #endif 255ae8ec5e1SHisping Lin &ErrorOrigin); 256ae8ec5e1SHisping Lin 257ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 258ae8ec5e1SHisping Lin 259ae8ec5e1SHisping Lin SharedMem0.size = 8; 260ae8ec5e1SHisping Lin SharedMem0.flags = 0; 261ae8ec5e1SHisping Lin 262ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 263ae8ec5e1SHisping Lin 264ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, hs, SharedMem0.size); 265ae8ec5e1SHisping Lin 266ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 267ae8ec5e1SHisping Lin 268ae8ec5e1SHisping Lin SharedMem1.size = 8; 269ae8ec5e1SHisping Lin SharedMem1.flags = 0; 270ae8ec5e1SHisping Lin 271ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 272ae8ec5e1SHisping Lin 273ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, (char *)&value, SharedMem1.size); 274ae8ec5e1SHisping Lin 275ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 276ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 277ae8ec5e1SHisping Lin 278ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 279ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 280ae8ec5e1SHisping Lin 281ae8ec5e1SHisping Lin 282ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 283ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 284ae8ec5e1SHisping Lin TEEC_NONE, 285ae8ec5e1SHisping Lin TEEC_NONE); 286ae8ec5e1SHisping Lin 287ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 288ae8ec5e1SHisping Lin 1, 289ae8ec5e1SHisping Lin &TeecOperation, 290ae8ec5e1SHisping Lin &ErrorOrigin); 291ae8ec5e1SHisping Lin 292ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 293ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 294ae8ec5e1SHisping Lin 295ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 296ae8ec5e1SHisping Lin 29746b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 298ae8ec5e1SHisping Lin 299ae8ec5e1SHisping Lin debug("testmm end\n"); 300ae8ec5e1SHisping Lin 301ae8ec5e1SHisping Lin return TeecResult; 302ae8ec5e1SHisping Lin } 303ae8ec5e1SHisping Lin 304ae8ec5e1SHisping Lin uint32_t trusty_read_permanent_attributes(uint8_t *attributes, uint32_t size) 305ae8ec5e1SHisping Lin { 306ae8ec5e1SHisping Lin TEEC_Result TeecResult; 307ae8ec5e1SHisping Lin TEEC_Context TeecContext; 308ae8ec5e1SHisping Lin TEEC_Session TeecSession; 309ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 31046b2a054SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 31146b2a054SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 312ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 313ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 3143251364cSHisping Lin struct blk_desc *dev_desc; 3153251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 316ae8ec5e1SHisping Lin 317ae8ec5e1SHisping Lin debug("testmm start\n"); 318ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 319ae8ec5e1SHisping Lin 320ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 321ae8ec5e1SHisping Lin 3223251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 3233251364cSHisping Lin TEEC_NONE, 3243251364cSHisping Lin TEEC_NONE, 3253251364cSHisping Lin TEEC_NONE); 3263251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 3273251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 3283251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 3293251364cSHisping Lin TeecOperation.params[0].value.a = 0; 3303251364cSHisping Lin #endif 3313251364cSHisping Lin 332ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 333ae8ec5e1SHisping Lin &TeecSession, 334ae8ec5e1SHisping Lin TeecUuid, 335ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 336ae8ec5e1SHisping Lin NULL, 3373251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 338ae8ec5e1SHisping Lin NULL, 3393251364cSHisping Lin #endif 3403251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 3413251364cSHisping Lin &TeecOperation, 3423251364cSHisping Lin #endif 343ae8ec5e1SHisping Lin &ErrorOrigin); 344ae8ec5e1SHisping Lin 345ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 346ae8ec5e1SHisping Lin 347ae8ec5e1SHisping Lin SharedMem0.size = sizeof("attributes"); 348ae8ec5e1SHisping Lin SharedMem0.flags = 0; 349ae8ec5e1SHisping Lin 350ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 351ae8ec5e1SHisping Lin 352ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "attributes", SharedMem0.size); 353ae8ec5e1SHisping Lin 354ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 355ae8ec5e1SHisping Lin 356ae8ec5e1SHisping Lin SharedMem1.size = size; 357ae8ec5e1SHisping Lin SharedMem1.flags = 0; 358ae8ec5e1SHisping Lin 359ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 360ae8ec5e1SHisping Lin 361ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 362ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 363ae8ec5e1SHisping Lin 364ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 365ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 366ae8ec5e1SHisping Lin 367ae8ec5e1SHisping Lin 368ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 369ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 370ae8ec5e1SHisping Lin TEEC_NONE, 371ae8ec5e1SHisping Lin TEEC_NONE); 372ae8ec5e1SHisping Lin 373ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 37446b2a054SHisping Lin 142, 375ae8ec5e1SHisping Lin &TeecOperation, 376ae8ec5e1SHisping Lin &ErrorOrigin); 37746b2a054SHisping Lin if (TeecResult == TEEC_SUCCESS) 378ae8ec5e1SHisping Lin memcpy(attributes, SharedMem1.buffer, SharedMem1.size); 379ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 380ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 381ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 38246b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 383ae8ec5e1SHisping Lin debug("testmm end\n"); 384ae8ec5e1SHisping Lin 385ae8ec5e1SHisping Lin return TeecResult; 386ae8ec5e1SHisping Lin } 387ae8ec5e1SHisping Lin 388ae8ec5e1SHisping Lin uint32_t trusty_write_permanent_attributes(uint8_t *attributes, uint32_t size) 389ae8ec5e1SHisping Lin { 390ae8ec5e1SHisping Lin TEEC_Result TeecResult; 391ae8ec5e1SHisping Lin TEEC_Context TeecContext; 392ae8ec5e1SHisping Lin TEEC_Session TeecSession; 393ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 39446b2a054SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 39546b2a054SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 396ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 397ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 3983251364cSHisping Lin struct blk_desc *dev_desc; 3993251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 400ae8ec5e1SHisping Lin 401ae8ec5e1SHisping Lin debug("testmm start\n"); 402ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 403ae8ec5e1SHisping Lin 404ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 405ae8ec5e1SHisping Lin 4063251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 4073251364cSHisping Lin TEEC_NONE, 4083251364cSHisping Lin TEEC_NONE, 4093251364cSHisping Lin TEEC_NONE); 4103251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 4113251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 4123251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 4133251364cSHisping Lin TeecOperation.params[0].value.a = 0; 4143251364cSHisping Lin #endif 4153251364cSHisping Lin 416ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 417ae8ec5e1SHisping Lin &TeecSession, 418ae8ec5e1SHisping Lin TeecUuid, 419ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 420ae8ec5e1SHisping Lin NULL, 4213251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 422ae8ec5e1SHisping Lin NULL, 4233251364cSHisping Lin #endif 4243251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 4253251364cSHisping Lin &TeecOperation, 4263251364cSHisping Lin #endif 427ae8ec5e1SHisping Lin &ErrorOrigin); 428ae8ec5e1SHisping Lin 429ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 430ae8ec5e1SHisping Lin 431ae8ec5e1SHisping Lin SharedMem0.size = sizeof("attributes"); 432ae8ec5e1SHisping Lin SharedMem0.flags = 0; 433ae8ec5e1SHisping Lin 434ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 435ae8ec5e1SHisping Lin 436ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "attributes", SharedMem0.size); 437ae8ec5e1SHisping Lin 438ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 439ae8ec5e1SHisping Lin 440ae8ec5e1SHisping Lin SharedMem1.size = size; 441ae8ec5e1SHisping Lin SharedMem1.flags = 0; 442ae8ec5e1SHisping Lin 443ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 444ae8ec5e1SHisping Lin 445ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, attributes, SharedMem1.size); 446ae8ec5e1SHisping Lin 447ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 448ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 449ae8ec5e1SHisping Lin 450ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 451ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 452ae8ec5e1SHisping Lin 453ae8ec5e1SHisping Lin 454ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 455ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 456ae8ec5e1SHisping Lin TEEC_NONE, 457ae8ec5e1SHisping Lin TEEC_NONE); 458ae8ec5e1SHisping Lin 459ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 46046b2a054SHisping Lin 141, 461ae8ec5e1SHisping Lin &TeecOperation, 462ae8ec5e1SHisping Lin &ErrorOrigin); 463ae8ec5e1SHisping Lin 464ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 465ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 466ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 46746b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 468ae8ec5e1SHisping Lin debug("testmm end\n"); 469ae8ec5e1SHisping Lin 470ae8ec5e1SHisping Lin return TeecResult; 471ae8ec5e1SHisping Lin } 472ae8ec5e1SHisping Lin 473ae8ec5e1SHisping Lin uint32_t trusty_read_lock_state(uint8_t *lock_state) 474ae8ec5e1SHisping Lin { 475ae8ec5e1SHisping Lin TEEC_Result TeecResult; 476ae8ec5e1SHisping Lin TEEC_Context TeecContext; 477ae8ec5e1SHisping Lin TEEC_Session TeecSession; 478ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 479ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 480ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 481ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 482ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 4833251364cSHisping Lin struct blk_desc *dev_desc; 4843251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 485ae8ec5e1SHisping Lin 486ae8ec5e1SHisping Lin debug("testmm start\n"); 487ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 488ae8ec5e1SHisping Lin 489ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 490ae8ec5e1SHisping Lin 4913251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 4923251364cSHisping Lin TEEC_NONE, 4933251364cSHisping Lin TEEC_NONE, 4943251364cSHisping Lin TEEC_NONE); 4953251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 4963251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 4973251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 4983251364cSHisping Lin TeecOperation.params[0].value.a = 0; 4993251364cSHisping Lin #endif 500ae8ec5e1SHisping Lin 501ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 502ae8ec5e1SHisping Lin &TeecSession, 503ae8ec5e1SHisping Lin TeecUuid, 504ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 505ae8ec5e1SHisping Lin NULL, 5063251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 507ae8ec5e1SHisping Lin NULL, 5083251364cSHisping Lin #endif 5093251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 5103251364cSHisping Lin &TeecOperation, 5113251364cSHisping Lin #endif 512ae8ec5e1SHisping Lin &ErrorOrigin); 513ae8ec5e1SHisping Lin 514ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 515ae8ec5e1SHisping Lin 516ae8ec5e1SHisping Lin SharedMem0.size = sizeof("lock_state"); 517ae8ec5e1SHisping Lin SharedMem0.flags = 0; 518ae8ec5e1SHisping Lin 519ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 520ae8ec5e1SHisping Lin 521ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "lock_state", SharedMem0.size); 522ae8ec5e1SHisping Lin 523ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 524ae8ec5e1SHisping Lin 525ae8ec5e1SHisping Lin SharedMem1.size = 1; 526ae8ec5e1SHisping Lin SharedMem1.flags = 0; 527ae8ec5e1SHisping Lin 528ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 529ae8ec5e1SHisping Lin 530ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 531ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 532ae8ec5e1SHisping Lin 533ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 534ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 535ae8ec5e1SHisping Lin 536ae8ec5e1SHisping Lin 537ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 538ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 539ae8ec5e1SHisping Lin TEEC_NONE, 540ae8ec5e1SHisping Lin TEEC_NONE); 541ae8ec5e1SHisping Lin 542ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 543ae8ec5e1SHisping Lin 0, 544ae8ec5e1SHisping Lin &TeecOperation, 545ae8ec5e1SHisping Lin &ErrorOrigin); 54646b2a054SHisping Lin if (TeecResult == TEEC_SUCCESS) 547ae8ec5e1SHisping Lin memcpy(lock_state, SharedMem1.buffer, SharedMem1.size); 548ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 549ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 550ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 55146b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 552ae8ec5e1SHisping Lin debug("testmm end\n"); 553ae8ec5e1SHisping Lin 554ae8ec5e1SHisping Lin return TeecResult; 555ae8ec5e1SHisping Lin } 556ae8ec5e1SHisping Lin 557ae8ec5e1SHisping Lin uint32_t trusty_write_lock_state(uint8_t lock_state) 558ae8ec5e1SHisping Lin { 559ae8ec5e1SHisping Lin TEEC_Result TeecResult; 560ae8ec5e1SHisping Lin TEEC_Context TeecContext; 561ae8ec5e1SHisping Lin TEEC_Session TeecSession; 562ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 563ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 564ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 565ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 566ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 5673251364cSHisping Lin struct blk_desc *dev_desc; 5683251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 569ae8ec5e1SHisping Lin 570ae8ec5e1SHisping Lin debug("testmm start\n"); 571ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 572ae8ec5e1SHisping Lin 573ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 574ae8ec5e1SHisping Lin 5753251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 5763251364cSHisping Lin TEEC_NONE, 5773251364cSHisping Lin TEEC_NONE, 5783251364cSHisping Lin TEEC_NONE); 5793251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 5803251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 5813251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 5823251364cSHisping Lin TeecOperation.params[0].value.a = 0; 5833251364cSHisping Lin #endif 5843251364cSHisping Lin 585ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 586ae8ec5e1SHisping Lin &TeecSession, 587ae8ec5e1SHisping Lin TeecUuid, 588ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 589ae8ec5e1SHisping Lin NULL, 5903251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 591ae8ec5e1SHisping Lin NULL, 5923251364cSHisping Lin #endif 5933251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 5943251364cSHisping Lin &TeecOperation, 5953251364cSHisping Lin #endif 596ae8ec5e1SHisping Lin &ErrorOrigin); 597ae8ec5e1SHisping Lin 598ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 599ae8ec5e1SHisping Lin 600ae8ec5e1SHisping Lin SharedMem0.size = sizeof("lock_state"); 601ae8ec5e1SHisping Lin SharedMem0.flags = 0; 602ae8ec5e1SHisping Lin 603ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 604ae8ec5e1SHisping Lin 605ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "lock_state", SharedMem0.size); 606ae8ec5e1SHisping Lin 607ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 608ae8ec5e1SHisping Lin 609ae8ec5e1SHisping Lin SharedMem1.size = 1; 610ae8ec5e1SHisping Lin SharedMem1.flags = 0; 611ae8ec5e1SHisping Lin 612ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 613ae8ec5e1SHisping Lin 614ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, &lock_state, SharedMem1.size); 615ae8ec5e1SHisping Lin 616ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 617ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 618ae8ec5e1SHisping Lin 619ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 620ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 621ae8ec5e1SHisping Lin 622ae8ec5e1SHisping Lin 623ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 624ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 625ae8ec5e1SHisping Lin TEEC_NONE, 626ae8ec5e1SHisping Lin TEEC_NONE); 627ae8ec5e1SHisping Lin 628ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 629ae8ec5e1SHisping Lin 1, 630ae8ec5e1SHisping Lin &TeecOperation, 631ae8ec5e1SHisping Lin &ErrorOrigin); 632ae8ec5e1SHisping Lin 633ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 634ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 635ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 63646b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 637ae8ec5e1SHisping Lin debug("testmm end\n"); 638ae8ec5e1SHisping Lin 639ae8ec5e1SHisping Lin return TeecResult; 640ae8ec5e1SHisping Lin } 641ae8ec5e1SHisping Lin 642ae8ec5e1SHisping Lin uint32_t trusty_read_flash_lock_state(uint8_t *flash_lock_state) 643ae8ec5e1SHisping Lin { 644ae8ec5e1SHisping Lin TEEC_Result TeecResult; 645ae8ec5e1SHisping Lin TEEC_Context TeecContext; 646ae8ec5e1SHisping Lin TEEC_Session TeecSession; 647ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 648ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 649ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 650ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 651ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 6523251364cSHisping Lin struct blk_desc *dev_desc; 6533251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 654ae8ec5e1SHisping Lin 655ae8ec5e1SHisping Lin debug("testmm start\n"); 656ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 657ae8ec5e1SHisping Lin 658ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 659ae8ec5e1SHisping Lin 6603251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 6613251364cSHisping Lin TEEC_NONE, 6623251364cSHisping Lin TEEC_NONE, 6633251364cSHisping Lin TEEC_NONE); 6643251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 6653251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 6663251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 6673251364cSHisping Lin TeecOperation.params[0].value.a = 0; 6683251364cSHisping Lin #endif 669ae8ec5e1SHisping Lin 670ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 671ae8ec5e1SHisping Lin &TeecSession, 672ae8ec5e1SHisping Lin TeecUuid, 673ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 674ae8ec5e1SHisping Lin NULL, 6753251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 676ae8ec5e1SHisping Lin NULL, 6773251364cSHisping Lin #endif 6783251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 6793251364cSHisping Lin &TeecOperation, 6803251364cSHisping Lin #endif 681ae8ec5e1SHisping Lin &ErrorOrigin); 682ae8ec5e1SHisping Lin 683ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 684ae8ec5e1SHisping Lin 685ae8ec5e1SHisping Lin SharedMem0.size = sizeof("flash_lock_state"); 686ae8ec5e1SHisping Lin SharedMem0.flags = 0; 687ae8ec5e1SHisping Lin 688ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 689ae8ec5e1SHisping Lin 690ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "flash_lock_state", SharedMem0.size); 691ae8ec5e1SHisping Lin 692ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 693ae8ec5e1SHisping Lin 694ae8ec5e1SHisping Lin SharedMem1.size = 1; 695ae8ec5e1SHisping Lin SharedMem1.flags = 0; 696ae8ec5e1SHisping Lin 697ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 698ae8ec5e1SHisping Lin 699ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 700ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 701ae8ec5e1SHisping Lin 702ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 703ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 704ae8ec5e1SHisping Lin 705ae8ec5e1SHisping Lin 706ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 707ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 708ae8ec5e1SHisping Lin TEEC_NONE, 709ae8ec5e1SHisping Lin TEEC_NONE); 710ae8ec5e1SHisping Lin 711ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 712ae8ec5e1SHisping Lin 0, 713ae8ec5e1SHisping Lin &TeecOperation, 714ae8ec5e1SHisping Lin &ErrorOrigin); 71546b2a054SHisping Lin if (TeecResult == TEEC_SUCCESS) 716ae8ec5e1SHisping Lin memcpy(flash_lock_state, SharedMem1.buffer, SharedMem1.size); 717ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 718ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 719ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 72046b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 721ae8ec5e1SHisping Lin debug("testmm end\n"); 722ae8ec5e1SHisping Lin 723ae8ec5e1SHisping Lin return TeecResult; 724ae8ec5e1SHisping Lin } 725ae8ec5e1SHisping Lin 726ae8ec5e1SHisping Lin 727ae8ec5e1SHisping Lin uint32_t trusty_write_flash_lock_state(uint8_t flash_lock_state) 728ae8ec5e1SHisping Lin { 729ae8ec5e1SHisping Lin TEEC_Result TeecResult; 730ae8ec5e1SHisping Lin TEEC_Context TeecContext; 731ae8ec5e1SHisping Lin TEEC_Session TeecSession; 732ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 733ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 734ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 735ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 736ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 7373251364cSHisping Lin struct blk_desc *dev_desc; 7383251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 739ae8ec5e1SHisping Lin 740ae8ec5e1SHisping Lin debug("testmm start\n"); 741ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 742ae8ec5e1SHisping Lin 743ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 744ae8ec5e1SHisping Lin 7453251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 7463251364cSHisping Lin TEEC_NONE, 7473251364cSHisping Lin TEEC_NONE, 7483251364cSHisping Lin TEEC_NONE); 7493251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 7503251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 7513251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 7523251364cSHisping Lin TeecOperation.params[0].value.a = 0; 7533251364cSHisping Lin #endif 7543251364cSHisping Lin 755ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 756ae8ec5e1SHisping Lin &TeecSession, 757ae8ec5e1SHisping Lin TeecUuid, 758ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 759ae8ec5e1SHisping Lin NULL, 7603251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 761ae8ec5e1SHisping Lin NULL, 7623251364cSHisping Lin #endif 7633251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 7643251364cSHisping Lin &TeecOperation, 7653251364cSHisping Lin #endif 766ae8ec5e1SHisping Lin &ErrorOrigin); 767ae8ec5e1SHisping Lin 768ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 769ae8ec5e1SHisping Lin 770ae8ec5e1SHisping Lin SharedMem0.size = sizeof("flash_lock_state"); 771ae8ec5e1SHisping Lin SharedMem0.flags = 0; 772ae8ec5e1SHisping Lin 773ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 774ae8ec5e1SHisping Lin 775ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "flash_lock_state", SharedMem0.size); 776ae8ec5e1SHisping Lin 777ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 778ae8ec5e1SHisping Lin 779ae8ec5e1SHisping Lin SharedMem1.size = 1; 780ae8ec5e1SHisping Lin SharedMem1.flags = 0; 781ae8ec5e1SHisping Lin 782ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 783ae8ec5e1SHisping Lin 784ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, &flash_lock_state, SharedMem1.size); 785ae8ec5e1SHisping Lin 786ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 787ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 788ae8ec5e1SHisping Lin 789ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 790ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 791ae8ec5e1SHisping Lin 792ae8ec5e1SHisping Lin 793ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 794ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 795ae8ec5e1SHisping Lin TEEC_NONE, 796ae8ec5e1SHisping Lin TEEC_NONE); 797ae8ec5e1SHisping Lin 798ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 799ae8ec5e1SHisping Lin 1, 800ae8ec5e1SHisping Lin &TeecOperation, 801ae8ec5e1SHisping Lin &ErrorOrigin); 802ae8ec5e1SHisping Lin 803ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 804ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 805ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 80646b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 807ae8ec5e1SHisping Lin debug("testmm end\n"); 808ae8ec5e1SHisping Lin 809ae8ec5e1SHisping Lin return TeecResult; 810ae8ec5e1SHisping Lin } 811ae8ec5e1SHisping Lin 812*78ef5fbdSqiujian TEEC_Result read_from_keymaster(uint8_t *filename, 813*78ef5fbdSqiujian uint32_t filename_size, 814*78ef5fbdSqiujian uint8_t *data, 815*78ef5fbdSqiujian uint32_t size) 816*78ef5fbdSqiujian { 817*78ef5fbdSqiujian TEEC_Result TeecResult; 818*78ef5fbdSqiujian TEEC_Context TeecContext; 819*78ef5fbdSqiujian TEEC_Session TeecSession; 820*78ef5fbdSqiujian uint32_t ErrorOrigin; 821*78ef5fbdSqiujian TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 822*78ef5fbdSqiujian { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 823*78ef5fbdSqiujian TEEC_UUID *TeecUuid = &tempuuid; 824*78ef5fbdSqiujian TEEC_Operation TeecOperation = {0}; 825*78ef5fbdSqiujian struct blk_desc *dev_desc; 826*78ef5fbdSqiujian dev_desc = rockchip_get_bootdev(); 827*78ef5fbdSqiujian 828*78ef5fbdSqiujian debug("read_from_keymaster start\n"); 829*78ef5fbdSqiujian OpteeClientApiLibInitialize(); 830*78ef5fbdSqiujian 831*78ef5fbdSqiujian TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 832*78ef5fbdSqiujian 833*78ef5fbdSqiujian TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 834*78ef5fbdSqiujian TEEC_NONE, 835*78ef5fbdSqiujian TEEC_NONE, 836*78ef5fbdSqiujian TEEC_NONE); 837*78ef5fbdSqiujian /*0 nand or emmc "security" partition , 1 rpmb*/ 838*78ef5fbdSqiujian TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 839*78ef5fbdSqiujian #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 840*78ef5fbdSqiujian TeecOperation.params[0].value.a = 0; 841*78ef5fbdSqiujian #endif 842*78ef5fbdSqiujian 843*78ef5fbdSqiujian TeecResult = TEEC_OpenSession(&TeecContext, 844*78ef5fbdSqiujian &TeecSession, 845*78ef5fbdSqiujian TeecUuid, 846*78ef5fbdSqiujian TEEC_LOGIN_PUBLIC, 847*78ef5fbdSqiujian NULL, 848*78ef5fbdSqiujian #ifdef CONFIG_OPTEE_V1 849*78ef5fbdSqiujian NULL, 850*78ef5fbdSqiujian #endif 851*78ef5fbdSqiujian #ifdef CONFIG_OPTEE_V2 852*78ef5fbdSqiujian &TeecOperation, 853*78ef5fbdSqiujian #endif 854*78ef5fbdSqiujian &ErrorOrigin); 855*78ef5fbdSqiujian 856*78ef5fbdSqiujian TEEC_SharedMemory SharedMem0 = {0}; 857*78ef5fbdSqiujian 858*78ef5fbdSqiujian SharedMem0.size = filename_size; 859*78ef5fbdSqiujian SharedMem0.flags = 0; 860*78ef5fbdSqiujian 861*78ef5fbdSqiujian TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 862*78ef5fbdSqiujian 863*78ef5fbdSqiujian memcpy(SharedMem0.buffer, filename, SharedMem0.size); 864*78ef5fbdSqiujian 865*78ef5fbdSqiujian TEEC_SharedMemory SharedMem1 = {0}; 866*78ef5fbdSqiujian 867*78ef5fbdSqiujian SharedMem1.size = size; 868*78ef5fbdSqiujian SharedMem1.flags = 0; 869*78ef5fbdSqiujian 870*78ef5fbdSqiujian TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 871*78ef5fbdSqiujian 872*78ef5fbdSqiujian TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 873*78ef5fbdSqiujian TeecOperation.params[0].tmpref.size = SharedMem0.size; 874*78ef5fbdSqiujian 875*78ef5fbdSqiujian TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 876*78ef5fbdSqiujian TeecOperation.params[1].tmpref.size = SharedMem1.size; 877*78ef5fbdSqiujian 878*78ef5fbdSqiujian 879*78ef5fbdSqiujian TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 880*78ef5fbdSqiujian TEEC_MEMREF_TEMP_INOUT, 881*78ef5fbdSqiujian TEEC_NONE, 882*78ef5fbdSqiujian TEEC_NONE); 883*78ef5fbdSqiujian 884*78ef5fbdSqiujian TeecResult = TEEC_InvokeCommand(&TeecSession, 885*78ef5fbdSqiujian 142, 886*78ef5fbdSqiujian &TeecOperation, 887*78ef5fbdSqiujian &ErrorOrigin); 888*78ef5fbdSqiujian if (TeecResult == TEEC_SUCCESS) 889*78ef5fbdSqiujian memcpy(data, SharedMem1.buffer, SharedMem1.size); 890*78ef5fbdSqiujian TEEC_ReleaseSharedMemory(&SharedMem0); 891*78ef5fbdSqiujian TEEC_ReleaseSharedMemory(&SharedMem1); 892*78ef5fbdSqiujian TEEC_CloseSession(&TeecSession); 893*78ef5fbdSqiujian TEEC_FinalizeContext(&TeecContext); 894*78ef5fbdSqiujian debug("read_from_keymaster end\n"); 895*78ef5fbdSqiujian 896*78ef5fbdSqiujian return TeecResult; 897*78ef5fbdSqiujian } 898*78ef5fbdSqiujian 899ae8ec5e1SHisping Lin uint32_t write_to_keymaster(uint8_t *filename, 900ae8ec5e1SHisping Lin uint32_t filename_size, 901ae8ec5e1SHisping Lin uint8_t *data, 902ae8ec5e1SHisping Lin uint32_t data_size) 903ae8ec5e1SHisping Lin { 904ae8ec5e1SHisping Lin TEEC_Result TeecResult; 905ae8ec5e1SHisping Lin TEEC_Context TeecContext; 906ae8ec5e1SHisping Lin TEEC_Session TeecSession; 907ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 908ae8ec5e1SHisping Lin 909ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 910ae8ec5e1SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 911ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 912ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 9133251364cSHisping Lin struct blk_desc *dev_desc; 9143251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 915ae8ec5e1SHisping Lin 916ae8ec5e1SHisping Lin debug("write_to_keymaster\n"); 917ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 918ae8ec5e1SHisping Lin 919ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 920ae8ec5e1SHisping Lin 9213251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 9223251364cSHisping Lin TEEC_NONE, 9233251364cSHisping Lin TEEC_NONE, 9243251364cSHisping Lin TEEC_NONE); 9253251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 9263251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 9273251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 9283251364cSHisping Lin TeecOperation.params[0].value.a = 0; 9293251364cSHisping Lin #endif 9303251364cSHisping Lin 931ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 932ae8ec5e1SHisping Lin &TeecSession, 933ae8ec5e1SHisping Lin TeecUuid, 934ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 935ae8ec5e1SHisping Lin NULL, 9363251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 937ae8ec5e1SHisping Lin NULL, 9383251364cSHisping Lin #endif 9393251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 9403251364cSHisping Lin &TeecOperation, 9413251364cSHisping Lin #endif 942ae8ec5e1SHisping Lin &ErrorOrigin); 943ae8ec5e1SHisping Lin 944ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 945ae8ec5e1SHisping Lin 946ae8ec5e1SHisping Lin SharedMem0.size = filename_size; 947ae8ec5e1SHisping Lin SharedMem0.flags = 0; 948ae8ec5e1SHisping Lin 949ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 950ae8ec5e1SHisping Lin 951ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, filename, SharedMem0.size); 952ae8ec5e1SHisping Lin 953ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 954ae8ec5e1SHisping Lin 955ae8ec5e1SHisping Lin SharedMem1.size = data_size; 956ae8ec5e1SHisping Lin SharedMem1.flags = 0; 957ae8ec5e1SHisping Lin 958ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 959ae8ec5e1SHisping Lin 960ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, data, SharedMem1.size); 961ae8ec5e1SHisping Lin 962ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 963ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 964ae8ec5e1SHisping Lin 965ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 966ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 967ae8ec5e1SHisping Lin 968ae8ec5e1SHisping Lin 969ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 970ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 971ae8ec5e1SHisping Lin TEEC_NONE, 972ae8ec5e1SHisping Lin TEEC_NONE); 973ae8ec5e1SHisping Lin 974ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 9751f25ada2SHisping Lin 141, 976ae8ec5e1SHisping Lin &TeecOperation, 977ae8ec5e1SHisping Lin &ErrorOrigin); 978ae8ec5e1SHisping Lin 979ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 980ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 981ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 98246b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 983*78ef5fbdSqiujian debug("write_to_keymaster end\n"); 984ae8ec5e1SHisping Lin debug("TeecResult %x\n", TeecResult); 985ae8ec5e1SHisping Lin 986ae8ec5e1SHisping Lin return TeecResult; 987ae8ec5e1SHisping Lin } 9886ef445a4SHisping Lin 9896ef445a4SHisping Lin uint32_t trusty_read_attribute_hash(uint32_t *buf, uint32_t length) 9906ef445a4SHisping Lin { 9916ef445a4SHisping Lin TEEC_Result TeecResult; 9926ef445a4SHisping Lin TEEC_Context TeecContext; 9936ef445a4SHisping Lin TEEC_Session TeecSession; 9946ef445a4SHisping Lin uint32_t ErrorOrigin; 9956ef445a4SHisping Lin 9966ef445a4SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 9976ef445a4SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 9986ef445a4SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 9996ef445a4SHisping Lin TEEC_Operation TeecOperation = {0}; 10006ef445a4SHisping Lin 10016ef445a4SHisping Lin OpteeClientApiLibInitialize(); 10026ef445a4SHisping Lin 10036ef445a4SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 10046ef445a4SHisping Lin 10056ef445a4SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 10066ef445a4SHisping Lin &TeecSession, 10076ef445a4SHisping Lin TeecUuid, 10086ef445a4SHisping Lin TEEC_LOGIN_PUBLIC, 10096ef445a4SHisping Lin NULL, 10106ef445a4SHisping Lin NULL, 10116ef445a4SHisping Lin &ErrorOrigin); 10126ef445a4SHisping Lin 10136ef445a4SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 10146ef445a4SHisping Lin 10156ef445a4SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 10166ef445a4SHisping Lin SharedMem0.flags = 0; 10176ef445a4SHisping Lin 10186ef445a4SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 10196ef445a4SHisping Lin 10206ef445a4SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 10216ef445a4SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 10226ef445a4SHisping Lin 10236ef445a4SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, 10246ef445a4SHisping Lin TEEC_NONE, 10256ef445a4SHisping Lin TEEC_NONE, 10266ef445a4SHisping Lin TEEC_NONE); 10276ef445a4SHisping Lin 10286ef445a4SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 10296ef445a4SHisping Lin 0, 10306ef445a4SHisping Lin &TeecOperation, 10316ef445a4SHisping Lin &ErrorOrigin); 10326ef445a4SHisping Lin 10336ef445a4SHisping Lin if (TeecResult == TEEC_SUCCESS) 10346ef445a4SHisping Lin memcpy(buf, SharedMem0.buffer, SharedMem0.size); 10356ef445a4SHisping Lin 10366ef445a4SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 10376ef445a4SHisping Lin TEEC_CloseSession(&TeecSession); 10386ef445a4SHisping Lin TEEC_FinalizeContext(&TeecContext); 10396ef445a4SHisping Lin 10406ef445a4SHisping Lin return TeecResult; 10416ef445a4SHisping Lin } 10426ef445a4SHisping Lin 10436ef445a4SHisping Lin uint32_t trusty_write_attribute_hash(uint32_t *buf, uint32_t length) 10446ef445a4SHisping Lin { 10456ef445a4SHisping Lin TEEC_Result TeecResult; 10466ef445a4SHisping Lin TEEC_Context TeecContext; 10476ef445a4SHisping Lin TEEC_Session TeecSession; 10486ef445a4SHisping Lin uint32_t ErrorOrigin; 10496ef445a4SHisping Lin 10506ef445a4SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 10516ef445a4SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 10526ef445a4SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 10536ef445a4SHisping Lin TEEC_Operation TeecOperation = {0}; 10546ef445a4SHisping Lin 10556ef445a4SHisping Lin OpteeClientApiLibInitialize(); 10566ef445a4SHisping Lin 10576ef445a4SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 10586ef445a4SHisping Lin 10596ef445a4SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 10606ef445a4SHisping Lin &TeecSession, 10616ef445a4SHisping Lin TeecUuid, 10626ef445a4SHisping Lin TEEC_LOGIN_PUBLIC, 10636ef445a4SHisping Lin NULL, 10646ef445a4SHisping Lin NULL, 10656ef445a4SHisping Lin &ErrorOrigin); 10666ef445a4SHisping Lin 10676ef445a4SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 10686ef445a4SHisping Lin 10696ef445a4SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 10706ef445a4SHisping Lin SharedMem0.flags = 0; 10716ef445a4SHisping Lin 10726ef445a4SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 10736ef445a4SHisping Lin 10746ef445a4SHisping Lin memcpy(SharedMem0.buffer, buf, SharedMem0.size); 10756ef445a4SHisping Lin 10766ef445a4SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 10776ef445a4SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 10786ef445a4SHisping Lin 10796ef445a4SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 10806ef445a4SHisping Lin TEEC_NONE, 10816ef445a4SHisping Lin TEEC_NONE, 10826ef445a4SHisping Lin TEEC_NONE); 10836ef445a4SHisping Lin 10846ef445a4SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 10856ef445a4SHisping Lin 1, 10866ef445a4SHisping Lin &TeecOperation, 10876ef445a4SHisping Lin &ErrorOrigin); 10886ef445a4SHisping Lin 10896ef445a4SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 10906ef445a4SHisping Lin TEEC_CloseSession(&TeecSession); 10916ef445a4SHisping Lin TEEC_FinalizeContext(&TeecContext); 10926ef445a4SHisping Lin 10936ef445a4SHisping Lin return TeecResult; 10946ef445a4SHisping Lin } 109516539616SHisping Lin 109616539616SHisping Lin uint32_t notify_optee_rpmb_ta(void) 109716539616SHisping Lin { 109816539616SHisping Lin TEEC_Result TeecResult; 109916539616SHisping Lin TEEC_Context TeecContext; 110016539616SHisping Lin TEEC_Session TeecSession; 110116539616SHisping Lin uint32_t ErrorOrigin; 110216539616SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 110316539616SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 110416539616SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 110516539616SHisping Lin TEEC_Operation TeecOperation = {0}; 110616539616SHisping Lin 110716539616SHisping Lin OpteeClientApiLibInitialize(); 110816539616SHisping Lin 110916539616SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 111016539616SHisping Lin 111116539616SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 111216539616SHisping Lin &TeecSession, 111316539616SHisping Lin TeecUuid, 111416539616SHisping Lin TEEC_LOGIN_PUBLIC, 111516539616SHisping Lin NULL, 111616539616SHisping Lin NULL, 111716539616SHisping Lin &ErrorOrigin); 111816539616SHisping Lin 111916539616SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, 112016539616SHisping Lin TEEC_NONE, 112116539616SHisping Lin TEEC_NONE, 112216539616SHisping Lin TEEC_NONE); 112316539616SHisping Lin 112416539616SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 112516539616SHisping Lin 2, 112616539616SHisping Lin &TeecOperation, 112716539616SHisping Lin &ErrorOrigin); 112816539616SHisping Lin 112916539616SHisping Lin TEEC_CloseSession(&TeecSession); 113016539616SHisping Lin TEEC_FinalizeContext(&TeecContext); 113116539616SHisping Lin 113216539616SHisping Lin return TeecResult; 113316539616SHisping Lin } 113416539616SHisping Lin 113516539616SHisping Lin uint32_t notify_optee_efuse_ta(void) 113616539616SHisping Lin { 113716539616SHisping Lin TEEC_Result TeecResult; 113816539616SHisping Lin TEEC_Context TeecContext; 113916539616SHisping Lin TEEC_Session TeecSession; 114016539616SHisping Lin uint32_t ErrorOrigin; 114116539616SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 114216539616SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 114316539616SHisping Lin 114416539616SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 114516539616SHisping Lin TEEC_Operation TeecOperation = {0}; 114616539616SHisping Lin 114716539616SHisping Lin OpteeClientApiLibInitialize(); 114816539616SHisping Lin 114916539616SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 115016539616SHisping Lin 115116539616SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 115216539616SHisping Lin &TeecSession, 115316539616SHisping Lin TeecUuid, 115416539616SHisping Lin TEEC_LOGIN_PUBLIC, 115516539616SHisping Lin NULL, 115616539616SHisping Lin NULL, 115716539616SHisping Lin &ErrorOrigin); 115816539616SHisping Lin 115916539616SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, 116016539616SHisping Lin TEEC_NONE, 116116539616SHisping Lin TEEC_NONE, 116216539616SHisping Lin TEEC_NONE); 116316539616SHisping Lin 116416539616SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 116516539616SHisping Lin 2, 116616539616SHisping Lin &TeecOperation, 116716539616SHisping Lin &ErrorOrigin); 116816539616SHisping Lin 116916539616SHisping Lin TEEC_CloseSession(&TeecSession); 117016539616SHisping Lin TEEC_FinalizeContext(&TeecContext); 117116539616SHisping Lin 117216539616SHisping Lin return TeecResult; 117316539616SHisping Lin } 117416539616SHisping Lin 117516539616SHisping Lin uint32_t trusty_notify_optee_uboot_end(void) 117616539616SHisping Lin { 117716539616SHisping Lin TEEC_Result res; 117816539616SHisping Lin res = notify_optee_rpmb_ta(); 117916539616SHisping Lin res |= notify_optee_efuse_ta(); 118016539616SHisping Lin return res; 118116539616SHisping Lin } 11822cd27853SHisping Lin 11832cd27853SHisping Lin uint32_t trusty_read_vbootkey_hash(uint32_t *buf, uint32_t length) 11842cd27853SHisping Lin { 11852cd27853SHisping Lin TEEC_Result TeecResult; 11862cd27853SHisping Lin TEEC_Context TeecContext; 11872cd27853SHisping Lin TEEC_Session TeecSession; 11882cd27853SHisping Lin uint32_t ErrorOrigin; 11892cd27853SHisping Lin 11902cd27853SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 11912cd27853SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 11922cd27853SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 11932cd27853SHisping Lin TEEC_Operation TeecOperation = {0}; 11942cd27853SHisping Lin 11952cd27853SHisping Lin OpteeClientApiLibInitialize(); 11962cd27853SHisping Lin 11972cd27853SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 11982cd27853SHisping Lin 11992cd27853SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 12002cd27853SHisping Lin &TeecSession, 12012cd27853SHisping Lin TeecUuid, 12022cd27853SHisping Lin TEEC_LOGIN_PUBLIC, 12032cd27853SHisping Lin NULL, 12042cd27853SHisping Lin NULL, 12052cd27853SHisping Lin &ErrorOrigin); 12062cd27853SHisping Lin 12072cd27853SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 12082cd27853SHisping Lin 12092cd27853SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 12102cd27853SHisping Lin SharedMem0.flags = 0; 12112cd27853SHisping Lin 12122cd27853SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 12132cd27853SHisping Lin 12142cd27853SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 12152cd27853SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 12162cd27853SHisping Lin 12172cd27853SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, 12182cd27853SHisping Lin TEEC_NONE, 12192cd27853SHisping Lin TEEC_NONE, 12202cd27853SHisping Lin TEEC_NONE); 12212cd27853SHisping Lin 12222cd27853SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 12232cd27853SHisping Lin 3, 12242cd27853SHisping Lin &TeecOperation, 12252cd27853SHisping Lin &ErrorOrigin); 12262cd27853SHisping Lin 12272cd27853SHisping Lin if (TeecResult == TEEC_SUCCESS) 12282cd27853SHisping Lin memcpy(buf, SharedMem0.buffer, SharedMem0.size); 12292cd27853SHisping Lin 12302cd27853SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 12312cd27853SHisping Lin TEEC_CloseSession(&TeecSession); 12322cd27853SHisping Lin TEEC_FinalizeContext(&TeecContext); 12332cd27853SHisping Lin 12342cd27853SHisping Lin return TeecResult; 12352cd27853SHisping Lin } 12362cd27853SHisping Lin uint32_t trusty_write_vbootkey_hash(uint32_t *buf, uint32_t length) 12372cd27853SHisping Lin { 12382cd27853SHisping Lin TEEC_Result TeecResult; 12392cd27853SHisping Lin TEEC_Context TeecContext; 12402cd27853SHisping Lin TEEC_Session TeecSession; 12412cd27853SHisping Lin uint32_t ErrorOrigin; 12422cd27853SHisping Lin 12432cd27853SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 12442cd27853SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 12452cd27853SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 12462cd27853SHisping Lin TEEC_Operation TeecOperation = {0}; 12472cd27853SHisping Lin 12482cd27853SHisping Lin OpteeClientApiLibInitialize(); 12492cd27853SHisping Lin 12502cd27853SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 12512cd27853SHisping Lin 12522cd27853SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 12532cd27853SHisping Lin &TeecSession, 12542cd27853SHisping Lin TeecUuid, 12552cd27853SHisping Lin TEEC_LOGIN_PUBLIC, 12562cd27853SHisping Lin NULL, 12572cd27853SHisping Lin NULL, 12582cd27853SHisping Lin &ErrorOrigin); 12592cd27853SHisping Lin 12602cd27853SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 12612cd27853SHisping Lin 12622cd27853SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 12632cd27853SHisping Lin SharedMem0.flags = 0; 12642cd27853SHisping Lin 12652cd27853SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 12662cd27853SHisping Lin 12672cd27853SHisping Lin memcpy(SharedMem0.buffer, buf, SharedMem0.size); 12682cd27853SHisping Lin 12692cd27853SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 12702cd27853SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 12712cd27853SHisping Lin 12722cd27853SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 12732cd27853SHisping Lin TEEC_NONE, 12742cd27853SHisping Lin TEEC_NONE, 12752cd27853SHisping Lin TEEC_NONE); 12762cd27853SHisping Lin 12772cd27853SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 12782cd27853SHisping Lin 4, 12792cd27853SHisping Lin &TeecOperation, 12802cd27853SHisping Lin &ErrorOrigin); 12812cd27853SHisping Lin 12822cd27853SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 12832cd27853SHisping Lin TEEC_CloseSession(&TeecSession); 12842cd27853SHisping Lin TEEC_FinalizeContext(&TeecContext); 12852cd27853SHisping Lin 12862cd27853SHisping Lin return TeecResult; 12872cd27853SHisping Lin } 1288095e2a82SHisping Lin 1289468df3b2SHisping Lin uint32_t trusty_read_vbootkey_enable_flag(uint8_t *flag) 1290468df3b2SHisping Lin { 1291468df3b2SHisping Lin TEEC_Result TeecResult; 1292468df3b2SHisping Lin TEEC_Context TeecContext; 1293468df3b2SHisping Lin TEEC_Session TeecSession; 1294468df3b2SHisping Lin uint32_t ErrorOrigin; 1295468df3b2SHisping Lin uint32_t bootflag; 1296468df3b2SHisping Lin 1297468df3b2SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 1298468df3b2SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 1299468df3b2SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 1300468df3b2SHisping Lin TEEC_Operation TeecOperation = {0}; 1301468df3b2SHisping Lin 1302468df3b2SHisping Lin OpteeClientApiLibInitialize(); 1303468df3b2SHisping Lin 1304468df3b2SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 1305468df3b2SHisping Lin 1306468df3b2SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 1307468df3b2SHisping Lin &TeecSession, 1308468df3b2SHisping Lin TeecUuid, 1309468df3b2SHisping Lin TEEC_LOGIN_PUBLIC, 1310468df3b2SHisping Lin NULL, 1311468df3b2SHisping Lin NULL, 1312468df3b2SHisping Lin &ErrorOrigin); 1313468df3b2SHisping Lin 1314468df3b2SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 1315468df3b2SHisping Lin 1316468df3b2SHisping Lin SharedMem0.size = 1 * sizeof(uint32_t); 1317468df3b2SHisping Lin SharedMem0.flags = 0; 1318468df3b2SHisping Lin 1319468df3b2SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 1320468df3b2SHisping Lin 1321468df3b2SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 1322468df3b2SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 1323468df3b2SHisping Lin 1324468df3b2SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, 1325468df3b2SHisping Lin TEEC_NONE, 1326468df3b2SHisping Lin TEEC_NONE, 1327468df3b2SHisping Lin TEEC_NONE); 1328468df3b2SHisping Lin 1329468df3b2SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 1330468df3b2SHisping Lin 5, 1331468df3b2SHisping Lin &TeecOperation, 1332468df3b2SHisping Lin &ErrorOrigin); 1333468df3b2SHisping Lin 1334468df3b2SHisping Lin if (TeecResult == TEEC_SUCCESS) { 1335468df3b2SHisping Lin memcpy(&bootflag, SharedMem0.buffer, SharedMem0.size); 1336468df3b2SHisping Lin if (bootflag == 0x000000FF) 1337468df3b2SHisping Lin *flag = 1; 1338468df3b2SHisping Lin } 1339468df3b2SHisping Lin 1340468df3b2SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 1341468df3b2SHisping Lin TEEC_CloseSession(&TeecSession); 1342468df3b2SHisping Lin TEEC_FinalizeContext(&TeecContext); 1343468df3b2SHisping Lin 1344468df3b2SHisping Lin return TeecResult; 1345468df3b2SHisping Lin } 1346468df3b2SHisping Lin 1347095e2a82SHisping Lin uint32_t trusty_read_permanent_attributes_flag(uint8_t *attributes) 1348095e2a82SHisping Lin { 1349095e2a82SHisping Lin TEEC_Result TeecResult; 1350095e2a82SHisping Lin TEEC_Context TeecContext; 1351095e2a82SHisping Lin TEEC_Session TeecSession; 1352095e2a82SHisping Lin uint32_t ErrorOrigin; 1353095e2a82SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 1354095e2a82SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 1355095e2a82SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 1356095e2a82SHisping Lin TEEC_Operation TeecOperation = {0}; 13573251364cSHisping Lin struct blk_desc *dev_desc; 13583251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 1359095e2a82SHisping Lin 1360095e2a82SHisping Lin debug("testmm start\n"); 1361095e2a82SHisping Lin OpteeClientApiLibInitialize(); 1362095e2a82SHisping Lin 1363095e2a82SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 1364095e2a82SHisping Lin 13653251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 13663251364cSHisping Lin TEEC_NONE, 13673251364cSHisping Lin TEEC_NONE, 13683251364cSHisping Lin TEEC_NONE); 13693251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 13703251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 13713251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 13723251364cSHisping Lin TeecOperation.params[0].value.a = 0; 13733251364cSHisping Lin #endif 13743251364cSHisping Lin 1375095e2a82SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 1376095e2a82SHisping Lin &TeecSession, 1377095e2a82SHisping Lin TeecUuid, 1378095e2a82SHisping Lin TEEC_LOGIN_PUBLIC, 1379095e2a82SHisping Lin NULL, 13803251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 1381095e2a82SHisping Lin NULL, 13823251364cSHisping Lin #endif 13833251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 13843251364cSHisping Lin &TeecOperation, 13853251364cSHisping Lin #endif 1386095e2a82SHisping Lin &ErrorOrigin); 1387095e2a82SHisping Lin 1388095e2a82SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 1389095e2a82SHisping Lin 1390095e2a82SHisping Lin SharedMem0.size = sizeof("attributes_flag"); 1391095e2a82SHisping Lin SharedMem0.flags = 0; 1392095e2a82SHisping Lin 1393095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 1394095e2a82SHisping Lin 1395095e2a82SHisping Lin memcpy(SharedMem0.buffer, "attributes_flag", SharedMem0.size); 1396095e2a82SHisping Lin 1397095e2a82SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 1398095e2a82SHisping Lin 1399095e2a82SHisping Lin SharedMem1.size = 1; 1400095e2a82SHisping Lin SharedMem1.flags = 0; 1401095e2a82SHisping Lin 1402095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 1403095e2a82SHisping Lin 1404095e2a82SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 1405095e2a82SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 1406095e2a82SHisping Lin 1407095e2a82SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 1408095e2a82SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 1409095e2a82SHisping Lin 1410095e2a82SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 1411095e2a82SHisping Lin TEEC_MEMREF_TEMP_INOUT, 1412095e2a82SHisping Lin TEEC_NONE, 1413095e2a82SHisping Lin TEEC_NONE); 1414095e2a82SHisping Lin 1415095e2a82SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 1416095e2a82SHisping Lin 142, 1417095e2a82SHisping Lin &TeecOperation, 1418095e2a82SHisping Lin &ErrorOrigin); 1419095e2a82SHisping Lin if (TeecResult == TEEC_SUCCESS) 1420095e2a82SHisping Lin memcpy(attributes, SharedMem1.buffer, SharedMem1.size); 1421095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 1422095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 1423095e2a82SHisping Lin TEEC_CloseSession(&TeecSession); 1424095e2a82SHisping Lin TEEC_FinalizeContext(&TeecContext); 1425095e2a82SHisping Lin debug("testmm end\n"); 1426095e2a82SHisping Lin 1427095e2a82SHisping Lin return TeecResult; 1428095e2a82SHisping Lin } 1429095e2a82SHisping Lin 1430095e2a82SHisping Lin uint32_t trusty_write_permanent_attributes_flag(uint8_t attributes) 1431095e2a82SHisping Lin { 1432095e2a82SHisping Lin TEEC_Result TeecResult; 1433095e2a82SHisping Lin TEEC_Context TeecContext; 1434095e2a82SHisping Lin TEEC_Session TeecSession; 1435095e2a82SHisping Lin uint32_t ErrorOrigin; 1436095e2a82SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 1437095e2a82SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 1438095e2a82SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 1439095e2a82SHisping Lin TEEC_Operation TeecOperation = {0}; 14403251364cSHisping Lin struct blk_desc *dev_desc; 14413251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 1442095e2a82SHisping Lin 1443095e2a82SHisping Lin debug("testmm start\n"); 1444095e2a82SHisping Lin OpteeClientApiLibInitialize(); 1445095e2a82SHisping Lin 1446095e2a82SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 1447095e2a82SHisping Lin 14483251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 14493251364cSHisping Lin TEEC_NONE, 14503251364cSHisping Lin TEEC_NONE, 14513251364cSHisping Lin TEEC_NONE); 14523251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 14533251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 14543251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 14553251364cSHisping Lin TeecOperation.params[0].value.a = 0; 14563251364cSHisping Lin #endif 14573251364cSHisping Lin 1458095e2a82SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 1459095e2a82SHisping Lin &TeecSession, 1460095e2a82SHisping Lin TeecUuid, 1461095e2a82SHisping Lin TEEC_LOGIN_PUBLIC, 1462095e2a82SHisping Lin NULL, 14633251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 1464095e2a82SHisping Lin NULL, 14653251364cSHisping Lin #endif 14663251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 14673251364cSHisping Lin &TeecOperation, 14683251364cSHisping Lin #endif 1469095e2a82SHisping Lin &ErrorOrigin); 1470095e2a82SHisping Lin 1471095e2a82SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 1472095e2a82SHisping Lin 1473095e2a82SHisping Lin SharedMem0.size = sizeof("attributes_flag"); 1474095e2a82SHisping Lin SharedMem0.flags = 0; 1475095e2a82SHisping Lin 1476095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 1477095e2a82SHisping Lin 1478095e2a82SHisping Lin memcpy(SharedMem0.buffer, "attributes_flag", SharedMem0.size); 1479095e2a82SHisping Lin 1480095e2a82SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 1481095e2a82SHisping Lin 1482095e2a82SHisping Lin SharedMem1.size = 1; 1483095e2a82SHisping Lin SharedMem1.flags = 0; 1484095e2a82SHisping Lin 1485095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 1486095e2a82SHisping Lin 1487095e2a82SHisping Lin memcpy(SharedMem1.buffer, (char *)&attributes, SharedMem1.size); 1488095e2a82SHisping Lin 1489095e2a82SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 1490095e2a82SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 1491095e2a82SHisping Lin 1492095e2a82SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 1493095e2a82SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 1494095e2a82SHisping Lin 1495095e2a82SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 1496095e2a82SHisping Lin TEEC_MEMREF_TEMP_INOUT, 1497095e2a82SHisping Lin TEEC_NONE, 1498095e2a82SHisping Lin TEEC_NONE); 1499095e2a82SHisping Lin 1500095e2a82SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 1501095e2a82SHisping Lin 141, 1502095e2a82SHisping Lin &TeecOperation, 1503095e2a82SHisping Lin &ErrorOrigin); 1504095e2a82SHisping Lin 1505095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 1506095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 1507095e2a82SHisping Lin TEEC_CloseSession(&TeecSession); 1508095e2a82SHisping Lin TEEC_FinalizeContext(&TeecContext); 1509095e2a82SHisping Lin debug("testmm end\n"); 1510095e2a82SHisping Lin 1511095e2a82SHisping Lin return TeecResult; 1512095e2a82SHisping Lin } 15134aa61755SAndy Ye 15144aa61755SAndy Ye uint32_t trusty_attest_dh(uint8_t *dh, uint32_t *dh_size) 15154aa61755SAndy Ye { 15164aa61755SAndy Ye TEEC_Result TeecResult; 15174aa61755SAndy Ye TEEC_Context TeecContext; 15184aa61755SAndy Ye TEEC_Session TeecSession; 15194aa61755SAndy Ye uint32_t ErrorOrigin; 15204aa61755SAndy Ye TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 15214aa61755SAndy Ye { 0xa8, 0x69, 0x9c, 0xe6, 15224aa61755SAndy Ye 0x88, 0x6c, 0x5d, 0x5d 15234aa61755SAndy Ye } 15244aa61755SAndy Ye }; 15254aa61755SAndy Ye TEEC_UUID *TeecUuid = &tempuuid; 15264aa61755SAndy Ye TEEC_Operation TeecOperation = {0}; 15273251364cSHisping Lin struct blk_desc *dev_desc; 15283251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 15294aa61755SAndy Ye 15304aa61755SAndy Ye OpteeClientApiLibInitialize(); 15314aa61755SAndy Ye 15324aa61755SAndy Ye TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 15334aa61755SAndy Ye 15343251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 15353251364cSHisping Lin TEEC_NONE, 15363251364cSHisping Lin TEEC_NONE, 15373251364cSHisping Lin TEEC_NONE); 15383251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 15393251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 15403251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 15413251364cSHisping Lin TeecOperation.params[0].value.a = 0; 15423251364cSHisping Lin #endif 15433251364cSHisping Lin 15444aa61755SAndy Ye TeecResult = TEEC_OpenSession(&TeecContext, 15454aa61755SAndy Ye &TeecSession, 15464aa61755SAndy Ye TeecUuid, 15474aa61755SAndy Ye TEEC_LOGIN_PUBLIC, 15484aa61755SAndy Ye NULL, 15493251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 15504aa61755SAndy Ye NULL, 15513251364cSHisping Lin #endif 15523251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 15533251364cSHisping Lin &TeecOperation, 15543251364cSHisping Lin #endif 15554aa61755SAndy Ye &ErrorOrigin); 15564aa61755SAndy Ye 15574aa61755SAndy Ye TEEC_SharedMemory SharedMem0 = {0}; 15584aa61755SAndy Ye 15594aa61755SAndy Ye SharedMem0.size = *dh_size; 15604aa61755SAndy Ye SharedMem0.flags = 0; 15614aa61755SAndy Ye 15624aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 15634aa61755SAndy Ye 15644aa61755SAndy Ye TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 15654aa61755SAndy Ye TeecOperation.params[0].tmpref.size = SharedMem0.size; 15664aa61755SAndy Ye 15674aa61755SAndy Ye TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, 15684aa61755SAndy Ye TEEC_NONE, 15694aa61755SAndy Ye TEEC_NONE, 15704aa61755SAndy Ye TEEC_NONE); 15714aa61755SAndy Ye 15724aa61755SAndy Ye TeecResult = TEEC_InvokeCommand(&TeecSession, 15734aa61755SAndy Ye 143, 15744aa61755SAndy Ye &TeecOperation, 15754aa61755SAndy Ye &ErrorOrigin); 15764aa61755SAndy Ye 15774aa61755SAndy Ye *dh_size = TeecOperation.params[0].tmpref.size; 15784aa61755SAndy Ye memcpy(dh, SharedMem0.buffer, SharedMem0.size); 15794aa61755SAndy Ye 15804aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem0); 15814aa61755SAndy Ye 15824aa61755SAndy Ye TEEC_CloseSession(&TeecSession); 15834aa61755SAndy Ye TeecResult = TEEC_FinalizeContext(&TeecContext); 15844aa61755SAndy Ye 15854aa61755SAndy Ye return TeecResult; 15864aa61755SAndy Ye } 15874aa61755SAndy Ye 15884aa61755SAndy Ye uint32_t trusty_attest_uuid(uint8_t *uuid, uint32_t *uuid_size) 15894aa61755SAndy Ye { 15904aa61755SAndy Ye TEEC_Result TeecResult; 15914aa61755SAndy Ye TEEC_Context TeecContext; 15924aa61755SAndy Ye TEEC_Session TeecSession; 15934aa61755SAndy Ye uint32_t ErrorOrigin; 15944aa61755SAndy Ye TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 15954aa61755SAndy Ye { 0xa8, 0x69, 0x9c, 0xe6, 15964aa61755SAndy Ye 0x88, 0x6c, 0x5d, 0x5d 15974aa61755SAndy Ye } 15984aa61755SAndy Ye }; 15994aa61755SAndy Ye TEEC_UUID *TeecUuid = &tempuuid; 16004aa61755SAndy Ye TEEC_Operation TeecOperation = {0}; 16013251364cSHisping Lin struct blk_desc *dev_desc; 16023251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 16034aa61755SAndy Ye 16044aa61755SAndy Ye OpteeClientApiLibInitialize(); 16054aa61755SAndy Ye 16064aa61755SAndy Ye TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 16074aa61755SAndy Ye 16083251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 16093251364cSHisping Lin TEEC_NONE, 16103251364cSHisping Lin TEEC_NONE, 16113251364cSHisping Lin TEEC_NONE); 16123251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 16133251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 16143251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 16153251364cSHisping Lin TeecOperation.params[0].value.a = 0; 16163251364cSHisping Lin #endif 16173251364cSHisping Lin 16184aa61755SAndy Ye TeecResult = TEEC_OpenSession(&TeecContext, 16194aa61755SAndy Ye &TeecSession, 16204aa61755SAndy Ye TeecUuid, 16214aa61755SAndy Ye TEEC_LOGIN_PUBLIC, 16224aa61755SAndy Ye NULL, 16233251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 16244aa61755SAndy Ye NULL, 16253251364cSHisping Lin #endif 16263251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 16273251364cSHisping Lin &TeecOperation, 16283251364cSHisping Lin #endif 16294aa61755SAndy Ye &ErrorOrigin); 16304aa61755SAndy Ye 16314aa61755SAndy Ye TEEC_SharedMemory SharedMem0 = {0}; 16324aa61755SAndy Ye 16334aa61755SAndy Ye SharedMem0.size = *uuid_size; 16344aa61755SAndy Ye SharedMem0.flags = 0; 16354aa61755SAndy Ye 16364aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 16374aa61755SAndy Ye 16384aa61755SAndy Ye TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 16394aa61755SAndy Ye TeecOperation.params[0].tmpref.size = SharedMem0.size; 16404aa61755SAndy Ye 16414aa61755SAndy Ye TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, 16424aa61755SAndy Ye TEEC_NONE, 16434aa61755SAndy Ye TEEC_NONE, 16444aa61755SAndy Ye TEEC_NONE); 16454aa61755SAndy Ye 16464aa61755SAndy Ye TeecResult = TEEC_InvokeCommand(&TeecSession, 16474aa61755SAndy Ye 144, 16484aa61755SAndy Ye &TeecOperation, 16494aa61755SAndy Ye &ErrorOrigin); 16504aa61755SAndy Ye 16514aa61755SAndy Ye *uuid_size = TeecOperation.params[0].tmpref.size; 16524aa61755SAndy Ye memcpy(uuid, SharedMem0.buffer, SharedMem0.size); 16534aa61755SAndy Ye 16544aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem0); 16554aa61755SAndy Ye 16564aa61755SAndy Ye TEEC_CloseSession(&TeecSession); 16574aa61755SAndy Ye TeecResult = TEEC_FinalizeContext(&TeecContext); 16584aa61755SAndy Ye 16594aa61755SAndy Ye return TeecResult; 16604aa61755SAndy Ye } 16614aa61755SAndy Ye 16624aa61755SAndy Ye uint32_t trusty_attest_get_ca(uint8_t *operation_start, 16634aa61755SAndy Ye uint32_t *operation_size, 16644aa61755SAndy Ye uint8_t *out, 16654aa61755SAndy Ye uint32_t *out_len) 16664aa61755SAndy Ye { 16674aa61755SAndy Ye TEEC_Result TeecResult; 16684aa61755SAndy Ye TEEC_Context TeecContext; 16694aa61755SAndy Ye TEEC_Session TeecSession; 16704aa61755SAndy Ye uint32_t ErrorOrigin; 16714aa61755SAndy Ye 16724aa61755SAndy Ye OpteeClientApiLibInitialize(); 16734aa61755SAndy Ye 16744aa61755SAndy Ye TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 16754aa61755SAndy Ye { 0xa8, 0x69, 0x9c, 0xe6, 16764aa61755SAndy Ye 0x88, 0x6c, 0x5d, 0x5d 16774aa61755SAndy Ye } 16784aa61755SAndy Ye }; 16794aa61755SAndy Ye 16804aa61755SAndy Ye TEEC_UUID *TeecUuid = &tempuuid; 16814aa61755SAndy Ye TEEC_Operation TeecOperation = {0}; 16823251364cSHisping Lin struct blk_desc *dev_desc; 16833251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 16844aa61755SAndy Ye 16854aa61755SAndy Ye OpteeClientApiLibInitialize(); 16864aa61755SAndy Ye 16874aa61755SAndy Ye TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 16884aa61755SAndy Ye 16893251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 16903251364cSHisping Lin TEEC_NONE, 16913251364cSHisping Lin TEEC_NONE, 16923251364cSHisping Lin TEEC_NONE); 16933251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 16943251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 16953251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 16963251364cSHisping Lin TeecOperation.params[0].value.a = 0; 16973251364cSHisping Lin #endif 16983251364cSHisping Lin 16994aa61755SAndy Ye TeecResult = TEEC_OpenSession(&TeecContext, 17004aa61755SAndy Ye &TeecSession, 17014aa61755SAndy Ye TeecUuid, 17024aa61755SAndy Ye TEEC_LOGIN_PUBLIC, 17034aa61755SAndy Ye NULL, 17043251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 17054aa61755SAndy Ye NULL, 17063251364cSHisping Lin #endif 17073251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 17083251364cSHisping Lin &TeecOperation, 17093251364cSHisping Lin #endif 17104aa61755SAndy Ye &ErrorOrigin); 17114aa61755SAndy Ye 17124aa61755SAndy Ye TEEC_SharedMemory SharedMem0 = {0}; 17134aa61755SAndy Ye 17144aa61755SAndy Ye SharedMem0.size = *operation_size; 17154aa61755SAndy Ye SharedMem0.flags = 0; 17164aa61755SAndy Ye 17174aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 17184aa61755SAndy Ye 17194aa61755SAndy Ye memcpy(SharedMem0.buffer, operation_start, SharedMem0.size); 17204aa61755SAndy Ye 17214aa61755SAndy Ye TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 17224aa61755SAndy Ye TeecOperation.params[0].tmpref.size = SharedMem0.size; 17234aa61755SAndy Ye 17244aa61755SAndy Ye TEEC_SharedMemory SharedMem1 = {0}; 17254aa61755SAndy Ye 17264aa61755SAndy Ye SharedMem1.size = *out_len; 17274aa61755SAndy Ye SharedMem1.flags = 0; 17284aa61755SAndy Ye 17294aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 17304aa61755SAndy Ye 17314aa61755SAndy Ye TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 17324aa61755SAndy Ye TeecOperation.params[1].tmpref.size = SharedMem1.size; 17334aa61755SAndy Ye 17344aa61755SAndy Ye TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, 17354aa61755SAndy Ye TEEC_MEMREF_TEMP_INOUT, 17364aa61755SAndy Ye TEEC_NONE, 17374aa61755SAndy Ye TEEC_NONE); 17384aa61755SAndy Ye 17394aa61755SAndy Ye TeecResult = TEEC_InvokeCommand(&TeecSession, 17404aa61755SAndy Ye 145, 17414aa61755SAndy Ye &TeecOperation, 17424aa61755SAndy Ye &ErrorOrigin); 17434aa61755SAndy Ye 17444aa61755SAndy Ye *out_len = TeecOperation.params[1].tmpref.size; 17454aa61755SAndy Ye memcpy(out, SharedMem1.buffer, SharedMem1.size); 17464aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem0); 17474aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem1); 17484aa61755SAndy Ye 17494aa61755SAndy Ye return TeecResult; 17504aa61755SAndy Ye } 17514aa61755SAndy Ye 17524aa61755SAndy Ye uint32_t trusty_attest_set_ca(uint8_t *ca_response, uint32_t *ca_response_size) 17534aa61755SAndy Ye { 17544aa61755SAndy Ye TEEC_Result TeecResult; 17554aa61755SAndy Ye TEEC_Context TeecContext; 17564aa61755SAndy Ye TEEC_Session TeecSession; 17574aa61755SAndy Ye uint32_t ErrorOrigin; 17584aa61755SAndy Ye TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 17594aa61755SAndy Ye { 0xa8, 0x69, 0x9c, 0xe6, 17604aa61755SAndy Ye 0x88, 0x6c, 0x5d, 0x5d 17614aa61755SAndy Ye } 17624aa61755SAndy Ye }; 17634aa61755SAndy Ye TEEC_UUID *TeecUuid = &tempuuid; 17644aa61755SAndy Ye TEEC_Operation TeecOperation = {0}; 17653251364cSHisping Lin struct blk_desc *dev_desc; 17663251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 17674aa61755SAndy Ye 17684aa61755SAndy Ye TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 17694aa61755SAndy Ye 17703251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 17713251364cSHisping Lin TEEC_NONE, 17723251364cSHisping Lin TEEC_NONE, 17733251364cSHisping Lin TEEC_NONE); 17743251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 17753251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 17763251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 17773251364cSHisping Lin TeecOperation.params[0].value.a = 0; 17783251364cSHisping Lin #endif 17793251364cSHisping Lin 17804aa61755SAndy Ye TeecResult = TEEC_OpenSession(&TeecContext, 17814aa61755SAndy Ye &TeecSession, 17824aa61755SAndy Ye TeecUuid, 17834aa61755SAndy Ye TEEC_LOGIN_PUBLIC, 17844aa61755SAndy Ye NULL, 17853251364cSHisping Lin #ifdef CONFIG_OPTEE_V1 17864aa61755SAndy Ye NULL, 17873251364cSHisping Lin #endif 17883251364cSHisping Lin #ifdef CONFIG_OPTEE_V2 17893251364cSHisping Lin &TeecOperation, 17903251364cSHisping Lin #endif 17914aa61755SAndy Ye &ErrorOrigin); 17924aa61755SAndy Ye 17934aa61755SAndy Ye TEEC_SharedMemory SharedMem0 = {0}; 17944aa61755SAndy Ye 17954aa61755SAndy Ye SharedMem0.size = *ca_response_size; 17964aa61755SAndy Ye SharedMem0.flags = 0; 17974aa61755SAndy Ye 17984aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 17994aa61755SAndy Ye 18004aa61755SAndy Ye memcpy(SharedMem0.buffer, ca_response, SharedMem0.size); 18014aa61755SAndy Ye 18024aa61755SAndy Ye TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 18034aa61755SAndy Ye TeecOperation.params[0].tmpref.size = SharedMem0.size; 18044aa61755SAndy Ye 18054aa61755SAndy Ye TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, 18064aa61755SAndy Ye TEEC_NONE, 18074aa61755SAndy Ye TEEC_NONE, 18084aa61755SAndy Ye TEEC_NONE); 18094aa61755SAndy Ye 18104aa61755SAndy Ye TeecResult = TEEC_InvokeCommand(&TeecSession, 18114aa61755SAndy Ye 146, 18124aa61755SAndy Ye &TeecOperation, 18134aa61755SAndy Ye &ErrorOrigin); 18144aa61755SAndy Ye 18154aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem0); 18164aa61755SAndy Ye 18174aa61755SAndy Ye TEEC_CloseSession(&TeecSession); 18184aa61755SAndy Ye TeecResult = TEEC_FinalizeContext(&TeecContext); 18194aa61755SAndy Ye 18204aa61755SAndy Ye return TeecResult; 18214aa61755SAndy Ye } 1822*78ef5fbdSqiujian 1823*78ef5fbdSqiujian TEEC_Result trusty_write_oem_unlock(uint8_t unlock) 1824*78ef5fbdSqiujian { 1825*78ef5fbdSqiujian char *file = "oem.unlock"; 1826*78ef5fbdSqiujian TEEC_Result ret; 1827*78ef5fbdSqiujian 1828*78ef5fbdSqiujian ret = write_to_keymaster((uint8_t *)file, strlen(file), 1829*78ef5fbdSqiujian (uint8_t *)&unlock, 1); 1830*78ef5fbdSqiujian return ret; 1831*78ef5fbdSqiujian } 1832*78ef5fbdSqiujian 1833*78ef5fbdSqiujian TEEC_Result trusty_read_oem_unlock(uint8_t *unlock) 1834*78ef5fbdSqiujian { 1835*78ef5fbdSqiujian char *file = "oem.unlock"; 1836*78ef5fbdSqiujian TEEC_Result ret; 1837*78ef5fbdSqiujian 1838*78ef5fbdSqiujian ret = read_from_keymaster((uint8_t *)file, strlen(file), 1839*78ef5fbdSqiujian unlock, 1); 1840*78ef5fbdSqiujian 1841*78ef5fbdSqiujian if (ret == TEE_ERROR_ITEM_NOT_FOUND) { 1842*78ef5fbdSqiujian debug("init oem unlock status 0"); 1843*78ef5fbdSqiujian ret = trusty_write_oem_unlock(0); 1844*78ef5fbdSqiujian } 1845*78ef5fbdSqiujian 1846*78ef5fbdSqiujian return ret; 1847*78ef5fbdSqiujian }