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> 13a7df4868Stony.xu #include <stdlib.h> 141e8c0e44STony Xu #include <attestation_key.h> 15a7df4868Stony.xu 16a7df4868Stony.xu #define BOOT_FROM_EMMC (1 << 1) 17ae8ec5e1SHisping Lin 18ae8ec5e1SHisping Lin void test_optee(void) 19ae8ec5e1SHisping Lin { 20ae8ec5e1SHisping Lin TEEC_Result TeecResult; 21ae8ec5e1SHisping Lin TEEC_Context TeecContext; 22ae8ec5e1SHisping Lin TEEC_Session TeecSession; 23ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 24a7df4868Stony.xu TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, \ 25ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 26ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 27ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 283251364cSHisping Lin struct blk_desc *dev_desc; 293251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 306651d4c0SJason Zhu if (!dev_desc) { 316651d4c0SJason Zhu printf("%s: dev_desc is NULL!\n", __func__); 326651d4c0SJason Zhu return; 336651d4c0SJason Zhu } 34ae8ec5e1SHisping Lin 35ae8ec5e1SHisping Lin debug("testmm start\n"); 36ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 37ae8ec5e1SHisping Lin 38ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 39ae8ec5e1SHisping Lin 403251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 413251364cSHisping Lin TEEC_NONE, 423251364cSHisping Lin TEEC_NONE, 433251364cSHisping Lin TEEC_NONE); 443251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 453251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 463251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 473251364cSHisping Lin TeecOperation.params[0].value.a = 0; 483251364cSHisping Lin #endif 493251364cSHisping Lin 50ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 51ae8ec5e1SHisping Lin &TeecSession, 52ae8ec5e1SHisping Lin TeecUuid, 53ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 54ae8ec5e1SHisping Lin NULL, 553251364cSHisping Lin &TeecOperation, 56ae8ec5e1SHisping Lin &ErrorOrigin); 57ae8ec5e1SHisping Lin 58ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 59ae8ec5e1SHisping Lin 60ae8ec5e1SHisping Lin SharedMem0.size = sizeof("filename_test"); 61ae8ec5e1SHisping Lin SharedMem0.flags = 0; 62ae8ec5e1SHisping Lin 63ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 64ae8ec5e1SHisping Lin 65ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "filename_test", SharedMem0.size); 66ae8ec5e1SHisping Lin 67ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 68ae8ec5e1SHisping Lin 69ae8ec5e1SHisping Lin SharedMem1.size = 32; 70ae8ec5e1SHisping Lin SharedMem1.flags = 0; 71ae8ec5e1SHisping Lin 72ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 73ae8ec5e1SHisping Lin 74ae8ec5e1SHisping Lin memset(SharedMem1.buffer, 'a', SharedMem1.size); 75ae8ec5e1SHisping Lin 76ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 77ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 78ae8ec5e1SHisping Lin 79ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 80ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 81ae8ec5e1SHisping Lin 82ae8ec5e1SHisping Lin 83ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 84ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 85ae8ec5e1SHisping Lin TEEC_NONE, 86ae8ec5e1SHisping Lin TEEC_NONE); 87ae8ec5e1SHisping Lin 88ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 89ae8ec5e1SHisping Lin 1, 90ae8ec5e1SHisping Lin &TeecOperation, 91ae8ec5e1SHisping Lin &ErrorOrigin); 92ae8ec5e1SHisping Lin 93ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 94ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 95ae8ec5e1SHisping Lin 96ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 97ae8ec5e1SHisping Lin 9846b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 99ae8ec5e1SHisping Lin 100ae8ec5e1SHisping Lin debug("testmm end\n"); 101ae8ec5e1SHisping Lin debug("TeecResult %x\n", TeecResult); 102ae8ec5e1SHisping Lin } 103ae8ec5e1SHisping Lin 104ae8ec5e1SHisping Lin static uint8_t b2hs_add_base(uint8_t in) 105ae8ec5e1SHisping Lin { 106ae8ec5e1SHisping Lin if (in > 9) 107ae8ec5e1SHisping Lin return in + 55; 108ae8ec5e1SHisping Lin else 109ae8ec5e1SHisping Lin return in + 48; 110ae8ec5e1SHisping Lin } 111ae8ec5e1SHisping Lin 112ae8ec5e1SHisping Lin uint32_t b2hs(uint8_t *b, uint8_t *hs, uint32_t blen, uint32_t hslen) 113ae8ec5e1SHisping Lin { 114ae8ec5e1SHisping Lin uint32_t i = 0; 115ae8ec5e1SHisping Lin 116ae8ec5e1SHisping Lin if (blen * 2 + 1 > hslen) 117ae8ec5e1SHisping Lin return 0; 118ae8ec5e1SHisping Lin 119ae8ec5e1SHisping Lin for (; i < blen; i++) { 120ae8ec5e1SHisping Lin hs[i * 2 + 1] = b2hs_add_base(b[i] & 0xf); 121ae8ec5e1SHisping Lin hs[i * 2] = b2hs_add_base(b[i] >> 4); 122ae8ec5e1SHisping Lin } 123ae8ec5e1SHisping Lin hs[blen * 2] = 0; 124ae8ec5e1SHisping Lin 125ae8ec5e1SHisping Lin return blen * 2; 126ae8ec5e1SHisping Lin } 127ae8ec5e1SHisping Lin 128ae8ec5e1SHisping Lin 129ae8ec5e1SHisping Lin uint32_t trusty_read_rollback_index(uint32_t slot, uint64_t *value) 130ae8ec5e1SHisping Lin { 131ae8ec5e1SHisping Lin TEEC_Result TeecResult; 132ae8ec5e1SHisping Lin TEEC_Context TeecContext; 133ae8ec5e1SHisping Lin TEEC_Session TeecSession; 134ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 135ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 136ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 137ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 138ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 139ae8ec5e1SHisping Lin uint8_t hs[9]; 140ae8ec5e1SHisping Lin 1413251364cSHisping Lin struct blk_desc *dev_desc; 1423251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 1436651d4c0SJason Zhu if (!dev_desc) { 1446651d4c0SJason Zhu printf("%s: dev_desc is NULL!\n", __func__); 1456651d4c0SJason Zhu return -TEEC_ERROR_GENERIC; 1466651d4c0SJason Zhu } 1473251364cSHisping Lin 148ae8ec5e1SHisping Lin b2hs((uint8_t *)&slot, hs, 4, 9); 149ae8ec5e1SHisping Lin debug("testmm start\n"); 150ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 151ae8ec5e1SHisping Lin 152ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 153ae8ec5e1SHisping Lin 1543251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 1553251364cSHisping Lin TEEC_NONE, 1563251364cSHisping Lin TEEC_NONE, 1573251364cSHisping Lin TEEC_NONE); 1583251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 1593251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 1603251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 1613251364cSHisping Lin TeecOperation.params[0].value.a = 0; 1623251364cSHisping Lin #endif 1633251364cSHisping Lin 164ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 165ae8ec5e1SHisping Lin &TeecSession, 166ae8ec5e1SHisping Lin TeecUuid, 167ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 168ae8ec5e1SHisping Lin NULL, 1693251364cSHisping Lin &TeecOperation, 170f303baf0SHisping Lin 171ae8ec5e1SHisping Lin &ErrorOrigin); 172ae8ec5e1SHisping Lin 173ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 174ae8ec5e1SHisping Lin 175ae8ec5e1SHisping Lin SharedMem0.size = 8; 176ae8ec5e1SHisping Lin SharedMem0.flags = 0; 177ae8ec5e1SHisping Lin 178ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 179ae8ec5e1SHisping Lin 180ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, hs, SharedMem0.size); 181ae8ec5e1SHisping Lin 182ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 183ae8ec5e1SHisping Lin 184ae8ec5e1SHisping Lin SharedMem1.size = 8; 185ae8ec5e1SHisping Lin SharedMem1.flags = 0; 186ae8ec5e1SHisping Lin 187ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 188ae8ec5e1SHisping Lin 189ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 190ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 191ae8ec5e1SHisping Lin 192ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 193ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 194ae8ec5e1SHisping Lin 195ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 196ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 197ae8ec5e1SHisping Lin TEEC_NONE, 198ae8ec5e1SHisping Lin TEEC_NONE); 199ae8ec5e1SHisping Lin 200ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 201ae8ec5e1SHisping Lin 0, 202ae8ec5e1SHisping Lin &TeecOperation, 203ae8ec5e1SHisping Lin &ErrorOrigin); 20446b2a054SHisping Lin if (TeecResult == TEEC_SUCCESS) 205ae8ec5e1SHisping Lin memcpy((char *)value, SharedMem1.buffer, SharedMem1.size); 206ae8ec5e1SHisping Lin 207ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 208ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 209ae8ec5e1SHisping Lin 210ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 211ae8ec5e1SHisping Lin 21246b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 213ae8ec5e1SHisping Lin 214ae8ec5e1SHisping Lin debug("testmm end\n"); 215ae8ec5e1SHisping Lin return TeecResult; 216ae8ec5e1SHisping Lin } 217ae8ec5e1SHisping Lin 218ae8ec5e1SHisping Lin uint32_t trusty_write_rollback_index(uint32_t slot, uint64_t value) 219ae8ec5e1SHisping Lin { 220ae8ec5e1SHisping Lin TEEC_Result TeecResult; 221ae8ec5e1SHisping Lin TEEC_Context TeecContext; 222ae8ec5e1SHisping Lin TEEC_Session TeecSession; 223ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 224ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 225ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 226ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 227ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 228ae8ec5e1SHisping Lin uint8_t hs[9]; 2293251364cSHisping Lin struct blk_desc *dev_desc; 2303251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 2316651d4c0SJason Zhu if (!dev_desc) { 2326651d4c0SJason Zhu printf("%s: dev_desc is NULL!\n", __func__); 2336651d4c0SJason Zhu return -TEEC_ERROR_GENERIC; 2346651d4c0SJason Zhu } 2353251364cSHisping Lin 236ae8ec5e1SHisping Lin b2hs((uint8_t *)&slot, hs, 4, 9); 237ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 238ae8ec5e1SHisping Lin 239ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 240ae8ec5e1SHisping Lin 2413251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 2423251364cSHisping Lin TEEC_NONE, 2433251364cSHisping Lin TEEC_NONE, 2443251364cSHisping Lin TEEC_NONE); 2453251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 2463251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 2473251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 2483251364cSHisping Lin TeecOperation.params[0].value.a = 0; 2493251364cSHisping Lin #endif 2503251364cSHisping Lin 251ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 252ae8ec5e1SHisping Lin &TeecSession, 253ae8ec5e1SHisping Lin TeecUuid, 254ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 255ae8ec5e1SHisping Lin NULL, 2563251364cSHisping Lin &TeecOperation, 257ae8ec5e1SHisping Lin &ErrorOrigin); 258ae8ec5e1SHisping Lin 259ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 260ae8ec5e1SHisping Lin 261ae8ec5e1SHisping Lin SharedMem0.size = 8; 262ae8ec5e1SHisping Lin SharedMem0.flags = 0; 263ae8ec5e1SHisping Lin 264ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 265ae8ec5e1SHisping Lin 266ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, hs, SharedMem0.size); 267ae8ec5e1SHisping Lin 268ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 269ae8ec5e1SHisping Lin 270ae8ec5e1SHisping Lin SharedMem1.size = 8; 271ae8ec5e1SHisping Lin SharedMem1.flags = 0; 272ae8ec5e1SHisping Lin 273ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 274ae8ec5e1SHisping Lin 275ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, (char *)&value, SharedMem1.size); 276ae8ec5e1SHisping Lin 277ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 278ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 279ae8ec5e1SHisping Lin 280ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 281ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 282ae8ec5e1SHisping Lin 283ae8ec5e1SHisping Lin 284ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 285ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 286ae8ec5e1SHisping Lin TEEC_NONE, 287ae8ec5e1SHisping Lin TEEC_NONE); 288ae8ec5e1SHisping Lin 289ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 290ae8ec5e1SHisping Lin 1, 291ae8ec5e1SHisping Lin &TeecOperation, 292ae8ec5e1SHisping Lin &ErrorOrigin); 293ae8ec5e1SHisping Lin 294ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 295ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 296ae8ec5e1SHisping Lin 297ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 298ae8ec5e1SHisping Lin 29946b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 300ae8ec5e1SHisping Lin 301ae8ec5e1SHisping Lin debug("testmm end\n"); 302ae8ec5e1SHisping Lin 303ae8ec5e1SHisping Lin return TeecResult; 304ae8ec5e1SHisping Lin } 305ae8ec5e1SHisping Lin 306ae8ec5e1SHisping Lin uint32_t trusty_read_permanent_attributes(uint8_t *attributes, uint32_t size) 307ae8ec5e1SHisping Lin { 308ae8ec5e1SHisping Lin TEEC_Result TeecResult; 309ae8ec5e1SHisping Lin TEEC_Context TeecContext; 310ae8ec5e1SHisping Lin TEEC_Session TeecSession; 311ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 31299830019SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 31399830019SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 314ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 315ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 3163251364cSHisping Lin struct blk_desc *dev_desc; 3173251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 3186651d4c0SJason Zhu if (!dev_desc) { 3196651d4c0SJason Zhu printf("%s: dev_desc is NULL!\n", __func__); 3206651d4c0SJason Zhu return -TEEC_ERROR_GENERIC; 3216651d4c0SJason Zhu } 322ae8ec5e1SHisping Lin 323ae8ec5e1SHisping Lin debug("testmm start\n"); 324ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 325ae8ec5e1SHisping Lin 326ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 327ae8ec5e1SHisping Lin 3283251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 3293251364cSHisping Lin TEEC_NONE, 3303251364cSHisping Lin TEEC_NONE, 3313251364cSHisping Lin TEEC_NONE); 3323251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 3333251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 3343251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 3353251364cSHisping Lin TeecOperation.params[0].value.a = 0; 3363251364cSHisping Lin #endif 3373251364cSHisping Lin 338ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 339ae8ec5e1SHisping Lin &TeecSession, 340ae8ec5e1SHisping Lin TeecUuid, 341ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 342ae8ec5e1SHisping Lin NULL, 3433251364cSHisping Lin &TeecOperation, 344ae8ec5e1SHisping Lin &ErrorOrigin); 345ae8ec5e1SHisping Lin 346ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 347ae8ec5e1SHisping Lin 348ae8ec5e1SHisping Lin SharedMem0.size = sizeof("attributes"); 349ae8ec5e1SHisping Lin SharedMem0.flags = 0; 350ae8ec5e1SHisping Lin 351ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 352ae8ec5e1SHisping Lin 353ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "attributes", SharedMem0.size); 354ae8ec5e1SHisping Lin 355ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 356ae8ec5e1SHisping Lin 357ae8ec5e1SHisping Lin SharedMem1.size = size; 358ae8ec5e1SHisping Lin SharedMem1.flags = 0; 359ae8ec5e1SHisping Lin 360ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 361ae8ec5e1SHisping Lin 362ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 363ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 364ae8ec5e1SHisping Lin 365ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 366ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 367ae8ec5e1SHisping Lin 368ae8ec5e1SHisping Lin 369ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 370ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 371ae8ec5e1SHisping Lin TEEC_NONE, 372ae8ec5e1SHisping Lin TEEC_NONE); 373ae8ec5e1SHisping Lin 374ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 37599830019SHisping Lin 0, 376ae8ec5e1SHisping Lin &TeecOperation, 377ae8ec5e1SHisping Lin &ErrorOrigin); 37846b2a054SHisping Lin if (TeecResult == TEEC_SUCCESS) 379ae8ec5e1SHisping Lin memcpy(attributes, SharedMem1.buffer, SharedMem1.size); 380ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 381ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 382ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 38346b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 384ae8ec5e1SHisping Lin debug("testmm end\n"); 385ae8ec5e1SHisping Lin 386ae8ec5e1SHisping Lin return TeecResult; 387ae8ec5e1SHisping Lin } 388ae8ec5e1SHisping Lin 389ae8ec5e1SHisping Lin uint32_t trusty_write_permanent_attributes(uint8_t *attributes, uint32_t size) 390ae8ec5e1SHisping Lin { 391ae8ec5e1SHisping Lin TEEC_Result TeecResult; 392ae8ec5e1SHisping Lin TEEC_Context TeecContext; 393ae8ec5e1SHisping Lin TEEC_Session TeecSession; 394ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 39599830019SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 39699830019SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 397ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 398ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 3993251364cSHisping Lin struct blk_desc *dev_desc; 4003251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 4016651d4c0SJason Zhu if (!dev_desc) { 4026651d4c0SJason Zhu printf("%s: dev_desc is NULL!\n", __func__); 4036651d4c0SJason Zhu return -TEEC_ERROR_GENERIC; 4046651d4c0SJason Zhu } 405ae8ec5e1SHisping Lin 406ae8ec5e1SHisping Lin debug("testmm start\n"); 407ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 408ae8ec5e1SHisping Lin 409ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 410ae8ec5e1SHisping Lin 4113251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 4123251364cSHisping Lin TEEC_NONE, 4133251364cSHisping Lin TEEC_NONE, 4143251364cSHisping Lin TEEC_NONE); 4153251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 4163251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 4173251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 4183251364cSHisping Lin TeecOperation.params[0].value.a = 0; 4193251364cSHisping Lin #endif 4203251364cSHisping Lin 421ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 422ae8ec5e1SHisping Lin &TeecSession, 423ae8ec5e1SHisping Lin TeecUuid, 424ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 425ae8ec5e1SHisping Lin NULL, 4263251364cSHisping Lin &TeecOperation, 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, 46099830019SHisping Lin 1, 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 473*564654ebSJason Zhu uint32_t trusty_read_permanent_attributes_cer(uint8_t *attributes, 474*564654ebSJason Zhu uint32_t size) 475*564654ebSJason Zhu { 476*564654ebSJason Zhu TEEC_Result TeecResult; 477*564654ebSJason Zhu TEEC_Context TeecContext; 478*564654ebSJason Zhu TEEC_Session TeecSession; 479*564654ebSJason Zhu uint32_t ErrorOrigin; 480*564654ebSJason Zhu TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 481*564654ebSJason Zhu { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 482*564654ebSJason Zhu TEEC_UUID *TeecUuid = &tempuuid; 483*564654ebSJason Zhu TEEC_Operation TeecOperation = {0}; 484*564654ebSJason Zhu struct blk_desc *dev_desc; 485*564654ebSJason Zhu 486*564654ebSJason Zhu dev_desc = rockchip_get_bootdev(); 487*564654ebSJason Zhu if (!dev_desc) { 488*564654ebSJason Zhu printf("%s: dev_desc is NULL!\n", __func__); 489*564654ebSJason Zhu return -TEEC_ERROR_GENERIC; 490*564654ebSJason Zhu } 491*564654ebSJason Zhu 492*564654ebSJason Zhu debug("testmm start\n"); 493*564654ebSJason Zhu OpteeClientApiLibInitialize(); 494*564654ebSJason Zhu TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 495*564654ebSJason Zhu TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 496*564654ebSJason Zhu TEEC_NONE, 497*564654ebSJason Zhu TEEC_NONE, 498*564654ebSJason Zhu TEEC_NONE); 499*564654ebSJason Zhu /*0 nand or emmc "security" partition , 1 rpmb*/ 500*564654ebSJason Zhu TeecOperation.params[0].value.a = 501*564654ebSJason Zhu (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 502*564654ebSJason Zhu #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 503*564654ebSJason Zhu TeecOperation.params[0].value.a = 0; 504*564654ebSJason Zhu #endif 505*564654ebSJason Zhu 506*564654ebSJason Zhu TeecResult = TEEC_OpenSession(&TeecContext, 507*564654ebSJason Zhu &TeecSession, 508*564654ebSJason Zhu TeecUuid, 509*564654ebSJason Zhu TEEC_LOGIN_PUBLIC, 510*564654ebSJason Zhu NULL, 511*564654ebSJason Zhu &TeecOperation, 512*564654ebSJason Zhu &ErrorOrigin); 513*564654ebSJason Zhu 514*564654ebSJason Zhu TEEC_SharedMemory SharedMem0 = {0}; 515*564654ebSJason Zhu 516*564654ebSJason Zhu SharedMem0.size = sizeof("rsacer"); 517*564654ebSJason Zhu SharedMem0.flags = 0; 518*564654ebSJason Zhu TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 519*564654ebSJason Zhu memcpy(SharedMem0.buffer, "rsacer", SharedMem0.size); 520*564654ebSJason Zhu TEEC_SharedMemory SharedMem1 = {0}; 521*564654ebSJason Zhu 522*564654ebSJason Zhu SharedMem1.size = size; 523*564654ebSJason Zhu SharedMem1.flags = 0; 524*564654ebSJason Zhu TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 525*564654ebSJason Zhu TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 526*564654ebSJason Zhu TeecOperation.params[0].tmpref.size = SharedMem0.size; 527*564654ebSJason Zhu TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 528*564654ebSJason Zhu TeecOperation.params[1].tmpref.size = SharedMem1.size; 529*564654ebSJason Zhu TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 530*564654ebSJason Zhu TEEC_MEMREF_TEMP_INOUT, 531*564654ebSJason Zhu TEEC_NONE, 532*564654ebSJason Zhu TEEC_NONE); 533*564654ebSJason Zhu 534*564654ebSJason Zhu TeecResult = TEEC_InvokeCommand(&TeecSession, 535*564654ebSJason Zhu 0, 536*564654ebSJason Zhu &TeecOperation, 537*564654ebSJason Zhu &ErrorOrigin); 538*564654ebSJason Zhu if (TeecResult == TEEC_SUCCESS) 539*564654ebSJason Zhu memcpy(attributes, SharedMem1.buffer, SharedMem1.size); 540*564654ebSJason Zhu TEEC_ReleaseSharedMemory(&SharedMem0); 541*564654ebSJason Zhu TEEC_ReleaseSharedMemory(&SharedMem1); 542*564654ebSJason Zhu TEEC_CloseSession(&TeecSession); 543*564654ebSJason Zhu TEEC_FinalizeContext(&TeecContext); 544*564654ebSJason Zhu debug("testmm end\n"); 545*564654ebSJason Zhu 546*564654ebSJason Zhu return TeecResult; 547*564654ebSJason Zhu } 548*564654ebSJason Zhu 549*564654ebSJason Zhu uint32_t trusty_write_permanent_attributes_cer(uint8_t *attributes, 550*564654ebSJason Zhu uint32_t size) 551*564654ebSJason Zhu { 552*564654ebSJason Zhu TEEC_Result TeecResult; 553*564654ebSJason Zhu TEEC_Context TeecContext; 554*564654ebSJason Zhu TEEC_Session TeecSession; 555*564654ebSJason Zhu uint32_t ErrorOrigin; 556*564654ebSJason Zhu TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 557*564654ebSJason Zhu { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 558*564654ebSJason Zhu TEEC_UUID *TeecUuid = &tempuuid; 559*564654ebSJason Zhu TEEC_Operation TeecOperation = {0}; 560*564654ebSJason Zhu struct blk_desc *dev_desc; 561*564654ebSJason Zhu 562*564654ebSJason Zhu dev_desc = rockchip_get_bootdev(); 563*564654ebSJason Zhu if (!dev_desc) { 564*564654ebSJason Zhu printf("%s: dev_desc is NULL!\n", __func__); 565*564654ebSJason Zhu return -TEEC_ERROR_GENERIC; 566*564654ebSJason Zhu } 567*564654ebSJason Zhu 568*564654ebSJason Zhu debug("testmm start\n"); 569*564654ebSJason Zhu OpteeClientApiLibInitialize(); 570*564654ebSJason Zhu TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 571*564654ebSJason Zhu TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 572*564654ebSJason Zhu TEEC_NONE, 573*564654ebSJason Zhu TEEC_NONE, 574*564654ebSJason Zhu TEEC_NONE); 575*564654ebSJason Zhu /*0 nand or emmc "security" partition , 1 rpmb*/ 576*564654ebSJason Zhu TeecOperation.params[0].value.a = 577*564654ebSJason Zhu (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 578*564654ebSJason Zhu #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 579*564654ebSJason Zhu TeecOperation.params[0].value.a = 0; 580*564654ebSJason Zhu #endif 581*564654ebSJason Zhu 582*564654ebSJason Zhu TeecResult = TEEC_OpenSession(&TeecContext, 583*564654ebSJason Zhu &TeecSession, 584*564654ebSJason Zhu TeecUuid, 585*564654ebSJason Zhu TEEC_LOGIN_PUBLIC, 586*564654ebSJason Zhu NULL, 587*564654ebSJason Zhu &TeecOperation, 588*564654ebSJason Zhu &ErrorOrigin); 589*564654ebSJason Zhu 590*564654ebSJason Zhu TEEC_SharedMemory SharedMem0 = {0}; 591*564654ebSJason Zhu 592*564654ebSJason Zhu SharedMem0.size = sizeof("rsacer"); 593*564654ebSJason Zhu SharedMem0.flags = 0; 594*564654ebSJason Zhu TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 595*564654ebSJason Zhu memcpy(SharedMem0.buffer, "rsacer", SharedMem0.size); 596*564654ebSJason Zhu TEEC_SharedMemory SharedMem1 = {0}; 597*564654ebSJason Zhu 598*564654ebSJason Zhu SharedMem1.size = size; 599*564654ebSJason Zhu SharedMem1.flags = 0; 600*564654ebSJason Zhu TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 601*564654ebSJason Zhu memcpy(SharedMem1.buffer, attributes, SharedMem1.size); 602*564654ebSJason Zhu TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 603*564654ebSJason Zhu TeecOperation.params[0].tmpref.size = SharedMem0.size; 604*564654ebSJason Zhu TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 605*564654ebSJason Zhu TeecOperation.params[1].tmpref.size = SharedMem1.size; 606*564654ebSJason Zhu TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 607*564654ebSJason Zhu TEEC_MEMREF_TEMP_INOUT, 608*564654ebSJason Zhu TEEC_NONE, 609*564654ebSJason Zhu TEEC_NONE); 610*564654ebSJason Zhu 611*564654ebSJason Zhu TeecResult = TEEC_InvokeCommand(&TeecSession, 612*564654ebSJason Zhu 1, 613*564654ebSJason Zhu &TeecOperation, 614*564654ebSJason Zhu &ErrorOrigin); 615*564654ebSJason Zhu 616*564654ebSJason Zhu TEEC_ReleaseSharedMemory(&SharedMem0); 617*564654ebSJason Zhu TEEC_ReleaseSharedMemory(&SharedMem1); 618*564654ebSJason Zhu TEEC_CloseSession(&TeecSession); 619*564654ebSJason Zhu TEEC_FinalizeContext(&TeecContext); 620*564654ebSJason Zhu debug("testmm end\n"); 621*564654ebSJason Zhu 622*564654ebSJason Zhu return TeecResult; 623*564654ebSJason Zhu } 624*564654ebSJason Zhu 625ae8ec5e1SHisping Lin uint32_t trusty_read_lock_state(uint8_t *lock_state) 626ae8ec5e1SHisping Lin { 627ae8ec5e1SHisping Lin TEEC_Result TeecResult; 628ae8ec5e1SHisping Lin TEEC_Context TeecContext; 629ae8ec5e1SHisping Lin TEEC_Session TeecSession; 630ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 631ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 632ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 633ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 634ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 6353251364cSHisping Lin struct blk_desc *dev_desc; 6363251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 6376651d4c0SJason Zhu if (!dev_desc) { 6386651d4c0SJason Zhu printf("%s: dev_desc is NULL!\n", __func__); 6396651d4c0SJason Zhu return -TEEC_ERROR_GENERIC; 6406651d4c0SJason Zhu } 641ae8ec5e1SHisping Lin 642ae8ec5e1SHisping Lin debug("testmm start\n"); 643ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 644ae8ec5e1SHisping Lin 645ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 646ae8ec5e1SHisping Lin 6473251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 6483251364cSHisping Lin TEEC_NONE, 6493251364cSHisping Lin TEEC_NONE, 6503251364cSHisping Lin TEEC_NONE); 6513251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 6523251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 6533251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 6543251364cSHisping Lin TeecOperation.params[0].value.a = 0; 6553251364cSHisping Lin #endif 656ae8ec5e1SHisping Lin 657ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 658ae8ec5e1SHisping Lin &TeecSession, 659ae8ec5e1SHisping Lin TeecUuid, 660ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 661ae8ec5e1SHisping Lin NULL, 6623251364cSHisping Lin &TeecOperation, 663ae8ec5e1SHisping Lin &ErrorOrigin); 664ae8ec5e1SHisping Lin 665ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 666ae8ec5e1SHisping Lin 667ae8ec5e1SHisping Lin SharedMem0.size = sizeof("lock_state"); 668ae8ec5e1SHisping Lin SharedMem0.flags = 0; 669ae8ec5e1SHisping Lin 670ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 671ae8ec5e1SHisping Lin 672ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "lock_state", SharedMem0.size); 673ae8ec5e1SHisping Lin 674ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 675ae8ec5e1SHisping Lin 676ae8ec5e1SHisping Lin SharedMem1.size = 1; 677ae8ec5e1SHisping Lin SharedMem1.flags = 0; 678ae8ec5e1SHisping Lin 679ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 680ae8ec5e1SHisping Lin 681ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 682ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 683ae8ec5e1SHisping Lin 684ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 685ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 686ae8ec5e1SHisping Lin 687ae8ec5e1SHisping Lin 688ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 689ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 690ae8ec5e1SHisping Lin TEEC_NONE, 691ae8ec5e1SHisping Lin TEEC_NONE); 692ae8ec5e1SHisping Lin 693ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 694ae8ec5e1SHisping Lin 0, 695ae8ec5e1SHisping Lin &TeecOperation, 696ae8ec5e1SHisping Lin &ErrorOrigin); 69746b2a054SHisping Lin if (TeecResult == TEEC_SUCCESS) 698ae8ec5e1SHisping Lin memcpy(lock_state, SharedMem1.buffer, SharedMem1.size); 699ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 700ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 701ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 70246b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 703ae8ec5e1SHisping Lin debug("testmm end\n"); 704ae8ec5e1SHisping Lin 705ae8ec5e1SHisping Lin return TeecResult; 706ae8ec5e1SHisping Lin } 707ae8ec5e1SHisping Lin 708ae8ec5e1SHisping Lin uint32_t trusty_write_lock_state(uint8_t lock_state) 709ae8ec5e1SHisping Lin { 710ae8ec5e1SHisping Lin TEEC_Result TeecResult; 711ae8ec5e1SHisping Lin TEEC_Context TeecContext; 712ae8ec5e1SHisping Lin TEEC_Session TeecSession; 713ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 714ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 715ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 716ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 717ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 7183251364cSHisping Lin struct blk_desc *dev_desc; 7193251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 7206651d4c0SJason Zhu if (!dev_desc) { 7216651d4c0SJason Zhu printf("%s: dev_desc is NULL!\n", __func__); 7226651d4c0SJason Zhu return -TEEC_ERROR_GENERIC; 7236651d4c0SJason Zhu } 724ae8ec5e1SHisping Lin 725ae8ec5e1SHisping Lin debug("testmm start\n"); 726ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 727ae8ec5e1SHisping Lin 728ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 729ae8ec5e1SHisping Lin 7303251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 7313251364cSHisping Lin TEEC_NONE, 7323251364cSHisping Lin TEEC_NONE, 7333251364cSHisping Lin TEEC_NONE); 7343251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 7353251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 7363251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 7373251364cSHisping Lin TeecOperation.params[0].value.a = 0; 7383251364cSHisping Lin #endif 7393251364cSHisping Lin 740ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 741ae8ec5e1SHisping Lin &TeecSession, 742ae8ec5e1SHisping Lin TeecUuid, 743ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 744ae8ec5e1SHisping Lin NULL, 7453251364cSHisping Lin &TeecOperation, 746ae8ec5e1SHisping Lin &ErrorOrigin); 747ae8ec5e1SHisping Lin 748ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 749ae8ec5e1SHisping Lin 750ae8ec5e1SHisping Lin SharedMem0.size = sizeof("lock_state"); 751ae8ec5e1SHisping Lin SharedMem0.flags = 0; 752ae8ec5e1SHisping Lin 753ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 754ae8ec5e1SHisping Lin 755ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "lock_state", SharedMem0.size); 756ae8ec5e1SHisping Lin 757ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 758ae8ec5e1SHisping Lin 759ae8ec5e1SHisping Lin SharedMem1.size = 1; 760ae8ec5e1SHisping Lin SharedMem1.flags = 0; 761ae8ec5e1SHisping Lin 762ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 763ae8ec5e1SHisping Lin 764ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, &lock_state, SharedMem1.size); 765ae8ec5e1SHisping Lin 766ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 767ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 768ae8ec5e1SHisping Lin 769ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 770ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 771ae8ec5e1SHisping Lin 772ae8ec5e1SHisping Lin 773ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 774ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 775ae8ec5e1SHisping Lin TEEC_NONE, 776ae8ec5e1SHisping Lin TEEC_NONE); 777ae8ec5e1SHisping Lin 778ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 779ae8ec5e1SHisping Lin 1, 780ae8ec5e1SHisping Lin &TeecOperation, 781ae8ec5e1SHisping Lin &ErrorOrigin); 782ae8ec5e1SHisping Lin 783ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 784ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 785ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 78646b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 787ae8ec5e1SHisping Lin debug("testmm end\n"); 788ae8ec5e1SHisping Lin 789ae8ec5e1SHisping Lin return TeecResult; 790ae8ec5e1SHisping Lin } 791ae8ec5e1SHisping Lin 792ae8ec5e1SHisping Lin uint32_t trusty_read_flash_lock_state(uint8_t *flash_lock_state) 793ae8ec5e1SHisping Lin { 794ae8ec5e1SHisping Lin TEEC_Result TeecResult; 795ae8ec5e1SHisping Lin TEEC_Context TeecContext; 796ae8ec5e1SHisping Lin TEEC_Session TeecSession; 797ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 798ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 799ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 800ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 801ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 8023251364cSHisping Lin struct blk_desc *dev_desc; 8033251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 8046651d4c0SJason Zhu if (!dev_desc) { 8056651d4c0SJason Zhu printf("%s: dev_desc is NULL!\n", __func__); 8066651d4c0SJason Zhu return -TEEC_ERROR_GENERIC; 8076651d4c0SJason Zhu } 808ae8ec5e1SHisping Lin 809ae8ec5e1SHisping Lin debug("testmm start\n"); 810ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 811ae8ec5e1SHisping Lin 812ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 813ae8ec5e1SHisping Lin 8143251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 8153251364cSHisping Lin TEEC_NONE, 8163251364cSHisping Lin TEEC_NONE, 8173251364cSHisping Lin TEEC_NONE); 8183251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 8193251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 8203251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 8213251364cSHisping Lin TeecOperation.params[0].value.a = 0; 8223251364cSHisping Lin #endif 823ae8ec5e1SHisping Lin 824ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 825ae8ec5e1SHisping Lin &TeecSession, 826ae8ec5e1SHisping Lin TeecUuid, 827ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 828ae8ec5e1SHisping Lin NULL, 8293251364cSHisping Lin &TeecOperation, 830ae8ec5e1SHisping Lin &ErrorOrigin); 831ae8ec5e1SHisping Lin 832ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 833ae8ec5e1SHisping Lin 834ae8ec5e1SHisping Lin SharedMem0.size = sizeof("flash_lock_state"); 835ae8ec5e1SHisping Lin SharedMem0.flags = 0; 836ae8ec5e1SHisping Lin 837ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 838ae8ec5e1SHisping Lin 839ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "flash_lock_state", SharedMem0.size); 840ae8ec5e1SHisping Lin 841ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 842ae8ec5e1SHisping Lin 843ae8ec5e1SHisping Lin SharedMem1.size = 1; 844ae8ec5e1SHisping Lin SharedMem1.flags = 0; 845ae8ec5e1SHisping Lin 846ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 847ae8ec5e1SHisping Lin 848ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 849ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 850ae8ec5e1SHisping Lin 851ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 852ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 853ae8ec5e1SHisping Lin 854ae8ec5e1SHisping Lin 855ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 856ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 857ae8ec5e1SHisping Lin TEEC_NONE, 858ae8ec5e1SHisping Lin TEEC_NONE); 859ae8ec5e1SHisping Lin 860ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 861ae8ec5e1SHisping Lin 0, 862ae8ec5e1SHisping Lin &TeecOperation, 863ae8ec5e1SHisping Lin &ErrorOrigin); 86446b2a054SHisping Lin if (TeecResult == TEEC_SUCCESS) 865ae8ec5e1SHisping Lin memcpy(flash_lock_state, SharedMem1.buffer, SharedMem1.size); 866ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 867ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 868ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 86946b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 870ae8ec5e1SHisping Lin debug("testmm end\n"); 871ae8ec5e1SHisping Lin 872ae8ec5e1SHisping Lin return TeecResult; 873ae8ec5e1SHisping Lin } 874ae8ec5e1SHisping Lin 875ae8ec5e1SHisping Lin 876ae8ec5e1SHisping Lin uint32_t trusty_write_flash_lock_state(uint8_t flash_lock_state) 877ae8ec5e1SHisping Lin { 878ae8ec5e1SHisping Lin TEEC_Result TeecResult; 879ae8ec5e1SHisping Lin TEEC_Context TeecContext; 880ae8ec5e1SHisping Lin TEEC_Session TeecSession; 881ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 882ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 883ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 884ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 885ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 8863251364cSHisping Lin struct blk_desc *dev_desc; 8873251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 8886651d4c0SJason Zhu if (!dev_desc) { 8896651d4c0SJason Zhu printf("%s: dev_desc is NULL!\n", __func__); 8906651d4c0SJason Zhu return -TEEC_ERROR_GENERIC; 8916651d4c0SJason Zhu } 892ae8ec5e1SHisping Lin 893ae8ec5e1SHisping Lin debug("testmm start\n"); 894ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 895ae8ec5e1SHisping Lin 896ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 897ae8ec5e1SHisping Lin 8983251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 8993251364cSHisping Lin TEEC_NONE, 9003251364cSHisping Lin TEEC_NONE, 9013251364cSHisping Lin TEEC_NONE); 9023251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 9033251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 9043251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 9053251364cSHisping Lin TeecOperation.params[0].value.a = 0; 9063251364cSHisping Lin #endif 9073251364cSHisping Lin 908ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 909ae8ec5e1SHisping Lin &TeecSession, 910ae8ec5e1SHisping Lin TeecUuid, 911ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 912ae8ec5e1SHisping Lin NULL, 9133251364cSHisping Lin &TeecOperation, 914ae8ec5e1SHisping Lin &ErrorOrigin); 915ae8ec5e1SHisping Lin 916ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 917ae8ec5e1SHisping Lin 918ae8ec5e1SHisping Lin SharedMem0.size = sizeof("flash_lock_state"); 919ae8ec5e1SHisping Lin SharedMem0.flags = 0; 920ae8ec5e1SHisping Lin 921ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 922ae8ec5e1SHisping Lin 923ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "flash_lock_state", SharedMem0.size); 924ae8ec5e1SHisping Lin 925ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 926ae8ec5e1SHisping Lin 927ae8ec5e1SHisping Lin SharedMem1.size = 1; 928ae8ec5e1SHisping Lin SharedMem1.flags = 0; 929ae8ec5e1SHisping Lin 930ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 931ae8ec5e1SHisping Lin 932ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, &flash_lock_state, SharedMem1.size); 933ae8ec5e1SHisping Lin 934ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 935ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 936ae8ec5e1SHisping Lin 937ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 938ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 939ae8ec5e1SHisping Lin 940ae8ec5e1SHisping Lin 941ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 942ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 943ae8ec5e1SHisping Lin TEEC_NONE, 944ae8ec5e1SHisping Lin TEEC_NONE); 945ae8ec5e1SHisping Lin 946ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 947ae8ec5e1SHisping Lin 1, 948ae8ec5e1SHisping Lin &TeecOperation, 949ae8ec5e1SHisping Lin &ErrorOrigin); 950ae8ec5e1SHisping Lin 951ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 952ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 953ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 95446b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 955ae8ec5e1SHisping Lin debug("testmm end\n"); 956ae8ec5e1SHisping Lin 957ae8ec5e1SHisping Lin return TeecResult; 958ae8ec5e1SHisping Lin } 959ae8ec5e1SHisping Lin 9606ef445a4SHisping Lin uint32_t trusty_read_attribute_hash(uint32_t *buf, uint32_t length) 9616ef445a4SHisping Lin { 9626ef445a4SHisping Lin TEEC_Result TeecResult; 9636ef445a4SHisping Lin TEEC_Context TeecContext; 9646ef445a4SHisping Lin TEEC_Session TeecSession; 9656ef445a4SHisping Lin uint32_t ErrorOrigin; 9666ef445a4SHisping Lin 9676ef445a4SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 9686ef445a4SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 9696ef445a4SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 9706ef445a4SHisping Lin TEEC_Operation TeecOperation = {0}; 9716ef445a4SHisping Lin 9726ef445a4SHisping Lin OpteeClientApiLibInitialize(); 9736ef445a4SHisping Lin 9746ef445a4SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 9756ef445a4SHisping Lin 9766ef445a4SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 9776ef445a4SHisping Lin &TeecSession, 9786ef445a4SHisping Lin TeecUuid, 9796ef445a4SHisping Lin TEEC_LOGIN_PUBLIC, 9806ef445a4SHisping Lin NULL, 9816ef445a4SHisping Lin NULL, 9826ef445a4SHisping Lin &ErrorOrigin); 9836ef445a4SHisping Lin 9846ef445a4SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 9856ef445a4SHisping Lin 9866ef445a4SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 9876ef445a4SHisping Lin SharedMem0.flags = 0; 9886ef445a4SHisping Lin 9896ef445a4SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 9906ef445a4SHisping Lin 9916ef445a4SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 9926ef445a4SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 9936ef445a4SHisping Lin 9946ef445a4SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, 9956ef445a4SHisping Lin TEEC_NONE, 9966ef445a4SHisping Lin TEEC_NONE, 9976ef445a4SHisping Lin TEEC_NONE); 9986ef445a4SHisping Lin 9996ef445a4SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 10006ef445a4SHisping Lin 0, 10016ef445a4SHisping Lin &TeecOperation, 10026ef445a4SHisping Lin &ErrorOrigin); 10036ef445a4SHisping Lin 10046ef445a4SHisping Lin if (TeecResult == TEEC_SUCCESS) 10056ef445a4SHisping Lin memcpy(buf, SharedMem0.buffer, SharedMem0.size); 10066ef445a4SHisping Lin 10076ef445a4SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 10086ef445a4SHisping Lin TEEC_CloseSession(&TeecSession); 10096ef445a4SHisping Lin TEEC_FinalizeContext(&TeecContext); 10106ef445a4SHisping Lin 10116ef445a4SHisping Lin return TeecResult; 10126ef445a4SHisping Lin } 10136ef445a4SHisping Lin 10146ef445a4SHisping Lin uint32_t trusty_write_attribute_hash(uint32_t *buf, uint32_t length) 10156ef445a4SHisping Lin { 10166ef445a4SHisping Lin TEEC_Result TeecResult; 10176ef445a4SHisping Lin TEEC_Context TeecContext; 10186ef445a4SHisping Lin TEEC_Session TeecSession; 10196ef445a4SHisping Lin uint32_t ErrorOrigin; 10206ef445a4SHisping Lin 10216ef445a4SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 10226ef445a4SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 10236ef445a4SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 10246ef445a4SHisping Lin TEEC_Operation TeecOperation = {0}; 10256ef445a4SHisping Lin 10266ef445a4SHisping Lin OpteeClientApiLibInitialize(); 10276ef445a4SHisping Lin 10286ef445a4SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 10296ef445a4SHisping Lin 10306ef445a4SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 10316ef445a4SHisping Lin &TeecSession, 10326ef445a4SHisping Lin TeecUuid, 10336ef445a4SHisping Lin TEEC_LOGIN_PUBLIC, 10346ef445a4SHisping Lin NULL, 10356ef445a4SHisping Lin NULL, 10366ef445a4SHisping Lin &ErrorOrigin); 10376ef445a4SHisping Lin 10386ef445a4SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 10396ef445a4SHisping Lin 10406ef445a4SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 10416ef445a4SHisping Lin SharedMem0.flags = 0; 10426ef445a4SHisping Lin 10436ef445a4SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 10446ef445a4SHisping Lin 10456ef445a4SHisping Lin memcpy(SharedMem0.buffer, buf, SharedMem0.size); 10466ef445a4SHisping Lin 10476ef445a4SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 10486ef445a4SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 10496ef445a4SHisping Lin 10506ef445a4SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 10516ef445a4SHisping Lin TEEC_NONE, 10526ef445a4SHisping Lin TEEC_NONE, 10536ef445a4SHisping Lin TEEC_NONE); 10546ef445a4SHisping Lin 10556ef445a4SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 10566ef445a4SHisping Lin 1, 10576ef445a4SHisping Lin &TeecOperation, 10586ef445a4SHisping Lin &ErrorOrigin); 10596ef445a4SHisping Lin 10606ef445a4SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 10616ef445a4SHisping Lin TEEC_CloseSession(&TeecSession); 10626ef445a4SHisping Lin TEEC_FinalizeContext(&TeecContext); 10636ef445a4SHisping Lin 10646ef445a4SHisping Lin return TeecResult; 10656ef445a4SHisping Lin } 106616539616SHisping Lin 106716539616SHisping Lin uint32_t notify_optee_rpmb_ta(void) 106816539616SHisping Lin { 106916539616SHisping Lin TEEC_Result TeecResult; 107016539616SHisping Lin TEEC_Context TeecContext; 107116539616SHisping Lin TEEC_Session TeecSession; 107216539616SHisping Lin uint32_t ErrorOrigin; 107316539616SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 107416539616SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 107516539616SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 107616539616SHisping Lin TEEC_Operation TeecOperation = {0}; 107716539616SHisping Lin 107816539616SHisping Lin OpteeClientApiLibInitialize(); 107916539616SHisping Lin 108016539616SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 108116539616SHisping Lin 108216539616SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 108316539616SHisping Lin &TeecSession, 108416539616SHisping Lin TeecUuid, 108516539616SHisping Lin TEEC_LOGIN_PUBLIC, 108616539616SHisping Lin NULL, 108716539616SHisping Lin NULL, 108816539616SHisping Lin &ErrorOrigin); 108916539616SHisping Lin 109016539616SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, 109116539616SHisping Lin TEEC_NONE, 109216539616SHisping Lin TEEC_NONE, 109316539616SHisping Lin TEEC_NONE); 109416539616SHisping Lin 109516539616SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 109616539616SHisping Lin 2, 109716539616SHisping Lin &TeecOperation, 109816539616SHisping Lin &ErrorOrigin); 109916539616SHisping Lin 110016539616SHisping Lin TEEC_CloseSession(&TeecSession); 110116539616SHisping Lin TEEC_FinalizeContext(&TeecContext); 110216539616SHisping Lin 110316539616SHisping Lin return TeecResult; 110416539616SHisping Lin } 110516539616SHisping Lin 110616539616SHisping Lin uint32_t notify_optee_efuse_ta(void) 110716539616SHisping Lin { 110816539616SHisping Lin TEEC_Result TeecResult; 110916539616SHisping Lin TEEC_Context TeecContext; 111016539616SHisping Lin TEEC_Session TeecSession; 111116539616SHisping Lin uint32_t ErrorOrigin; 111216539616SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 111316539616SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 111416539616SHisping Lin 111516539616SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 111616539616SHisping Lin TEEC_Operation TeecOperation = {0}; 111716539616SHisping Lin 111816539616SHisping Lin OpteeClientApiLibInitialize(); 111916539616SHisping Lin 112016539616SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 112116539616SHisping Lin 112216539616SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 112316539616SHisping Lin &TeecSession, 112416539616SHisping Lin TeecUuid, 112516539616SHisping Lin TEEC_LOGIN_PUBLIC, 112616539616SHisping Lin NULL, 112716539616SHisping Lin NULL, 112816539616SHisping Lin &ErrorOrigin); 112916539616SHisping Lin 113016539616SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, 113116539616SHisping Lin TEEC_NONE, 113216539616SHisping Lin TEEC_NONE, 113316539616SHisping Lin TEEC_NONE); 113416539616SHisping Lin 113516539616SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 113616539616SHisping Lin 2, 113716539616SHisping Lin &TeecOperation, 113816539616SHisping Lin &ErrorOrigin); 113916539616SHisping Lin 114016539616SHisping Lin TEEC_CloseSession(&TeecSession); 114116539616SHisping Lin TEEC_FinalizeContext(&TeecContext); 114216539616SHisping Lin 114316539616SHisping Lin return TeecResult; 114416539616SHisping Lin } 114516539616SHisping Lin 114616539616SHisping Lin uint32_t trusty_notify_optee_uboot_end(void) 114716539616SHisping Lin { 114816539616SHisping Lin TEEC_Result res; 114916539616SHisping Lin res = notify_optee_rpmb_ta(); 115016539616SHisping Lin res |= notify_optee_efuse_ta(); 115116539616SHisping Lin return res; 115216539616SHisping Lin } 11532cd27853SHisping Lin 11542cd27853SHisping Lin uint32_t trusty_read_vbootkey_hash(uint32_t *buf, uint32_t length) 11552cd27853SHisping Lin { 11562cd27853SHisping Lin TEEC_Result TeecResult; 11572cd27853SHisping Lin TEEC_Context TeecContext; 11582cd27853SHisping Lin TEEC_Session TeecSession; 11592cd27853SHisping Lin uint32_t ErrorOrigin; 11602cd27853SHisping Lin 11612cd27853SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 11622cd27853SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 11632cd27853SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 11642cd27853SHisping Lin TEEC_Operation TeecOperation = {0}; 11652cd27853SHisping Lin 11662cd27853SHisping Lin OpteeClientApiLibInitialize(); 11672cd27853SHisping Lin 11682cd27853SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 11692cd27853SHisping Lin 11702cd27853SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 11712cd27853SHisping Lin &TeecSession, 11722cd27853SHisping Lin TeecUuid, 11732cd27853SHisping Lin TEEC_LOGIN_PUBLIC, 11742cd27853SHisping Lin NULL, 11752cd27853SHisping Lin NULL, 11762cd27853SHisping Lin &ErrorOrigin); 11772cd27853SHisping Lin 11782cd27853SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 11792cd27853SHisping Lin 11802cd27853SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 11812cd27853SHisping Lin SharedMem0.flags = 0; 11822cd27853SHisping Lin 11832cd27853SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 11842cd27853SHisping Lin 11852cd27853SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 11862cd27853SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 11872cd27853SHisping Lin 11882cd27853SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, 11892cd27853SHisping Lin TEEC_NONE, 11902cd27853SHisping Lin TEEC_NONE, 11912cd27853SHisping Lin TEEC_NONE); 11922cd27853SHisping Lin 11932cd27853SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 11942cd27853SHisping Lin 3, 11952cd27853SHisping Lin &TeecOperation, 11962cd27853SHisping Lin &ErrorOrigin); 11972cd27853SHisping Lin 11982cd27853SHisping Lin if (TeecResult == TEEC_SUCCESS) 11992cd27853SHisping Lin memcpy(buf, SharedMem0.buffer, SharedMem0.size); 12002cd27853SHisping Lin 12012cd27853SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 12022cd27853SHisping Lin TEEC_CloseSession(&TeecSession); 12032cd27853SHisping Lin TEEC_FinalizeContext(&TeecContext); 12042cd27853SHisping Lin 12052cd27853SHisping Lin return TeecResult; 12062cd27853SHisping Lin } 12072cd27853SHisping Lin uint32_t trusty_write_vbootkey_hash(uint32_t *buf, uint32_t length) 12082cd27853SHisping Lin { 12092cd27853SHisping Lin TEEC_Result TeecResult; 12102cd27853SHisping Lin TEEC_Context TeecContext; 12112cd27853SHisping Lin TEEC_Session TeecSession; 12122cd27853SHisping Lin uint32_t ErrorOrigin; 12132cd27853SHisping Lin 12142cd27853SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 12152cd27853SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 12162cd27853SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 12172cd27853SHisping Lin TEEC_Operation TeecOperation = {0}; 12182cd27853SHisping Lin 12192cd27853SHisping Lin OpteeClientApiLibInitialize(); 12202cd27853SHisping Lin 12212cd27853SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 12222cd27853SHisping Lin 12232cd27853SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 12242cd27853SHisping Lin &TeecSession, 12252cd27853SHisping Lin TeecUuid, 12262cd27853SHisping Lin TEEC_LOGIN_PUBLIC, 12272cd27853SHisping Lin NULL, 12282cd27853SHisping Lin NULL, 12292cd27853SHisping Lin &ErrorOrigin); 12302cd27853SHisping Lin 12312cd27853SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 12322cd27853SHisping Lin 12332cd27853SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 12342cd27853SHisping Lin SharedMem0.flags = 0; 12352cd27853SHisping Lin 12362cd27853SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 12372cd27853SHisping Lin 12382cd27853SHisping Lin memcpy(SharedMem0.buffer, buf, SharedMem0.size); 12392cd27853SHisping Lin 12402cd27853SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 12412cd27853SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 12422cd27853SHisping Lin 12432cd27853SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 12442cd27853SHisping Lin TEEC_NONE, 12452cd27853SHisping Lin TEEC_NONE, 12462cd27853SHisping Lin TEEC_NONE); 12472cd27853SHisping Lin 12482cd27853SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 12492cd27853SHisping Lin 4, 12502cd27853SHisping Lin &TeecOperation, 12512cd27853SHisping Lin &ErrorOrigin); 12522cd27853SHisping Lin 12532cd27853SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 12542cd27853SHisping Lin TEEC_CloseSession(&TeecSession); 12552cd27853SHisping Lin TEEC_FinalizeContext(&TeecContext); 12562cd27853SHisping Lin 12572cd27853SHisping Lin return TeecResult; 12582cd27853SHisping Lin } 1259095e2a82SHisping Lin 1260468df3b2SHisping Lin uint32_t trusty_read_vbootkey_enable_flag(uint8_t *flag) 1261468df3b2SHisping Lin { 1262468df3b2SHisping Lin TEEC_Result TeecResult; 1263468df3b2SHisping Lin TEEC_Context TeecContext; 1264468df3b2SHisping Lin TEEC_Session TeecSession; 1265468df3b2SHisping Lin uint32_t ErrorOrigin; 1266468df3b2SHisping Lin uint32_t bootflag; 1267468df3b2SHisping Lin 1268468df3b2SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 1269468df3b2SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 1270468df3b2SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 1271468df3b2SHisping Lin TEEC_Operation TeecOperation = {0}; 1272468df3b2SHisping Lin 1273468df3b2SHisping Lin OpteeClientApiLibInitialize(); 1274468df3b2SHisping Lin 1275468df3b2SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 1276468df3b2SHisping Lin 1277468df3b2SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 1278468df3b2SHisping Lin &TeecSession, 1279468df3b2SHisping Lin TeecUuid, 1280468df3b2SHisping Lin TEEC_LOGIN_PUBLIC, 1281468df3b2SHisping Lin NULL, 1282468df3b2SHisping Lin NULL, 1283468df3b2SHisping Lin &ErrorOrigin); 1284468df3b2SHisping Lin 1285468df3b2SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 1286468df3b2SHisping Lin 1287468df3b2SHisping Lin SharedMem0.size = 1 * sizeof(uint32_t); 1288468df3b2SHisping Lin SharedMem0.flags = 0; 1289468df3b2SHisping Lin 1290468df3b2SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 1291468df3b2SHisping Lin 1292468df3b2SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 1293468df3b2SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 1294468df3b2SHisping Lin 1295468df3b2SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, 1296468df3b2SHisping Lin TEEC_NONE, 1297468df3b2SHisping Lin TEEC_NONE, 1298468df3b2SHisping Lin TEEC_NONE); 1299468df3b2SHisping Lin 1300468df3b2SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 1301468df3b2SHisping Lin 5, 1302468df3b2SHisping Lin &TeecOperation, 1303468df3b2SHisping Lin &ErrorOrigin); 1304468df3b2SHisping Lin 1305468df3b2SHisping Lin if (TeecResult == TEEC_SUCCESS) { 1306468df3b2SHisping Lin memcpy(&bootflag, SharedMem0.buffer, SharedMem0.size); 1307468df3b2SHisping Lin if (bootflag == 0x000000FF) 1308468df3b2SHisping Lin *flag = 1; 1309468df3b2SHisping Lin } 1310468df3b2SHisping Lin 1311468df3b2SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 1312468df3b2SHisping Lin TEEC_CloseSession(&TeecSession); 1313468df3b2SHisping Lin TEEC_FinalizeContext(&TeecContext); 1314468df3b2SHisping Lin 1315468df3b2SHisping Lin return TeecResult; 1316468df3b2SHisping Lin } 1317468df3b2SHisping Lin 1318095e2a82SHisping Lin uint32_t trusty_read_permanent_attributes_flag(uint8_t *attributes) 1319095e2a82SHisping Lin { 1320095e2a82SHisping Lin TEEC_Result TeecResult; 1321095e2a82SHisping Lin TEEC_Context TeecContext; 1322095e2a82SHisping Lin TEEC_Session TeecSession; 1323095e2a82SHisping Lin uint32_t ErrorOrigin; 132499830019SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 132599830019SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 1326095e2a82SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 1327095e2a82SHisping Lin TEEC_Operation TeecOperation = {0}; 13283251364cSHisping Lin struct blk_desc *dev_desc; 13293251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 13306651d4c0SJason Zhu if (!dev_desc) { 13316651d4c0SJason Zhu printf("%s: dev_desc is NULL!\n", __func__); 13326651d4c0SJason Zhu return -TEEC_ERROR_GENERIC; 13336651d4c0SJason Zhu } 1334095e2a82SHisping Lin 1335095e2a82SHisping Lin debug("testmm start\n"); 1336095e2a82SHisping Lin OpteeClientApiLibInitialize(); 1337095e2a82SHisping Lin 1338095e2a82SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 1339095e2a82SHisping Lin 13403251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 13413251364cSHisping Lin TEEC_NONE, 13423251364cSHisping Lin TEEC_NONE, 13433251364cSHisping Lin TEEC_NONE); 13443251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 13453251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 13463251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 13473251364cSHisping Lin TeecOperation.params[0].value.a = 0; 13483251364cSHisping Lin #endif 13493251364cSHisping Lin 1350095e2a82SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 1351095e2a82SHisping Lin &TeecSession, 1352095e2a82SHisping Lin TeecUuid, 1353095e2a82SHisping Lin TEEC_LOGIN_PUBLIC, 1354095e2a82SHisping Lin NULL, 13553251364cSHisping Lin &TeecOperation, 1356095e2a82SHisping Lin &ErrorOrigin); 1357095e2a82SHisping Lin 1358095e2a82SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 1359095e2a82SHisping Lin 1360095e2a82SHisping Lin SharedMem0.size = sizeof("attributes_flag"); 1361095e2a82SHisping Lin SharedMem0.flags = 0; 1362095e2a82SHisping Lin 1363095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 1364095e2a82SHisping Lin 1365095e2a82SHisping Lin memcpy(SharedMem0.buffer, "attributes_flag", SharedMem0.size); 1366095e2a82SHisping Lin 1367095e2a82SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 1368095e2a82SHisping Lin 1369095e2a82SHisping Lin SharedMem1.size = 1; 1370095e2a82SHisping Lin SharedMem1.flags = 0; 1371095e2a82SHisping Lin 1372095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 1373095e2a82SHisping Lin 1374095e2a82SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 1375095e2a82SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 1376095e2a82SHisping Lin 1377095e2a82SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 1378095e2a82SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 1379095e2a82SHisping Lin 1380095e2a82SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 1381095e2a82SHisping Lin TEEC_MEMREF_TEMP_INOUT, 1382095e2a82SHisping Lin TEEC_NONE, 1383095e2a82SHisping Lin TEEC_NONE); 1384095e2a82SHisping Lin 1385095e2a82SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 138699830019SHisping Lin 0, 1387095e2a82SHisping Lin &TeecOperation, 1388095e2a82SHisping Lin &ErrorOrigin); 1389095e2a82SHisping Lin if (TeecResult == TEEC_SUCCESS) 1390095e2a82SHisping Lin memcpy(attributes, SharedMem1.buffer, SharedMem1.size); 1391095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 1392095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 1393095e2a82SHisping Lin TEEC_CloseSession(&TeecSession); 1394095e2a82SHisping Lin TEEC_FinalizeContext(&TeecContext); 1395095e2a82SHisping Lin debug("testmm end\n"); 1396095e2a82SHisping Lin 1397095e2a82SHisping Lin return TeecResult; 1398095e2a82SHisping Lin } 1399095e2a82SHisping Lin 1400095e2a82SHisping Lin uint32_t trusty_write_permanent_attributes_flag(uint8_t attributes) 1401095e2a82SHisping Lin { 1402095e2a82SHisping Lin TEEC_Result TeecResult; 1403095e2a82SHisping Lin TEEC_Context TeecContext; 1404095e2a82SHisping Lin TEEC_Session TeecSession; 1405095e2a82SHisping Lin uint32_t ErrorOrigin; 140699830019SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 140799830019SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 1408095e2a82SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 1409095e2a82SHisping Lin TEEC_Operation TeecOperation = {0}; 14103251364cSHisping Lin struct blk_desc *dev_desc; 14113251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 14126651d4c0SJason Zhu if (!dev_desc) { 14136651d4c0SJason Zhu printf("%s: dev_desc is NULL!\n", __func__); 14146651d4c0SJason Zhu return -TEEC_ERROR_GENERIC; 14156651d4c0SJason Zhu } 1416095e2a82SHisping Lin 1417095e2a82SHisping Lin debug("testmm start\n"); 1418095e2a82SHisping Lin OpteeClientApiLibInitialize(); 1419095e2a82SHisping Lin 1420095e2a82SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 1421095e2a82SHisping Lin 14223251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 14233251364cSHisping Lin TEEC_NONE, 14243251364cSHisping Lin TEEC_NONE, 14253251364cSHisping Lin TEEC_NONE); 14263251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 14273251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 14283251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 14293251364cSHisping Lin TeecOperation.params[0].value.a = 0; 14303251364cSHisping Lin #endif 14313251364cSHisping Lin 1432095e2a82SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 1433095e2a82SHisping Lin &TeecSession, 1434095e2a82SHisping Lin TeecUuid, 1435095e2a82SHisping Lin TEEC_LOGIN_PUBLIC, 1436095e2a82SHisping Lin NULL, 14373251364cSHisping Lin &TeecOperation, 1438095e2a82SHisping Lin &ErrorOrigin); 1439095e2a82SHisping Lin 1440095e2a82SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 1441095e2a82SHisping Lin 1442095e2a82SHisping Lin SharedMem0.size = sizeof("attributes_flag"); 1443095e2a82SHisping Lin SharedMem0.flags = 0; 1444095e2a82SHisping Lin 1445095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 1446095e2a82SHisping Lin 1447095e2a82SHisping Lin memcpy(SharedMem0.buffer, "attributes_flag", SharedMem0.size); 1448095e2a82SHisping Lin 1449095e2a82SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 1450095e2a82SHisping Lin 1451095e2a82SHisping Lin SharedMem1.size = 1; 1452095e2a82SHisping Lin SharedMem1.flags = 0; 1453095e2a82SHisping Lin 1454095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 1455095e2a82SHisping Lin 1456095e2a82SHisping Lin memcpy(SharedMem1.buffer, (char *)&attributes, SharedMem1.size); 1457095e2a82SHisping Lin 1458095e2a82SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 1459095e2a82SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 1460095e2a82SHisping Lin 1461095e2a82SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 1462095e2a82SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 1463095e2a82SHisping Lin 1464095e2a82SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 1465095e2a82SHisping Lin TEEC_MEMREF_TEMP_INOUT, 1466095e2a82SHisping Lin TEEC_NONE, 1467095e2a82SHisping Lin TEEC_NONE); 1468095e2a82SHisping Lin 1469095e2a82SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 147099830019SHisping Lin 1, 1471095e2a82SHisping Lin &TeecOperation, 1472095e2a82SHisping Lin &ErrorOrigin); 1473095e2a82SHisping Lin 1474095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 1475095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 1476095e2a82SHisping Lin TEEC_CloseSession(&TeecSession); 1477095e2a82SHisping Lin TEEC_FinalizeContext(&TeecContext); 1478095e2a82SHisping Lin debug("testmm end\n"); 1479095e2a82SHisping Lin 1480095e2a82SHisping Lin return TeecResult; 1481095e2a82SHisping Lin } 14824aa61755SAndy Ye 14834aa61755SAndy Ye uint32_t trusty_attest_dh(uint8_t *dh, uint32_t *dh_size) 14844aa61755SAndy Ye { 14854aa61755SAndy Ye TEEC_Result TeecResult; 14864aa61755SAndy Ye TEEC_Context TeecContext; 14874aa61755SAndy Ye TEEC_Session TeecSession; 14884aa61755SAndy Ye uint32_t ErrorOrigin; 14894aa61755SAndy Ye TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 14904aa61755SAndy Ye { 0xa8, 0x69, 0x9c, 0xe6, 14914aa61755SAndy Ye 0x88, 0x6c, 0x5d, 0x5d 14924aa61755SAndy Ye } 14934aa61755SAndy Ye }; 14944aa61755SAndy Ye TEEC_UUID *TeecUuid = &tempuuid; 14954aa61755SAndy Ye TEEC_Operation TeecOperation = {0}; 14963251364cSHisping Lin struct blk_desc *dev_desc; 14973251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 14986651d4c0SJason Zhu if (!dev_desc) { 14996651d4c0SJason Zhu printf("%s: dev_desc is NULL!\n", __func__); 15006651d4c0SJason Zhu return -TEEC_ERROR_GENERIC; 15016651d4c0SJason Zhu } 15024aa61755SAndy Ye 15034aa61755SAndy Ye OpteeClientApiLibInitialize(); 15044aa61755SAndy Ye 15054aa61755SAndy Ye TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 15064aa61755SAndy Ye 15073251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 15083251364cSHisping Lin TEEC_NONE, 15093251364cSHisping Lin TEEC_NONE, 15103251364cSHisping Lin TEEC_NONE); 15113251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 15123251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 15133251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 15143251364cSHisping Lin TeecOperation.params[0].value.a = 0; 15153251364cSHisping Lin #endif 15163251364cSHisping Lin 15174aa61755SAndy Ye TeecResult = TEEC_OpenSession(&TeecContext, 15184aa61755SAndy Ye &TeecSession, 15194aa61755SAndy Ye TeecUuid, 15204aa61755SAndy Ye TEEC_LOGIN_PUBLIC, 15214aa61755SAndy Ye NULL, 15223251364cSHisping Lin &TeecOperation, 15234aa61755SAndy Ye &ErrorOrigin); 15244aa61755SAndy Ye 15254aa61755SAndy Ye TEEC_SharedMemory SharedMem0 = {0}; 15264aa61755SAndy Ye 15274aa61755SAndy Ye SharedMem0.size = *dh_size; 15284aa61755SAndy Ye SharedMem0.flags = 0; 15294aa61755SAndy Ye 15304aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 15314aa61755SAndy Ye 15324aa61755SAndy Ye TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 15334aa61755SAndy Ye TeecOperation.params[0].tmpref.size = SharedMem0.size; 15344aa61755SAndy Ye 15354aa61755SAndy Ye TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, 15364aa61755SAndy Ye TEEC_NONE, 15374aa61755SAndy Ye TEEC_NONE, 15384aa61755SAndy Ye TEEC_NONE); 15394aa61755SAndy Ye 15404aa61755SAndy Ye TeecResult = TEEC_InvokeCommand(&TeecSession, 15414aa61755SAndy Ye 143, 15424aa61755SAndy Ye &TeecOperation, 15434aa61755SAndy Ye &ErrorOrigin); 15444aa61755SAndy Ye 15454aa61755SAndy Ye *dh_size = TeecOperation.params[0].tmpref.size; 15464aa61755SAndy Ye memcpy(dh, SharedMem0.buffer, SharedMem0.size); 15474aa61755SAndy Ye 15484aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem0); 15494aa61755SAndy Ye 15504aa61755SAndy Ye TEEC_CloseSession(&TeecSession); 15514aa61755SAndy Ye TeecResult = TEEC_FinalizeContext(&TeecContext); 15524aa61755SAndy Ye 15534aa61755SAndy Ye return TeecResult; 15544aa61755SAndy Ye } 15554aa61755SAndy Ye 15564aa61755SAndy Ye uint32_t trusty_attest_uuid(uint8_t *uuid, uint32_t *uuid_size) 15574aa61755SAndy Ye { 15584aa61755SAndy Ye TEEC_Result TeecResult; 15594aa61755SAndy Ye TEEC_Context TeecContext; 15604aa61755SAndy Ye TEEC_Session TeecSession; 15614aa61755SAndy Ye uint32_t ErrorOrigin; 15624aa61755SAndy Ye TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 15634aa61755SAndy Ye { 0xa8, 0x69, 0x9c, 0xe6, 15644aa61755SAndy Ye 0x88, 0x6c, 0x5d, 0x5d 15654aa61755SAndy Ye } 15664aa61755SAndy Ye }; 15674aa61755SAndy Ye TEEC_UUID *TeecUuid = &tempuuid; 15684aa61755SAndy Ye TEEC_Operation TeecOperation = {0}; 15693251364cSHisping Lin struct blk_desc *dev_desc; 15703251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 15716651d4c0SJason Zhu if (!dev_desc) { 15726651d4c0SJason Zhu printf("%s: dev_desc is NULL!\n", __func__); 15736651d4c0SJason Zhu return -TEEC_ERROR_GENERIC; 15746651d4c0SJason Zhu } 15754aa61755SAndy Ye 15764aa61755SAndy Ye OpteeClientApiLibInitialize(); 15774aa61755SAndy Ye 15784aa61755SAndy Ye TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 15794aa61755SAndy Ye 15803251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 15813251364cSHisping Lin TEEC_NONE, 15823251364cSHisping Lin TEEC_NONE, 15833251364cSHisping Lin TEEC_NONE); 15843251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 15853251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 15863251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 15873251364cSHisping Lin TeecOperation.params[0].value.a = 0; 15883251364cSHisping Lin #endif 15893251364cSHisping Lin 15904aa61755SAndy Ye TeecResult = TEEC_OpenSession(&TeecContext, 15914aa61755SAndy Ye &TeecSession, 15924aa61755SAndy Ye TeecUuid, 15934aa61755SAndy Ye TEEC_LOGIN_PUBLIC, 15944aa61755SAndy Ye NULL, 15953251364cSHisping Lin &TeecOperation, 15964aa61755SAndy Ye &ErrorOrigin); 15974aa61755SAndy Ye 15984aa61755SAndy Ye TEEC_SharedMemory SharedMem0 = {0}; 15994aa61755SAndy Ye 16004aa61755SAndy Ye SharedMem0.size = *uuid_size; 16014aa61755SAndy Ye SharedMem0.flags = 0; 16024aa61755SAndy Ye 16034aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 16044aa61755SAndy Ye 16054aa61755SAndy Ye TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 16064aa61755SAndy Ye TeecOperation.params[0].tmpref.size = SharedMem0.size; 16074aa61755SAndy Ye 16084aa61755SAndy Ye TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, 16094aa61755SAndy Ye TEEC_NONE, 16104aa61755SAndy Ye TEEC_NONE, 16114aa61755SAndy Ye TEEC_NONE); 16124aa61755SAndy Ye 16134aa61755SAndy Ye TeecResult = TEEC_InvokeCommand(&TeecSession, 16144aa61755SAndy Ye 144, 16154aa61755SAndy Ye &TeecOperation, 16164aa61755SAndy Ye &ErrorOrigin); 16174aa61755SAndy Ye 16184aa61755SAndy Ye *uuid_size = TeecOperation.params[0].tmpref.size; 16194aa61755SAndy Ye memcpy(uuid, SharedMem0.buffer, SharedMem0.size); 16204aa61755SAndy Ye 16214aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem0); 16224aa61755SAndy Ye 16234aa61755SAndy Ye TEEC_CloseSession(&TeecSession); 16244aa61755SAndy Ye TeecResult = TEEC_FinalizeContext(&TeecContext); 16254aa61755SAndy Ye 16264aa61755SAndy Ye return TeecResult; 16274aa61755SAndy Ye } 16284aa61755SAndy Ye 16294aa61755SAndy Ye uint32_t trusty_attest_get_ca(uint8_t *operation_start, 16304aa61755SAndy Ye uint32_t *operation_size, 16314aa61755SAndy Ye uint8_t *out, 16324aa61755SAndy Ye uint32_t *out_len) 16334aa61755SAndy Ye { 16344aa61755SAndy Ye TEEC_Result TeecResult; 16354aa61755SAndy Ye TEEC_Context TeecContext; 16364aa61755SAndy Ye TEEC_Session TeecSession; 16374aa61755SAndy Ye uint32_t ErrorOrigin; 16384aa61755SAndy Ye 16394aa61755SAndy Ye OpteeClientApiLibInitialize(); 16404aa61755SAndy Ye 16414aa61755SAndy Ye TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 16424aa61755SAndy Ye { 0xa8, 0x69, 0x9c, 0xe6, 16434aa61755SAndy Ye 0x88, 0x6c, 0x5d, 0x5d 16444aa61755SAndy Ye } 16454aa61755SAndy Ye }; 16464aa61755SAndy Ye 16474aa61755SAndy Ye TEEC_UUID *TeecUuid = &tempuuid; 16484aa61755SAndy Ye TEEC_Operation TeecOperation = {0}; 16493251364cSHisping Lin struct blk_desc *dev_desc; 16503251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 16516651d4c0SJason Zhu if (!dev_desc) { 16526651d4c0SJason Zhu printf("%s: dev_desc is NULL!\n", __func__); 16536651d4c0SJason Zhu return -TEEC_ERROR_GENERIC; 16546651d4c0SJason Zhu } 16554aa61755SAndy Ye 16564aa61755SAndy Ye OpteeClientApiLibInitialize(); 16574aa61755SAndy Ye 16584aa61755SAndy Ye TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 16594aa61755SAndy Ye 16603251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 16613251364cSHisping Lin TEEC_NONE, 16623251364cSHisping Lin TEEC_NONE, 16633251364cSHisping Lin TEEC_NONE); 16643251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 16653251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 16663251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 16673251364cSHisping Lin TeecOperation.params[0].value.a = 0; 16683251364cSHisping Lin #endif 16693251364cSHisping Lin 16704aa61755SAndy Ye TeecResult = TEEC_OpenSession(&TeecContext, 16714aa61755SAndy Ye &TeecSession, 16724aa61755SAndy Ye TeecUuid, 16734aa61755SAndy Ye TEEC_LOGIN_PUBLIC, 16744aa61755SAndy Ye NULL, 16753251364cSHisping Lin &TeecOperation, 16764aa61755SAndy Ye &ErrorOrigin); 16774aa61755SAndy Ye 16784aa61755SAndy Ye TEEC_SharedMemory SharedMem0 = {0}; 16794aa61755SAndy Ye 16804aa61755SAndy Ye SharedMem0.size = *operation_size; 16814aa61755SAndy Ye SharedMem0.flags = 0; 16824aa61755SAndy Ye 16834aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 16844aa61755SAndy Ye 16854aa61755SAndy Ye memcpy(SharedMem0.buffer, operation_start, SharedMem0.size); 16864aa61755SAndy Ye 16874aa61755SAndy Ye TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 16884aa61755SAndy Ye TeecOperation.params[0].tmpref.size = SharedMem0.size; 16894aa61755SAndy Ye 16904aa61755SAndy Ye TEEC_SharedMemory SharedMem1 = {0}; 16914aa61755SAndy Ye 16924aa61755SAndy Ye SharedMem1.size = *out_len; 16934aa61755SAndy Ye SharedMem1.flags = 0; 16944aa61755SAndy Ye 16954aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 16964aa61755SAndy Ye 16974aa61755SAndy Ye TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 16984aa61755SAndy Ye TeecOperation.params[1].tmpref.size = SharedMem1.size; 16994aa61755SAndy Ye 17004aa61755SAndy Ye TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, 17014aa61755SAndy Ye TEEC_MEMREF_TEMP_INOUT, 17024aa61755SAndy Ye TEEC_NONE, 17034aa61755SAndy Ye TEEC_NONE); 17044aa61755SAndy Ye 17054aa61755SAndy Ye TeecResult = TEEC_InvokeCommand(&TeecSession, 17064aa61755SAndy Ye 145, 17074aa61755SAndy Ye &TeecOperation, 17084aa61755SAndy Ye &ErrorOrigin); 17094aa61755SAndy Ye 17104aa61755SAndy Ye *out_len = TeecOperation.params[1].tmpref.size; 17114aa61755SAndy Ye memcpy(out, SharedMem1.buffer, SharedMem1.size); 17124aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem0); 17134aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem1); 17144aa61755SAndy Ye 17154aa61755SAndy Ye return TeecResult; 17164aa61755SAndy Ye } 17174aa61755SAndy Ye 17184aa61755SAndy Ye uint32_t trusty_attest_set_ca(uint8_t *ca_response, uint32_t *ca_response_size) 17194aa61755SAndy Ye { 17204aa61755SAndy Ye TEEC_Result TeecResult; 17214aa61755SAndy Ye TEEC_Context TeecContext; 17224aa61755SAndy Ye TEEC_Session TeecSession; 17234aa61755SAndy Ye uint32_t ErrorOrigin; 17244aa61755SAndy Ye TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 17254aa61755SAndy Ye { 0xa8, 0x69, 0x9c, 0xe6, 17264aa61755SAndy Ye 0x88, 0x6c, 0x5d, 0x5d 17274aa61755SAndy Ye } 17284aa61755SAndy Ye }; 17294aa61755SAndy Ye TEEC_UUID *TeecUuid = &tempuuid; 17304aa61755SAndy Ye TEEC_Operation TeecOperation = {0}; 17313251364cSHisping Lin struct blk_desc *dev_desc; 17323251364cSHisping Lin dev_desc = rockchip_get_bootdev(); 17336651d4c0SJason Zhu if (!dev_desc) { 17346651d4c0SJason Zhu printf("%s: dev_desc is NULL!\n", __func__); 17356651d4c0SJason Zhu return -TEEC_ERROR_GENERIC; 17366651d4c0SJason Zhu } 17374aa61755SAndy Ye 17384aa61755SAndy Ye TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 17394aa61755SAndy Ye 17403251364cSHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, 17413251364cSHisping Lin TEEC_NONE, 17423251364cSHisping Lin TEEC_NONE, 17433251364cSHisping Lin TEEC_NONE); 17443251364cSHisping Lin /*0 nand or emmc "security" partition , 1 rpmb*/ 17453251364cSHisping Lin TeecOperation.params[0].value.a = (dev_desc->if_type == IF_TYPE_MMC) ? 1 : 0; 17463251364cSHisping Lin #ifdef CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION 17473251364cSHisping Lin TeecOperation.params[0].value.a = 0; 17483251364cSHisping Lin #endif 17493251364cSHisping Lin 17504aa61755SAndy Ye TeecResult = TEEC_OpenSession(&TeecContext, 17514aa61755SAndy Ye &TeecSession, 17524aa61755SAndy Ye TeecUuid, 17534aa61755SAndy Ye TEEC_LOGIN_PUBLIC, 17544aa61755SAndy Ye NULL, 17553251364cSHisping Lin &TeecOperation, 17564aa61755SAndy Ye &ErrorOrigin); 17574aa61755SAndy Ye 17584aa61755SAndy Ye TEEC_SharedMemory SharedMem0 = {0}; 17594aa61755SAndy Ye 17604aa61755SAndy Ye SharedMem0.size = *ca_response_size; 17614aa61755SAndy Ye SharedMem0.flags = 0; 17624aa61755SAndy Ye 17634aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 17644aa61755SAndy Ye 17654aa61755SAndy Ye memcpy(SharedMem0.buffer, ca_response, SharedMem0.size); 17664aa61755SAndy Ye 17674aa61755SAndy Ye TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 17684aa61755SAndy Ye TeecOperation.params[0].tmpref.size = SharedMem0.size; 17694aa61755SAndy Ye 17704aa61755SAndy Ye TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, 17714aa61755SAndy Ye TEEC_NONE, 17724aa61755SAndy Ye TEEC_NONE, 17734aa61755SAndy Ye TEEC_NONE); 17744aa61755SAndy Ye 17754aa61755SAndy Ye TeecResult = TEEC_InvokeCommand(&TeecSession, 17764aa61755SAndy Ye 146, 17774aa61755SAndy Ye &TeecOperation, 17784aa61755SAndy Ye &ErrorOrigin); 17794aa61755SAndy Ye 17804aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem0); 17814aa61755SAndy Ye 17824aa61755SAndy Ye TEEC_CloseSession(&TeecSession); 17834aa61755SAndy Ye TeecResult = TEEC_FinalizeContext(&TeecContext); 17844aa61755SAndy Ye 17854aa61755SAndy Ye return TeecResult; 17864aa61755SAndy Ye } 1787