Re: [PATCH 1/3] drm/i915/display/psr: Set partial frame enable when forcing full frame fetch

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2022-04-01 at 15:29 -0700, José Roberto de Souza wrote:
> Following up what was done in commit 804f46885317 ("drm/i915/psr: Set
> "SF Partial Frame Enable" also on full update") and also setting
> partial frame enable when psr_force_hw_tracking_exit() is called.
> 
> Also as PSR2_MAN_TRK_CTL is a double buffered registers do a RMW
> is not a good idea so here also setting the man_trk_ctl_enable_bit()
> that is required in TGL and only doing a register write.

Reviewed-by: Jouni Högander <jouni.hogander@xxxxxxxxx>
> 
> v2:
> - not doing a rmw
> 
> Cc: Jouni Högander <jouni.hogander@xxxxxxxxx>
> Cc: Mika Kahola <mika.kahola@xxxxxxxxx>
> Signed-off-by: José Roberto de Souza <jose.souza@xxxxxxxxx>
> ---
>  drivers/gpu/drm/i915/display/intel_psr.c | 18 +++++++++++-------
>  1 file changed, 11 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_psr.c
> b/drivers/gpu/drm/i915/display/intel_psr.c
> index 80002ca6a6ebe..2da2468f555ec 100644
> --- a/drivers/gpu/drm/i915/display/intel_psr.c
> +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> @@ -1436,6 +1436,11 @@ void intel_psr_resume(struct intel_dp
> *intel_dp)
>  	mutex_unlock(&psr->lock);
>  }
>  
> +static inline u32 man_trk_ctl_enable_bit_get(struct drm_i915_private
> *dev_priv)
> +{
> +	return IS_ALDERLAKE_P(dev_priv) ? 0 : PSR2_MAN_TRK_CTL_ENABLE;
> +}
> +
>  static inline u32 man_trk_ctl_single_full_frame_bit_get(struct
> drm_i915_private *dev_priv)
>  {
>  	return IS_ALDERLAKE_P(dev_priv) ?
> @@ -1455,9 +1460,11 @@ static void psr_force_hw_tracking_exit(struct
> intel_dp *intel_dp)
>  	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
>  
>  	if (intel_dp->psr.psr2_sel_fetch_enabled)
> -		intel_de_rmw(dev_priv,
> -			     PSR2_MAN_TRK_CTL(intel_dp-
> >psr.transcoder), 0,
> -			     man_trk_ctl_single_full_frame_bit_get(dev_
> priv));
> +		intel_de_write(dev_priv,
> +			       PSR2_MAN_TRK_CTL(intel_dp-
> >psr.transcoder),
> +			       man_trk_ctl_enable_bit_get(dev_priv) |
> +			       man_trk_ctl_partial_frame_bit_get(dev_pr
> iv) |
> +			       man_trk_ctl_single_full_frame_bit_get(de
> v_priv));
>  
>  	/*
>  	 * Display WA #0884: skl+
> @@ -1554,10 +1561,7 @@ static void psr2_man_trk_ctl_calc(struct
> intel_crtc_state *crtc_state,
>  {
>  	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
>  	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
> -	u32 val = 0;
> -
> -	if (!IS_ALDERLAKE_P(dev_priv))
> -		val = PSR2_MAN_TRK_CTL_ENABLE;
> +	u32 val = man_trk_ctl_enable_bit_get(dev_priv);
>  
>  	/* SF partial frame enable has to be set even on full update */
>  	val |= man_trk_ctl_partial_frame_bit_get(dev_priv);





[Index of Archives]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux