qseecom: resend continue blocked listener request

When new cmd with session_id is not supported by TZ, resend
continue blocked listener request with legacy cmd using app_id.
Also set dummy app_id in qseecom_process_listener_from_smcinvoke
to support legacy cmd.

Change-Id: Icafc77cece23daff0f2ceb89c10e82a822eb582a
Signed-off-by: Zhen Kong <zkong@codeaurora.org>
This commit is contained in:
Zhen Kong 2017-12-01 18:26:25 -08:00 committed by Gerrit - the friendly Code Review server
parent c2e3a1a7e7
commit 0a2d725d48

View file

@ -1940,7 +1940,7 @@ exit:
}
static int __qseecom_process_blocked_on_listener_smcinvoke(
struct qseecom_command_scm_resp *resp)
struct qseecom_command_scm_resp *resp, uint32_t app_id)
{
struct qseecom_registered_listener_list *list_ptr;
int ret = 0;
@ -1987,9 +1987,18 @@ static int __qseecom_process_blocked_on_listener_smcinvoke(
&ireq, sizeof(ireq),
&continue_resp, sizeof(continue_resp));
if (ret) {
pr_err("scm_call for continue blocked req for session %d failed, ret %d\n",
session_id, ret);
goto exit;
/* retry with legacy cmd */
qseecom.smcinvoke_support = false;
ireq.app_or_session_id = app_id;
ret = qseecom_scm_call(SCM_SVC_TZSCHEDULER, 1,
&ireq, sizeof(ireq),
&continue_resp, sizeof(continue_resp));
qseecom.smcinvoke_support = true;
if (ret) {
pr_err("cont block req for app %d or session %d fail\n",
app_id, session_id);
goto exit;
}
}
resp->result = QSEOS_RESULT_INCOMPLETE;
exit:
@ -2006,7 +2015,7 @@ static int __qseecom_process_reentrancy_blocked_on_listener(
resp, ptr_app, data);
else
return __qseecom_process_blocked_on_listener_smcinvoke(
resp);
resp, data->client.app_id);
}
static int __qseecom_reentrancy_process_incomplete_cmd(
struct qseecom_dev_handle *data,
@ -4786,6 +4795,9 @@ int qseecom_process_listener_from_smcinvoke(struct scm_desc *desc)
resp.resp_type = desc->ret[1]; /*incomplete:unused;blocked:session_id*/
resp.data = desc->ret[2]; /*listener_id*/
dummy_private_data.client.app_id = desc->ret[1];
dummy_app_entry.app_id = desc->ret[1];
mutex_lock(&app_access_lock);
if (qseecom.qsee_reentrancy_support)
ret = __qseecom_process_reentrancy(&resp, &dummy_app_entry,