Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c54d892e authored by qctecmdr Service's avatar qctecmdr Service Committed by Gerrit - the friendly Code Review server
Browse files

Merge "qseecom: replace scm_call2 with scm_call2_noretry"

parents f6a2a9bb e6187664
Loading
Loading
Loading
Loading
+62 −33
Original line number Original line Diff line number Diff line
@@ -428,6 +428,29 @@ static int get_qseecom_keymaster_status(char *str)
}
}
__setup("androidboot.keymaster=", get_qseecom_keymaster_status);
__setup("androidboot.keymaster=", get_qseecom_keymaster_status);



#define QSEECOM_SCM_EBUSY_WAIT_MS 30
#define QSEECOM_SCM_EBUSY_MAX_RETRY 67

static int __qseecom_scm_call2_locked(uint32_t smc_id, struct scm_desc *desc)
{
	int ret = 0;
	int retry_count = 0;

	do {
		ret = scm_call2_noretry(smc_id, desc);
		if (ret == -EBUSY) {
			mutex_unlock(&app_access_lock);
			msleep(QSEECOM_SCM_EBUSY_WAIT_MS);
			mutex_lock(&app_access_lock);
		}
		if (retry_count == 33)
			pr_warn("secure world has been busy for 1 second!\n");
	} while (ret == -EBUSY &&
			(retry_count++ < QSEECOM_SCM_EBUSY_MAX_RETRY));
	return ret;
}

static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
			const void *req_buf, void *resp_buf)
			const void *req_buf, void *resp_buf)
{
{
@@ -455,7 +478,7 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
				svc_id, tz_cmd_id);
				svc_id, tz_cmd_id);
			return -EINVAL;
			return -EINVAL;
		}
		}
		ret = scm_call2(smc_id, &desc);
		ret = __qseecom_scm_call2_locked(smc_id, &desc);
		break;
		break;
	}
	}
	case SCM_SVC_ES: {
	case SCM_SVC_ES: {
@@ -478,7 +501,7 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
			desc.args[0] = p_hash_req->partition_id;
			desc.args[0] = p_hash_req->partition_id;
			desc.args[1] = virt_to_phys(tzbuf);
			desc.args[1] = virt_to_phys(tzbuf);
			desc.args[2] = SHA256_DIGEST_LENGTH;
			desc.args[2] = SHA256_DIGEST_LENGTH;
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			kzfree(tzbuf);
			kzfree(tzbuf);
			break;
			break;
		}
		}
@@ -513,7 +536,7 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
				desc.args[2] = req_64bit->phy_addr;
				desc.args[2] = req_64bit->phy_addr;
			}
			}
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			break;
			break;
		}
		}
		case QSEOS_APP_SHUTDOWN_COMMAND: {
		case QSEOS_APP_SHUTDOWN_COMMAND: {
@@ -523,7 +546,7 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
			smc_id = TZ_OS_APP_SHUTDOWN_ID;
			smc_id = TZ_OS_APP_SHUTDOWN_ID;
			desc.arginfo = TZ_OS_APP_SHUTDOWN_ID_PARAM_ID;
			desc.arginfo = TZ_OS_APP_SHUTDOWN_ID_PARAM_ID;
			desc.args[0] = req->app_id;
			desc.args[0] = req->app_id;
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			break;
			break;
		}
		}
		case QSEOS_APP_LOOKUP_COMMAND: {
		case QSEOS_APP_LOOKUP_COMMAND: {
@@ -542,7 +565,7 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
			desc.args[0] = virt_to_phys(tzbuf);
			desc.args[0] = virt_to_phys(tzbuf);
			desc.args[1] = strlen(req->app_name);
			desc.args[1] = strlen(req->app_name);
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			kzfree(tzbuf);
			kzfree(tzbuf);
			break;
			break;
		}
		}
@@ -566,7 +589,7 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
				desc.args[1] = req_64bit->size;
				desc.args[1] = req_64bit->size;
			}
			}
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			break;
			break;
		}
		}
		case QSEOS_LOAD_SERV_IMAGE_COMMAND: {
		case QSEOS_LOAD_SERV_IMAGE_COMMAND: {
@@ -590,14 +613,14 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
				desc.args[2] = req_64bit->phy_addr;
				desc.args[2] = req_64bit->phy_addr;
			}
			}
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			break;
			break;
		}
		}
		case QSEOS_UNLOAD_SERV_IMAGE_COMMAND: {
		case QSEOS_UNLOAD_SERV_IMAGE_COMMAND: {
			smc_id = TZ_OS_UNLOAD_SERVICES_IMAGE_ID;
			smc_id = TZ_OS_UNLOAD_SERVICES_IMAGE_ID;
			desc.arginfo = TZ_OS_UNLOAD_SERVICES_IMAGE_ID_PARAM_ID;
			desc.arginfo = TZ_OS_UNLOAD_SERVICES_IMAGE_ID_PARAM_ID;
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			break;
			break;
		}
		}
		case QSEOS_REGISTER_LISTENER: {
		case QSEOS_REGISTER_LISTENER: {
@@ -622,12 +645,12 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
			}
			}
			qseecom.smcinvoke_support = true;
			qseecom.smcinvoke_support = true;
			smc_id = TZ_OS_REGISTER_LISTENER_SMCINVOKE_ID;
			smc_id = TZ_OS_REGISTER_LISTENER_SMCINVOKE_ID;
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			if (ret == -EIO) {
			if (ret == -EIO) {
				/* smcinvoke is not supported */
				/* smcinvoke is not supported */
				qseecom.smcinvoke_support = false;
				qseecom.smcinvoke_support = false;
				smc_id = TZ_OS_REGISTER_LISTENER_ID;
				smc_id = TZ_OS_REGISTER_LISTENER_ID;
				ret = scm_call2(smc_id, &desc);
				ret = __qseecom_scm_call2_locked(smc_id, &desc);
			}
			}
			break;
			break;
		}
		}
@@ -639,7 +662,7 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
			smc_id = TZ_OS_DEREGISTER_LISTENER_ID;
			smc_id = TZ_OS_DEREGISTER_LISTENER_ID;
			desc.arginfo = TZ_OS_DEREGISTER_LISTENER_ID_PARAM_ID;
			desc.arginfo = TZ_OS_DEREGISTER_LISTENER_ID_PARAM_ID;
			desc.args[0] = req->listener_id;
			desc.args[0] = req->listener_id;
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			break;
			break;
		}
		}
		case QSEOS_LISTENER_DATA_RSP_COMMAND: {
		case QSEOS_LISTENER_DATA_RSP_COMMAND: {
@@ -652,7 +675,7 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
				TZ_OS_LISTENER_RESPONSE_HANDLER_ID_PARAM_ID;
				TZ_OS_LISTENER_RESPONSE_HANDLER_ID_PARAM_ID;
			desc.args[0] = req->listener_id;
			desc.args[0] = req->listener_id;
			desc.args[1] = req->status;
			desc.args[1] = req->status;
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			break;
			break;
		}
		}
		case QSEOS_LISTENER_DATA_RSP_COMMAND_WHITELIST: {
		case QSEOS_LISTENER_DATA_RSP_COMMAND_WHITELIST: {
@@ -680,7 +703,7 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
				desc.args[2] = req_64->sglistinfo_ptr;
				desc.args[2] = req_64->sglistinfo_ptr;
				desc.args[3] = req_64->sglistinfo_len;
				desc.args[3] = req_64->sglistinfo_len;
			}
			}
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			break;
			break;
		}
		}
		case QSEOS_LOAD_EXTERNAL_ELF_COMMAND: {
		case QSEOS_LOAD_EXTERNAL_ELF_COMMAND: {
@@ -702,14 +725,14 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
				desc.args[2] = req_64bit->phy_addr;
				desc.args[2] = req_64bit->phy_addr;
			}
			}
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			break;
			break;
		}
		}
		case QSEOS_UNLOAD_EXTERNAL_ELF_COMMAND: {
		case QSEOS_UNLOAD_EXTERNAL_ELF_COMMAND: {
			smc_id = TZ_OS_UNLOAD_EXTERNAL_IMAGE_ID;
			smc_id = TZ_OS_UNLOAD_EXTERNAL_IMAGE_ID;
			desc.arginfo = TZ_OS_UNLOAD_SERVICES_IMAGE_ID_PARAM_ID;
			desc.arginfo = TZ_OS_UNLOAD_SERVICES_IMAGE_ID_PARAM_ID;
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			break;
			break;
			}
			}


@@ -737,7 +760,7 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
				desc.args[3] = req_64bit->rsp_ptr;
				desc.args[3] = req_64bit->rsp_ptr;
				desc.args[4] = req_64bit->rsp_len;
				desc.args[4] = req_64bit->rsp_len;
			}
			}
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			break;
			break;
		}
		}
		case QSEOS_CLIENT_SEND_DATA_COMMAND_WHITELIST: {
		case QSEOS_CLIENT_SEND_DATA_COMMAND_WHITELIST: {
@@ -769,7 +792,7 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
				desc.args[5] = req_64bit->sglistinfo_ptr;
				desc.args[5] = req_64bit->sglistinfo_ptr;
				desc.args[6] = req_64bit->sglistinfo_len;
				desc.args[6] = req_64bit->sglistinfo_len;
			}
			}
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			break;
			break;
		}
		}
		case QSEOS_RPMB_PROVISION_KEY_COMMAND: {
		case QSEOS_RPMB_PROVISION_KEY_COMMAND: {
@@ -781,21 +804,21 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
			desc.arginfo = TZ_OS_RPMB_PROVISION_KEY_ID_PARAM_ID;
			desc.arginfo = TZ_OS_RPMB_PROVISION_KEY_ID_PARAM_ID;
			desc.args[0] = req->key_type;
			desc.args[0] = req->key_type;
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			break;
			break;
		}
		}
		case QSEOS_RPMB_ERASE_COMMAND: {
		case QSEOS_RPMB_ERASE_COMMAND: {
			smc_id = TZ_OS_RPMB_ERASE_ID;
			smc_id = TZ_OS_RPMB_ERASE_ID;
			desc.arginfo = TZ_OS_RPMB_ERASE_ID_PARAM_ID;
			desc.arginfo = TZ_OS_RPMB_ERASE_ID_PARAM_ID;
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			break;
			break;
		}
		}
		case QSEOS_RPMB_CHECK_PROV_STATUS_COMMAND: {
		case QSEOS_RPMB_CHECK_PROV_STATUS_COMMAND: {
			smc_id = TZ_OS_RPMB_CHECK_PROV_STATUS_ID;
			smc_id = TZ_OS_RPMB_CHECK_PROV_STATUS_ID;
			desc.arginfo = TZ_OS_RPMB_CHECK_PROV_STATUS_ID_PARAM_ID;
			desc.arginfo = TZ_OS_RPMB_CHECK_PROV_STATUS_ID_PARAM_ID;
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			break;
			break;
		}
		}
		case QSEOS_GENERATE_KEY: {
		case QSEOS_GENERATE_KEY: {
@@ -816,7 +839,7 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
			desc.args[0] = virt_to_phys(tzbuf);
			desc.args[0] = virt_to_phys(tzbuf);
			desc.args[1] = tzbuflen;
			desc.args[1] = tzbuflen;
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			kzfree(tzbuf);
			kzfree(tzbuf);
			break;
			break;
		}
		}
@@ -838,7 +861,7 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
			desc.args[0] = virt_to_phys(tzbuf);
			desc.args[0] = virt_to_phys(tzbuf);
			desc.args[1] = tzbuflen;
			desc.args[1] = tzbuflen;
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			kzfree(tzbuf);
			kzfree(tzbuf);
			break;
			break;
		}
		}
@@ -860,7 +883,7 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
			desc.args[0] = virt_to_phys(tzbuf);
			desc.args[0] = virt_to_phys(tzbuf);
			desc.args[1] = tzbuflen;
			desc.args[1] = tzbuflen;
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			kzfree(tzbuf);
			kzfree(tzbuf);
			break;
			break;
		}
		}
@@ -882,7 +905,7 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
			desc.args[0] = virt_to_phys(tzbuf);
			desc.args[0] = virt_to_phys(tzbuf);
			desc.args[1] = tzbuflen;
			desc.args[1] = tzbuflen;
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			kzfree(tzbuf);
			kzfree(tzbuf);
			break;
			break;
		}
		}
