summaryrefslogtreecommitdiff
path: root/drivers/misc
diff options
context:
space:
mode:
authorNarender Ankam <nankam@codeaurora.org>2019-08-19 17:16:10 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2020-03-03 02:34:15 -0800
commitc738eaea23226d370e68699154764ac09999af31 (patch)
tree797fdceb5f39547b4ade46b7c7fa9dd1283472fc /drivers/misc
parentfa73fb840fc253b745fbe34af5301f6059ed8301 (diff)
msm: mdss: hdcp: synchronize HDCP1 qseecom commands
HDCP driver tries to send two different HDCP1 commands concurrently which leads to XPU violation. Synchronize HDCP1 qseecom command transfer calls. Change-Id: I829cc9aff6589c0b816337946e6044bc9d450cc3 Signed-off-by: Narender Ankam <nankam@codeaurora.org> Signed-off-by: Ramendra Kumar <ramendra@codeaurora.org>
Diffstat (limited to 'drivers/misc')
-rw-r--r--drivers/misc/hdcp.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/drivers/misc/hdcp.c b/drivers/misc/hdcp.c
index 14b264f57709..7b9f2261f85b 100644
--- a/drivers/misc/hdcp.c
+++ b/drivers/misc/hdcp.c
@@ -2396,13 +2396,19 @@ int hdcp1_set_keys(uint32_t *aksv_msb, uint32_t *aksv_lsb)
if (aksv_msb == NULL || aksv_lsb == NULL)
return -EINVAL;
- if (!hdcp1_supported || !hdcp1_handle)
- return -EINVAL;
+ mutex_lock(&hdcp1_ta_cmd_lock);
+
+ if (!hdcp1_supported || !hdcp1_handle) {
+ rc = -EINVAL;
+ goto end;
+ }
hdcp1_qsee_handle = hdcp1_handle->qsee_handle;
- if (!hdcp1_qsee_handle)
- return -EINVAL;
+ if (!hdcp1_qsee_handle) {
+ rc = -EINVAL;
+ goto end;
+ }
/* set keys and request aksv */
key_set_req = (struct hdcp1_key_set_req *)hdcp1_qsee_handle->sbuf;
@@ -2418,13 +2424,15 @@ int hdcp1_set_keys(uint32_t *aksv_msb, uint32_t *aksv_lsb)
if (rc < 0) {
pr_err("qseecom cmd failed err=%d\n", rc);
- return -ENOKEY;
+ rc = -ENOKEY;
+ goto end;
}
rc = key_set_rsp->ret;
if (rc) {
pr_err("set key cmd failed, rsp=%d\n", key_set_rsp->ret);
- return -ENOKEY;
+ rc = -ENOKEY;
+ goto end;
}
/* copy bytes into msb and lsb */
@@ -2437,7 +2445,9 @@ int hdcp1_set_keys(uint32_t *aksv_msb, uint32_t *aksv_lsb)
*aksv_lsb |= key_set_rsp->ksv[6] << 8;
*aksv_lsb |= key_set_rsp->ksv[7];
- return 0;
+end:
+ mutex_unlock(&hdcp1_ta_cmd_lock);
+ return rc;
}
int hdcp1_validate_receiver_ids(struct hdcp_srm_device_id_t *device_ids,