소스 검색

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>
Yongqiang Sun 9 년 전
부모
커밋
10bff00592
2개의 변경된 파일19개의 추가작업 그리고 11개의 파일을 삭제
  1. 3 0
      drivers/gpu/drm/amd/display/dc/core/dc_resource.c
  2. 16 11
      drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c

+ 3 - 0
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;
 

+ 16 - 11
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