Re: [PATCH 4/4] drm/i915/psr: Allow changing Panel Replay mode without full modeset

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

 



On Mon, 2025-01-13 at 11:22 +0000, Kahola, Mika wrote:
> > -----Original Message-----
> > From: Intel-xe <intel-xe-bounces@xxxxxxxxxxxxxxxxxxxxx> On Behalf
> > Of Jouni
> > Högander
> > Sent: Thursday, 9 January 2025 12.36
> > To: intel-gfx@xxxxxxxxxxxxxxxxxxxxx; intel-xe@xxxxxxxxxxxxxxxxxxxxx
> > Cc: Hogander, Jouni <jouni.hogander@xxxxxxxxx>
> > Subject: [PATCH 4/4] drm/i915/psr: Allow changing Panel Replay mode
> > without
> > full modeset
> > 
> > Currently we are forcing full modeset if Panel Replay mode is
> > changed. This is not
> > necessary as long as we are not changing sink PANEL REPLAY ENABLE
> > bit in
> > PANEL REPLAY ENABLE AND CONFIGURATION 1 register. This can be
> > achieved by
> > entering Panel Replay inactive mode (Live Frame mode) when Panel
> > Replay is
> > disabled and keep PANEL REPLAY ENABLE bit in PANEL REPLAY ENABLE
> > AND
> > CONFIGURATION 1 enabled always if panel is just supporting Panel
> > Replay.
> > 
> 
> Reviewed-by: Mika Kahola <mika.kahola@xxxxxxxxx>

Thank you Mika for checking my patches. These are now pushed to drm-
intel-next.

BR,

Jouni Högander

> 
> > Signed-off-by: Jouni Högander <jouni.hogander@xxxxxxxxx>
> > ---
> >  drivers/gpu/drm/i915/display/intel_display.c | 14 -----------
> >  drivers/gpu/drm/i915/display/intel_psr.c     | 25 +++++++++++++---
> > ----
> >  2 files changed, 17 insertions(+), 22 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> > b/drivers/gpu/drm/i915/display/intel_display.c
> > index 21319f753a34..35499eb296b3 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display.c
> > +++ b/drivers/gpu/drm/i915/display/intel_display.c
> > @@ -5638,20 +5638,6 @@ intel_pipe_config_compare(const struct
> > intel_crtc_state *current_config,
> >  		PIPE_CONF_CHECK_CSC(output_csc);
> >  	}
> > 
> > -	/*
> > -	 * Panel replay has to be enabled before link training.
> > PSR doesn't have
> > -	 * this requirement -> check these only if using panel
> > replay
> > -	 */
> > -	if (current_config->active_planes &&
> > -	    (current_config->has_panel_replay ||
> > -	     pipe_config->has_panel_replay)) {
> > -		PIPE_CONF_CHECK_BOOL(has_psr);
> > -		PIPE_CONF_CHECK_BOOL(has_sel_update);
> > -		PIPE_CONF_CHECK_BOOL(enable_psr2_sel_fetch);
> > -		PIPE_CONF_CHECK_BOOL(enable_psr2_su_region_et);
> > -		PIPE_CONF_CHECK_BOOL(has_panel_replay);
> > -	}
> > -
> >  	PIPE_CONF_CHECK_BOOL(double_wide);
> > 
> >  	if (dev_priv->display.dpll.mgr)
> > diff --git a/drivers/gpu/drm/i915/display/intel_psr.c
> > b/drivers/gpu/drm/i915/display/intel_psr.c
> > index f969abc56256..3494620d1c44 100644
> > --- a/drivers/gpu/drm/i915/display/intel_psr.c
> > +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> > @@ -1998,18 +1998,25 @@ static void intel_psr_enable_locked(struct
> > intel_dp
> > *intel_dp,
> >  	if (!psr_interrupt_error_check(intel_dp))
> >  		return;
> > 
> > -	if (intel_dp->psr.panel_replay_enabled) {
> > +	if (intel_dp->psr.panel_replay_enabled)
> >  		drm_dbg_kms(display->drm, "Enabling Panel
> > Replay\n");
> > -	} else {
> > +	else
> >  		drm_dbg_kms(display->drm, "Enabling PSR%s\n",
> >  			    intel_dp->psr.sel_update_enabled ? "2"
> > : "1");
> > 
> > -		/*
> > -		 * Panel replay has to be enabled before link
> > training: doing it
> > -		 * only for PSR here.
> > -		 */
> > -		intel_psr_enable_sink(intel_dp, crtc_state);
> > -	}
> > +	/*
> > +	 * Enabling here only for PSR. Panel Replay enable bit is
> > already
> > +	 * written at this point. See
> > +	 * intel_psr_panel_replay_enable_sink. Modifiers/options:
> > +	 *  - Selective Update
> > +	 *  - Region Early Transport
> > +	 *  - Selective Update Region Scanline Capture
> > +	 *  - VSC_SDP_CRC
> > +	 *  - HPD on different Errors
> > +	 *  - CRC verification
> > +	 * are written for PSR and Panel Replay here.
> > +	 */
> > +	intel_psr_enable_sink(intel_dp, crtc_state);
> > 
> >  	if (intel_dp_is_edp(intel_dp))
> >  		intel_snps_phy_update_psr_power_state(&dig_port-
> > >base,
> > true); @@ -2815,6 +2822,8 @@ void intel_psr_pre_plane_update(struct
> > intel_atomic_state *state,
> >  		needs_to_disable |= new_crtc_state->has_sel_update
> > != psr-
> > > sel_update_enabled;
> >  		needs_to_disable |= new_crtc_state-
> > > enable_psr2_su_region_et !=
> >  			psr->su_region_et_enabled;
> > +		needs_to_disable |= new_crtc_state-
> > >has_panel_replay !=
> > +			psr->panel_replay_enabled;
> >  		needs_to_disable |= DISPLAY_VER(i915) < 11 &&
> >  			new_crtc_state->wm_level_disabled;
> > 
> > --
> > 2.34.1
> 





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

  Powered by Linux