drm/amd/display: Avoid gpio conflict on MST branch
authorNikola Cornij <nikola.cornij@amd.com>
Fri, 30 Apr 2021 23:34:29 +0000 (19:34 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 10 May 2021 22:06:44 +0000 (18:06 -0400)
[Why]
Similar to SST branch, gpio conflict also needs to be avoided on
MST. Without doing so, there is a chance that gpio conflict will
occur if multiple gpio interrupts arrive simultaneously.

[How]
By mutex locking/unlocking &aconnector->hpd_lock,
we won't get gpio conflict when handling hpd.

Signed-off-by: Zhan Liu <zhan.liu@amd.com>
Signed-off-by: Nikola Cornij <nikola.cornij@amd.com>
Reviewed-by: Bhawanpreet Lakha <bhawanpreet.lakha@amd.com>
Acked-by: Zhan Liu <zhan.liu@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index 225a92e..15070bf 100644 (file)
@@ -2708,8 +2708,7 @@ static void handle_hpd_rx_irq(void *param)
         * conflict, after implement i2c helper, this mutex should be
         * retired.
         */
-       if (dc_link->type != dc_connection_mst_branch)
-               mutex_lock(&aconnector->hpd_lock);
+       mutex_lock(&aconnector->hpd_lock);
 
        read_hpd_rx_irq_data(dc_link, &hpd_irq_data);
 
@@ -2778,10 +2777,10 @@ out:
        }
 #endif
 
-       if (dc_link->type != dc_connection_mst_branch) {
+       if (dc_link->type != dc_connection_mst_branch)
                drm_dp_cec_irq(&aconnector->dm_dp_aux.aux);
-               mutex_unlock(&aconnector->hpd_lock);
-       }
+
+       mutex_unlock(&aconnector->hpd_lock);
 }
 
 static void register_hpd_handlers(struct amdgpu_device *adev)