From: Julian Parkin <[email protected]>

[Why]
When planes are added or removed from a stream, the change
in pipe usage from dynamic MPC combine can cause a second
stream using ODM combine to pick a different pipe to combine with.

In this scenario, a different OPP is connected to the ODM without
programming its FMT.

[How]
Reprogram the FMT in dcn20_program_pipe whenever a pipe is
newly enabled, or when its opp changes.

Change-Id: I2d30b47c7370091133e40d879592b55ee1a54382
Signed-off-by: Julian Parkin <[email protected]>
Reviewed-by: Dmytro Laktyushkin <[email protected]>
Acked-by: Bhawanpreet Lakha <[email protected]>
---
 .../drm/amd/display/dc/dcn20/dcn20_hwseq.c    | 20 +++++++++++++++++++
 1 file changed, 20 insertions(+)

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 1b4aac185f3f..4a0038293569 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c
@@ -1399,6 +1399,26 @@ static void dcn20_program_pipe(
         */
        if (pipe_ctx->update_flags.bits.enable || 
pipe_ctx->stream->update_flags.bits.out_tf)
                dc->hwss.set_output_transfer_func(pipe_ctx, pipe_ctx->stream);
+
+       /* If the pipe has been enabled or has a different opp, we
+        * should reprogram the fmt. This deals with cases where
+        * interation between mpc and odm combine on different streams
+        * causes a different pipe to be chosen to odm combine with.
+        */
+       if (pipe_ctx->update_flags.bits.enable
+           || pipe_ctx->update_flags.bits.opp_changed) {
+
+               pipe_ctx->stream_res.opp->funcs->opp_set_dyn_expansion(
+                       pipe_ctx->stream_res.opp,
+                       COLOR_SPACE_YCBCR601,
+                       pipe_ctx->stream->timing.display_color_depth,
+                       pipe_ctx->stream->signal);
+
+               pipe_ctx->stream_res.opp->funcs->opp_program_fmt(
+                       pipe_ctx->stream_res.opp,
+                       &pipe_ctx->stream->bit_depth_params,
+                       &pipe_ctx->stream->clamping);
+       }
 }
 
 static bool does_pipe_need_lock(struct pipe_ctx *pipe)
-- 
2.17.1

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

Reply via email to