1 // SPDX-License-Identifier: BSD-2-Clause 2 /* 3 * Copyright 2021 NXP 4 */ 5 #include <drivers/imx_ocotp.h> 6 #include <kernel/pseudo_ta.h> 7 #include <kernel/tee_common_otp.h> 8 #include <pta_imx_ocotp.h> 9 10 #define OCOTP_PTA_NAME "ocotp.pta" 11 12 static TEE_Result chip_uid(uint32_t param_types, 13 TEE_Param params[TEE_NUM_PARAMS]) 14 { 15 uint8_t val[IMX_UID_SIZE] = { }; 16 uint32_t exp_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_OUTPUT, 17 TEE_PARAM_TYPE_NONE, 18 TEE_PARAM_TYPE_NONE, 19 TEE_PARAM_TYPE_NONE); 20 21 if (param_types != exp_param_types) 22 return TEE_ERROR_BAD_PARAMETERS; 23 24 /* On i.MX platforms, the chip UID is 64 bits long */ 25 if (params[0].memref.size != sizeof(uint64_t)) 26 return TEE_ERROR_BAD_PARAMETERS; 27 28 if (tee_otp_get_die_id(val, IMX_UID_SIZE)) 29 return TEE_ERROR_GENERIC; 30 31 memcpy(params[0].memref.buffer, val, IMX_UID_SIZE); 32 33 return TEE_SUCCESS; 34 } 35 36 static TEE_Result read_fuse(uint32_t param_types, 37 TEE_Param params[TEE_NUM_PARAMS]) 38 { 39 TEE_Result ret = TEE_ERROR_GENERIC; 40 uint32_t val = 0; 41 uint32_t exp_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT, 42 TEE_PARAM_TYPE_VALUE_OUTPUT, 43 TEE_PARAM_TYPE_NONE, 44 TEE_PARAM_TYPE_NONE); 45 46 if (param_types != exp_param_types) 47 return TEE_ERROR_BAD_PARAMETERS; 48 49 params[1].value.a = 0; 50 params[1].value.b = 0; 51 52 ret = imx_ocotp_read(params[0].value.a, params[0].value.b, &val); 53 if (!ret) 54 params[1].value.a = val; 55 56 return ret; 57 } 58 59 static TEE_Result invokeCommandEntryPoint(void *sess_ctx __unused, 60 uint32_t cmd_id, uint32_t param_types, 61 TEE_Param params[TEE_NUM_PARAMS]) 62 { 63 switch (cmd_id) { 64 case PTA_OCOTP_CMD_CHIP_UID: 65 return chip_uid(param_types, params); 66 case PTA_OCOTP_CMD_READ_FUSE: 67 return read_fuse(param_types, params); 68 default: 69 return TEE_ERROR_BAD_PARAMETERS; 70 } 71 } 72 73 pseudo_ta_register(.uuid = PTA_OCOTP_UUID, .name = OCOTP_PTA_NAME, 74 .flags = PTA_DEFAULT_FLAGS, 75 .invoke_command_entry_point = invokeCommandEntryPoint); 76