summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-12-23 03:55:34 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2016-12-23 03:55:33 -0800
commit7ff8d27f66c1dd783d34f847d02bf3df3c98131d (patch)
treec34fa2b011cbad7c52df3fb79cb6156714a0a2e6
parent9a312e1092888f3f0826c6bea3a783fbaf02286f (diff)
parent6f19ae882800a436555935925d0db9549ec2082e (diff)
Merge "smcinvoke: support listener service request"
-rw-r--r--drivers/soc/qcom/smcinvoke.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/soc/qcom/smcinvoke.c b/drivers/soc/qcom/smcinvoke.c
index d4be8c641ad8..e920dfee8530 100644
--- a/drivers/soc/qcom/smcinvoke.c
+++ b/drivers/soc/qcom/smcinvoke.c
@@ -22,6 +22,8 @@
#include <soc/qcom/scm.h>
#include <asm/cacheflush.h>
#include "smcinvoke_object.h"
+#include <soc/qcom/qseecomi.h>
+#include "../../misc/qseecom_kernel.h"
#define SMCINVOKE_TZ_PARAM_ID 0x224
#define SMCINVOKE_TZ_CMD 0x32000600
@@ -198,6 +200,12 @@ static int prepare_send_scm_msg(const uint8_t *in_buf, size_t in_buf_len,
dmac_flush_range(out_buf, out_buf + outbuf_flush_size);
ret = scm_call2(SMCINVOKE_TZ_CMD, &desc);
+
+ /* process listener request */
+ if (!ret && (desc.ret[0] == QSEOS_RESULT_INCOMPLETE ||
+ desc.ret[0] == QSEOS_RESULT_BLOCKED_ON_LISTENER))
+ ret = qseecom_process_listener_from_smcinvoke(&desc);
+
*smcinvoke_result = (int32_t)desc.ret[1];
if (ret || desc.ret[1] || desc.ret[2] || desc.ret[0]) {
pr_err("SCM call failed with ret val = %d %d %d %d\n",