drm/i915/psr: Detect panel replay selective update support
authorJouni Högander <jouni.hogander@intel.com>
Fri, 10 May 2024 09:38:17 +0000 (12:38 +0300)
committerJouni Högander <jouni.hogander@intel.com>
Wed, 15 May 2024 07:56:27 +0000 (10:56 +0300)
Add new boolean to store panel replay selective update support of sink into
intel_psr struct.  Detect panel replay selective update support and store
it into this new boolean.

v3: Clear sink_panel_replay_su_support in intel_dp_detect
v2: Merge adding new boolean into this patch

Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
Reviewed-by: Animesh Manna <animesh.manna@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240510093823.3146455-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 e140f79da006b1272878eec98ac85d55ee181c73..9678c2b157f6ffeddf8a7b818011b47e2ef41b4a 100644 (file)
@@ -1724,6 +1724,7 @@ struct intel_psr {
        u16 su_y_granularity;
        bool source_panel_replay_support;
        bool sink_panel_replay_support;
+       bool sink_panel_replay_su_support;
        bool panel_replay_enabled;
        u32 dc3co_exitline;
        u32 dc3co_exit_delay;
index 0984542626098bae19ca8a057798a60b89390a8d..c0a3b6d506817f359ffb3a1d42a59651e7a3f14d 100644 (file)
@@ -5861,6 +5861,7 @@ intel_dp_detect(struct drm_connector *connector,
                memset(&intel_dp->compliance, 0, sizeof(intel_dp->compliance));
                memset(intel_connector->dp.dsc_dpcd, 0, sizeof(intel_connector->dp.dsc_dpcd));
                intel_dp->psr.sink_panel_replay_support = false;
+               intel_dp->psr.sink_panel_replay_su_support = false;
 
                intel_dp_mst_disconnect(intel_dp);
 
index 820499f420bae0bf3ef921deadb40aaff6a93d9d..0a5ce29f09d118fdc46712318dfa4699f6aec135 100644 (file)
@@ -522,9 +522,15 @@ static void _panel_replay_init_dpcd(struct intel_dp *intel_dp)
                return;
        }
 
-       drm_dbg_kms(&i915->drm,
-                   "Panel replay is supported by panel\n");
        intel_dp->psr.sink_panel_replay_support = true;
+
+       if (pr_dpcd & DP_PANEL_REPLAY_SU_SUPPORT)
+               intel_dp->psr.sink_panel_replay_su_support = true;
+
+       drm_dbg_kms(&i915->drm,
+                   "Panel replay %sis supported by panel\n",
+                   intel_dp->psr.sink_panel_replay_su_support ?
+                   "selective_update " : "");
 }
 
 static void _psr_init_dpcd(struct intel_dp *intel_dp)