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

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

Merge "disp: msm: dp: modify handling of CP_IRQ to fix HDCP 2.3 CTS test 1B-09"

parents fa972299 38407b22
Loading
Loading
Loading
Loading
+26 −6
Original line number Diff line number Diff line
@@ -570,7 +570,7 @@ static void dp_hdcp2p2_recv_msg(struct dp_hdcp2p2_ctrl *ctrl)

static void dp_hdcp2p2_link_check(struct dp_hdcp2p2_ctrl *ctrl)
{
	int rc = 0, retries = 10;
	int rc = 0;
	struct sde_hdcp_2x_wakeup_data cdata = {HDCP_2X_CMD_INVALID};

	if (!ctrl) {
@@ -603,10 +603,6 @@ static void dp_hdcp2p2_link_check(struct dp_hdcp2p2_ctrl *ctrl)
		goto exit;
	}

	/* wait for polling to start till spec allowed timeout */
	while (!ctrl->polling && retries--)
		msleep(20);

	/* check if sink has made a message available */
	if (ctrl->polling && (ctrl->sink_rx_status & ctrl->rx_status)) {
		ctrl->sink_rx_status = 0;
@@ -673,7 +669,7 @@ static int dp_hdcp2p2_read_rx_status(struct dp_hdcp2p2_ctrl *ctrl,

static int dp_hdcp2p2_cp_irq(void *input)
{
	int rc;
	int rc, retries = 15;
	struct dp_hdcp2p2_ctrl *ctrl = input;
	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_ENTRY);

@@ -701,7 +697,31 @@ static int dp_hdcp2p2_cp_irq(void *input)
		return -EINVAL;
	}

	/*
	 * Wait for link to be transitioned to polling mode. This wait
	 * should be done in this CP_IRQ handler and NOT in the event thread
	 * as the transition to link polling happens in the event thread
	 * as part of the wake up from the HDCP engine.
	 *
	 * One specific case where this sequence of event commonly happens
	 * is when executing HDCP 2.3 CTS test 1B-09 with Unigraf UCD-400
	 * test equipment (TE). As part of this test, the TE issues a CP-IRQ
	 * right after the successful completion of the HDCP authentication
	 * part 2. This CP-IRQ handler gets invoked even before the HDCP
	 * state engine gets transitioned to the polling mode, which can
	 * cause the test to fail as we would not read the
	 * RepeaterAuth_Send_ReceiverID_List from the TE in response to the
	 * CP_IRQ.
	 *
	 * Skip this wait when any of the fields in the abort mask is set.
	 */
	if (ctrl->sink_rx_status & ctrl->abort_mask)
		goto exit;

	while (!ctrl->polling && retries--)
		msleep(20);

exit:
	kfifo_put(&ctrl->cmd_q, HDCP_TRANSPORT_CMD_LINK_CHECK);
	wake_up(&ctrl->wait_q);
	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_EXIT);