@@ -908,7 +931,7 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
				desc.args[3] = req_64bit->resp_ptr;
				desc.args[3] = req_64bit->resp_ptr;
				desc.args[4] = req_64bit->resp_len;
				desc.args[4] = req_64bit->resp_len;
			}
			}
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			break;
			break;
		}
		}
		case QSEOS_TEE_OPEN_SESSION_WHITELIST: {
		case QSEOS_TEE_OPEN_SESSION_WHITELIST: {
@@ -938,7 +961,7 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
				desc.args[5] = req_64bit->sglistinfo_ptr;
				desc.args[5] = req_64bit->sglistinfo_ptr;
				desc.args[6] = req_64bit->sglistinfo_len;
				desc.args[6] = req_64bit->sglistinfo_len;
			}
			}
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			break;
			break;
		}
		}
		case QSEOS_TEE_INVOKE_COMMAND: {
		case QSEOS_TEE_INVOKE_COMMAND: {
@@ -963,7 +986,7 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
				desc.args[3] = req_64bit->resp_ptr;
				desc.args[3] = req_64bit->resp_ptr;
				desc.args[4] = req_64bit->resp_len;
				desc.args[4] = req_64bit->resp_len;
			}
			}
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			break;
			break;
		}
		}
		case QSEOS_TEE_INVOKE_COMMAND_WHITELIST: {
		case QSEOS_TEE_INVOKE_COMMAND_WHITELIST: {
@@ -993,7 +1016,7 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
				desc.args[5] = req_64bit->sglistinfo_ptr;
				desc.args[5] = req_64bit->sglistinfo_ptr;
				desc.args[6] = req_64bit->sglistinfo_len;
				desc.args[6] = req_64bit->sglistinfo_len;
			}
			}
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			break;
			break;
		}
		}
		case QSEOS_TEE_CLOSE_SESSION: {
		case QSEOS_TEE_CLOSE_SESSION: {
@@ -1018,7 +1041,7 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
				desc.args[3] = req_64bit->resp_ptr;
				desc.args[3] = req_64bit->resp_ptr;
				desc.args[4] = req_64bit->resp_len;
				desc.args[4] = req_64bit->resp_len;
			}
			}
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			break;
			break;
		}
		}
		case QSEOS_TEE_REQUEST_CANCELLATION: {
		case QSEOS_TEE_REQUEST_CANCELLATION: {
@@ -1044,7 +1067,7 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
				desc.args[3] = req_64bit->resp_ptr;
				desc.args[3] = req_64bit->resp_ptr;
				desc.args[4] = req_64bit->resp_len;
				desc.args[4] = req_64bit->resp_len;
			}
			}
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			break;
			break;
		}
		}
		case QSEOS_CONTINUE_BLOCKED_REQ_COMMAND: {
		case QSEOS_CONTINUE_BLOCKED_REQ_COMMAND: {
@@ -1059,7 +1082,7 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
			desc.arginfo =
			desc.arginfo =
				TZ_OS_CONTINUE_BLOCKED_REQUEST_ID_PARAM_ID;
				TZ_OS_CONTINUE_BLOCKED_REQUEST_ID_PARAM_ID;
			desc.args[0] = req->app_or_session_id;
			desc.args[0] = req->app_or_session_id;
			ret = scm_call2(smc_id, &desc);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			break;
			break;
		}
		}
		default: {
		default: {
@@ -6527,7 +6550,7 @@ static int qseecom_mdtp_cipher_dip(void __user *argp)
		if (ret)
		if (ret)
			break;
			break;


		ret = scm_call2(TZ_MDTP_CIPHER_DIP_ID, &desc);
		ret = __qseecom_scm_call2_locked(TZ_MDTP_CIPHER_DIP_ID, &desc);


		__qseecom_disable_clk(CLK_QSEE);
		__qseecom_disable_clk(CLK_QSEE);


@@ -8730,8 +8753,10 @@ static int qseecom_check_whitelist_feature(void)


	desc.args[0] = FEATURE_ID_WHITELIST;
	desc.args[0] = FEATURE_ID_WHITELIST;
	desc.arginfo = SCM_ARGS(1);
	desc.arginfo = SCM_ARGS(1);
	ret = scm_call2(SCM_SIP_FNID(SCM_SVC_INFO,
	mutex_lock(&app_access_lock);
	ret = __qseecom_scm_call2_locked(SCM_SIP_FNID(SCM_SVC_INFO,
		GET_FEAT_VERSION_CMD), &desc);
		GET_FEAT_VERSION_CMD), &desc);
	mutex_unlock(&app_access_lock);
	if (!ret)
	if (!ret)
		version = desc.ret[0];
		version = desc.ret[0];


@@ -8814,8 +8839,10 @@ static int qseecom_probe(struct platform_device *pdev)
	qseecom.send_resp_flag = 0;
	qseecom.send_resp_flag = 0;


	qseecom.qsee_version = QSEEE_VERSION_00;
	qseecom.qsee_version = QSEEE_VERSION_00;
	mutex_lock(&app_access_lock);
	rc = qseecom_scm_call(6, 3, &feature, sizeof(feature),
	rc = qseecom_scm_call(6, 3, &feature, sizeof(feature),
		&resp, sizeof(resp));
		&resp, sizeof(resp));
	mutex_unlock(&app_access_lock);
	pr_info("qseecom.qsee_version = 0x%x\n", resp.result);
	pr_info("qseecom.qsee_version = 0x%x\n", resp.result);
	if (rc) {
	if (rc) {
		pr_err("Failed to get QSEE version info %d\n", rc);
		pr_err("Failed to get QSEE version info %d\n", rc);
@@ -8968,9 +8995,11 @@ static int qseecom_probe(struct platform_device *pdev)
				rc = -EIO;
				rc = -EIO;
				goto exit_deinit_clock;
				goto exit_deinit_clock;
			}
			}
			mutex_lock(&app_access_lock);
			rc = qseecom_scm_call(SCM_SVC_TZSCHEDULER, 1,
			rc = qseecom_scm_call(SCM_SVC_TZSCHEDULER, 1,
					cmd_buf, cmd_len,
					cmd_buf, cmd_len,
					&resp, sizeof(resp));
					&resp, sizeof(resp));
			mutex_unlock(&app_access_lock);
			__qseecom_disable_clk(CLK_QSEE);
			__qseecom_disable_clk(CLK_QSEE);
			if (rc || (resp.result != QSEOS_RESULT_SUCCESS)) {
			if (rc || (resp.result != QSEOS_RESULT_SUCCESS)) {
				pr_err("send secapp reg fail %d resp.res %d\n",
				pr_err("send secapp reg fail %d resp.res %d\n",