lib: optee_client: add support for R&W efuse

Change-Id: I8b06523c5379f253994c3ad89aa3b354d79b4c45
Signed-off-by: Hisping Lin <hisping.lin@rock-chips.com>
This commit is contained in:
Hisping Lin 2017-10-30 17:13:46 +08:00 committed by Kever Yang
parent ae8ec5e139
commit 6ef445a4c2
2 changed files with 109 additions and 0 deletions

View File

@ -19,5 +19,7 @@ uint32_t trusty_write_flash_lock_state(uint8_t flash_lock_state);
uint32_t write_to_keymaster
(uint8_t *filename, uint32_t filename_size,
uint8_t *data, uint32_t data_size);
uint32_t trusty_read_attribute_hash(uint32_t *buf, uint32_t length);
uint32_t trusty_write_attribute_hash(uint32_t *buf, uint32_t length);
#endif

View File

@ -727,3 +727,110 @@ uint32_t write_to_keymaster(uint8_t *filename,
return TeecResult;
}
uint32_t trusty_read_attribute_hash(uint32_t *buf, uint32_t length)
{
TEEC_Result TeecResult;
TEEC_Context TeecContext;
TEEC_Session TeecSession;
uint32_t ErrorOrigin;
TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \
{ 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } };
TEEC_UUID *TeecUuid = &tempuuid;
TEEC_Operation TeecOperation = {0};
OpteeClientApiLibInitialize();
TeecResult = TEEC_InitializeContext(NULL, &TeecContext);
TeecResult = TEEC_OpenSession(&TeecContext,
&TeecSession,
TeecUuid,
TEEC_LOGIN_PUBLIC,
NULL,
NULL,
&ErrorOrigin);
TEEC_SharedMemory SharedMem0 = {0};
SharedMem0.size = length * sizeof(uint32_t);
SharedMem0.flags = 0;
TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0);
TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer;
TeecOperation.params[0].tmpref.size = SharedMem0.size;
TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT,
TEEC_NONE,
TEEC_NONE,
TEEC_NONE);
TeecResult = TEEC_InvokeCommand(&TeecSession,
0,
&TeecOperation,
&ErrorOrigin);
if (TeecResult == TEEC_SUCCESS)
memcpy(buf, SharedMem0.buffer, SharedMem0.size);
TEEC_ReleaseSharedMemory(&SharedMem0);
TEEC_CloseSession(&TeecSession);
TEEC_FinalizeContext(&TeecContext);
return TeecResult;
}
uint32_t trusty_write_attribute_hash(uint32_t *buf, uint32_t length)
{
TEEC_Result TeecResult;
TEEC_Context TeecContext;
TEEC_Session TeecSession;
uint32_t ErrorOrigin;
TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \
{ 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } };
TEEC_UUID *TeecUuid = &tempuuid;
TEEC_Operation TeecOperation = {0};
OpteeClientApiLibInitialize();
TeecResult = TEEC_InitializeContext(NULL, &TeecContext);
TeecResult = TEEC_OpenSession(&TeecContext,
&TeecSession,
TeecUuid,
TEEC_LOGIN_PUBLIC,
NULL,
NULL,
&ErrorOrigin);
TEEC_SharedMemory SharedMem0 = {0};
SharedMem0.size = length * sizeof(uint32_t);
SharedMem0.flags = 0;
TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0);
memcpy(SharedMem0.buffer, buf, SharedMem0.size);
TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer;
TeecOperation.params[0].tmpref.size = SharedMem0.size;
TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT,
TEEC_NONE,
TEEC_NONE,
TEEC_NONE);
TeecResult = TEEC_InvokeCommand(&TeecSession,
1,
&TeecOperation,
&ErrorOrigin);
TEEC_ReleaseSharedMemory(&SharedMem0);
TEEC_CloseSession(&TeecSession);
TEEC_FinalizeContext(&TeecContext);
return TeecResult;
}