[PATCH 11/11] drm/i915/display: Remove sink ALPM configuration away from PSR code

Jouni Högander jouni.hogander at intel.com
Fri Feb 14 14:01:15 UTC 2025


Configuring ALPM on sink side is not anymore PSR specific as LOBF is using
it as well. Move configuring sink ALPM into ddi_dp code.

Signed-off-by: Jouni Högander <jouni.hogander at intel.com>
---
 drivers/gpu/drm/i915/display/intel_ddi.c | 20 ++++++++++++++++++++
 drivers/gpu/drm/i915/display/intel_psr.c | 23 -----------------------
 2 files changed, 20 insertions(+), 23 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index 5433279227e1..e2d71cdafc2d 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -35,6 +35,7 @@
 #include "i915_drv.h"
 #include "i915_reg.h"
 #include "icl_dsi.h"
+#include "intel_alpm.h"
 #include "intel_audio.h"
 #include "intel_audio_regs.h"
 #include "intel_backlight.h"
@@ -2936,6 +2937,23 @@ static void hsw_ddi_pre_enable_dp(struct intel_atomic_state *state,
 	}
 }
 
+static void intel_ddi_set_alpm_dp(struct intel_encoder *encoder,
+				  const struct intel_crtc_state *crtc_state)
+{
+	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
+	u8 val;
+
+	if (!intel_alpm_aux_wake_supported(intel_dp))
+		return;
+
+	val = DP_ALPM_ENABLE | DP_ALPM_LOCK_ERROR_IRQ_HPD_ENABLE;
+
+	/* Use aux wake for PSR1/PSR2 and aux less for PR and LOBF */
+	val |= !crtc_state->has_panel_replay ? 0 : DP_ALPM_MODE_AUX_LESS;
+
+	drm_dp_dpcd_writeb(&intel_dp->aux, DP_RECEIVER_ALPM_CONFIG, val);
+}
+
 static void intel_ddi_pre_enable_dp(struct intel_atomic_state *state,
 				    struct intel_encoder *encoder,
 				    const struct intel_crtc_state *crtc_state,
@@ -2950,6 +2968,8 @@ static void intel_ddi_pre_enable_dp(struct intel_atomic_state *state,
 	/* Panel replay has to be enabled in sink dpcd before link training. */
 	intel_psr_panel_replay_enable_sink(enc_to_intel_dp(encoder));
 
+	intel_ddi_set_alpm_dp(encoder, crtc_state);
+
 	if (DISPLAY_VER(display) >= 14)
 		mtl_ddi_pre_enable_dp(state, encoder, crtc_state, conn_state);
 	else if (DISPLAY_VER(display) >= 12)
diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
index 5af85dd46a07..4d1e9dd3b889 100644
--- a/drivers/gpu/drm/i915/display/intel_psr.c
+++ b/drivers/gpu/drm/i915/display/intel_psr.c
@@ -794,32 +794,9 @@ static void _psr_enable_sink(struct intel_dp *intel_dp,
 	drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG, val);
 }
 
-static void intel_psr_enable_sink_alpm(struct intel_dp *intel_dp,
-				       const struct intel_crtc_state *crtc_state)
-{
-	u8 val;
-
-	/*
-	 * eDP Panel Replay uses always ALPM
-	 * PSR2 uses ALPM but PSR1 doesn't
-	 */
-	if (!intel_dp_is_edp(intel_dp) || (!crtc_state->has_panel_replay &&
-					   !crtc_state->has_sel_update))
-		return;
-
-	val = DP_ALPM_ENABLE | DP_ALPM_LOCK_ERROR_IRQ_HPD_ENABLE;
-
-	if (crtc_state->has_panel_replay)
-		val |= DP_ALPM_MODE_AUX_LESS;
-
-	drm_dp_dpcd_writeb(&intel_dp->aux, DP_RECEIVER_ALPM_CONFIG, val);
-}
-
 static void intel_psr_enable_sink(struct intel_dp *intel_dp,
 				  const struct intel_crtc_state *crtc_state)
 {
-	intel_psr_enable_sink_alpm(intel_dp, crtc_state);
-
 	crtc_state->has_panel_replay ?
 		_panel_replay_enable_sink(intel_dp, crtc_state) :
 		_psr_enable_sink(intel_dp, crtc_state);
-- 
2.43.0



More information about the Intel-gfx-trybot mailing list