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> 1178ef5fbdSqiujian #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 &TeecOperation, 48ae8ec5e1SHisping Lin &ErrorOrigin); 49ae8ec5e1SHisping Lin 50ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 51ae8ec5e1SHisping Lin 52ae8ec5e1SHisping Lin SharedMem0.size = sizeof("filename_test"); 53ae8ec5e1SHisping Lin SharedMem0.flags = 0; 54ae8ec5e1SHisping Lin 55ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 56ae8ec5e1SHisping Lin 57ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "filename_test", SharedMem0.size); 58ae8ec5e1SHisping Lin 59ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 60ae8ec5e1SHisping Lin 61ae8ec5e1SHisping Lin SharedMem1.size = 32; 62ae8ec5e1SHisping Lin SharedMem1.flags = 0; 63ae8ec5e1SHisping Lin 64ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 65ae8ec5e1SHisping Lin 66ae8ec5e1SHisping Lin memset(SharedMem1.buffer, 'a', SharedMem1.size); 67ae8ec5e1SHisping Lin 68ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 69ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 70ae8ec5e1SHisping Lin 71ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 72ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 73ae8ec5e1SHisping Lin 74ae8ec5e1SHisping Lin 75ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 76ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 77ae8ec5e1SHisping Lin TEEC_NONE, 78ae8ec5e1SHisping Lin TEEC_NONE); 79ae8ec5e1SHisping Lin 80ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 81ae8ec5e1SHisping Lin 1, 82ae8ec5e1SHisping Lin &TeecOperation, 83ae8ec5e1SHisping Lin &ErrorOrigin); 84ae8ec5e1SHisping Lin 85ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 86ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 87ae8ec5e1SHisping Lin 88ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 89ae8ec5e1SHisping Lin 9046b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 91ae8ec5e1SHisping Lin 92ae8ec5e1SHisping Lin debug("testmm end\n"); 93ae8ec5e1SHisping Lin debug("TeecResult %x\n", TeecResult); 94ae8ec5e1SHisping Lin } 95ae8ec5e1SHisping Lin 96ae8ec5e1SHisping Lin static uint8_t b2hs_add_base(uint8_t in) 97ae8ec5e1SHisping Lin { 98ae8ec5e1SHisping Lin if (in > 9) 99ae8ec5e1SHisping Lin return in + 55; 100ae8ec5e1SHisping Lin else 101ae8ec5e1SHisping Lin return in + 48; 102ae8ec5e1SHisping Lin } 103ae8ec5e1SHisping Lin 104ae8ec5e1SHisping Lin uint32_t b2hs(uint8_t *b, uint8_t *hs, uint32_t blen, uint32_t hslen) 105ae8ec5e1SHisping Lin { 106ae8ec5e1SHisping Lin uint32_t i = 0; 107ae8ec5e1SHisping Lin 108ae8ec5e1SHisping Lin if (blen * 2 + 1 > hslen) 109ae8ec5e1SHisping Lin return 0; 110ae8ec5e1SHisping Lin 111ae8ec5e1SHisping Lin for (; i < blen; i++) { 112ae8ec5e1SHisping Lin hs[i * 2 + 1] = b2hs_add_base(b[i] & 0xf); 113ae8ec5e1SHisping Lin hs[i * 2] = b2hs_add_base(b[i] >> 4); 114ae8ec5e1SHisping Lin } 115ae8ec5e1SHisping Lin hs[blen * 2] = 0; 116ae8ec5e1SHisping Lin 117ae8ec5e1SHisping Lin return blen * 2; 118ae8ec5e1SHisping Lin } 119ae8ec5e1SHisping Lin 120ae8ec5e1SHisping Lin 121ae8ec5e1SHisping Lin uint32_t trusty_read_rollback_index(uint32_t slot, uint64_t *value) 122ae8ec5e1SHisping Lin { 123ae8ec5e1SHisping Lin TEEC_Result TeecResult; 124ae8ec5e1SHisping Lin TEEC_Context TeecContext; 125ae8ec5e1SHisping Lin TEEC_Session TeecSession; 126ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 127ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 128ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 129ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 130ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 131ae8ec5e1SHisping Lin uint8_t hs[9]; 132ae8ec5e1SHisping Lin 1333251364cSHisping Lin struct blk_desc *dev_desc; 1343251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 1353251364cSHisping Lin 136ae8ec5e1SHisping Lin b2hs((uint8_t *)&slot, hs, 4, 9); 137ae8ec5e1SHisping Lin debug("testmm start\n"); 138ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 139ae8ec5e1SHisping Lin 140ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 141ae8ec5e1SHisping Lin 1423251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 1433251364cSHisping Lin TEEC_NONE, 1443251364cSHisping Lin TEEC_NONE, 1453251364cSHisping Lin TEEC_NONE); 1463251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 1473251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 1483251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 1493251364cSHisping Lin TeecOperation.params[0].value.a = 0; 1503251364cSHisping Lin #endif 1513251364cSHisping Lin 152ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 153ae8ec5e1SHisping Lin &TeecSession, 154ae8ec5e1SHisping Lin TeecUuid, 155ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 156ae8ec5e1SHisping Lin NULL, 1573251364cSHisping Lin &TeecOperation, 158*f303baf0SHisping Lin 159ae8ec5e1SHisping Lin &ErrorOrigin); 160ae8ec5e1SHisping Lin 161ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 162ae8ec5e1SHisping Lin 163ae8ec5e1SHisping Lin SharedMem0.size = 8; 164ae8ec5e1SHisping Lin SharedMem0.flags = 0; 165ae8ec5e1SHisping Lin 166ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 167ae8ec5e1SHisping Lin 168ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, hs, SharedMem0.size); 169ae8ec5e1SHisping Lin 170ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 171ae8ec5e1SHisping Lin 172ae8ec5e1SHisping Lin SharedMem1.size = 8; 173ae8ec5e1SHisping Lin SharedMem1.flags = 0; 174ae8ec5e1SHisping Lin 175ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 176ae8ec5e1SHisping Lin 177ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 178ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 179ae8ec5e1SHisping Lin 180ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 181ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 182ae8ec5e1SHisping Lin 183ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 184ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 185ae8ec5e1SHisping Lin TEEC_NONE, 186ae8ec5e1SHisping Lin TEEC_NONE); 187ae8ec5e1SHisping Lin 188ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 189ae8ec5e1SHisping Lin 0, 190ae8ec5e1SHisping Lin &TeecOperation, 191ae8ec5e1SHisping Lin &ErrorOrigin); 19246b2a054SHisping Lin if (TeecResult == TEEC_SUCCESS) 193ae8ec5e1SHisping Lin memcpy((char *)value, SharedMem1.buffer, SharedMem1.size); 194ae8ec5e1SHisping Lin 195ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 196ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 197ae8ec5e1SHisping Lin 198ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 199ae8ec5e1SHisping Lin 20046b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 201ae8ec5e1SHisping Lin 202ae8ec5e1SHisping Lin debug("testmm end\n"); 203ae8ec5e1SHisping Lin return TeecResult; 204ae8ec5e1SHisping Lin } 205ae8ec5e1SHisping Lin 206ae8ec5e1SHisping Lin uint32_t trusty_write_rollback_index(uint32_t slot, uint64_t value) 207ae8ec5e1SHisping Lin { 208ae8ec5e1SHisping Lin TEEC_Result TeecResult; 209ae8ec5e1SHisping Lin TEEC_Context TeecContext; 210ae8ec5e1SHisping Lin TEEC_Session TeecSession; 211ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 212ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 213ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 214ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 215ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 216ae8ec5e1SHisping Lin uint8_t hs[9]; 2173251364cSHisping Lin struct blk_desc *dev_desc; 2183251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 2193251364cSHisping Lin 220ae8ec5e1SHisping Lin b2hs((uint8_t *)&slot, hs, 4, 9); 221ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 222ae8ec5e1SHisping Lin 223ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 224ae8ec5e1SHisping Lin 2253251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 2263251364cSHisping Lin TEEC_NONE, 2273251364cSHisping Lin TEEC_NONE, 2283251364cSHisping Lin TEEC_NONE); 2293251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 2303251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 2313251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 2323251364cSHisping Lin TeecOperation.params[0].value.a = 0; 2333251364cSHisping Lin #endif 2343251364cSHisping Lin 235ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 236ae8ec5e1SHisping Lin &TeecSession, 237ae8ec5e1SHisping Lin TeecUuid, 238ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 239ae8ec5e1SHisping Lin NULL, 2403251364cSHisping Lin &TeecOperation, 241ae8ec5e1SHisping Lin &ErrorOrigin); 242ae8ec5e1SHisping Lin 243ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 244ae8ec5e1SHisping Lin 245ae8ec5e1SHisping Lin SharedMem0.size = 8; 246ae8ec5e1SHisping Lin SharedMem0.flags = 0; 247ae8ec5e1SHisping Lin 248ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 249ae8ec5e1SHisping Lin 250ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, hs, SharedMem0.size); 251ae8ec5e1SHisping Lin 252ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 253ae8ec5e1SHisping Lin 254ae8ec5e1SHisping Lin SharedMem1.size = 8; 255ae8ec5e1SHisping Lin SharedMem1.flags = 0; 256ae8ec5e1SHisping Lin 257ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 258ae8ec5e1SHisping Lin 259ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, (char *)&value, SharedMem1.size); 260ae8ec5e1SHisping Lin 261ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 262ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 263ae8ec5e1SHisping Lin 264ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 265ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 266ae8ec5e1SHisping Lin 267ae8ec5e1SHisping Lin 268ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 269ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 270ae8ec5e1SHisping Lin TEEC_NONE, 271ae8ec5e1SHisping Lin TEEC_NONE); 272ae8ec5e1SHisping Lin 273ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 274ae8ec5e1SHisping Lin 1, 275ae8ec5e1SHisping Lin &TeecOperation, 276ae8ec5e1SHisping Lin &ErrorOrigin); 277ae8ec5e1SHisping Lin 278ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 279ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 280ae8ec5e1SHisping Lin 281ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 282ae8ec5e1SHisping Lin 28346b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 284ae8ec5e1SHisping Lin 285ae8ec5e1SHisping Lin debug("testmm end\n"); 286ae8ec5e1SHisping Lin 287ae8ec5e1SHisping Lin return TeecResult; 288ae8ec5e1SHisping Lin } 289ae8ec5e1SHisping Lin 290ae8ec5e1SHisping Lin uint32_t trusty_read_permanent_attributes(uint8_t *attributes, uint32_t size) 291ae8ec5e1SHisping Lin { 292ae8ec5e1SHisping Lin TEEC_Result TeecResult; 293ae8ec5e1SHisping Lin TEEC_Context TeecContext; 294ae8ec5e1SHisping Lin TEEC_Session TeecSession; 295ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 29646b2a054SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 29746b2a054SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 298ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 299ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 3003251364cSHisping Lin struct blk_desc *dev_desc; 3013251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 302ae8ec5e1SHisping Lin 303ae8ec5e1SHisping Lin debug("testmm start\n"); 304ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 305ae8ec5e1SHisping Lin 306ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 307ae8ec5e1SHisping Lin 3083251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 3093251364cSHisping Lin TEEC_NONE, 3103251364cSHisping Lin TEEC_NONE, 3113251364cSHisping Lin TEEC_NONE); 3123251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 3133251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 3143251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 3153251364cSHisping Lin TeecOperation.params[0].value.a = 0; 3163251364cSHisping Lin #endif 3173251364cSHisping Lin 318ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 319ae8ec5e1SHisping Lin &TeecSession, 320ae8ec5e1SHisping Lin TeecUuid, 321ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 322ae8ec5e1SHisping Lin NULL, 3233251364cSHisping Lin &TeecOperation, 324ae8ec5e1SHisping Lin &ErrorOrigin); 325ae8ec5e1SHisping Lin 326ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 327ae8ec5e1SHisping Lin 328ae8ec5e1SHisping Lin SharedMem0.size = sizeof("attributes"); 329ae8ec5e1SHisping Lin SharedMem0.flags = 0; 330ae8ec5e1SHisping Lin 331ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 332ae8ec5e1SHisping Lin 333ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "attributes", SharedMem0.size); 334ae8ec5e1SHisping Lin 335ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 336ae8ec5e1SHisping Lin 337ae8ec5e1SHisping Lin SharedMem1.size = size; 338ae8ec5e1SHisping Lin SharedMem1.flags = 0; 339ae8ec5e1SHisping Lin 340ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 341ae8ec5e1SHisping Lin 342ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 343ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 344ae8ec5e1SHisping Lin 345ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 346ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 347ae8ec5e1SHisping Lin 348ae8ec5e1SHisping Lin 349ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 350ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 351ae8ec5e1SHisping Lin TEEC_NONE, 352ae8ec5e1SHisping Lin TEEC_NONE); 353ae8ec5e1SHisping Lin 354ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 35546b2a054SHisping Lin 142, 356ae8ec5e1SHisping Lin &TeecOperation, 357ae8ec5e1SHisping Lin &ErrorOrigin); 35846b2a054SHisping Lin if (TeecResult == TEEC_SUCCESS) 359ae8ec5e1SHisping Lin memcpy(attributes, SharedMem1.buffer, SharedMem1.size); 360ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 361ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 362ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 36346b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 364ae8ec5e1SHisping Lin debug("testmm end\n"); 365ae8ec5e1SHisping Lin 366ae8ec5e1SHisping Lin return TeecResult; 367ae8ec5e1SHisping Lin } 368ae8ec5e1SHisping Lin 369ae8ec5e1SHisping Lin uint32_t trusty_write_permanent_attributes(uint8_t *attributes, uint32_t size) 370ae8ec5e1SHisping Lin { 371ae8ec5e1SHisping Lin TEEC_Result TeecResult; 372ae8ec5e1SHisping Lin TEEC_Context TeecContext; 373ae8ec5e1SHisping Lin TEEC_Session TeecSession; 374ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 37546b2a054SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 37646b2a054SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 377ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 378ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 3793251364cSHisping Lin struct blk_desc *dev_desc; 3803251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 381ae8ec5e1SHisping Lin 382ae8ec5e1SHisping Lin debug("testmm start\n"); 383ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 384ae8ec5e1SHisping Lin 385ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 386ae8ec5e1SHisping Lin 3873251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 3883251364cSHisping Lin TEEC_NONE, 3893251364cSHisping Lin TEEC_NONE, 3903251364cSHisping Lin TEEC_NONE); 3913251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 3923251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 3933251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 3943251364cSHisping Lin TeecOperation.params[0].value.a = 0; 3953251364cSHisping Lin #endif 3963251364cSHisping Lin 397ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 398ae8ec5e1SHisping Lin &TeecSession, 399ae8ec5e1SHisping Lin TeecUuid, 400ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 401ae8ec5e1SHisping Lin NULL, 4023251364cSHisping Lin &TeecOperation, 403ae8ec5e1SHisping Lin &ErrorOrigin); 404ae8ec5e1SHisping Lin 405ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 406ae8ec5e1SHisping Lin 407ae8ec5e1SHisping Lin SharedMem0.size = sizeof("attributes"); 408ae8ec5e1SHisping Lin SharedMem0.flags = 0; 409ae8ec5e1SHisping Lin 410ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 411ae8ec5e1SHisping Lin 412ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "attributes", SharedMem0.size); 413ae8ec5e1SHisping Lin 414ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 415ae8ec5e1SHisping Lin 416ae8ec5e1SHisping Lin SharedMem1.size = size; 417ae8ec5e1SHisping Lin SharedMem1.flags = 0; 418ae8ec5e1SHisping Lin 419ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 420ae8ec5e1SHisping Lin 421ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, attributes, SharedMem1.size); 422ae8ec5e1SHisping Lin 423ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 424ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 425ae8ec5e1SHisping Lin 426ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 427ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 428ae8ec5e1SHisping Lin 429ae8ec5e1SHisping Lin 430ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 431ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 432ae8ec5e1SHisping Lin TEEC_NONE, 433ae8ec5e1SHisping Lin TEEC_NONE); 434ae8ec5e1SHisping Lin 435ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 43646b2a054SHisping Lin 141, 437ae8ec5e1SHisping Lin &TeecOperation, 438ae8ec5e1SHisping Lin &ErrorOrigin); 439ae8ec5e1SHisping Lin 440ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 441ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 442ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 44346b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 444ae8ec5e1SHisping Lin debug("testmm end\n"); 445ae8ec5e1SHisping Lin 446ae8ec5e1SHisping Lin return TeecResult; 447ae8ec5e1SHisping Lin } 448ae8ec5e1SHisping Lin 449ae8ec5e1SHisping Lin uint32_t trusty_read_lock_state(uint8_t *lock_state) 450ae8ec5e1SHisping Lin { 451ae8ec5e1SHisping Lin TEEC_Result TeecResult; 452ae8ec5e1SHisping Lin TEEC_Context TeecContext; 453ae8ec5e1SHisping Lin TEEC_Session TeecSession; 454ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 455ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 456ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 457ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 458ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 4593251364cSHisping Lin struct blk_desc *dev_desc; 4603251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 461ae8ec5e1SHisping Lin 462ae8ec5e1SHisping Lin debug("testmm start\n"); 463ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 464ae8ec5e1SHisping Lin 465ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 466ae8ec5e1SHisping Lin 4673251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 4683251364cSHisping Lin TEEC_NONE, 4693251364cSHisping Lin TEEC_NONE, 4703251364cSHisping Lin TEEC_NONE); 4713251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 4723251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 4733251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 4743251364cSHisping Lin TeecOperation.params[0].value.a = 0; 4753251364cSHisping Lin #endif 476ae8ec5e1SHisping Lin 477ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 478ae8ec5e1SHisping Lin &TeecSession, 479ae8ec5e1SHisping Lin TeecUuid, 480ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 481ae8ec5e1SHisping Lin NULL, 4823251364cSHisping Lin &TeecOperation, 483ae8ec5e1SHisping Lin &ErrorOrigin); 484ae8ec5e1SHisping Lin 485ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 486ae8ec5e1SHisping Lin 487ae8ec5e1SHisping Lin SharedMem0.size = sizeof("lock_state"); 488ae8ec5e1SHisping Lin SharedMem0.flags = 0; 489ae8ec5e1SHisping Lin 490ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 491ae8ec5e1SHisping Lin 492ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "lock_state", SharedMem0.size); 493ae8ec5e1SHisping Lin 494ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 495ae8ec5e1SHisping Lin 496ae8ec5e1SHisping Lin SharedMem1.size = 1; 497ae8ec5e1SHisping Lin SharedMem1.flags = 0; 498ae8ec5e1SHisping Lin 499ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 500ae8ec5e1SHisping Lin 501ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 502ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 503ae8ec5e1SHisping Lin 504ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 505ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 506ae8ec5e1SHisping Lin 507ae8ec5e1SHisping Lin 508ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 509ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 510ae8ec5e1SHisping Lin TEEC_NONE, 511ae8ec5e1SHisping Lin TEEC_NONE); 512ae8ec5e1SHisping Lin 513ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 514ae8ec5e1SHisping Lin 0, 515ae8ec5e1SHisping Lin &TeecOperation, 516ae8ec5e1SHisping Lin &ErrorOrigin); 51746b2a054SHisping Lin if (TeecResult == TEEC_SUCCESS) 518ae8ec5e1SHisping Lin memcpy(lock_state, SharedMem1.buffer, SharedMem1.size); 519ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 520ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 521ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 52246b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 523ae8ec5e1SHisping Lin debug("testmm end\n"); 524ae8ec5e1SHisping Lin 525ae8ec5e1SHisping Lin return TeecResult; 526ae8ec5e1SHisping Lin } 527ae8ec5e1SHisping Lin 528ae8ec5e1SHisping Lin uint32_t trusty_write_lock_state(uint8_t lock_state) 529ae8ec5e1SHisping Lin { 530ae8ec5e1SHisping Lin TEEC_Result TeecResult; 531ae8ec5e1SHisping Lin TEEC_Context TeecContext; 532ae8ec5e1SHisping Lin TEEC_Session TeecSession; 533ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 534ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 535ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 536ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 537ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 5383251364cSHisping Lin struct blk_desc *dev_desc; 5393251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 540ae8ec5e1SHisping Lin 541ae8ec5e1SHisping Lin debug("testmm start\n"); 542ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 543ae8ec5e1SHisping Lin 544ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 545ae8ec5e1SHisping Lin 5463251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 5473251364cSHisping Lin TEEC_NONE, 5483251364cSHisping Lin TEEC_NONE, 5493251364cSHisping Lin TEEC_NONE); 5503251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 5513251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 5523251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 5533251364cSHisping Lin TeecOperation.params[0].value.a = 0; 5543251364cSHisping Lin #endif 5553251364cSHisping Lin 556ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 557ae8ec5e1SHisping Lin &TeecSession, 558ae8ec5e1SHisping Lin TeecUuid, 559ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 560ae8ec5e1SHisping Lin NULL, 5613251364cSHisping Lin &TeecOperation, 562ae8ec5e1SHisping Lin &ErrorOrigin); 563ae8ec5e1SHisping Lin 564ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 565ae8ec5e1SHisping Lin 566ae8ec5e1SHisping Lin SharedMem0.size = sizeof("lock_state"); 567ae8ec5e1SHisping Lin SharedMem0.flags = 0; 568ae8ec5e1SHisping Lin 569ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 570ae8ec5e1SHisping Lin 571ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "lock_state", SharedMem0.size); 572ae8ec5e1SHisping Lin 573ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 574ae8ec5e1SHisping Lin 575ae8ec5e1SHisping Lin SharedMem1.size = 1; 576ae8ec5e1SHisping Lin SharedMem1.flags = 0; 577ae8ec5e1SHisping Lin 578ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 579ae8ec5e1SHisping Lin 580ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, &lock_state, SharedMem1.size); 581ae8ec5e1SHisping Lin 582ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 583ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 584ae8ec5e1SHisping Lin 585ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 586ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 587ae8ec5e1SHisping Lin 588ae8ec5e1SHisping Lin 589ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 590ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 591ae8ec5e1SHisping Lin TEEC_NONE, 592ae8ec5e1SHisping Lin TEEC_NONE); 593ae8ec5e1SHisping Lin 594ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 595ae8ec5e1SHisping Lin 1, 596ae8ec5e1SHisping Lin &TeecOperation, 597ae8ec5e1SHisping Lin &ErrorOrigin); 598ae8ec5e1SHisping Lin 599ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 600ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 601ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 60246b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 603ae8ec5e1SHisping Lin debug("testmm end\n"); 604ae8ec5e1SHisping Lin 605ae8ec5e1SHisping Lin return TeecResult; 606ae8ec5e1SHisping Lin } 607ae8ec5e1SHisping Lin 608ae8ec5e1SHisping Lin uint32_t trusty_read_flash_lock_state(uint8_t *flash_lock_state) 609ae8ec5e1SHisping Lin { 610ae8ec5e1SHisping Lin TEEC_Result TeecResult; 611ae8ec5e1SHisping Lin TEEC_Context TeecContext; 612ae8ec5e1SHisping Lin TEEC_Session TeecSession; 613ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 614ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 615ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 616ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 617ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 6183251364cSHisping Lin struct blk_desc *dev_desc; 6193251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 620ae8ec5e1SHisping Lin 621ae8ec5e1SHisping Lin debug("testmm start\n"); 622ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 623ae8ec5e1SHisping Lin 624ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 625ae8ec5e1SHisping Lin 6263251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 6273251364cSHisping Lin TEEC_NONE, 6283251364cSHisping Lin TEEC_NONE, 6293251364cSHisping Lin TEEC_NONE); 6303251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 6313251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 6323251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 6333251364cSHisping Lin TeecOperation.params[0].value.a = 0; 6343251364cSHisping Lin #endif 635ae8ec5e1SHisping Lin 636ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 637ae8ec5e1SHisping Lin &TeecSession, 638ae8ec5e1SHisping Lin TeecUuid, 639ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 640ae8ec5e1SHisping Lin NULL, 6413251364cSHisping Lin &TeecOperation, 642ae8ec5e1SHisping Lin &ErrorOrigin); 643ae8ec5e1SHisping Lin 644ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 645ae8ec5e1SHisping Lin 646ae8ec5e1SHisping Lin SharedMem0.size = sizeof("flash_lock_state"); 647ae8ec5e1SHisping Lin SharedMem0.flags = 0; 648ae8ec5e1SHisping Lin 649ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 650ae8ec5e1SHisping Lin 651ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "flash_lock_state", SharedMem0.size); 652ae8ec5e1SHisping Lin 653ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 654ae8ec5e1SHisping Lin 655ae8ec5e1SHisping Lin SharedMem1.size = 1; 656ae8ec5e1SHisping Lin SharedMem1.flags = 0; 657ae8ec5e1SHisping Lin 658ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 659ae8ec5e1SHisping Lin 660ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 661ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 662ae8ec5e1SHisping Lin 663ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 664ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 665ae8ec5e1SHisping Lin 666ae8ec5e1SHisping Lin 667ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 668ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 669ae8ec5e1SHisping Lin TEEC_NONE, 670ae8ec5e1SHisping Lin TEEC_NONE); 671ae8ec5e1SHisping Lin 672ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 673ae8ec5e1SHisping Lin 0, 674ae8ec5e1SHisping Lin &TeecOperation, 675ae8ec5e1SHisping Lin &ErrorOrigin); 67646b2a054SHisping Lin if (TeecResult == TEEC_SUCCESS) 677ae8ec5e1SHisping Lin memcpy(flash_lock_state, SharedMem1.buffer, SharedMem1.size); 678ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 679ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 680ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 68146b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 682ae8ec5e1SHisping Lin debug("testmm end\n"); 683ae8ec5e1SHisping Lin 684ae8ec5e1SHisping Lin return TeecResult; 685ae8ec5e1SHisping Lin } 686ae8ec5e1SHisping Lin 687ae8ec5e1SHisping Lin 688ae8ec5e1SHisping Lin uint32_t trusty_write_flash_lock_state(uint8_t flash_lock_state) 689ae8ec5e1SHisping Lin { 690ae8ec5e1SHisping Lin TEEC_Result TeecResult; 691ae8ec5e1SHisping Lin TEEC_Context TeecContext; 692ae8ec5e1SHisping Lin TEEC_Session TeecSession; 693ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 694ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 695ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 696ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 697ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 6983251364cSHisping Lin struct blk_desc *dev_desc; 6993251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 700ae8ec5e1SHisping Lin 701ae8ec5e1SHisping Lin debug("testmm start\n"); 702ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 703ae8ec5e1SHisping Lin 704ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 705ae8ec5e1SHisping Lin 7063251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 7073251364cSHisping Lin TEEC_NONE, 7083251364cSHisping Lin TEEC_NONE, 7093251364cSHisping Lin TEEC_NONE); 7103251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 7113251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 7123251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 7133251364cSHisping Lin TeecOperation.params[0].value.a = 0; 7143251364cSHisping Lin #endif 7153251364cSHisping Lin 716ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 717ae8ec5e1SHisping Lin &TeecSession, 718ae8ec5e1SHisping Lin TeecUuid, 719ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 720ae8ec5e1SHisping Lin NULL, 7213251364cSHisping Lin &TeecOperation, 722ae8ec5e1SHisping Lin &ErrorOrigin); 723ae8ec5e1SHisping Lin 724ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 725ae8ec5e1SHisping Lin 726ae8ec5e1SHisping Lin SharedMem0.size = sizeof("flash_lock_state"); 727ae8ec5e1SHisping Lin SharedMem0.flags = 0; 728ae8ec5e1SHisping Lin 729ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 730ae8ec5e1SHisping Lin 731ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "flash_lock_state", SharedMem0.size); 732ae8ec5e1SHisping Lin 733ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 734ae8ec5e1SHisping Lin 735ae8ec5e1SHisping Lin SharedMem1.size = 1; 736ae8ec5e1SHisping Lin SharedMem1.flags = 0; 737ae8ec5e1SHisping Lin 738ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 739ae8ec5e1SHisping Lin 740ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, &flash_lock_state, SharedMem1.size); 741ae8ec5e1SHisping Lin 742ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 743ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 744ae8ec5e1SHisping Lin 745ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 746ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 747ae8ec5e1SHisping Lin 748ae8ec5e1SHisping Lin 749ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 750ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 751ae8ec5e1SHisping Lin TEEC_NONE, 752ae8ec5e1SHisping Lin TEEC_NONE); 753ae8ec5e1SHisping Lin 754ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 755ae8ec5e1SHisping Lin 1, 756ae8ec5e1SHisping Lin &TeecOperation, 757ae8ec5e1SHisping Lin &ErrorOrigin); 758ae8ec5e1SHisping Lin 759ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 760ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 761ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 76246b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 763ae8ec5e1SHisping Lin debug("testmm end\n"); 764ae8ec5e1SHisping Lin 765ae8ec5e1SHisping Lin return TeecResult; 766ae8ec5e1SHisping Lin } 767ae8ec5e1SHisping Lin 76878ef5fbdSqiujian TEEC_Result read_from_keymaster(uint8_t *filename, 76978ef5fbdSqiujian uint32_t filename_size, 77078ef5fbdSqiujian uint8_t *data, 77178ef5fbdSqiujian uint32_t size) 77278ef5fbdSqiujian { 77378ef5fbdSqiujian TEEC_Result TeecResult; 77478ef5fbdSqiujian TEEC_Context TeecContext; 77578ef5fbdSqiujian TEEC_Session TeecSession; 77678ef5fbdSqiujian uint32_t ErrorOrigin; 77778ef5fbdSqiujian TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 77878ef5fbdSqiujian { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 77978ef5fbdSqiujian TEEC_UUID *TeecUuid = &tempuuid; 78078ef5fbdSqiujian TEEC_Operation TeecOperation = {0}; 78178ef5fbdSqiujian struct blk_desc *dev_desc; 78278ef5fbdSqiujian dev_desc = rockchip_get_bootdev(); 78378ef5fbdSqiujian 78478ef5fbdSqiujian debug("read_from_keymaster start\n"); 78578ef5fbdSqiujian OpteeClientApiLibInitialize(); 78678ef5fbdSqiujian 78778ef5fbdSqiujian TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 78878ef5fbdSqiujian 78978ef5fbdSqiujian TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 79078ef5fbdSqiujian TEEC_NONE, 79178ef5fbdSqiujian TEEC_NONE, 79278ef5fbdSqiujian TEEC_NONE); 79378ef5fbdSqiujian /*0 nand or emmc "security" partition , 1 rpmb*/ 79478ef5fbdSqiujian TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 79578ef5fbdSqiujian #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 79678ef5fbdSqiujian TeecOperation.params[0].value.a = 0; 79778ef5fbdSqiujian #endif 79878ef5fbdSqiujian 79978ef5fbdSqiujian TeecResult = TEEC_OpenSession(&TeecContext, 80078ef5fbdSqiujian &TeecSession, 80178ef5fbdSqiujian TeecUuid, 80278ef5fbdSqiujian TEEC_LOGIN_PUBLIC, 80378ef5fbdSqiujian NULL, 80478ef5fbdSqiujian &TeecOperation, 80578ef5fbdSqiujian &ErrorOrigin); 80678ef5fbdSqiujian 80778ef5fbdSqiujian TEEC_SharedMemory SharedMem0 = {0}; 80878ef5fbdSqiujian 80978ef5fbdSqiujian SharedMem0.size = filename_size; 81078ef5fbdSqiujian SharedMem0.flags = 0; 81178ef5fbdSqiujian 81278ef5fbdSqiujian TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 81378ef5fbdSqiujian 81478ef5fbdSqiujian memcpy(SharedMem0.buffer, filename, SharedMem0.size); 81578ef5fbdSqiujian 81678ef5fbdSqiujian TEEC_SharedMemory SharedMem1 = {0}; 81778ef5fbdSqiujian 81878ef5fbdSqiujian SharedMem1.size = size; 81978ef5fbdSqiujian SharedMem1.flags = 0; 82078ef5fbdSqiujian 82178ef5fbdSqiujian TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 82278ef5fbdSqiujian 82378ef5fbdSqiujian TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 82478ef5fbdSqiujian TeecOperation.params[0].tmpref.size = SharedMem0.size; 82578ef5fbdSqiujian 82678ef5fbdSqiujian TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 82778ef5fbdSqiujian TeecOperation.params[1].tmpref.size = SharedMem1.size; 82878ef5fbdSqiujian 82978ef5fbdSqiujian 83078ef5fbdSqiujian TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 83178ef5fbdSqiujian TEEC_MEMREF_TEMP_INOUT, 83278ef5fbdSqiujian TEEC_NONE, 83378ef5fbdSqiujian TEEC_NONE); 83478ef5fbdSqiujian 83578ef5fbdSqiujian TeecResult = TEEC_InvokeCommand(&TeecSession, 83678ef5fbdSqiujian 142, 83778ef5fbdSqiujian &TeecOperation, 83878ef5fbdSqiujian &ErrorOrigin); 83978ef5fbdSqiujian if (TeecResult == TEEC_SUCCESS) 84078ef5fbdSqiujian memcpy(data, SharedMem1.buffer, SharedMem1.size); 84178ef5fbdSqiujian TEEC_ReleaseSharedMemory(&SharedMem0); 84278ef5fbdSqiujian TEEC_ReleaseSharedMemory(&SharedMem1); 84378ef5fbdSqiujian TEEC_CloseSession(&TeecSession); 84478ef5fbdSqiujian TEEC_FinalizeContext(&TeecContext); 84578ef5fbdSqiujian debug("read_from_keymaster end\n"); 84678ef5fbdSqiujian 84778ef5fbdSqiujian return TeecResult; 84878ef5fbdSqiujian } 84978ef5fbdSqiujian 850ae8ec5e1SHisping Lin uint32_t write_to_keymaster(uint8_t *filename, 851ae8ec5e1SHisping Lin uint32_t filename_size, 852ae8ec5e1SHisping Lin uint8_t *data, 853ae8ec5e1SHisping Lin uint32_t data_size) 854ae8ec5e1SHisping Lin { 855ae8ec5e1SHisping Lin TEEC_Result TeecResult; 856ae8ec5e1SHisping Lin TEEC_Context TeecContext; 857ae8ec5e1SHisping Lin TEEC_Session TeecSession; 858ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 859ae8ec5e1SHisping Lin 860ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 861ae8ec5e1SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 862ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 863ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 8643251364cSHisping Lin struct blk_desc *dev_desc; 8653251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 866ae8ec5e1SHisping Lin 867ae8ec5e1SHisping Lin debug("write_to_keymaster\n"); 868ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 869ae8ec5e1SHisping Lin 870ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 871ae8ec5e1SHisping Lin 8723251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 8733251364cSHisping Lin TEEC_NONE, 8743251364cSHisping Lin TEEC_NONE, 8753251364cSHisping Lin TEEC_NONE); 8763251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 8773251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 8783251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 8793251364cSHisping Lin TeecOperation.params[0].value.a = 0; 8803251364cSHisping Lin #endif 8813251364cSHisping Lin 882ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 883ae8ec5e1SHisping Lin &TeecSession, 884ae8ec5e1SHisping Lin TeecUuid, 885ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 886ae8ec5e1SHisping Lin NULL, 8873251364cSHisping Lin &TeecOperation, 888ae8ec5e1SHisping Lin &ErrorOrigin); 889ae8ec5e1SHisping Lin 890ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 891ae8ec5e1SHisping Lin 892ae8ec5e1SHisping Lin SharedMem0.size = filename_size; 893ae8ec5e1SHisping Lin SharedMem0.flags = 0; 894ae8ec5e1SHisping Lin 895ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 896ae8ec5e1SHisping Lin 897ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, filename, SharedMem0.size); 898ae8ec5e1SHisping Lin 899ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 900ae8ec5e1SHisping Lin 901ae8ec5e1SHisping Lin SharedMem1.size = data_size; 902ae8ec5e1SHisping Lin SharedMem1.flags = 0; 903ae8ec5e1SHisping Lin 904ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 905ae8ec5e1SHisping Lin 906ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, data, SharedMem1.size); 907ae8ec5e1SHisping Lin 908ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 909ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 910ae8ec5e1SHisping Lin 911ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 912ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 913ae8ec5e1SHisping Lin 914ae8ec5e1SHisping Lin 915ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 916ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 917ae8ec5e1SHisping Lin TEEC_NONE, 918ae8ec5e1SHisping Lin TEEC_NONE); 919ae8ec5e1SHisping Lin 920ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 9211f25ada2SHisping Lin 141, 922ae8ec5e1SHisping Lin &TeecOperation, 923ae8ec5e1SHisping Lin &ErrorOrigin); 924ae8ec5e1SHisping Lin 925ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 926ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 927ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 92846b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 92978ef5fbdSqiujian debug("write_to_keymaster end\n"); 930ae8ec5e1SHisping Lin debug("TeecResult %x\n", TeecResult); 931ae8ec5e1SHisping Lin 932ae8ec5e1SHisping Lin return TeecResult; 933ae8ec5e1SHisping Lin } 9346ef445a4SHisping Lin 9356ef445a4SHisping Lin uint32_t trusty_read_attribute_hash(uint32_t *buf, uint32_t length) 9366ef445a4SHisping Lin { 9376ef445a4SHisping Lin TEEC_Result TeecResult; 9386ef445a4SHisping Lin TEEC_Context TeecContext; 9396ef445a4SHisping Lin TEEC_Session TeecSession; 9406ef445a4SHisping Lin uint32_t ErrorOrigin; 9416ef445a4SHisping Lin 9426ef445a4SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 9436ef445a4SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 9446ef445a4SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 9456ef445a4SHisping Lin TEEC_Operation TeecOperation = {0}; 9466ef445a4SHisping Lin 9476ef445a4SHisping Lin OpteeClientApiLibInitialize(); 9486ef445a4SHisping Lin 9496ef445a4SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 9506ef445a4SHisping Lin 9516ef445a4SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 9526ef445a4SHisping Lin &TeecSession, 9536ef445a4SHisping Lin TeecUuid, 9546ef445a4SHisping Lin TEEC_LOGIN_PUBLIC, 9556ef445a4SHisping Lin NULL, 9566ef445a4SHisping Lin NULL, 9576ef445a4SHisping Lin &ErrorOrigin); 9586ef445a4SHisping Lin 9596ef445a4SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 9606ef445a4SHisping Lin 9616ef445a4SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 9626ef445a4SHisping Lin SharedMem0.flags = 0; 9636ef445a4SHisping Lin 9646ef445a4SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 9656ef445a4SHisping Lin 9666ef445a4SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 9676ef445a4SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 9686ef445a4SHisping Lin 9696ef445a4SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, 9706ef445a4SHisping Lin TEEC_NONE, 9716ef445a4SHisping Lin TEEC_NONE, 9726ef445a4SHisping Lin TEEC_NONE); 9736ef445a4SHisping Lin 9746ef445a4SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 9756ef445a4SHisping Lin 0, 9766ef445a4SHisping Lin &TeecOperation, 9776ef445a4SHisping Lin &ErrorOrigin); 9786ef445a4SHisping Lin 9796ef445a4SHisping Lin if (TeecResult == TEEC_SUCCESS) 9806ef445a4SHisping Lin memcpy(buf, SharedMem0.buffer, SharedMem0.size); 9816ef445a4SHisping Lin 9826ef445a4SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 9836ef445a4SHisping Lin TEEC_CloseSession(&TeecSession); 9846ef445a4SHisping Lin TEEC_FinalizeContext(&TeecContext); 9856ef445a4SHisping Lin 9866ef445a4SHisping Lin return TeecResult; 9876ef445a4SHisping Lin } 9886ef445a4SHisping Lin 9896ef445a4SHisping Lin uint32_t trusty_write_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 memcpy(SharedMem0.buffer, buf, SharedMem0.size); 10216ef445a4SHisping Lin 10226ef445a4SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 10236ef445a4SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 10246ef445a4SHisping Lin 10256ef445a4SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 10266ef445a4SHisping Lin TEEC_NONE, 10276ef445a4SHisping Lin TEEC_NONE, 10286ef445a4SHisping Lin TEEC_NONE); 10296ef445a4SHisping Lin 10306ef445a4SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 10316ef445a4SHisping Lin 1, 10326ef445a4SHisping Lin &TeecOperation, 10336ef445a4SHisping Lin &ErrorOrigin); 10346ef445a4SHisping Lin 10356ef445a4SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 10366ef445a4SHisping Lin TEEC_CloseSession(&TeecSession); 10376ef445a4SHisping Lin TEEC_FinalizeContext(&TeecContext); 10386ef445a4SHisping Lin 10396ef445a4SHisping Lin return TeecResult; 10406ef445a4SHisping Lin } 104116539616SHisping Lin 104216539616SHisping Lin uint32_t notify_optee_rpmb_ta(void) 104316539616SHisping Lin { 104416539616SHisping Lin TEEC_Result TeecResult; 104516539616SHisping Lin TEEC_Context TeecContext; 104616539616SHisping Lin TEEC_Session TeecSession; 104716539616SHisping Lin uint32_t ErrorOrigin; 104816539616SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 104916539616SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 105016539616SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 105116539616SHisping Lin TEEC_Operation TeecOperation = {0}; 105216539616SHisping Lin 105316539616SHisping Lin OpteeClientApiLibInitialize(); 105416539616SHisping Lin 105516539616SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 105616539616SHisping Lin 105716539616SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 105816539616SHisping Lin &TeecSession, 105916539616SHisping Lin TeecUuid, 106016539616SHisping Lin TEEC_LOGIN_PUBLIC, 106116539616SHisping Lin NULL, 106216539616SHisping Lin NULL, 106316539616SHisping Lin &ErrorOrigin); 106416539616SHisping Lin 106516539616SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, 106616539616SHisping Lin TEEC_NONE, 106716539616SHisping Lin TEEC_NONE, 106816539616SHisping Lin TEEC_NONE); 106916539616SHisping Lin 107016539616SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 107116539616SHisping Lin 2, 107216539616SHisping Lin &TeecOperation, 107316539616SHisping Lin &ErrorOrigin); 107416539616SHisping Lin 107516539616SHisping Lin TEEC_CloseSession(&TeecSession); 107616539616SHisping Lin TEEC_FinalizeContext(&TeecContext); 107716539616SHisping Lin 107816539616SHisping Lin return TeecResult; 107916539616SHisping Lin } 108016539616SHisping Lin 108116539616SHisping Lin uint32_t notify_optee_efuse_ta(void) 108216539616SHisping Lin { 108316539616SHisping Lin TEEC_Result TeecResult; 108416539616SHisping Lin TEEC_Context TeecContext; 108516539616SHisping Lin TEEC_Session TeecSession; 108616539616SHisping Lin uint32_t ErrorOrigin; 108716539616SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 108816539616SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 108916539616SHisping Lin 109016539616SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 109116539616SHisping Lin TEEC_Operation TeecOperation = {0}; 109216539616SHisping Lin 109316539616SHisping Lin OpteeClientApiLibInitialize(); 109416539616SHisping Lin 109516539616SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 109616539616SHisping Lin 109716539616SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 109816539616SHisping Lin &TeecSession, 109916539616SHisping Lin TeecUuid, 110016539616SHisping Lin TEEC_LOGIN_PUBLIC, 110116539616SHisping Lin NULL, 110216539616SHisping Lin NULL, 110316539616SHisping Lin &ErrorOrigin); 110416539616SHisping Lin 110516539616SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, 110616539616SHisping Lin TEEC_NONE, 110716539616SHisping Lin TEEC_NONE, 110816539616SHisping Lin TEEC_NONE); 110916539616SHisping Lin 111016539616SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 111116539616SHisping Lin 2, 111216539616SHisping Lin &TeecOperation, 111316539616SHisping Lin &ErrorOrigin); 111416539616SHisping Lin 111516539616SHisping Lin TEEC_CloseSession(&TeecSession); 111616539616SHisping Lin TEEC_FinalizeContext(&TeecContext); 111716539616SHisping Lin 111816539616SHisping Lin return TeecResult; 111916539616SHisping Lin } 112016539616SHisping Lin 112116539616SHisping Lin uint32_t trusty_notify_optee_uboot_end(void) 112216539616SHisping Lin { 112316539616SHisping Lin TEEC_Result res; 112416539616SHisping Lin res = notify_optee_rpmb_ta(); 112516539616SHisping Lin res |= notify_optee_efuse_ta(); 112616539616SHisping Lin return res; 112716539616SHisping Lin } 11282cd27853SHisping Lin 11292cd27853SHisping Lin uint32_t trusty_read_vbootkey_hash(uint32_t *buf, uint32_t length) 11302cd27853SHisping Lin { 11312cd27853SHisping Lin TEEC_Result TeecResult; 11322cd27853SHisping Lin TEEC_Context TeecContext; 11332cd27853SHisping Lin TEEC_Session TeecSession; 11342cd27853SHisping Lin uint32_t ErrorOrigin; 11352cd27853SHisping Lin 11362cd27853SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 11372cd27853SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 11382cd27853SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 11392cd27853SHisping Lin TEEC_Operation TeecOperation = {0}; 11402cd27853SHisping Lin 11412cd27853SHisping Lin OpteeClientApiLibInitialize(); 11422cd27853SHisping Lin 11432cd27853SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 11442cd27853SHisping Lin 11452cd27853SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 11462cd27853SHisping Lin &TeecSession, 11472cd27853SHisping Lin TeecUuid, 11482cd27853SHisping Lin TEEC_LOGIN_PUBLIC, 11492cd27853SHisping Lin NULL, 11502cd27853SHisping Lin NULL, 11512cd27853SHisping Lin &ErrorOrigin); 11522cd27853SHisping Lin 11532cd27853SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 11542cd27853SHisping Lin 11552cd27853SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 11562cd27853SHisping Lin SharedMem0.flags = 0; 11572cd27853SHisping Lin 11582cd27853SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 11592cd27853SHisping Lin 11602cd27853SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 11612cd27853SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 11622cd27853SHisping Lin 11632cd27853SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, 11642cd27853SHisping Lin TEEC_NONE, 11652cd27853SHisping Lin TEEC_NONE, 11662cd27853SHisping Lin TEEC_NONE); 11672cd27853SHisping Lin 11682cd27853SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 11692cd27853SHisping Lin 3, 11702cd27853SHisping Lin &TeecOperation, 11712cd27853SHisping Lin &ErrorOrigin); 11722cd27853SHisping Lin 11732cd27853SHisping Lin if (TeecResult == TEEC_SUCCESS) 11742cd27853SHisping Lin memcpy(buf, SharedMem0.buffer, SharedMem0.size); 11752cd27853SHisping Lin 11762cd27853SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 11772cd27853SHisping Lin TEEC_CloseSession(&TeecSession); 11782cd27853SHisping Lin TEEC_FinalizeContext(&TeecContext); 11792cd27853SHisping Lin 11802cd27853SHisping Lin return TeecResult; 11812cd27853SHisping Lin } 11822cd27853SHisping Lin uint32_t trusty_write_vbootkey_hash(uint32_t *buf, uint32_t length) 11832cd27853SHisping Lin { 11842cd27853SHisping Lin TEEC_Result TeecResult; 11852cd27853SHisping Lin TEEC_Context TeecContext; 11862cd27853SHisping Lin TEEC_Session TeecSession; 11872cd27853SHisping Lin uint32_t ErrorOrigin; 11882cd27853SHisping Lin 11892cd27853SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 11902cd27853SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 11912cd27853SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 11922cd27853SHisping Lin TEEC_Operation TeecOperation = {0}; 11932cd27853SHisping Lin 11942cd27853SHisping Lin OpteeClientApiLibInitialize(); 11952cd27853SHisping Lin 11962cd27853SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 11972cd27853SHisping Lin 11982cd27853SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 11992cd27853SHisping Lin &TeecSession, 12002cd27853SHisping Lin TeecUuid, 12012cd27853SHisping Lin TEEC_LOGIN_PUBLIC, 12022cd27853SHisping Lin NULL, 12032cd27853SHisping Lin NULL, 12042cd27853SHisping Lin &ErrorOrigin); 12052cd27853SHisping Lin 12062cd27853SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 12072cd27853SHisping Lin 12082cd27853SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 12092cd27853SHisping Lin SharedMem0.flags = 0; 12102cd27853SHisping Lin 12112cd27853SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 12122cd27853SHisping Lin 12132cd27853SHisping Lin memcpy(SharedMem0.buffer, buf, SharedMem0.size); 12142cd27853SHisping Lin 12152cd27853SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 12162cd27853SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 12172cd27853SHisping Lin 12182cd27853SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 12192cd27853SHisping Lin TEEC_NONE, 12202cd27853SHisping Lin TEEC_NONE, 12212cd27853SHisping Lin TEEC_NONE); 12222cd27853SHisping Lin 12232cd27853SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 12242cd27853SHisping Lin 4, 12252cd27853SHisping Lin &TeecOperation, 12262cd27853SHisping Lin &ErrorOrigin); 12272cd27853SHisping Lin 12282cd27853SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 12292cd27853SHisping Lin TEEC_CloseSession(&TeecSession); 12302cd27853SHisping Lin TEEC_FinalizeContext(&TeecContext); 12312cd27853SHisping Lin 12322cd27853SHisping Lin return TeecResult; 12332cd27853SHisping Lin } 1234095e2a82SHisping Lin 1235468df3b2SHisping Lin uint32_t trusty_read_vbootkey_enable_flag(uint8_t *flag) 1236468df3b2SHisping Lin { 1237468df3b2SHisping Lin TEEC_Result TeecResult; 1238468df3b2SHisping Lin TEEC_Context TeecContext; 1239468df3b2SHisping Lin TEEC_Session TeecSession; 1240468df3b2SHisping Lin uint32_t ErrorOrigin; 1241468df3b2SHisping Lin uint32_t bootflag; 1242468df3b2SHisping Lin 1243468df3b2SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 1244468df3b2SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 1245468df3b2SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 1246468df3b2SHisping Lin TEEC_Operation TeecOperation = {0}; 1247468df3b2SHisping Lin 1248468df3b2SHisping Lin OpteeClientApiLibInitialize(); 1249468df3b2SHisping Lin 1250468df3b2SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 1251468df3b2SHisping Lin 1252468df3b2SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 1253468df3b2SHisping Lin &TeecSession, 1254468df3b2SHisping Lin TeecUuid, 1255468df3b2SHisping Lin TEEC_LOGIN_PUBLIC, 1256468df3b2SHisping Lin NULL, 1257468df3b2SHisping Lin NULL, 1258468df3b2SHisping Lin &ErrorOrigin); 1259468df3b2SHisping Lin 1260468df3b2SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 1261468df3b2SHisping Lin 1262468df3b2SHisping Lin SharedMem0.size = 1 * sizeof(uint32_t); 1263468df3b2SHisping Lin SharedMem0.flags = 0; 1264468df3b2SHisping Lin 1265468df3b2SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 1266468df3b2SHisping Lin 1267468df3b2SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 1268468df3b2SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 1269468df3b2SHisping Lin 1270468df3b2SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, 1271468df3b2SHisping Lin TEEC_NONE, 1272468df3b2SHisping Lin TEEC_NONE, 1273468df3b2SHisping Lin TEEC_NONE); 1274468df3b2SHisping Lin 1275468df3b2SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 1276468df3b2SHisping Lin 5, 1277468df3b2SHisping Lin &TeecOperation, 1278468df3b2SHisping Lin &ErrorOrigin); 1279468df3b2SHisping Lin 1280468df3b2SHisping Lin if (TeecResult == TEEC_SUCCESS) { 1281468df3b2SHisping Lin memcpy(&bootflag, SharedMem0.buffer, SharedMem0.size); 1282468df3b2SHisping Lin if (bootflag == 0x000000FF) 1283468df3b2SHisping Lin *flag = 1; 1284468df3b2SHisping Lin } 1285468df3b2SHisping Lin 1286468df3b2SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 1287468df3b2SHisping Lin TEEC_CloseSession(&TeecSession); 1288468df3b2SHisping Lin TEEC_FinalizeContext(&TeecContext); 1289468df3b2SHisping Lin 1290468df3b2SHisping Lin return TeecResult; 1291468df3b2SHisping Lin } 1292468df3b2SHisping Lin 1293095e2a82SHisping Lin uint32_t trusty_read_permanent_attributes_flag(uint8_t *attributes) 1294095e2a82SHisping Lin { 1295095e2a82SHisping Lin TEEC_Result TeecResult; 1296095e2a82SHisping Lin TEEC_Context TeecContext; 1297095e2a82SHisping Lin TEEC_Session TeecSession; 1298095e2a82SHisping Lin uint32_t ErrorOrigin; 1299095e2a82SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 1300095e2a82SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 1301095e2a82SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 1302095e2a82SHisping Lin TEEC_Operation TeecOperation = {0}; 13033251364cSHisping Lin struct blk_desc *dev_desc; 13043251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 1305095e2a82SHisping Lin 1306095e2a82SHisping Lin debug("testmm start\n"); 1307095e2a82SHisping Lin OpteeClientApiLibInitialize(); 1308095e2a82SHisping Lin 1309095e2a82SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 1310095e2a82SHisping Lin 13113251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 13123251364cSHisping Lin TEEC_NONE, 13133251364cSHisping Lin TEEC_NONE, 13143251364cSHisping Lin TEEC_NONE); 13153251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 13163251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 13173251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 13183251364cSHisping Lin TeecOperation.params[0].value.a = 0; 13193251364cSHisping Lin #endif 13203251364cSHisping Lin 1321095e2a82SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 1322095e2a82SHisping Lin &TeecSession, 1323095e2a82SHisping Lin TeecUuid, 1324095e2a82SHisping Lin TEEC_LOGIN_PUBLIC, 1325095e2a82SHisping Lin NULL, 13263251364cSHisping Lin &TeecOperation, 1327095e2a82SHisping Lin &ErrorOrigin); 1328095e2a82SHisping Lin 1329095e2a82SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 1330095e2a82SHisping Lin 1331095e2a82SHisping Lin SharedMem0.size = sizeof("attributes_flag"); 1332095e2a82SHisping Lin SharedMem0.flags = 0; 1333095e2a82SHisping Lin 1334095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 1335095e2a82SHisping Lin 1336095e2a82SHisping Lin memcpy(SharedMem0.buffer, "attributes_flag", SharedMem0.size); 1337095e2a82SHisping Lin 1338095e2a82SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 1339095e2a82SHisping Lin 1340095e2a82SHisping Lin SharedMem1.size = 1; 1341095e2a82SHisping Lin SharedMem1.flags = 0; 1342095e2a82SHisping Lin 1343095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 1344095e2a82SHisping Lin 1345095e2a82SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 1346095e2a82SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 1347095e2a82SHisping Lin 1348095e2a82SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 1349095e2a82SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 1350095e2a82SHisping Lin 1351095e2a82SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 1352095e2a82SHisping Lin TEEC_MEMREF_TEMP_INOUT, 1353095e2a82SHisping Lin TEEC_NONE, 1354095e2a82SHisping Lin TEEC_NONE); 1355095e2a82SHisping Lin 1356095e2a82SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 1357095e2a82SHisping Lin 142, 1358095e2a82SHisping Lin &TeecOperation, 1359095e2a82SHisping Lin &ErrorOrigin); 1360095e2a82SHisping Lin if (TeecResult == TEEC_SUCCESS) 1361095e2a82SHisping Lin memcpy(attributes, SharedMem1.buffer, SharedMem1.size); 1362095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 1363095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 1364095e2a82SHisping Lin TEEC_CloseSession(&TeecSession); 1365095e2a82SHisping Lin TEEC_FinalizeContext(&TeecContext); 1366095e2a82SHisping Lin debug("testmm end\n"); 1367095e2a82SHisping Lin 1368095e2a82SHisping Lin return TeecResult; 1369095e2a82SHisping Lin } 1370095e2a82SHisping Lin 1371095e2a82SHisping Lin uint32_t trusty_write_permanent_attributes_flag(uint8_t attributes) 1372095e2a82SHisping Lin { 1373095e2a82SHisping Lin TEEC_Result TeecResult; 1374095e2a82SHisping Lin TEEC_Context TeecContext; 1375095e2a82SHisping Lin TEEC_Session TeecSession; 1376095e2a82SHisping Lin uint32_t ErrorOrigin; 1377095e2a82SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 1378095e2a82SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 1379095e2a82SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 1380095e2a82SHisping Lin TEEC_Operation TeecOperation = {0}; 13813251364cSHisping Lin struct blk_desc *dev_desc; 13823251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 1383095e2a82SHisping Lin 1384095e2a82SHisping Lin debug("testmm start\n"); 1385095e2a82SHisping Lin OpteeClientApiLibInitialize(); 1386095e2a82SHisping Lin 1387095e2a82SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 1388095e2a82SHisping Lin 13893251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 13903251364cSHisping Lin TEEC_NONE, 13913251364cSHisping Lin TEEC_NONE, 13923251364cSHisping Lin TEEC_NONE); 13933251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 13943251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 13953251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 13963251364cSHisping Lin TeecOperation.params[0].value.a = 0; 13973251364cSHisping Lin #endif 13983251364cSHisping Lin 1399095e2a82SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 1400095e2a82SHisping Lin &TeecSession, 1401095e2a82SHisping Lin TeecUuid, 1402095e2a82SHisping Lin TEEC_LOGIN_PUBLIC, 1403095e2a82SHisping Lin NULL, 14043251364cSHisping Lin &TeecOperation, 1405095e2a82SHisping Lin &ErrorOrigin); 1406095e2a82SHisping Lin 1407095e2a82SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 1408095e2a82SHisping Lin 1409095e2a82SHisping Lin SharedMem0.size = sizeof("attributes_flag"); 1410095e2a82SHisping Lin SharedMem0.flags = 0; 1411095e2a82SHisping Lin 1412095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 1413095e2a82SHisping Lin 1414095e2a82SHisping Lin memcpy(SharedMem0.buffer, "attributes_flag", SharedMem0.size); 1415095e2a82SHisping Lin 1416095e2a82SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 1417095e2a82SHisping Lin 1418095e2a82SHisping Lin SharedMem1.size = 1; 1419095e2a82SHisping Lin SharedMem1.flags = 0; 1420095e2a82SHisping Lin 1421095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 1422095e2a82SHisping Lin 1423095e2a82SHisping Lin memcpy(SharedMem1.buffer, (char *)&attributes, SharedMem1.size); 1424095e2a82SHisping Lin 1425095e2a82SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 1426095e2a82SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 1427095e2a82SHisping Lin 1428095e2a82SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 1429095e2a82SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 1430095e2a82SHisping Lin 1431095e2a82SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 1432095e2a82SHisping Lin TEEC_MEMREF_TEMP_INOUT, 1433095e2a82SHisping Lin TEEC_NONE, 1434095e2a82SHisping Lin TEEC_NONE); 1435095e2a82SHisping Lin 1436095e2a82SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 1437095e2a82SHisping Lin 141, 1438095e2a82SHisping Lin &TeecOperation, 1439095e2a82SHisping Lin &ErrorOrigin); 1440095e2a82SHisping Lin 1441095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 1442095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 1443095e2a82SHisping Lin TEEC_CloseSession(&TeecSession); 1444095e2a82SHisping Lin TEEC_FinalizeContext(&TeecContext); 1445095e2a82SHisping Lin debug("testmm end\n"); 1446095e2a82SHisping Lin 1447095e2a82SHisping Lin return TeecResult; 1448095e2a82SHisping Lin } 14494aa61755SAndy Ye 14504aa61755SAndy Ye uint32_t trusty_attest_dh(uint8_t *dh, uint32_t *dh_size) 14514aa61755SAndy Ye { 14524aa61755SAndy Ye TEEC_Result TeecResult; 14534aa61755SAndy Ye TEEC_Context TeecContext; 14544aa61755SAndy Ye TEEC_Session TeecSession; 14554aa61755SAndy Ye uint32_t ErrorOrigin; 14564aa61755SAndy Ye TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 14574aa61755SAndy Ye { 0xa8, 0x69, 0x9c, 0xe6, 14584aa61755SAndy Ye 0x88, 0x6c, 0x5d, 0x5d 14594aa61755SAndy Ye } 14604aa61755SAndy Ye }; 14614aa61755SAndy Ye TEEC_UUID *TeecUuid = &tempuuid; 14624aa61755SAndy Ye TEEC_Operation TeecOperation = {0}; 14633251364cSHisping Lin struct blk_desc *dev_desc; 14643251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 14654aa61755SAndy Ye 14664aa61755SAndy Ye OpteeClientApiLibInitialize(); 14674aa61755SAndy Ye 14684aa61755SAndy Ye TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 14694aa61755SAndy Ye 14703251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 14713251364cSHisping Lin TEEC_NONE, 14723251364cSHisping Lin TEEC_NONE, 14733251364cSHisping Lin TEEC_NONE); 14743251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 14753251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 14763251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 14773251364cSHisping Lin TeecOperation.params[0].value.a = 0; 14783251364cSHisping Lin #endif 14793251364cSHisping Lin 14804aa61755SAndy Ye TeecResult = TEEC_OpenSession(&TeecContext, 14814aa61755SAndy Ye &TeecSession, 14824aa61755SAndy Ye TeecUuid, 14834aa61755SAndy Ye TEEC_LOGIN_PUBLIC, 14844aa61755SAndy Ye NULL, 14853251364cSHisping Lin &TeecOperation, 14864aa61755SAndy Ye &ErrorOrigin); 14874aa61755SAndy Ye 14884aa61755SAndy Ye TEEC_SharedMemory SharedMem0 = {0}; 14894aa61755SAndy Ye 14904aa61755SAndy Ye SharedMem0.size = *dh_size; 14914aa61755SAndy Ye SharedMem0.flags = 0; 14924aa61755SAndy Ye 14934aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 14944aa61755SAndy Ye 14954aa61755SAndy Ye TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 14964aa61755SAndy Ye TeecOperation.params[0].tmpref.size = SharedMem0.size; 14974aa61755SAndy Ye 14984aa61755SAndy Ye TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, 14994aa61755SAndy Ye TEEC_NONE, 15004aa61755SAndy Ye TEEC_NONE, 15014aa61755SAndy Ye TEEC_NONE); 15024aa61755SAndy Ye 15034aa61755SAndy Ye TeecResult = TEEC_InvokeCommand(&TeecSession, 15044aa61755SAndy Ye 143, 15054aa61755SAndy Ye &TeecOperation, 15064aa61755SAndy Ye &ErrorOrigin); 15074aa61755SAndy Ye 15084aa61755SAndy Ye *dh_size = TeecOperation.params[0].tmpref.size; 15094aa61755SAndy Ye memcpy(dh, SharedMem0.buffer, SharedMem0.size); 15104aa61755SAndy Ye 15114aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem0); 15124aa61755SAndy Ye 15134aa61755SAndy Ye TEEC_CloseSession(&TeecSession); 15144aa61755SAndy Ye TeecResult = TEEC_FinalizeContext(&TeecContext); 15154aa61755SAndy Ye 15164aa61755SAndy Ye return TeecResult; 15174aa61755SAndy Ye } 15184aa61755SAndy Ye 15194aa61755SAndy Ye uint32_t trusty_attest_uuid(uint8_t *uuid, uint32_t *uuid_size) 15204aa61755SAndy Ye { 15214aa61755SAndy Ye TEEC_Result TeecResult; 15224aa61755SAndy Ye TEEC_Context TeecContext; 15234aa61755SAndy Ye TEEC_Session TeecSession; 15244aa61755SAndy Ye uint32_t ErrorOrigin; 15254aa61755SAndy Ye TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 15264aa61755SAndy Ye { 0xa8, 0x69, 0x9c, 0xe6, 15274aa61755SAndy Ye 0x88, 0x6c, 0x5d, 0x5d 15284aa61755SAndy Ye } 15294aa61755SAndy Ye }; 15304aa61755SAndy Ye TEEC_UUID *TeecUuid = &tempuuid; 15314aa61755SAndy Ye TEEC_Operation TeecOperation = {0}; 15323251364cSHisping Lin struct blk_desc *dev_desc; 15333251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 15344aa61755SAndy Ye 15354aa61755SAndy Ye OpteeClientApiLibInitialize(); 15364aa61755SAndy Ye 15374aa61755SAndy Ye TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 15384aa61755SAndy Ye 15393251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 15403251364cSHisping Lin TEEC_NONE, 15413251364cSHisping Lin TEEC_NONE, 15423251364cSHisping Lin TEEC_NONE); 15433251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 15443251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 15453251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 15463251364cSHisping Lin TeecOperation.params[0].value.a = 0; 15473251364cSHisping Lin #endif 15483251364cSHisping Lin 15494aa61755SAndy Ye TeecResult = TEEC_OpenSession(&TeecContext, 15504aa61755SAndy Ye &TeecSession, 15514aa61755SAndy Ye TeecUuid, 15524aa61755SAndy Ye TEEC_LOGIN_PUBLIC, 15534aa61755SAndy Ye NULL, 15543251364cSHisping Lin &TeecOperation, 15554aa61755SAndy Ye &ErrorOrigin); 15564aa61755SAndy Ye 15574aa61755SAndy Ye TEEC_SharedMemory SharedMem0 = {0}; 15584aa61755SAndy Ye 15594aa61755SAndy Ye SharedMem0.size = *uuid_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 144, 15744aa61755SAndy Ye &TeecOperation, 15754aa61755SAndy Ye &ErrorOrigin); 15764aa61755SAndy Ye 15774aa61755SAndy Ye *uuid_size = TeecOperation.params[0].tmpref.size; 15784aa61755SAndy Ye memcpy(uuid, 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_get_ca(uint8_t *operation_start, 15894aa61755SAndy Ye uint32_t *operation_size, 15904aa61755SAndy Ye uint8_t *out, 15914aa61755SAndy Ye uint32_t *out_len) 15924aa61755SAndy Ye { 15934aa61755SAndy Ye TEEC_Result TeecResult; 15944aa61755SAndy Ye TEEC_Context TeecContext; 15954aa61755SAndy Ye TEEC_Session TeecSession; 15964aa61755SAndy Ye uint32_t ErrorOrigin; 15974aa61755SAndy Ye 15984aa61755SAndy Ye OpteeClientApiLibInitialize(); 15994aa61755SAndy Ye 16004aa61755SAndy Ye TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 16014aa61755SAndy Ye { 0xa8, 0x69, 0x9c, 0xe6, 16024aa61755SAndy Ye 0x88, 0x6c, 0x5d, 0x5d 16034aa61755SAndy Ye } 16044aa61755SAndy Ye }; 16054aa61755SAndy Ye 16064aa61755SAndy Ye TEEC_UUID *TeecUuid = &tempuuid; 16074aa61755SAndy Ye TEEC_Operation TeecOperation = {0}; 16083251364cSHisping Lin struct blk_desc *dev_desc; 16093251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 16104aa61755SAndy Ye 16114aa61755SAndy Ye OpteeClientApiLibInitialize(); 16124aa61755SAndy Ye 16134aa61755SAndy Ye TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 16144aa61755SAndy Ye 16153251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 16163251364cSHisping Lin TEEC_NONE, 16173251364cSHisping Lin TEEC_NONE, 16183251364cSHisping Lin TEEC_NONE); 16193251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 16203251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 16213251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 16223251364cSHisping Lin TeecOperation.params[0].value.a = 0; 16233251364cSHisping Lin #endif 16243251364cSHisping Lin 16254aa61755SAndy Ye TeecResult = TEEC_OpenSession(&TeecContext, 16264aa61755SAndy Ye &TeecSession, 16274aa61755SAndy Ye TeecUuid, 16284aa61755SAndy Ye TEEC_LOGIN_PUBLIC, 16294aa61755SAndy Ye NULL, 16303251364cSHisping Lin &TeecOperation, 16314aa61755SAndy Ye &ErrorOrigin); 16324aa61755SAndy Ye 16334aa61755SAndy Ye TEEC_SharedMemory SharedMem0 = {0}; 16344aa61755SAndy Ye 16354aa61755SAndy Ye SharedMem0.size = *operation_size; 16364aa61755SAndy Ye SharedMem0.flags = 0; 16374aa61755SAndy Ye 16384aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 16394aa61755SAndy Ye 16404aa61755SAndy Ye memcpy(SharedMem0.buffer, operation_start, SharedMem0.size); 16414aa61755SAndy Ye 16424aa61755SAndy Ye TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 16434aa61755SAndy Ye TeecOperation.params[0].tmpref.size = SharedMem0.size; 16444aa61755SAndy Ye 16454aa61755SAndy Ye TEEC_SharedMemory SharedMem1 = {0}; 16464aa61755SAndy Ye 16474aa61755SAndy Ye SharedMem1.size = *out_len; 16484aa61755SAndy Ye SharedMem1.flags = 0; 16494aa61755SAndy Ye 16504aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 16514aa61755SAndy Ye 16524aa61755SAndy Ye TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 16534aa61755SAndy Ye TeecOperation.params[1].tmpref.size = SharedMem1.size; 16544aa61755SAndy Ye 16554aa61755SAndy Ye TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, 16564aa61755SAndy Ye TEEC_MEMREF_TEMP_INOUT, 16574aa61755SAndy Ye TEEC_NONE, 16584aa61755SAndy Ye TEEC_NONE); 16594aa61755SAndy Ye 16604aa61755SAndy Ye TeecResult = TEEC_InvokeCommand(&TeecSession, 16614aa61755SAndy Ye 145, 16624aa61755SAndy Ye &TeecOperation, 16634aa61755SAndy Ye &ErrorOrigin); 16644aa61755SAndy Ye 16654aa61755SAndy Ye *out_len = TeecOperation.params[1].tmpref.size; 16664aa61755SAndy Ye memcpy(out, SharedMem1.buffer, SharedMem1.size); 16674aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem0); 16684aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem1); 16694aa61755SAndy Ye 16704aa61755SAndy Ye return TeecResult; 16714aa61755SAndy Ye } 16724aa61755SAndy Ye 16734aa61755SAndy Ye uint32_t trusty_attest_set_ca(uint8_t *ca_response, uint32_t *ca_response_size) 16744aa61755SAndy Ye { 16754aa61755SAndy Ye TEEC_Result TeecResult; 16764aa61755SAndy Ye TEEC_Context TeecContext; 16774aa61755SAndy Ye TEEC_Session TeecSession; 16784aa61755SAndy Ye uint32_t ErrorOrigin; 16794aa61755SAndy Ye TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 16804aa61755SAndy Ye { 0xa8, 0x69, 0x9c, 0xe6, 16814aa61755SAndy Ye 0x88, 0x6c, 0x5d, 0x5d 16824aa61755SAndy Ye } 16834aa61755SAndy Ye }; 16844aa61755SAndy Ye TEEC_UUID *TeecUuid = &tempuuid; 16854aa61755SAndy Ye TEEC_Operation TeecOperation = {0}; 16863251364cSHisping Lin struct blk_desc *dev_desc; 16873251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 16884aa61755SAndy Ye 16894aa61755SAndy Ye TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 16904aa61755SAndy Ye 16913251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 16923251364cSHisping Lin TEEC_NONE, 16933251364cSHisping Lin TEEC_NONE, 16943251364cSHisping Lin TEEC_NONE); 16953251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 16963251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 16973251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 16983251364cSHisping Lin TeecOperation.params[0].value.a = 0; 16993251364cSHisping Lin #endif 17003251364cSHisping Lin 17014aa61755SAndy Ye TeecResult = TEEC_OpenSession(&TeecContext, 17024aa61755SAndy Ye &TeecSession, 17034aa61755SAndy Ye TeecUuid, 17044aa61755SAndy Ye TEEC_LOGIN_PUBLIC, 17054aa61755SAndy Ye NULL, 17063251364cSHisping Lin &TeecOperation, 17074aa61755SAndy Ye &ErrorOrigin); 17084aa61755SAndy Ye 17094aa61755SAndy Ye TEEC_SharedMemory SharedMem0 = {0}; 17104aa61755SAndy Ye 17114aa61755SAndy Ye SharedMem0.size = *ca_response_size; 17124aa61755SAndy Ye SharedMem0.flags = 0; 17134aa61755SAndy Ye 17144aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 17154aa61755SAndy Ye 17164aa61755SAndy Ye memcpy(SharedMem0.buffer, ca_response, SharedMem0.size); 17174aa61755SAndy Ye 17184aa61755SAndy Ye TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 17194aa61755SAndy Ye TeecOperation.params[0].tmpref.size = SharedMem0.size; 17204aa61755SAndy Ye 17214aa61755SAndy Ye TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, 17224aa61755SAndy Ye TEEC_NONE, 17234aa61755SAndy Ye TEEC_NONE, 17244aa61755SAndy Ye TEEC_NONE); 17254aa61755SAndy Ye 17264aa61755SAndy Ye TeecResult = TEEC_InvokeCommand(&TeecSession, 17274aa61755SAndy Ye 146, 17284aa61755SAndy Ye &TeecOperation, 17294aa61755SAndy Ye &ErrorOrigin); 17304aa61755SAndy Ye 17314aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem0); 17324aa61755SAndy Ye 17334aa61755SAndy Ye TEEC_CloseSession(&TeecSession); 17344aa61755SAndy Ye TeecResult = TEEC_FinalizeContext(&TeecContext); 17354aa61755SAndy Ye 17364aa61755SAndy Ye return TeecResult; 17374aa61755SAndy Ye } 173878ef5fbdSqiujian 173978ef5fbdSqiujian TEEC_Result trusty_write_oem_unlock(uint8_t unlock) 174078ef5fbdSqiujian { 174178ef5fbdSqiujian char *file = "oem.unlock"; 174278ef5fbdSqiujian TEEC_Result ret; 174378ef5fbdSqiujian 174478ef5fbdSqiujian ret = write_to_keymaster((uint8_t *)file, strlen(file), 174578ef5fbdSqiujian (uint8_t *)&unlock, 1); 174678ef5fbdSqiujian return ret; 174778ef5fbdSqiujian } 174878ef5fbdSqiujian 174978ef5fbdSqiujian TEEC_Result trusty_read_oem_unlock(uint8_t *unlock) 175078ef5fbdSqiujian { 175178ef5fbdSqiujian char *file = "oem.unlock"; 175278ef5fbdSqiujian TEEC_Result ret; 175378ef5fbdSqiujian 175478ef5fbdSqiujian ret = read_from_keymaster((uint8_t *)file, strlen(file), 175578ef5fbdSqiujian unlock, 1); 175678ef5fbdSqiujian 175778ef5fbdSqiujian if (ret == TEE_ERROR_ITEM_NOT_FOUND) { 175878ef5fbdSqiujian debug("init oem unlock status 0"); 175978ef5fbdSqiujian ret = trusty_write_oem_unlock(0); 176078ef5fbdSqiujian } 176178ef5fbdSqiujian 176278ef5fbdSqiujian return ret; 176378ef5fbdSqiujian }