diff --git a/msm/dp/dp_debug.c b/msm/dp/dp_debug.c index e5813034f71e..95c09013fedb 100644 --- a/msm/dp/dp_debug.c +++ b/msm/dp/dp_debug.c @@ -1933,6 +1933,16 @@ static int dp_debug_init(struct dp_debug *dp_debug) goto error_remove_dir; } + file = debugfs_create_bool("hdcp_wait_sink_sync", 0644, dir, + &debug->dp_debug.hdcp_wait_sink_sync); + + if (IS_ERR_OR_NULL(file)) { + rc = PTR_ERR(file); + pr_err("[%s] debugfs hdcp_wait_sink_sync failed, rc=%d\n", + DEBUG_NAME, rc); + goto error_remove_dir; + } + file = debugfs_create_bool("dsc_feature_enable", 0644, dir, &debug->parser->dsc_feature_enable); if (IS_ERR_OR_NULL(file)) { diff --git a/msm/dp/dp_debug.h b/msm/dp/dp_debug.h index 11b890eb13b9..cb6640f7b275 100644 --- a/msm/dp/dp_debug.h +++ b/msm/dp/dp_debug.h @@ -16,6 +16,7 @@ /** * struct dp_debug * @debug_en: specifies whether debug mode enabled + * @hdcp_wait_sink_sync: used to wait for sink synchronization before HDCP auth * @vdisplay: used to filter out vdisplay value * @hdisplay: used to filter out hdisplay value * @vrefresh: used to filter out vrefresh value @@ -28,6 +29,7 @@ struct dp_debug { bool sim_mode; bool psm_enabled; bool hdcp_disabled; + bool hdcp_wait_sink_sync; int aspect_ratio; int vdisplay; int hdisplay; diff --git a/msm/dp/dp_display.c b/msm/dp/dp_display.c index b4b98cc8032e..3db2e962b857 100644 --- a/msm/dp/dp_display.c +++ b/msm/dp/dp_display.c @@ -324,12 +324,16 @@ static void dp_display_hdcp_cb_work(struct work_struct *work) dp->hdcp_delayed_off = false; } - drm_dp_dpcd_readb(dp->aux->drm_aux, DP_SINK_STATUS, &sink_status); - sink_status &= (DP_RECEIVE_PORT_0_STATUS | DP_RECEIVE_PORT_1_STATUS); - if (sink_status < 1) { - pr_debug("Sink not synchronized. Queuing again then exiting\n"); - queue_delayed_work(dp->wq, &dp->hdcp_cb_work, HZ); - return; + if (dp->debug->hdcp_wait_sink_sync) { + drm_dp_dpcd_readb(dp->aux->drm_aux, DP_SINK_STATUS, + &sink_status); + sink_status &= (DP_RECEIVE_PORT_0_STATUS | + DP_RECEIVE_PORT_1_STATUS); + if (sink_status < 1) { + pr_debug("Sink not synchronized. Queuing again then exiting\n"); + queue_delayed_work(dp->wq, &dp->hdcp_cb_work, HZ); + return; + } } status = &dp->link->hdcp_status;