From 1fad73315797775c1ca4dcd3d9ef5cc4847dd07a Mon Sep 17 00:00:00 2001 From: Yongqiang Sun Date: Thu, 5 Jan 2017 11:26:59 -0500 Subject: [PATCH] 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. Change-Id: Ic01b8b888ab6402d6c53c37a9ab9cccd64787b0d Signed-off-by: Yongqiang Sun Acked-by: Harry Wentland --- .../gpu/drm/amd/display/dc/core/dc_resource.c | 3 +++ .../amd/display/dc/dce/dce_stream_encoder.c | 27 +++++++++++-------- 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 80fe6b9f93978..a82f2d6ea80fd 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 82133ab3224d3..8156c6a8ff5df 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