drm/amd/display: reprogram infoframe during apply_ctx_to_hw
authorJulian Parkin <jparkin@amd.com>
Tue, 17 Apr 2018 15:49:06 +0000 (11:49 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 15 May 2018 18:44:12 +0000 (13:44 -0500)
To ensure the infoframe gets updated during an SDR/HDR switch
this change adds a new function to to check if the HDR static
metadata has changed and adds it to is_timing_changed and
pipe_need_reprogram checks

Signed-off-by: Julian Parkin <jparkin@amd.com>
Reviewed-by: Aric Cyr <Aric.Cyr@amd.com>
Acked-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/core/dc_resource.c

index 447729cd29f0b550d8440d7f91919abb2abb7d75..4de1b443e4389d2cb15800e99012ad181fd409e5 100644 (file)
@@ -1310,6 +1310,19 @@ bool dc_add_all_planes_for_stream(
 }
 
 
+static bool is_hdr_static_meta_changed(struct dc_stream_state *cur_stream,
+       struct dc_stream_state *new_stream)
+{
+       if (cur_stream == NULL)
+               return true;
+
+       if (memcmp(&cur_stream->hdr_static_metadata,
+                       &new_stream->hdr_static_metadata,
+                       sizeof(struct dc_info_packet)) != 0)
+               return true;
+
+       return false;
+}
 
 static bool is_timing_changed(struct dc_stream_state *cur_stream,
                struct dc_stream_state *new_stream)
@@ -1345,6 +1358,9 @@ static bool are_stream_backends_same(
        if (is_timing_changed(stream_a, stream_b))
                return false;
 
+       if (is_hdr_static_meta_changed(stream_a, stream_b))
+               return false;
+
        return true;
 }
 
@@ -2548,6 +2564,8 @@ bool pipe_need_reprogram(
        if (is_timing_changed(pipe_ctx_old->stream, pipe_ctx->stream))
                return true;
 
+       if (is_hdr_static_meta_changed(pipe_ctx_old->stream, pipe_ctx->stream))
+               return true;
 
        return false;
 }