Patch "drm/amd/display: Remove wrong pipe control lock" has been added to the 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    drm/amd/display: Remove wrong pipe control lock

to the 5.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     drm-amd-display-remove-wrong-pipe-control-lock.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit db73f60742bf87b966eaa1fe91729cfb70b83cd4
Author: Rodrigo Siqueira <Rodrigo.Siqueira@xxxxxxx>
Date:   Thu Oct 6 17:26:48 2022 -0400

    drm/amd/display: Remove wrong pipe control lock
    
    [ Upstream commit ca08a1725d0d78efca8d2dbdbce5ea70355da0f2 ]
    
    When using a device based on DCN32/321,
    we have an issue where a second
    4k@60Hz display does not light up,
    and the system becomes unresponsive
    for a few minutes. In the debug process,
    it was possible to see a hang
    in the function dcn20_post_unlock_program_front_end
    in this part:
    
    for (j = 0; j < TIMEOUT_FOR_PIPE_ENABLE_MS*1000
            && hubp->funcs->hubp_is_flip_pending(hubp); j++)
            mdelay(1);
    }
    
    The hubp_is_flip_pending always returns positive
    for waiting pending flips which is a symptom of
    pipe hang. Additionally, the dmesg log shows
    this message after a few minutes:
    
      BUG: soft lockup - CPU#4 stuck for 26s!
      ...
      [  +0.000003]  dcn20_post_unlock_program_front_end+0x112/0x340 [amdgpu]
      [  +0.000171]  dc_commit_state_no_check+0x63d/0xbf0 [amdgpu]
      [  +0.000155]  ? dc_validate_global_state+0x358/0x3d0 [amdgpu]
      [  +0.000154]  dc_commit_state+0xe2/0xf0 [amdgpu]
    
    This confirmed the hypothesis that we had a pipe
    hanging somewhere. Next, after checking the
    ftrace entries, we have the below weird
    sequence:
    
     [..]
      2)               |        dcn10_lock_all_pipes [amdgpu]() {
      2)   0.120 us    |          optc1_is_tg_enabled [amdgpu]();
      2)               |          dcn20_pipe_control_lock [amdgpu]() {
      2)               |            dc_dmub_srv_clear_inbox0_ack [amdgpu]() {
      2)   0.121 us    |              amdgpu_dm_dmub_reg_write [amdgpu]();
      2)   0.551 us    |            }
      2)               |            dc_dmub_srv_send_inbox0_cmd [amdgpu]() {
      2)   0.110 us    |              amdgpu_dm_dmub_reg_write [amdgpu]();
      2)   0.511 us    |            }
      2)               |            dc_dmub_srv_wait_for_inbox0_ack [amdgpu]() {
      2)   0.110 us    |              amdgpu_dm_dmub_reg_read [amdgpu]();
      2)   0.110 us    |              amdgpu_dm_dmub_reg_read [amdgpu]();
      2)   0.110 us    |              amdgpu_dm_dmub_reg_read [amdgpu]();
      2)   0.110 us    |              amdgpu_dm_dmub_reg_read [amdgpu]();
      2)   0.110 us    |              amdgpu_dm_dmub_reg_read [amdgpu]();
      2)   0.110 us    |              amdgpu_dm_dmub_reg_read [amdgpu]();
      2)   0.110 us    |              amdgpu_dm_dmub_reg_read [amdgpu]();
     [..]
    
    We are not expected to read from dmub register
    so many times and for so long. From the trace log,
    it was possible to identify that the function
    dcn20_pipe_control_lock was triggering the dmub
    operation when it was unnecessary and causing
    the hang issue. This commit drops the unnecessary
    dmub code and, consequently, fixes the second display not
    lighting up the issue.
    
    Tested-by: Daniel Wheeler <daniel.wheeler@xxxxxxx>
    Acked-by: Qingqing Zhuo <qingqing.zhuo@xxxxxxx>
    Signed-off-by: Rodrigo Siqueira <Rodrigo.Siqueira@xxxxxxx>
    Signed-off-by: Alex Deucher <alexander.deucher@xxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c
index 8f66eef0c683..c6c4888c6665 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c
@@ -1746,7 +1746,7 @@ void dcn20_post_unlock_program_front_end(
 
 			for (j = 0; j < TIMEOUT_FOR_PIPE_ENABLE_MS*1000
 					&& hubp->funcs->hubp_is_flip_pending(hubp); j++)
-				mdelay(1);
+				udelay(1);
 		}
 	}
 



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux