msm: mdss: hdcp_1x: fix compliance failure

1B-01 DP HDCP compliance test needs either poll RxStatus
or wait for CP_IRQ to fetch the list of Downstream devices'
KSVs. Currently, hdcp_1x module waits for CP_IRQ but
compliance test equipment fails this test as source is unable
to read KSVs within allowed time due to software delays.
Poll RxStatus register in sink to get KSVs ready status
so that KSVs can be read as soon as sink mark them as ready.

Also, re-factor the code as per the specification.

Change-Id: Ieefa13dfc9e154b005329b01e2769266a1954ddb
Signed-off-by: Ajay Singh Parmar <aparmar@codeaurora.org>
This commit is contained in:
Ajay Singh Parmar 2016-12-02 11:56:51 -08:00
parent 368fecd7df
commit 8dac9cfe73
2 changed files with 629 additions and 552 deletions

View file

@ -558,6 +558,7 @@ static int hdcp_lib_txmtr_init_legacy(struct hdcp_lib_handle *handle);
static struct qseecom_handle *hdcp1_handle; static struct qseecom_handle *hdcp1_handle;
static bool hdcp1_supported = true; static bool hdcp1_supported = true;
static bool hdcp1_enc_enabled;
static const char *hdcp_lib_message_name(int msg_id) static const char *hdcp_lib_message_name(int msg_id)
{ {
@ -2278,6 +2279,11 @@ int hdcp1_set_enc(bool enable)
if (!hdcp1_supported || !hdcp1_handle) if (!hdcp1_supported || !hdcp1_handle)
return -EINVAL; return -EINVAL;
if (hdcp1_enc_enabled == enable) {
pr_debug("already %s\n", enable ? "enabled" : "disabled");
return rc;
}
/* set keys and request aksv */ /* set keys and request aksv */
set_enc_req = (struct hdcp1_set_enc_req *)hdcp1_handle->sbuf; set_enc_req = (struct hdcp1_set_enc_req *)hdcp1_handle->sbuf;
set_enc_req->commandid = HDCP1_SET_ENC_MESSAGE_ID; set_enc_req->commandid = HDCP1_SET_ENC_MESSAGE_ID;
@ -2302,7 +2308,8 @@ int hdcp1_set_enc(bool enable)
return -EINVAL; return -EINVAL;
} }
pr_debug("success\n"); hdcp1_enc_enabled = enable;
pr_debug("%s success\n", enable ? "enable" : "disable");
return 0; return 0;
} }

File diff suppressed because it is too large Load diff