disp: msm: hdcp: abort queued tasks while processing PM suspend

During suspend, there might be a chance that lib auth work is queued
but not yet started. So during pm cycle it might start execution
before host_init which can lead to noc error while accessing dp_aux
registers. To prevent that set abort flag to abort lib auth work and
set interrupts before host_deinit.

Change-Id: Ie2c3ac9b0846644d3c2b37f410c341659b030c16
Signed-off-by: Rajat Gupta <rajatgu@codeaurora.org>
Signed-off-by: Tatenda Chipeperekwa <tatendac@codeaurora.org>
This commit is contained in:
Rajat Gupta
2020-02-10 14:15:57 +05:30
committed by Tatenda Chipeperekwa
parent 54365213d1
commit 0e1496c718
4 changed files with 47 additions and 2 deletions

View File

@@ -513,6 +513,22 @@ static void dp_display_hdcp_process_state(struct dp_display_private *dp)
}
}
static void dp_display_abort_hdcp(struct dp_display_private *dp,
bool abort)
{
u8 i = HDCP_VERSION_2P2;
struct dp_hdcp_dev *dev = NULL;
while (i) {
dev = &dp->hdcp.dev[i];
i >>= 1;
if (!(dp->hdcp.source_cap & dev->ver))
continue;
dev->ops->abort(dev->fd, abort);
}
}
static void dp_display_hdcp_cb_work(struct work_struct *work)
{
struct dp_display_private *dp;
@@ -894,6 +910,7 @@ static void dp_display_host_init(struct dp_display_private *dp)
dp->hpd->host_init(dp->hpd, &dp->catalog->hpd);
dp->ctrl->init(dp->ctrl, flip, reset);
enable_irq(dp->irq);
dp_display_abort_hdcp(dp, false);
dp_display_state_add(DP_STATE_INITIALIZED);
@@ -971,6 +988,7 @@ static void dp_display_host_deinit(struct dp_display_private *dp)
return;
}
dp_display_abort_hdcp(dp, true);
dp->ctrl->deinit(dp->ctrl);
dp->hpd->host_deinit(dp->hpd, &dp->catalog->hpd);
dp->power->deinit(dp->power);