]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/i915/psr: Move Panel Replay DSC sink support data to intel_connector
authorJouni Högander <jouni.hogander@intel.com>
Thu, 4 Dec 2025 10:47:31 +0000 (12:47 +0200)
committerJouni Högander <jouni.hogander@intel.com>
Mon, 8 Dec 2025 06:16:01 +0000 (08:16 +0200)
As a preparation for MST Panel Replay we need to move Panel Replay sink
related data into intel_connector. Move Panel Replay DSC sink support data
as well into intel_connector.

Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
Reviewed-by: Imre Deak <imre.deak@intel.com>
Link: https://patch.msgid.link/20251204104733.1106145-7-jouni.hogander@intel.com
drivers/gpu/drm/i915/display/intel_display_types.h
drivers/gpu/drm/i915/display/intel_dp.c
drivers/gpu/drm/i915/display/intel_psr.c

index 894305860d69761088dc4bc07dc5a3730703fea3..b4c86b15e67b9f5d2ce0c05efdb4c110424341a8 100644 (file)
@@ -509,6 +509,12 @@ struct intel_hdcp {
        bool force_hdcp14;
 };
 
+enum intel_panel_replay_dsc_support {
+       INTEL_DP_PANEL_REPLAY_DSC_NOT_SUPPORTED,
+       INTEL_DP_PANEL_REPLAY_DSC_FULL_FRAME_ONLY,
+       INTEL_DP_PANEL_REPLAY_DSC_SELECTIVE_UPDATE,
+};
+
 struct intel_connector {
        struct drm_connector base;
        /*
@@ -566,6 +572,8 @@ struct intel_connector {
                        u8 dpcd[DP_PANEL_REPLAY_CAP_SIZE];
 #define INTEL_PR_DPCD_INDEX(pr_dpcd_register)  ((pr_dpcd_register) - DP_PANEL_REPLAY_CAP_SUPPORT)
 
+                       enum intel_panel_replay_dsc_support dsc_support;
+
                        u16 su_w_granularity;
                        u16 su_y_granularity;
                } panel_replay_caps;
@@ -970,12 +978,6 @@ struct intel_csc_matrix {
        u16 postoff[3];
 };
 
-enum intel_panel_replay_dsc_support {
-       INTEL_DP_PANEL_REPLAY_DSC_NOT_SUPPORTED,
-       INTEL_DP_PANEL_REPLAY_DSC_FULL_FRAME_ONLY,
-       INTEL_DP_PANEL_REPLAY_DSC_SELECTIVE_UPDATE,
-};
-
 struct scaler_filter_coeff {
        u16 sign;
        u16 exp;
@@ -1750,7 +1752,6 @@ struct intel_psr {
        bool source_panel_replay_support;
        bool sink_panel_replay_support;
        bool sink_panel_replay_su_support;
-       enum intel_panel_replay_dsc_support sink_panel_replay_dsc_support;
        bool panel_replay_enabled;
        u32 dc3co_exitline;
        u32 dc3co_exit_delay;
index 3838835e7e7eb6326360a55efd287c54be603387..8c5ddf0b09d25af9d6b7e34e27c41c401302200c 100644 (file)
@@ -6059,7 +6059,7 @@ intel_dp_detect(struct drm_connector *_connector,
                       sizeof(connector->dp.panel_replay_caps.dpcd));
                intel_dp->psr.sink_panel_replay_support = false;
                intel_dp->psr.sink_panel_replay_su_support = false;
-               intel_dp->psr.sink_panel_replay_dsc_support =
+               connector->dp.panel_replay_caps.dsc_support =
                        INTEL_DP_PANEL_REPLAY_DSC_NOT_SUPPORTED;
 
                intel_dp_mst_disconnect(intel_dp);
index 89680d7cbabd00cf3efd0ad0573cc32a38443b15..5a96a4f8258fa0373c32eaef2440278b70f3d35b 100644 (file)
@@ -643,13 +643,13 @@ static void _panel_replay_init_dpcd(struct intel_dp *intel_dp, struct intel_conn
                _panel_replay_compute_su_granularity(connector);
        }
 
-       intel_dp->psr.sink_panel_replay_dsc_support = compute_pr_dsc_support(connector);
+       connector->dp.panel_replay_caps.dsc_support = compute_pr_dsc_support(connector);
 
        drm_dbg_kms(display->drm,
                    "Panel replay %sis supported by panel (in DSC mode: %s)\n",
                    intel_dp->psr.sink_panel_replay_su_support ?
                    "selective_update " : "",
-                   panel_replay_dsc_support_str(intel_dp->psr.sink_panel_replay_dsc_support));
+                   panel_replay_dsc_support_str(connector->dp.panel_replay_caps.dsc_support));
 }
 
 static void _psr_init_dpcd(struct intel_dp *intel_dp, struct intel_connector *connector)
@@ -1651,7 +1651,7 @@ static bool intel_sel_update_config_valid(struct intel_crtc_state *crtc_state,
                        goto unsupported;
 
                if (intel_dsc_enabled_on_link(crtc_state) &&
-                   intel_dp->psr.sink_panel_replay_dsc_support !=
+                   connector->dp.panel_replay_caps.dsc_support !=
                    INTEL_DP_PANEL_REPLAY_DSC_SELECTIVE_UPDATE) {
                        drm_dbg_kms(display->drm,
                                    "Selective update with Panel Replay not enabled because it's not supported with DSC\n");
@@ -1748,7 +1748,7 @@ static bool _panel_replay_compute_config(struct intel_crtc_state *crtc_state,
        }
 
        if (intel_dsc_enabled_on_link(crtc_state) &&
-           intel_dp->psr.sink_panel_replay_dsc_support ==
+           connector->dp.panel_replay_caps.dsc_support ==
            INTEL_DP_PANEL_REPLAY_DSC_NOT_SUPPORTED) {
                drm_dbg_kms(display->drm,
                            "Panel Replay not enabled because it's not supported with DSC\n");
@@ -1833,6 +1833,7 @@ void intel_psr_compute_config(struct intel_dp *intel_dp,
                              struct drm_connector_state *conn_state)
 {
        struct intel_display *display = to_intel_display(intel_dp);
+       struct intel_connector *connector = to_intel_connector(conn_state->connector);
        const struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
 
        if (!psr_global_enabled(intel_dp)) {
@@ -1864,9 +1865,8 @@ void intel_psr_compute_config(struct intel_dp *intel_dp,
        }
 
        /* Only used for state verification. */
-       crtc_state->panel_replay_dsc_support = intel_dp->psr.sink_panel_replay_dsc_support;
-       crtc_state->has_panel_replay = _panel_replay_compute_config(crtc_state,
-                                                                   conn_state);
+       crtc_state->panel_replay_dsc_support = connector->dp.panel_replay_caps.dsc_support;
+       crtc_state->has_panel_replay = _panel_replay_compute_config(crtc_state, conn_state);
 
        crtc_state->has_psr = crtc_state->has_panel_replay ? true :
                _psr_compute_config(intel_dp, crtc_state, conn_state);
@@ -4134,7 +4134,7 @@ static void intel_psr_sink_capability(struct intel_dp *intel_dp,
        seq_printf(m, ", Panel Replay Selective Update = %s",
                   str_yes_no(psr->sink_panel_replay_su_support));
        seq_printf(m, ", Panel Replay DSC support = %s",
-                  panel_replay_dsc_support_str(psr->sink_panel_replay_dsc_support));
+                  panel_replay_dsc_support_str(connector->dp.panel_replay_caps.dsc_support));
        if (connector->dp.panel_replay_caps.dpcd[INTEL_PR_DPCD_INDEX(DP_PANEL_REPLAY_CAP_SUPPORT)] &
            DP_PANEL_REPLAY_EARLY_TRANSPORT_SUPPORT)
                seq_printf(m, " (Early Transport)");