From: Hersen Wu <hersenxs...@amd.com>

[Why] hdcp are enabled for asics from raven. for old asics
which hdcp are not enabled, hdcp_workqueue are null. some
access to hdcp work queue are not guarded with pointer check.

[How] add hdcp_workqueue pointer check before access workqueue.

Reviewed-by: Bhawanpreet Lakha <bhawanpreet.la...@amd.com>
Acked-by: Qingqing Zhuo <qingqing.z...@amd.com>
Signed-off-by: Hersen Wu <hersenxs...@amd.com>
---
 .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c    |  6 ++++++
 .../amd/display/amdgpu_dm/amdgpu_dm_mst_types.c  | 16 ++++++++++------
 2 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index ffa2743e92e2..71e3bc9e7f8f 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -8558,6 +8558,9 @@ static void amdgpu_dm_atomic_commit_tail(struct 
drm_atomic_state *state)
                struct amdgpu_crtc *acrtc = 
to_amdgpu_crtc(dm_new_con_state->base.crtc);
                struct amdgpu_dm_connector *aconnector = 
to_amdgpu_dm_connector(connector);
 
+               if (!adev->dm.hdcp_workqueue)
+                       continue;
+
                pr_debug("[HDCP_DM] -------------- i : %x ----------\n", i);
 
                if (!connector)
@@ -8606,6 +8609,9 @@ static void amdgpu_dm_atomic_commit_tail(struct 
drm_atomic_state *state)
                struct amdgpu_crtc *acrtc = 
to_amdgpu_crtc(dm_new_con_state->base.crtc);
                struct amdgpu_dm_connector *aconnector = 
to_amdgpu_dm_connector(connector);
 
+               if (!adev->dm.hdcp_workqueue)
+                       continue;
+
                new_crtc_state = NULL;
                old_crtc_state = NULL;
 
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
index 994ba426ca66..5dc79b753d5f 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
@@ -379,13 +379,17 @@ static int dm_dp_mst_get_modes(struct drm_connector 
*connector)
                if (aconnector->dc_sink && connector->state) {
                        struct drm_device *dev = connector->dev;
                        struct amdgpu_device *adev = drm_to_adev(dev);
-                       struct hdcp_workqueue *hdcp_work = 
adev->dm.hdcp_workqueue;
-                       struct hdcp_workqueue *hdcp_w = 
&hdcp_work[aconnector->dc_link->link_index];
 
-                       connector->state->hdcp_content_type =
-                       hdcp_w->hdcp_content_type[connector->index];
-                       connector->state->content_protection =
-                       hdcp_w->content_protection[connector->index];
+                       if (adev->dm.hdcp_workqueue) {
+                               struct hdcp_workqueue *hdcp_work = 
adev->dm.hdcp_workqueue;
+                               struct hdcp_workqueue *hdcp_w =
+                                       
&hdcp_work[aconnector->dc_link->link_index];
+
+                               connector->state->hdcp_content_type =
+                               hdcp_w->hdcp_content_type[connector->index];
+                               connector->state->content_protection =
+                               hdcp_w->content_protection[connector->index];
+                       }
                }
 
                if (aconnector->dc_sink) {
-- 
2.34.1

Reply via email to