Initialize ALPM for DP2.1 and separate out ALPM mutex-init
from alpm-init.

v2: Separate out mutex-init. [Jani]
v3: Refactor further to avoid DISPLAY_VER check in multiple places. [Jani]
v4: Cosmetic changes. [Suraj]
v5: Reset alpm_dpcd and simplify source-supported check.
v6: Drop display-version check for eDP for backward compatible.

Cc: Jouni Högander <[email protected]>
Reviewed-by: Suraj Kandpal <[email protected]>
Signed-off-by: Animesh Manna <[email protected]>
---
 drivers/gpu/drm/i915/display/intel_alpm.c | 9 +++++++++
 drivers/gpu/drm/i915/display/intel_alpm.h | 1 +
 drivers/gpu/drm/i915/display/intel_dp.c   | 9 +++++++--
 3 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_alpm.c 
b/drivers/gpu/drm/i915/display/intel_alpm.c
index a6743fe62d48..4801fc6bade2 100644
--- a/drivers/gpu/drm/i915/display/intel_alpm.c
+++ b/drivers/gpu/drm/i915/display/intel_alpm.c
@@ -43,6 +43,15 @@ bool intel_alpm_is_alpm_aux_less(struct intel_dp *intel_dp,
                (crtc_state->has_lobf && 
intel_alpm_aux_less_wake_supported(intel_dp));
 }
 
+bool intel_alpm_source_supported(struct intel_connector *connector)
+{
+       struct intel_display *display = to_intel_display(connector);
+
+       return (connector->base.connector_type == 
DRM_MODE_CONNECTOR_DisplayPort &&
+               DISPLAY_VER(display) >= 35) ||
+               connector->base.connector_type == DRM_MODE_CONNECTOR_eDP;
+}
+
 bool intel_alpm_init_dpcd(struct intel_dp *intel_dp)
 {
        u8 dpcd;
diff --git a/drivers/gpu/drm/i915/display/intel_alpm.h 
b/drivers/gpu/drm/i915/display/intel_alpm.h
index 56c3e1482e37..9a02fa386ee3 100644
--- a/drivers/gpu/drm/i915/display/intel_alpm.h
+++ b/drivers/gpu/drm/i915/display/intel_alpm.h
@@ -15,6 +15,7 @@ struct intel_connector;
 struct intel_atomic_state;
 struct intel_crtc;
 
+bool intel_alpm_source_supported(struct intel_connector *connector);
 bool intel_alpm_init_dpcd(struct intel_dp *intel_dp);
 void intel_alpm_init(struct intel_dp *intel_dp);
 bool intel_alpm_compute_params(struct intel_dp *intel_dp,
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
b/drivers/gpu/drm/i915/display/intel_dp.c
index 650c8b39270b..b4742bd33cb4 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -6354,6 +6354,7 @@ intel_dp_detect(struct drm_connector *_connector,
                connector->dp.panel_replay_caps.su_support = false;
                connector->dp.panel_replay_caps.dsc_support =
                        INTEL_DP_PANEL_REPLAY_DSC_NOT_SUPPORTED;
+               intel_dp->alpm_dpcd = 0;
 
                intel_dp_mst_disconnect(intel_dp);
 
@@ -6376,6 +6377,9 @@ intel_dp_detect(struct drm_connector *_connector,
        if (ret == 1)
                connector->base.epoch_counter++;
 
+       if (intel_alpm_source_supported(connector))
+               intel_alpm_init_dpcd(intel_dp);
+
        if (!intel_dp_is_edp(intel_dp))
                intel_psr_init_dpcd(intel_dp, connector);
 
@@ -7019,8 +7023,6 @@ static bool intel_edp_init_connector(struct intel_dp 
*intel_dp,
         */
        intel_hpd_enable_detection(encoder);
 
-       intel_alpm_init(intel_dp);
-
        /* Cache DPCD and EDID for edp. */
        has_dpcd = intel_edp_init_dpcd(intel_dp, connector);
 
@@ -7235,6 +7237,9 @@ intel_dp_init_connector(struct intel_digital_port 
*dig_port,
 
        intel_psr_init(intel_dp);
 
+       if (intel_alpm_source_supported(connector))
+               intel_alpm_init(intel_dp);
+
        return true;
 
 fail:
-- 
2.29.0

Reply via email to