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
