[PATCH v2 3/4] drm/i915/alpm: Calculate ALPM Entry check

Murthy, Arun R arun.r.murthy at intel.com
Mon Jan 29 02:08:21 UTC 2024



> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces at lists.freedesktop.org> On Behalf Of Jouni
> Högander
> Sent: Friday, January 5, 2024 7:45 PM
> To: intel-gfx at lists.freedesktop.org
> Subject: [PATCH v2 3/4] drm/i915/alpm: Calculate ALPM Entry check
> 
> ALPM Entry Check represents the number of lines needed to put the main link
> to sleep and keep it in the sleep state before it can be taken out of the SLEEP
> state (eDP requires the main link to be in the SLEEP state for a minimum of
> 5us).
> 
> Bspec: 71477
> 
> Signed-off-by: Jouni Högander <jouni.hogander at intel.com>
> ---
>  .../drm/i915/display/intel_display_types.h    |  3 ++
>  drivers/gpu/drm/i915/display/intel_psr.c      | 28 +++++++++++++++++++
>  2 files changed, 31 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h
> b/drivers/gpu/drm/i915/display/intel_display_types.h
> index 889a8b34b7ac..7eddef859ff4 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> @@ -1680,6 +1680,9 @@ struct intel_pps {  struct alpm_parameters {
>  	u8 io_wake_lines;
>  	u8 fast_wake_lines;
> +
> +	/* LNL and beyond */
> +	u8 check_entry_lines;
>  };
> 
>  struct intel_psr {
> diff --git a/drivers/gpu/drm/i915/display/intel_psr.c
> b/drivers/gpu/drm/i915/display/intel_psr.c
> index 1709ebb31215..7fbd18f21c3b 100644
> --- a/drivers/gpu/drm/i915/display/intel_psr.c
> +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> @@ -1099,6 +1099,28 @@ static bool
> _compute_psr2_sdp_prior_scanline_indication(struct intel_dp *intel_d
>  	return true;
>  }
> 
> +static bool _lnl_compute_alpm_params(struct intel_dp *intel_dp,
> +				     struct intel_crtc_state *crtc_state) {
> +	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
> +	struct alpm_parameters *alpm_params = &intel_dp->psr.alpm_params;
> +	int check_entry_lines;
> +
> +	/* ALPM Entry Check = 2 + CEILING( 5us /tline ) */
> +	check_entry_lines = 2 +
> +		intel_usecs_to_scanlines(&crtc_state->hw.adjusted_mode, 5);
> +
> +	if (check_entry_lines > 15)
> +		return false;
> +
> +	if (i915->display.params.psr_safest_params)
> +		check_entry_lines = 15;
> +
> +	alpm_params->check_entry_lines = check_entry_lines;
> +
> +	return true;
> +}
> +
>  static bool _compute_alpm_params(struct intel_dp *intel_dp,
>  				 struct intel_crtc_state *crtc_state)  { @@ -
> 1114,6 +1136,8 @@ static bool _compute_alpm_params(struct intel_dp
> *intel_dp,
>  		 * it is not enough -> use 45 us.
>  		 */
>  		fast_wake_time = 45;
> +
> +		/* TODO: Check how we can use ALPM_CTL fast wake extended
> field */
>  		max_wake_lines = 12;
>  	} else {
>  		io_wake_time = 50;
> @@ -1130,6 +1154,10 @@ static bool _compute_alpm_params(struct intel_dp
> *intel_dp,
>  	    fast_wake_lines > max_wake_lines)
>  		return false;
> 
> +	if (DISPLAY_VER(i915) >= 20 && !_lnl_compute_alpm_params(intel_dp,
> +								 crtc_state))
The function name _lnl_*** indicates it should be display ver 20. So can this display ver check be moved to _lnl_*** ?

Thanks and Regards,
Arun R Murthy
-------------------
> +		return false;
> +
>  	if (i915->display.params.psr_safest_params)
>  		io_wake_lines = fast_wake_lines = max_wake_lines;
> 
> --
> 2.34.1



More information about the Intel-gfx mailing list