Blob Blame History Raw
From: Yongqiang Sun <yongqiang.sun@amd.com>
Date: Thu, 5 Jan 2017 11:26:59 -0500
Subject: drm/amd/display: Check hdr support before setting.
Git-commit: 10bff005926af12aa7b1d97ea9bc948ccbaed1c9
Patch-mainline: v4.15-rc1
References: FATE#326289 FATE#326079 FATE#326049 FATE#322398 FATE#326166

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>
Acked-by: Petr Tesarik <ptesarik@suse.com>
---
 drivers/gpu/drm/amd/display/dc/core/dc_resource.c       |    3 +
 drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c |   27 +++++++++-------
 2 files changed, 19 insertions(+), 11 deletions(-)

--- 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;
 
--- 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
 	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,
+				2,  /* packetIndex */
+				&info_frame->spd);
+
+	if (info_frame->hdrsmd.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);
+				3,  /* packetIndex */
+				&info_frame->hdrsmd);
 
 	/* enable/disable transmission of packet(s).
 	*  If enabled, packet transmission begins on the next frame