qseecom : Add support for fuse syscall

Add changes to support syscall to return fuse
configuration on the device. Also rename
function to improve redability.

Change-Id: Idec01fec75a5dd6a86ad6dc319d18129c4ec2740
Signed-off-by: Monika Singh <monising@codeaurora.org>
This commit is contained in:
Monika Singh 2021-01-11 17:24:17 +05:30 committed by Monika Sing
parent e168b52f6b
commit d9858f6b11
2 changed files with 40 additions and 9 deletions

View File

@ -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__
@ -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) -
@ -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;
@ -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(
@ -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;
@ -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;

View File

@ -1,6 +1,6 @@
/* 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_
@ -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
};
@ -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;
@ -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 */
@ -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)