On Tue, 2026-09-15 at 23:34 +0530, Animesh Manna wrote: > 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);
This is done already for eDP. You could make it conditional to !intel_dp_is edp. I also found it a bit confusing why alpm_init_dpcd is conditional to intel_alpm_source_supported in case of DP but not in case of eDP. How about moving intel_alpm_source_supported in intel_alpm_init/_dpcd? BR, Jouni Högander > + > 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:
