[Why]
The old way was to poll PSP and update the properties. But due to a
limitation in the PSP interface this doesn't work for MST.

[How]
According to PSP if set_encryption return success, the link is encrypted
and the only way it will not be is if we get a link loss(which we handle
already).

So this method should be good enough to report HDCP status.

Signed-off-by: Bhawanpreet Lakha <bhawanpreet.la...@amd.com>
---
 .../drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c |  3 +--
 .../gpu/drm/amd/display/modules/hdcp/hdcp.c    | 18 ++++++++++++++----
 .../gpu/drm/amd/display/modules/inc/mod_hdcp.h |  4 ++--
 3 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c
index 6c4b3134e786..603909416398 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c
@@ -81,6 +81,7 @@ static void process_output(struct hdcp_workqueue *hdcp_work)
                schedule_delayed_work(&hdcp_work->watchdog_timer_dwork,
                                      
msecs_to_jiffies(output.watchdog_timer_delay));
 
+       schedule_delayed_work(&hdcp_work->property_validate_dwork, 
msecs_to_jiffies(0));
 }
 
 void hdcp_update_display(struct hdcp_workqueue *hdcp_work,
@@ -233,8 +234,6 @@ static void event_property_validate(struct work_struct 
*work)
                schedule_work(&hdcp_work->property_update_work);
        }
 
-       schedule_delayed_work(&hdcp_work->property_validate_dwork, 
msecs_to_jiffies(DRM_HDCP_CHECK_PERIOD_MS));
-
        mutex_unlock(&hdcp_work->mutex);
 }
 
diff --git a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp.c 
b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp.c
index 0f2f242710b3..cbb5e9c063ec 100644
--- a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp.c
+++ b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp.c
@@ -417,10 +417,20 @@ enum mod_hdcp_status mod_hdcp_query_display(struct 
mod_hdcp *hdcp,
        query->trace = &hdcp->connection.trace;
        query->encryption_status = MOD_HDCP_ENCRYPTION_STATUS_HDCP_OFF;
 
-       if (is_hdcp1(hdcp))
-               mod_hdcp_hdcp1_get_link_encryption_status(hdcp, 
&query->encryption_status);
-       else if (is_hdcp2(hdcp))
-               mod_hdcp_hdcp2_get_link_encryption_status(hdcp, 
&query->encryption_status);
+       if (is_display_encryption_enabled(display)) {
+               if (is_hdcp1(hdcp)) {
+                       query->encryption_status = 
MOD_HDCP_ENCRYPTION_STATUS_HDCP1_ON;
+               } else if (is_hdcp2(hdcp)) {
+                       if (query->link->adjust.hdcp2.force_type == 
MOD_HDCP_FORCE_TYPE_0)
+                               query->encryption_status = 
MOD_HDCP_ENCRYPTION_STATUS_HDCP2_TYPE0_ON;
+                       else if (query->link->adjust.hdcp2.force_type == 
MOD_HDCP_FORCE_TYPE_1)
+                               query->encryption_status = 
MOD_HDCP_ENCRYPTION_STATUS_HDCP2_TYPE1_ON;
+                       else
+                               query->encryption_status = 
MOD_HDCP_ENCRYPTION_STATUS_HDCP2_ON;
+               }
+       } else {
+               query->encryption_status = MOD_HDCP_ENCRYPTION_STATUS_HDCP_OFF;
+       }
 
 out:
        return status;
diff --git a/drivers/gpu/drm/amd/display/modules/inc/mod_hdcp.h 
b/drivers/gpu/drm/amd/display/modules/inc/mod_hdcp.h
index ff2bb2bfbb53..f2a0e1a064da 100644
--- a/drivers/gpu/drm/amd/display/modules/inc/mod_hdcp.h
+++ b/drivers/gpu/drm/amd/display/modules/inc/mod_hdcp.h
@@ -191,9 +191,9 @@ struct mod_hdcp_trace {
 enum mod_hdcp_encryption_status {
        MOD_HDCP_ENCRYPTION_STATUS_HDCP_OFF = 0,
        MOD_HDCP_ENCRYPTION_STATUS_HDCP1_ON,
-       MOD_HDCP_ENCRYPTION_STATUS_HDCP2_ON,
        MOD_HDCP_ENCRYPTION_STATUS_HDCP2_TYPE0_ON,
-       MOD_HDCP_ENCRYPTION_STATUS_HDCP2_TYPE1_ON
+       MOD_HDCP_ENCRYPTION_STATUS_HDCP2_TYPE1_ON,
+       MOD_HDCP_ENCRYPTION_STATUS_HDCP2_ON
 };
 
 /* per link events dm has to notify to hdcp module */
-- 
2.17.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to