drm/amd/display: Check hdr support before setting.
authorYongqiang Sun <yongqiang.sun@amd.com>
Thu, 5 Jan 2017 16:26:59 +0000 (11:26 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 26 Sep 2017 21:08:47 +0000 (17:08 -0400)
In case of programing info frame to
some monitors don't support HDR, it will
result in black screen or corruption when
unplug monitor.
By checking hdr flag to avoid unnecessary
setting for monitors don't support HDR.

Signed-off-by: Yongqiang Sun <yongqiang.sun@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
drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c

index 80fe6b9f9397871cf9609ef41bdbf38ef4ee7056..a82f2d6ea80fd4dac42f408662535468ba477ce1 100644 (file)
@@ -1742,6 +1742,9 @@ static void set_hdr_static_info_packet(
 
        hdr_metadata = surface->public.hdr_static_ctx;
 
+       if (!hdr_metadata.is_hdr)
+               return;
+
        if (dc_is_hdmi_signal(signal)) {
                info_packet->valid = true;
 
index 82133ab3224d36c508ca96fd32fab209790b8fb1..8156c6a8ff5df5aac528ffee4bcc9c43ba326bad 100644 (file)
@@ -555,18 +555,23 @@ static void dce110_stream_encoder_update_dp_info_packets(
        struct dce110_stream_encoder *enc110 = DCE110STRENC_FROM_STRENC(enc);
        uint32_t value = REG_READ(DP_SEC_CNTL);
 
-       dce110_update_generic_info_packet(
+       if (info_frame->vsc.valid)
+               dce110_update_generic_info_packet(
+                                       enc110,
+                                       0,  /* packetIndex */
+                                       &info_frame->vsc);
+
+       if (info_frame->spd.valid)
+               dce110_update_generic_info_packet(
                                enc110,
-                               0,  /* packetIndex */
-                               &info_frame->vsc);
-       dce110_update_generic_info_packet(
-                       enc110,
-                       2,  /* packetIndex */
-                       &info_frame->spd);
-       dce110_update_generic_info_packet(
-                       enc110,
-                       3,  /* packetIndex */
-                       &info_frame->hdrsmd);
+                               2,  /* packetIndex */
+                               &info_frame->spd);
+
+       if (info_frame->hdrsmd.valid)
+               dce110_update_generic_info_packet(
+                               enc110,
+                               3,  /* packetIndex */
+                               &info_frame->hdrsmd);
 
        /* enable/disable transmission of packet(s).
        *  If enabled, packet transmission begins on the next frame