summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYongqiang Sun <yongqiang.sun@amd.com>2017-01-05 11:26:59 -0500
committerAlex Deucher <alexander.deucher@amd.com>2017-09-26 17:08:47 -0400
commit10bff005926af12aa7b1d97ea9bc948ccbaed1c9 (patch)
tree61403fe2764a855c1724fbf190421a9c9bf90dce
parente66e4d64289b647f7787d257dd2be0055ae7df94 (diff)
downloadlinux-stable-10bff005926af12aa7b1d97ea9bc948ccbaed1c9.tar.gz
linux-stable-10bff005926af12aa7b1d97ea9bc948ccbaed1c9.tar.bz2
linux-stable-10bff005926af12aa7b1d97ea9bc948ccbaed1c9.zip
drm/amd/display: Check hdr support before setting.
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>
-rw-r--r--drivers/gpu/drm/amd/display/dc/core/dc_resource.c3
-rw-r--r--drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c27
2 files changed, 19 insertions, 11 deletions
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
index 80fe6b9f9397..a82f2d6ea80f 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
@@ -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;
diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c b/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c
index 82133ab3224d..8156c6a8ff5d 100644
--- a/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c
+++ b/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c
@@ -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