From: Aurabindo Pillai <aurabindo.pil...@amd.com>

add amdgpu_device pointer to data associated with the work struct
such that hpd handlers has access to the drm device for use with
drm_err()

Reviewed-by: Alex Hung <alex.h...@amd.com>
Signed-off-by: Aurabindo Pillai <aurabindo.pil...@amd.com>
Signed-off-by: Fangzhi Zuo <jerry....@amd.com>
---
 .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 19 ++++++++++---------
 .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h |  4 ++++
 2 files changed, 14 insertions(+), 9 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 5117f5cac67d..16e2823f83b1 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -1480,18 +1480,18 @@ static void dm_handle_hpd_rx_offload_work(struct 
work_struct *work)
 
        offload_work = container_of(work, struct hpd_rx_irq_offload_work, work);
        aconnector = offload_work->offload_wq->aconnector;
+       adev = offload_work->adev;
 
        if (!aconnector) {
-               DRM_ERROR("Can't retrieve aconnector in 
hpd_rx_irq_offload_work");
+               drm_err(adev_to_drm(adev), "Can't retrieve aconnector in 
hpd_rx_irq_offload_work");
                goto skip;
        }
 
-       adev = drm_to_adev(aconnector->base.dev);
        dc_link = aconnector->dc_link;
 
        mutex_lock(&aconnector->hpd_lock);
        if (!dc_link_detect_connection_type(dc_link, &new_connection_type))
-               DRM_ERROR("KMS: Failed to detect connector\n");
+               drm_err(adev_to_drm(adev), "KMS: Failed to detect connector\n");
        mutex_unlock(&aconnector->hpd_lock);
 
        if (new_connection_type == dc_connection_none)
@@ -3912,20 +3912,21 @@ static void handle_hpd_irq(void *param)
 
 }
 
-static void schedule_hpd_rx_offload_work(struct hpd_rx_irq_offload_work_queue 
*offload_wq,
+static void schedule_hpd_rx_offload_work(struct amdgpu_device *adev, struct 
hpd_rx_irq_offload_work_queue *offload_wq,
                                                        union hpd_irq_data 
hpd_irq_data)
 {
        struct hpd_rx_irq_offload_work *offload_work =
                                kzalloc(sizeof(*offload_work), GFP_KERNEL);
 
        if (!offload_work) {
-               DRM_ERROR("Failed to allocate hpd_rx_irq_offload_work.\n");
+               drm_err(adev_to_drm(adev), "Failed to allocate 
hpd_rx_irq_offload_work.\n");
                return;
        }
 
        INIT_WORK(&offload_work->work, dm_handle_hpd_rx_offload_work);
        offload_work->data = hpd_irq_data;
        offload_work->offload_wq = offload_wq;
+       offload_work->adev = adev;
 
        queue_work(offload_wq->wq, &offload_work->work);
        DRM_DEBUG_KMS("queue work to handle hpd_rx offload work");
@@ -3967,7 +3968,7 @@ static void handle_hpd_rx_irq(void *param)
                goto out;
 
        if (hpd_irq_data.bytes.device_service_irq.bits.AUTOMATED_TEST) {
-               schedule_hpd_rx_offload_work(offload_wq, hpd_irq_data);
+               schedule_hpd_rx_offload_work(adev, offload_wq, hpd_irq_data);
                goto out;
        }
 
@@ -3989,7 +3990,7 @@ static void handle_hpd_rx_irq(void *param)
                        spin_unlock(&offload_wq->offload_lock);
 
                        if (!skip)
-                               schedule_hpd_rx_offload_work(offload_wq, 
hpd_irq_data);
+                               schedule_hpd_rx_offload_work(adev, offload_wq, 
hpd_irq_data);
 
                        goto out;
                }
@@ -4006,7 +4007,7 @@ static void handle_hpd_rx_irq(void *param)
                        spin_unlock(&offload_wq->offload_lock);
 
                        if (!skip)
-                               schedule_hpd_rx_offload_work(offload_wq, 
hpd_irq_data);
+                               schedule_hpd_rx_offload_work(adev, offload_wq, 
hpd_irq_data);
 
                        goto out;
                }
@@ -4016,7 +4017,7 @@ static void handle_hpd_rx_irq(void *param)
        if (result && !is_mst_root_connector) {
                /* Downstream Port status changed. */
                if (!dc_link_detect_connection_type(dc_link, 
&new_connection_type))
-                       DRM_ERROR("KMS: Failed to detect connector\n");
+                       drm_err(adev_to_drm(adev), "KMS: Failed to detect 
connector\n");
 
                if (aconnector->base.force && new_connection_type == 
dc_connection_none) {
                        emulated_link_detect(dc_link);
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
index 85b64c457ed6..53e49c1d0ce0 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
@@ -276,6 +276,10 @@ struct hpd_rx_irq_offload_work {
         * @offload_wq: offload work queue that this work is queued to
         */
        struct hpd_rx_irq_offload_work_queue *offload_wq;
+       /**
+        * @adev: amdgpu_device pointer
+        */
+       struct amdgpu_device *adev;
 };
 
 /**
-- 
2.43.0

Reply via email to