Skip to content

Commit 90144dd

Browse files
nfrapradoChun-Kuang Hu
authored andcommitted
drm/mediatek: dsi: Move mtk_dsi_stop() call back to mtk_dsi_poweroff()
As the comment right before the mtk_dsi_stop() call advises, mtk_dsi_stop() should only be called after mtk_drm_crtc_atomic_disable(). That's because that function calls drm_crtc_wait_one_vblank(), which requires the vblank irq to be enabled. Previously mtk_dsi_stop(), being in mtk_dsi_poweroff() and guarded by a refcount, would only be called at the end of mtk_drm_crtc_atomic_disable(), through the call to mtk_crtc_ddp_hw_fini(). Commit cde7e2e ("drm/mediatek: Separate poweron/poweroff from enable/disable and define new funcs") moved the mtk_dsi_stop() call to mtk_output_dsi_disable(), causing it to be called before mtk_drm_crtc_atomic_disable(), and consequently generating vblank timeout warnings during suspend. Move the mtk_dsi_stop() call back to mtk_dsi_poweroff() so that we have a working vblank irq during mtk_drm_crtc_atomic_disable() and stop getting vblank timeout warnings. Fixes: cde7e2e ("drm/mediatek: Separate poweron/poweroff from enable/disable and define new funcs") Signed-off-by: Nícolas F. R. A. Prado <[email protected]> Tested-by: Hsin-Yi Wang <[email protected]> Reviewed-by: AngeloGioacchino Del Regno <[email protected]> Tested-by: Allen-KH Cheng <[email protected]> Link: http://lists.infradead.org/pipermail/linux-mediatek/2022-August/046713.html Signed-off-by: Chun-Kuang Hu <[email protected]>
1 parent 87fd929 commit 90144dd

File tree

1 file changed

+10
-11
lines changed

1 file changed

+10
-11
lines changed

drivers/gpu/drm/mediatek/mtk_dsi.c

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -685,6 +685,16 @@ static void mtk_dsi_poweroff(struct mtk_dsi *dsi)
685685
if (--dsi->refcount != 0)
686686
return;
687687

688+
/*
689+
* mtk_dsi_stop() and mtk_dsi_start() is asymmetric, since
690+
* mtk_dsi_stop() should be called after mtk_drm_crtc_atomic_disable(),
691+
* which needs irq for vblank, and mtk_dsi_stop() will disable irq.
692+
* mtk_dsi_start() needs to be called in mtk_output_dsi_enable(),
693+
* after dsi is fully set.
694+
*/
695+
mtk_dsi_stop(dsi);
696+
697+
mtk_dsi_switch_to_cmd_mode(dsi, VM_DONE_INT_FLAG, 500);
688698
mtk_dsi_reset_engine(dsi);
689699
mtk_dsi_lane0_ulp_mode_enter(dsi);
690700
mtk_dsi_clk_ulp_mode_enter(dsi);
@@ -735,17 +745,6 @@ static void mtk_output_dsi_disable(struct mtk_dsi *dsi)
735745
if (!dsi->enabled)
736746
return;
737747

738-
/*
739-
* mtk_dsi_stop() and mtk_dsi_start() is asymmetric, since
740-
* mtk_dsi_stop() should be called after mtk_drm_crtc_atomic_disable(),
741-
* which needs irq for vblank, and mtk_dsi_stop() will disable irq.
742-
* mtk_dsi_start() needs to be called in mtk_output_dsi_enable(),
743-
* after dsi is fully set.
744-
*/
745-
mtk_dsi_stop(dsi);
746-
747-
mtk_dsi_switch_to_cmd_mode(dsi, VM_DONE_INT_FLAG, 500);
748-
749748
dsi->enabled = false;
750749
}
751750

0 commit comments

Comments
 (0)