Loading drivers/misc/qseecom.c +18 −4 Original line number Diff line number Diff line Loading @@ -621,6 +621,13 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id, ret = scm_call2(smc_id, &desc); break; } case QSEOS_RPMB_CHECK_PROV_STATUS_COMMAND: { smc_id = TZ_OS_RPMB_CHECK_PROV_STATUS_ID; desc.arginfo = TZ_OS_RPMB_CHECK_PROV_STATUS_ID_PARAM_ID; __qseecom_reentrancy_check_if_no_app_blocked(smc_id); ret = scm_call2(smc_id, &desc); break; } case QSEOS_GENERATE_KEY: { u32 tzbuflen = PAGE_ALIGN(sizeof (struct qseecom_key_generate_ireq) - Loading Loading @@ -2335,6 +2342,7 @@ static int qseecom_send_service_cmd(struct qseecom_dev_handle *data, switch (req.cmd_id) { case QSEOS_RPMB_PROVISION_KEY_COMMAND: case QSEOS_RPMB_ERASE_COMMAND: case QSEOS_RPMB_CHECK_PROV_STATUS_COMMAND: send_req_ptr = &send_svc_ireq; req_buf_size = sizeof(send_svc_ireq); if (__qseecom_process_rpmb_svc_cmd(data, &req, Loading Loading @@ -2399,15 +2407,21 @@ static int qseecom_send_service_cmd(struct qseecom_dev_handle *data, case QSEOS_RESULT_SUCCESS: break; case QSEOS_RESULT_INCOMPLETE: pr_err("qseos_result_incomplete\n"); pr_debug("qseos_result_incomplete\n"); ret = __qseecom_process_incomplete_cmd(data, &resp); if (ret) { pr_err("process_incomplete_cmd fail: err: %d\n", ret); pr_err("process_incomplete_cmd fail with result: %d\n", resp.result); } if (req.cmd_id == QSEOS_RPMB_CHECK_PROV_STATUS_COMMAND) { pr_warn("RPMB key status is 0x%x\n", resp.result); *(uint32_t *)req.resp_buf = resp.result; ret = 0; } break; case QSEOS_RESULT_FAILURE: pr_err("process_incomplete_cmd failed err: %d\n", ret); pr_err("scm call failed with resp.result: %d\n", resp.result); ret = -EINVAL; break; default: pr_err("Response result %d not supported\n", Loading include/soc/qcom/qseecomi.h +7 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,7 @@ enum qseecom_qceos_cmd_id { QSEOS_TEE_CLOSE_SESSION, QSEOS_TEE_REQUEST_CANCELLATION, QSEOS_CONTINUE_BLOCKED_REQ_COMMAND, QSEOS_RPMB_CHECK_PROV_STATUS_COMMAND = 0x1B, QSEOS_FSM_LTEOTA_REQ_CMD = 0x109, QSEOS_FSM_LTEOTA_REQ_RSP_CMD = 0x110, QSEOS_FSM_IKE_REQ_CMD = 0x203, Loading Loading @@ -554,6 +555,12 @@ __packed struct qseecom_continue_blocked_request_ireq { #define TZ_OS_RPMB_ERASE_ID_PARAM_ID \ TZ_SYSCALL_CREATE_PARAM_ID_0 #define TZ_OS_RPMB_CHECK_PROV_STATUS_ID \ TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_QSEE_OS, TZ_SVC_RPMB, 0x03) #define TZ_OS_RPMB_CHECK_PROV_STATUS_ID_PARAM_ID \ TZ_SYSCALL_CREATE_PARAM_ID_0 #define TZ_OS_KS_GEN_KEY_ID \ TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_QSEE_OS, TZ_SVC_KEYSTORE, 0x01) Loading Loading
drivers/misc/qseecom.c +18 −4 Original line number Diff line number Diff line Loading @@ -621,6 +621,13 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id, ret = scm_call2(smc_id, &desc); break; } case QSEOS_RPMB_CHECK_PROV_STATUS_COMMAND: { smc_id = TZ_OS_RPMB_CHECK_PROV_STATUS_ID; desc.arginfo = TZ_OS_RPMB_CHECK_PROV_STATUS_ID_PARAM_ID; __qseecom_reentrancy_check_if_no_app_blocked(smc_id); ret = scm_call2(smc_id, &desc); break; } case QSEOS_GENERATE_KEY: { u32 tzbuflen = PAGE_ALIGN(sizeof (struct qseecom_key_generate_ireq) - Loading Loading @@ -2335,6 +2342,7 @@ static int qseecom_send_service_cmd(struct qseecom_dev_handle *data, switch (req.cmd_id) { case QSEOS_RPMB_PROVISION_KEY_COMMAND: case QSEOS_RPMB_ERASE_COMMAND: case QSEOS_RPMB_CHECK_PROV_STATUS_COMMAND: send_req_ptr = &send_svc_ireq; req_buf_size = sizeof(send_svc_ireq); if (__qseecom_process_rpmb_svc_cmd(data, &req, Loading Loading @@ -2399,15 +2407,21 @@ static int qseecom_send_service_cmd(struct qseecom_dev_handle *data, case QSEOS_RESULT_SUCCESS: break; case QSEOS_RESULT_INCOMPLETE: pr_err("qseos_result_incomplete\n"); pr_debug("qseos_result_incomplete\n"); ret = __qseecom_process_incomplete_cmd(data, &resp); if (ret) { pr_err("process_incomplete_cmd fail: err: %d\n", ret); pr_err("process_incomplete_cmd fail with result: %d\n", resp.result); } if (req.cmd_id == QSEOS_RPMB_CHECK_PROV_STATUS_COMMAND) { pr_warn("RPMB key status is 0x%x\n", resp.result); *(uint32_t *)req.resp_buf = resp.result; ret = 0; } break; case QSEOS_RESULT_FAILURE: pr_err("process_incomplete_cmd failed err: %d\n", ret); pr_err("scm call failed with resp.result: %d\n", resp.result); ret = -EINVAL; break; default: pr_err("Response result %d not supported\n", Loading
include/soc/qcom/qseecomi.h +7 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,7 @@ enum qseecom_qceos_cmd_id { QSEOS_TEE_CLOSE_SESSION, QSEOS_TEE_REQUEST_CANCELLATION, QSEOS_CONTINUE_BLOCKED_REQ_COMMAND, QSEOS_RPMB_CHECK_PROV_STATUS_COMMAND = 0x1B, QSEOS_FSM_LTEOTA_REQ_CMD = 0x109, QSEOS_FSM_LTEOTA_REQ_RSP_CMD = 0x110, QSEOS_FSM_IKE_REQ_CMD = 0x203, Loading Loading @@ -554,6 +555,12 @@ __packed struct qseecom_continue_blocked_request_ireq { #define TZ_OS_RPMB_ERASE_ID_PARAM_ID \ TZ_SYSCALL_CREATE_PARAM_ID_0 #define TZ_OS_RPMB_CHECK_PROV_STATUS_ID \ TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_QSEE_OS, TZ_SVC_RPMB, 0x03) #define TZ_OS_RPMB_CHECK_PROV_STATUS_ID_PARAM_ID \ TZ_SYSCALL_CREATE_PARAM_ID_0 #define TZ_OS_KS_GEN_KEY_ID \ TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_QSEE_OS, TZ_SVC_KEYSTORE, 0x01) Loading