DP2.1 ALPM is not supported on UHBR (128b/132b) link rates on the NVL platform. Report ALPM as not possible in intel_alpm_is_possible() for external DP running at a UHBR rate on display version 35, so that ALPM and the features relying on it are not enabled in that case. eDP is excluded so eDP ALPM keeps working at any link rate.
v2: - Move the check into intel_alpm_is_possible(). [Jouni] Cc: Jouni Högander <[email protected]> Signed-off-by: Animesh Manna <[email protected]> --- drivers/gpu/drm/i915/display/intel_alpm.c | 11 +++++++++-- drivers/gpu/drm/i915/display/intel_alpm.h | 3 ++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_alpm.c b/drivers/gpu/drm/i915/display/intel_alpm.c index 205f1ae10d43..3123296df6b2 100644 --- a/drivers/gpu/drm/i915/display/intel_alpm.c +++ b/drivers/gpu/drm/i915/display/intel_alpm.c @@ -76,13 +76,20 @@ void intel_alpm_init(struct intel_dp *intel_dp) mutex_init(&intel_dp->alpm.lock); } -bool intel_alpm_is_possible(struct intel_dp *intel_dp) +bool intel_alpm_is_possible(struct intel_dp *intel_dp, + const struct intel_crtc_state *crtc_state) { + struct intel_display *display = to_intel_display(intel_dp); u8 lttpr_alpm_caps; if (!(intel_dp->alpm_dpcd & (DP_ALPM_CAP | DP_ALPM_AUX_LESS_CAP))) return false; + /* DP2.1 ALPM is not supported on UHBR (128b/132b) link rates on NVL. */ + if (DISPLAY_VER(display) == 35 && !intel_dp_is_edp(intel_dp) && + intel_dp_is_uhbr(crtc_state)) + return false; + if (drm_dp_lttpr_count(intel_dp->lttpr_common_caps) <= 0) return true; @@ -556,7 +563,7 @@ void intel_alpm_lobf_compute_config(struct intel_dp *intel_dp, if (intel_dp->alpm.sink_alpm_error) return; - if (!intel_alpm_is_possible(intel_dp)) + if (!intel_alpm_is_possible(intel_dp, crtc_state)) return; if (DISPLAY_VER(display) < 20) diff --git a/drivers/gpu/drm/i915/display/intel_alpm.h b/drivers/gpu/drm/i915/display/intel_alpm.h index 9319572c221e..24c319bc5eff 100644 --- a/drivers/gpu/drm/i915/display/intel_alpm.h +++ b/drivers/gpu/drm/i915/display/intel_alpm.h @@ -17,7 +17,8 @@ struct intel_crtc; int intel_alpm_init_dpcd(struct intel_dp *intel_dp); void intel_alpm_init(struct intel_dp *intel_dp); -bool intel_alpm_is_possible(struct intel_dp *intel_dp); +bool intel_alpm_is_possible(struct intel_dp *intel_dp, + const struct intel_crtc_state *crtc_state); bool intel_alpm_compute_params(struct intel_dp *intel_dp, struct intel_crtc_state *crtc_state); void intel_alpm_lobf_compute_config(struct intel_dp *intel_dp, -- 2.43.0
