drm/amd/display: Handle HDR meta update as fast update
authorKrunoslav Kovac <Krunoslav.Kovac@amd.com>
Thu, 5 Jul 2018 23:23:17 +0000 (19:23 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 27 Aug 2018 16:10:59 +0000 (11:10 -0500)
[Why]
Vesa DPMS tool sends different HDR meta in OS flips without changing output
parameters. We don't properly update HDR info frame:
- we label HDR meta update as fast update
- when updating HW info frame, we only do it if full update

[How]
It should still be fast update, so when doing HW infoframe update,
do it always no matter the update type.
Also, don't request passive flip for HDR meta update only without output
transfer function or color space changed.

Signed-off-by: Krunoslav Kovac <Krunoslav.Kovac@amd.com>
Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
Acked-by: Leo Li <sunpeng.li@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/core/dc.c

index eda21868c8928903401461fb6761d26638816094..9a947f8341bfc05944332c788d81286aec15773c 100644 (file)
@@ -1357,6 +1357,13 @@ static void commit_planes_do_stream_update(struct dc *dc,
                                        pipe_ctx->stream_res.tg, &pipe_ctx->stream->timing,
                                        pipe_ctx->stream->periodic_fn_vsync_delta);
 
+                       if (stream_update->hdr_static_metadata ||
+                                       stream_update->vrr_infopacket ||
+                                       stream_update->vsc_infopacket) {
+                               resource_build_info_frame(pipe_ctx);
+                               dc->hwss.update_info_frame(pipe_ctx);
+                       }
+
                        /* Full fe update*/
                        if (update_type == UPDATE_TYPE_FAST)
                                continue;
@@ -1383,13 +1390,6 @@ static void commit_planes_do_stream_update(struct dc *dc,
                                        pipe_ctx->stream_res.abm->funcs->set_abm_level(
                                                pipe_ctx->stream_res.abm, stream->abm_level);
                        }
-
-                       if (stream_update->hdr_static_metadata ||
-                               stream_update->vrr_infopacket ||
-                               stream_update->vsc_infopacket) {
-                               resource_build_info_frame(pipe_ctx);
-                               dc->hwss.update_info_frame(pipe_ctx);
-                       }
                }
        }
 }