From: Aric Cyr <[email protected]>

[Why]
We want to make sure all immediate flips are completed before locking
the pipes, but not pipes that are not flip immediate as they will be
locked by the OTG

[How]
Skip non flip immediate pipes when checking for flip pending.

Signed-off-by: Aric Cyr <[email protected]>
Acked-by: Bindu Ramamurthy <[email protected]>
---
 .../drm/amd/display/dc/dcn20/dcn20_hwseq.c    | 29 ++++++++++---------
 1 file changed, 15 insertions(+), 14 deletions(-)

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 62788ad28230..da776de1dd1d 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c
@@ -1172,27 +1172,28 @@ void dcn20_pipe_control_lock(
 
        temp_pipe = pipe->bottom_pipe;
        while (!flip_immediate && temp_pipe) {
-           if (temp_pipe->plane_state != NULL)
-               flip_immediate = temp_pipe->plane_state->flip_immediate;
-           temp_pipe = temp_pipe->bottom_pipe;
+               if (temp_pipe->plane_state != NULL)
+                       flip_immediate = temp_pipe->plane_state->flip_immediate;
+               temp_pipe = temp_pipe->bottom_pipe;
        }
 
        if (flip_immediate && lock) {
                const int TIMEOUT_FOR_FLIP_PENDING = 100000;
                int i;
 
-               for (i = 0; i < TIMEOUT_FOR_FLIP_PENDING; ++i) {
-                       if 
(!pipe->plane_res.hubp->funcs->hubp_is_flip_pending(pipe->plane_res.hubp))
-                               break;
-                       udelay(1);
-               }
-
-               if (pipe->bottom_pipe != NULL) {
-                       for (i = 0; i < TIMEOUT_FOR_FLIP_PENDING; ++i) {
-                               if 
(!pipe->bottom_pipe->plane_res.hubp->funcs->hubp_is_flip_pending(pipe->bottom_pipe->plane_res.hubp))
-                                       break;
-                               udelay(1);
+               temp_pipe = pipe;
+               while (temp_pipe) {
+                       if (temp_pipe->plane_state && 
temp_pipe->plane_state->flip_immediate) {
+                               for (i = 0; i < TIMEOUT_FOR_FLIP_PENDING; ++i) {
+                                       if 
(!temp_pipe->plane_res.hubp->funcs->hubp_is_flip_pending(temp_pipe->plane_res.hubp))
+                                               break;
+                                       udelay(1);
+                               }
+
+                               /* no reason it should take this long for 
immediate flips */
+                               ASSERT(i != TIMEOUT_FOR_FLIP_PENDING);
                        }
+                       temp_pipe = temp_pipe->bottom_pipe;
                }
        }
 
-- 
2.25.1

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to