drm/i915/dp_mst: Enable decompression in the sink from the MST encoder hooks
authorImre Deak <imre.deak@intel.com>
Tue, 24 Oct 2023 01:09:17 +0000 (04:09 +0300)
committerImre Deak <imre.deak@intel.com>
Wed, 8 Nov 2023 15:22:18 +0000 (17:22 +0200)
Enable/disable the DSC decompression in the sink/branch from the MST
encoder hooks. This prepares for an upcoming patch toggling DSC for each
stream as needed, but for now keeps the current behavior, as DSC is only
enabled for the first MST stream.

v2:
- Rebased on latest drm-tip.

Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20231107001505.3370108-5-imre.deak@intel.com
drivers/gpu/drm/i915/display/intel_ddi.c
drivers/gpu/drm/i915/display/intel_dp_mst.c

index 1abf74af6c5ce3fec31ea25b223489948d9dff9a..cc2a38fc22d0d71b9151053ce5f1484008aab743 100644 (file)
@@ -2538,7 +2538,9 @@ static void mtl_ddi_pre_enable_dp(struct intel_atomic_state *state,
                intel_dp_set_power(intel_dp, DP_SET_POWER_D0);
 
        intel_dp_configure_protocol_converter(intel_dp, crtc_state);
-       intel_dp_sink_set_decompression_state(intel_dp, crtc_state, true);
+       if (!is_mst)
+               intel_dp_sink_set_decompression_state(intel_dp, crtc_state, true);
+
        /*
         * DDI FEC: "anticipates enabling FEC encoding sets the FEC_READY bit
         * in the FEC_CONFIGURATION register to 1 before initiating link
@@ -2689,7 +2691,8 @@ static void tgl_ddi_pre_enable_dp(struct intel_atomic_state *state,
                intel_dp_set_power(intel_dp, DP_SET_POWER_D0);
 
        intel_dp_configure_protocol_converter(intel_dp, crtc_state);
-       intel_dp_sink_set_decompression_state(intel_dp, crtc_state, true);
+       if (!is_mst)
+               intel_dp_sink_set_decompression_state(intel_dp, crtc_state, true);
        /*
         * DDI FEC: "anticipates enabling FEC encoding sets the FEC_READY bit
         * in the FEC_CONFIGURATION register to 1 before initiating link
@@ -2769,8 +2772,9 @@ static void hsw_ddi_pre_enable_dp(struct intel_atomic_state *state,
        if (!is_mst)
                intel_dp_set_power(intel_dp, DP_SET_POWER_D0);
        intel_dp_configure_protocol_converter(intel_dp, crtc_state);
-       intel_dp_sink_set_decompression_state(intel_dp, crtc_state,
-                                             true);
+       if (!is_mst)
+               intel_dp_sink_set_decompression_state(intel_dp, crtc_state,
+                                                     true);
        intel_dp_sink_set_fec_ready(intel_dp, crtc_state, true);
        intel_dp_start_link_train(intel_dp, crtc_state);
        if ((port != PORT_A || DISPLAY_VER(dev_priv) >= 9) &&
index 4f066a868b9a2b06fa2f02d1baac536914ab6c48..eab69f57655d9796b44166254db011d9685df80f 100644 (file)
@@ -776,6 +776,13 @@ static void intel_mst_disable_dp(struct intel_atomic_state *state,
        intel_hdcp_disable(intel_mst->connector);
 
        intel_audio_codec_disable(encoder, old_crtc_state, old_conn_state);
+
+       if (intel_dp->active_mst_links == 1) /* last stream ? */
+               /*
+                * TODO: disable decompression for all streams/in any MST ports, not
+                * only in the first downstream branch device.
+                */
+               intel_dp_sink_set_decompression_state(intel_dp, old_crtc_state, false);
 }
 
 static void intel_mst_post_disable_dp(struct intel_atomic_state *state,
@@ -932,9 +939,15 @@ static void intel_mst_pre_enable_dp(struct intel_atomic_state *state,
 
        drm_dp_send_power_updown_phy(&intel_dp->mst_mgr, connector->port, true);
 
-       if (first_mst_stream)
+       if (first_mst_stream) {
+               /*
+                * TODO: enable decompression for all streams/in any MST ports, not
+                * only in the first downstream branch device.
+                */
+               intel_dp_sink_set_decompression_state(intel_dp, pipe_config, true);
                dig_port->base.pre_enable(state, &dig_port->base,
                                                pipe_config, NULL);
+       }
 
        intel_dp->active_mst_links++;