Re: [PATCH] drm/amd/display: Fix sending VSC (+ colorimetry) packets for DP/eDP displays without PSR

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 1/3/24 14:17, Joshua Ashton wrote:
Thanks! Is it possible for us to get this backported too?

Sure thing.

Cc: stable@xxxxxxxxxxxxxxx


I forgot to add a Fixes: tag to this commit. It should be

Fixes: 15f9dfd545a1 ("drm/amd/display: Register Colorspace property for DP and HDMI")

- Joshie 🐸✨

On 1/3/24 14:35, Hamza Mahfooz wrote:
On 1/1/24 13:28, Joshua Ashton wrote:
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.

Signed-off-by: Joshua Ashton <joshua@xxxxxxxxx>

Cc: Harry Wentland <harry.wentland@xxxxxxx>
Cc: Xaver Hugl <xaver.hugl@xxxxxxxxx>
Cc: Melissa Wen <mwen@xxxxxxxxxx>

Applied, thanks!

---
  drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c   |  8 +++++---
  .../amd/display/modules/info_packet/info_packet.c   | 13 ++++++++-----
  2 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index 2845c884398e..6dff56408bf4 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -6233,8 +6233,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
@@ -6250,8 +6251,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);
diff --git a/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c b/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c
index 84f9b412a4f1..738ee763f24a 100644
--- a/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c
+++ b/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c
@@ -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)

--
Hamza





[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux