From: Aurabindo Pillai <[email protected]>

[Why&How]
Doing timing sync seqence for phantom pipes
will not go through since they are not fully
programmed like normal pipes. Skip the sequence
on such pipes

Reviewed-by: Alvin Lee <[email protected]>
Acked-by: Qingqing Zhuo <[email protected]>
Signed-off-by: Aurabindo Pillai <[email protected]>
---
 .../amd/display/dc/dcn10/dcn10_hw_sequencer.c | 26 ++++++++++++++++---
 1 file changed, 23 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c 
b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
index f4b3ec32a331..305e0c545374 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
@@ -2244,6 +2244,9 @@ void dcn10_enable_timing_synchronization(
        DC_SYNC_INFO("Setting up OTG reset trigger\n");
 
        for (i = 1; i < group_size; i++) {
+               if (grouped_pipes[i]->stream && 
grouped_pipes[i]->stream->mall_stream_config.type == SUBVP_PHANTOM)
+                       continue;
+
                opp = grouped_pipes[i]->stream_res.opp;
                tg = grouped_pipes[i]->stream_res.tg;
                tg->funcs->get_otg_active_size(tg, &width, &height);
@@ -2254,13 +2257,21 @@ void dcn10_enable_timing_synchronization(
        for (i = 0; i < group_size; i++) {
                if (grouped_pipes[i]->stream == NULL)
                        continue;
+
+               if (grouped_pipes[i]->stream && 
grouped_pipes[i]->stream->mall_stream_config.type == SUBVP_PHANTOM)
+                       continue;
+
                grouped_pipes[i]->stream->vblank_synchronized = false;
        }
 
-       for (i = 1; i < group_size; i++)
+       for (i = 1; i < group_size; i++) {
+               if (grouped_pipes[i]->stream && 
grouped_pipes[i]->stream->mall_stream_config.type == SUBVP_PHANTOM)
+                       continue;
+
                grouped_pipes[i]->stream_res.tg->funcs->enable_reset_trigger(
                                grouped_pipes[i]->stream_res.tg,
                                grouped_pipes[0]->stream_res.tg->inst);
+       }
 
        DC_SYNC_INFO("Waiting for trigger\n");
 
@@ -2268,12 +2279,21 @@ void dcn10_enable_timing_synchronization(
         * synchronized. Look at last pipe programmed to reset.
         */
 
-       wait_for_reset_trigger_to_occur(dc_ctx, 
grouped_pipes[1]->stream_res.tg);
-       for (i = 1; i < group_size; i++)
+       if (grouped_pipes[1]->stream && 
grouped_pipes[1]->stream->mall_stream_config.type != SUBVP_PHANTOM)
+               wait_for_reset_trigger_to_occur(dc_ctx, 
grouped_pipes[1]->stream_res.tg);
+
+       for (i = 1; i < group_size; i++) {
+               if (grouped_pipes[i]->stream && 
grouped_pipes[i]->stream->mall_stream_config.type == SUBVP_PHANTOM)
+                       continue;
+
                grouped_pipes[i]->stream_res.tg->funcs->disable_reset_trigger(
                                grouped_pipes[i]->stream_res.tg);
+       }
 
        for (i = 1; i < group_size; i++) {
+               if (grouped_pipes[i]->stream && 
grouped_pipes[i]->stream->mall_stream_config.type == SUBVP_PHANTOM)
+                       continue;
+
                opp = grouped_pipes[i]->stream_res.opp;
                tg = grouped_pipes[i]->stream_res.tg;
                tg->funcs->get_otg_active_size(tg, &width, &height);
-- 
2.25.1

Reply via email to