Loading drivers/misc/qseecom.c +25 −6 Original line number Diff line number Diff line Loading @@ -2,7 +2,7 @@ /* * QTI Secure Execution Environment Communicator (QSEECOM) driver * * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved. * Copyright (c) 2012-2021, The Linux Foundation. All rights reserved. */ #define pr_fmt(fmt) "QSEECOM: %s: " fmt, __func__ Loading Loading @@ -877,6 +877,23 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id, ret = __qseecom_scm_call2_locked(smc_id, &desc); break; } case QSEOS_DIAG_FUSE_REQ_CMD: case QSEOS_DIAG_FUSE_REQ_RSP_CMD: { struct qseecom_client_send_fsm_diag_req *req; smc_id = TZ_SECBOOT_GET_FUSE_INFO; desc.arginfo = TZ_SECBOOT_GET_FUSE_INFO_PARAM_ID; req = (struct qseecom_client_send_fsm_diag_req *) req_buf; desc.args[0] = req->req_ptr; desc.args[1] = req->req_len; desc.args[2] = req->rsp_ptr; desc.args[3] = req->rsp_len; __qseecom_reentrancy_check_if_no_app_blocked(smc_id); ret = __qseecom_scm_call2_locked(smc_id, &desc); break; } case QSEOS_GENERATE_KEY: { u32 tzbuflen = PAGE_ALIGN(sizeof (struct qseecom_key_generate_ireq) - Loading Loading @@ -3309,7 +3326,7 @@ static int __qseecom_process_rpmb_svc_cmd(struct qseecom_dev_handle *data_ptr, static int __qseecom_process_fsm_key_svc_cmd( struct qseecom_dev_handle *data_ptr, struct qseecom_send_svc_cmd_req *req_ptr, struct qseecom_client_send_fsm_key_req *send_svc_ireq_ptr) struct qseecom_client_send_fsm_diag_req *send_svc_ireq_ptr) { int ret = 0; uint32_t reqd_len_sb_in = 0; Loading @@ -3327,7 +3344,6 @@ static int __qseecom_process_fsm_key_svc_cmd( reqd_len_sb_in, data_ptr->client.sb_length); return -ENOMEM; } send_svc_ireq_ptr->qsee_cmd_id = req_ptr->cmd_id; send_svc_ireq_ptr->req_len = req_ptr->cmd_req_len; send_svc_ireq_ptr->rsp_ptr = (uint32_t)(__qseecom_uvirt_to_kphys( Loading Loading @@ -3431,7 +3447,7 @@ static int qseecom_send_service_cmd(struct qseecom_dev_handle *data, { int ret = 0; struct qseecom_client_send_service_ireq send_svc_ireq; struct qseecom_client_send_fsm_key_req send_fsm_key_svc_ireq; struct qseecom_client_send_fsm_diag_req send_fsm_diag_svc_ireq; struct qseecom_command_scm_resp resp; struct qseecom_send_svc_cmd_req req; void *send_req_ptr; Loading Loading @@ -3469,8 +3485,11 @@ static int qseecom_send_service_cmd(struct qseecom_dev_handle *data, case QSEOS_FSM_OEM_FUSE_READ_ROW: case QSEOS_FSM_ENCFS_REQ_CMD: case QSEOS_FSM_ENCFS_REQ_RSP_CMD: send_req_ptr = &send_fsm_key_svc_ireq; req_buf_size = sizeof(send_fsm_key_svc_ireq); case QSEOS_DIAG_FUSE_REQ_CMD: case QSEOS_DIAG_FUSE_REQ_RSP_CMD: send_req_ptr = &send_fsm_diag_svc_ireq; req_buf_size = sizeof(send_fsm_diag_svc_ireq); if (__qseecom_process_fsm_key_svc_cmd(data, &req, send_req_ptr)) return -EINVAL; Loading include/soc/qcom/qseecomi.h +15 −3 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (c) 2013-2020, The Linux Foundation. All rights reserved. * Copyright (c) 2013-2021, The Linux Foundation. All rights reserved. */ #ifndef __QSEECOMI_H_ Loading Loading @@ -71,7 +71,8 @@ enum qseecom_qceos_cmd_id { QSEOS_FSM_OEM_FUSE_READ_ROW = 0x302, QSEOS_FSM_ENCFS_REQ_CMD = 0x403, QSEOS_FSM_ENCFS_REQ_RSP_CMD = 0x404, QSEOS_DIAG_FUSE_REQ_CMD = 0x501, QSEOS_DIAG_FUSE_REQ_RSP_CMD = 0x502, QSEOS_CMD_MAX = 0xEFFFFFFF }; Loading Loading @@ -321,7 +322,7 @@ struct qseecom_qteec_64bit_ireq { uint32_t sglistinfo_len; } __attribute__((__packed__)); struct qseecom_client_send_fsm_key_req { struct qseecom_client_send_fsm_diag_req { uint32_t qsee_cmd_id; uint32_t req_ptr; uint32_t req_len; Loading @@ -341,6 +342,7 @@ struct qseecom_continue_blocked_request_ireq { #define TZ_SVC_EXTERNAL 3 /* External image loading */ #define TZ_SVC_RPMB 4 /* RPMB */ #define TZ_SVC_KEYSTORE 5 /* Keystore management */ #define TZ_SVC_FUSE 8 /* Fuse services */ #define TZ_SVC_ES 16 /* Enterprise Security */ #define TZ_SVC_MDTP 18 /* Mobile Device Theft */ Loading Loading @@ -503,6 +505,16 @@ struct qseecom_continue_blocked_request_ireq { #define TZ_OS_UNLOAD_SERVICES_IMAGE_ID_PARAM_ID \ TZ_SYSCALL_CREATE_PARAM_ID_0 #define TZ_SECBOOT_GET_FUSE_INFO \ TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_FUSE, 0x09) #define TZ_SECBOOT_GET_FUSE_INFO_PARAM_ID \ TZ_SYSCALL_CREATE_PARAM_ID_4(\ TZ_SYSCALL_PARAM_TYPE_BUF_RO, \ TZ_SYSCALL_PARAM_TYPE_VAL, \ TZ_SYSCALL_PARAM_TYPE_BUF_RW, \ TZ_SYSCALL_PARAM_TYPE_VAL) #define TZ_OS_REGISTER_LISTENER_ID \ TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_QSEE_OS, TZ_SVC_LISTENER, 0x01) Loading Loading
drivers/misc/qseecom.c +25 −6 Original line number Diff line number Diff line Loading @@ -2,7 +2,7 @@ /* * QTI Secure Execution Environment Communicator (QSEECOM) driver * * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved. * Copyright (c) 2012-2021, The Linux Foundation. All rights reserved. */ #define pr_fmt(fmt) "QSEECOM: %s: " fmt, __func__ Loading Loading @@ -877,6 +877,23 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id, ret = __qseecom_scm_call2_locked(smc_id, &desc); break; } case QSEOS_DIAG_FUSE_REQ_CMD: case QSEOS_DIAG_FUSE_REQ_RSP_CMD: { struct qseecom_client_send_fsm_diag_req *req; smc_id = TZ_SECBOOT_GET_FUSE_INFO; desc.arginfo = TZ_SECBOOT_GET_FUSE_INFO_PARAM_ID; req = (struct qseecom_client_send_fsm_diag_req *) req_buf; desc.args[0] = req->req_ptr; desc.args[1] = req->req_len; desc.args[2] = req->rsp_ptr; desc.args[3] = req->rsp_len; __qseecom_reentrancy_check_if_no_app_blocked(smc_id); ret = __qseecom_scm_call2_locked(smc_id, &desc); break; } case QSEOS_GENERATE_KEY: { u32 tzbuflen = PAGE_ALIGN(sizeof (struct qseecom_key_generate_ireq) - Loading Loading @@ -3309,7 +3326,7 @@ static int __qseecom_process_rpmb_svc_cmd(struct qseecom_dev_handle *data_ptr, static int __qseecom_process_fsm_key_svc_cmd( struct qseecom_dev_handle *data_ptr, struct qseecom_send_svc_cmd_req *req_ptr, struct qseecom_client_send_fsm_key_req *send_svc_ireq_ptr) struct qseecom_client_send_fsm_diag_req *send_svc_ireq_ptr) { int ret = 0; uint32_t reqd_len_sb_in = 0; Loading @@ -3327,7 +3344,6 @@ static int __qseecom_process_fsm_key_svc_cmd( reqd_len_sb_in, data_ptr->client.sb_length); return -ENOMEM; } send_svc_ireq_ptr->qsee_cmd_id = req_ptr->cmd_id; send_svc_ireq_ptr->req_len = req_ptr->cmd_req_len; send_svc_ireq_ptr->rsp_ptr = (uint32_t)(__qseecom_uvirt_to_kphys( Loading Loading @@ -3431,7 +3447,7 @@ static int qseecom_send_service_cmd(struct qseecom_dev_handle *data, { int ret = 0; struct qseecom_client_send_service_ireq send_svc_ireq; struct qseecom_client_send_fsm_key_req send_fsm_key_svc_ireq; struct qseecom_client_send_fsm_diag_req send_fsm_diag_svc_ireq; struct qseecom_command_scm_resp resp; struct qseecom_send_svc_cmd_req req; void *send_req_ptr; Loading Loading @@ -3469,8 +3485,11 @@ static int qseecom_send_service_cmd(struct qseecom_dev_handle *data, case QSEOS_FSM_OEM_FUSE_READ_ROW: case QSEOS_FSM_ENCFS_REQ_CMD: case QSEOS_FSM_ENCFS_REQ_RSP_CMD: send_req_ptr = &send_fsm_key_svc_ireq; req_buf_size = sizeof(send_fsm_key_svc_ireq); case QSEOS_DIAG_FUSE_REQ_CMD: case QSEOS_DIAG_FUSE_REQ_RSP_CMD: send_req_ptr = &send_fsm_diag_svc_ireq; req_buf_size = sizeof(send_fsm_diag_svc_ireq); if (__qseecom_process_fsm_key_svc_cmd(data, &req, send_req_ptr)) return -EINVAL; Loading
include/soc/qcom/qseecomi.h +15 −3 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (c) 2013-2020, The Linux Foundation. All rights reserved. * Copyright (c) 2013-2021, The Linux Foundation. All rights reserved. */ #ifndef __QSEECOMI_H_ Loading Loading @@ -71,7 +71,8 @@ enum qseecom_qceos_cmd_id { QSEOS_FSM_OEM_FUSE_READ_ROW = 0x302, QSEOS_FSM_ENCFS_REQ_CMD = 0x403, QSEOS_FSM_ENCFS_REQ_RSP_CMD = 0x404, QSEOS_DIAG_FUSE_REQ_CMD = 0x501, QSEOS_DIAG_FUSE_REQ_RSP_CMD = 0x502, QSEOS_CMD_MAX = 0xEFFFFFFF }; Loading Loading @@ -321,7 +322,7 @@ struct qseecom_qteec_64bit_ireq { uint32_t sglistinfo_len; } __attribute__((__packed__)); struct qseecom_client_send_fsm_key_req { struct qseecom_client_send_fsm_diag_req { uint32_t qsee_cmd_id; uint32_t req_ptr; uint32_t req_len; Loading @@ -341,6 +342,7 @@ struct qseecom_continue_blocked_request_ireq { #define TZ_SVC_EXTERNAL 3 /* External image loading */ #define TZ_SVC_RPMB 4 /* RPMB */ #define TZ_SVC_KEYSTORE 5 /* Keystore management */ #define TZ_SVC_FUSE 8 /* Fuse services */ #define TZ_SVC_ES 16 /* Enterprise Security */ #define TZ_SVC_MDTP 18 /* Mobile Device Theft */ Loading Loading @@ -503,6 +505,16 @@ struct qseecom_continue_blocked_request_ireq { #define TZ_OS_UNLOAD_SERVICES_IMAGE_ID_PARAM_ID \ TZ_SYSCALL_CREATE_PARAM_ID_0 #define TZ_SECBOOT_GET_FUSE_INFO \ TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_FUSE, 0x09) #define TZ_SECBOOT_GET_FUSE_INFO_PARAM_ID \ TZ_SYSCALL_CREATE_PARAM_ID_4(\ TZ_SYSCALL_PARAM_TYPE_BUF_RO, \ TZ_SYSCALL_PARAM_TYPE_VAL, \ TZ_SYSCALL_PARAM_TYPE_BUF_RW, \ TZ_SYSCALL_PARAM_TYPE_VAL) #define TZ_OS_REGISTER_LISTENER_ID \ TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_QSEE_OS, TZ_SVC_LISTENER, 0x01) Loading