]> Git Repo - linux.git/commitdiff
drm/amd/display: Fix sending VSC (+ colorimetry) packets for DP/eDP displays without PSR
authorJoshua Ashton <[email protected]>
Mon, 1 Jan 2024 18:28:22 +0000 (18:28 +0000)
committerAlex Deucher <[email protected]>
Fri, 5 Jan 2024 21:04:42 +0000 (16:04 -0500)
The check for sending the vsc infopacket to the display was gated behind
PSR (Panel Self Refresh) being enabled.

The vsc infopacket also contains the colorimetry (specifically the
container color gamut) information for the stream on modern DP.

PSR is typically only supported on mobile phone eDP displays, thus this
was not getting sent for typical desktop monitors or TV screens.

This functionality is needed for proper HDR10 functionality on DP as it
wants BT2020 RGB/YCbCr for the container color space.

Cc: [email protected]
Cc: Harry Wentland <[email protected]>
Cc: Xaver Hugl <[email protected]>
Cc: Melissa Wen <[email protected]>
Fixes: 15f9dfd545a1 ("drm/amd/display: Register Colorspace property for DP and HDMI")
Tested-by: Simon Berz <[email protected]>
Tested-by: Xaver Hugl <[email protected]>
Signed-off-by: Joshua Ashton <[email protected]>
Signed-off-by: Hamza Mahfooz <[email protected]>
Signed-off-by: Alex Deucher <[email protected]>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c

index d869d0d7bf4c1f826cc5e5206d287806cc62d505..d9729cf5ceea5a5335ce84d4da83d5f214c7643a 100644 (file)
@@ -6236,8 +6236,9 @@ create_stream_for_sink(struct drm_connector *connector,
 
        if (stream->signal == SIGNAL_TYPE_HDMI_TYPE_A)
                mod_build_hf_vsif_infopacket(stream, &stream->vsp_infopacket);
-
-       if (stream->link->psr_settings.psr_feature_enabled || stream->link->replay_settings.replay_feature_enabled) {
+       else if (stream->signal == SIGNAL_TYPE_DISPLAY_PORT ||
+                        stream->signal == SIGNAL_TYPE_DISPLAY_PORT_MST ||
+                        stream->signal == SIGNAL_TYPE_EDP) {
                //
                // should decide stream support vsc sdp colorimetry capability
                // before building vsc info packet
@@ -6253,8 +6254,9 @@ create_stream_for_sink(struct drm_connector *connector,
                if (stream->out_transfer_func->tf == TRANSFER_FUNCTION_GAMMA22)
                        tf = TRANSFER_FUNC_GAMMA_22;
                mod_build_vsc_infopacket(stream, &stream->vsc_infopacket, stream->output_color_space, tf);
-               aconnector->psr_skip_count = AMDGPU_DM_PSR_ENTRY_DELAY;
 
+               if (stream->link->psr_settings.psr_feature_enabled)
+                       aconnector->psr_skip_count = AMDGPU_DM_PSR_ENTRY_DELAY;
        }
 finish:
        dc_sink_release(sink);
index 84f9b412a4f1172d17502395d0f418bae8233d1a..738ee763f24a516153bf94ba5beaabec1f78fd9f 100644 (file)
@@ -147,12 +147,15 @@ void mod_build_vsc_infopacket(const struct dc_stream_state *stream,
        }
 
        /* VSC packet set to 4 for PSR-SU, or 2 for PSR1 */
-       if (stream->link->psr_settings.psr_version == DC_PSR_VERSION_SU_1)
-               vsc_packet_revision = vsc_packet_rev4;
-       else if (stream->link->replay_settings.config.replay_supported)
+       if (stream->link->psr_settings.psr_feature_enabled) {
+               if (stream->link->psr_settings.psr_version == DC_PSR_VERSION_SU_1)
+                       vsc_packet_revision = vsc_packet_rev4;
+               else if (stream->link->psr_settings.psr_version == DC_PSR_VERSION_1)
+                       vsc_packet_revision = vsc_packet_rev2;
+       }
+
+       if (stream->link->replay_settings.config.replay_supported)
                vsc_packet_revision = vsc_packet_rev4;
-       else if (stream->link->psr_settings.psr_version == DC_PSR_VERSION_1)
-               vsc_packet_revision = vsc_packet_rev2;
 
        /* Update to revision 5 for extended colorimetry support */
        if (stream->use_vsc_sdp_for_colorimetry)
This page took 0.091644 seconds and 4 git commands to generate.