[PATCH 1/2] drm/i915/psr: Check drm_dp_dpcd_read return value on PSR dpcd init

Hogander, Jouni jouni.hogander at intel.com
Thu Aug 21 05:01:44 UTC 2025


On Wed, 2025-08-20 at 14:49 +0300, Jani Nikula wrote:
> On Wed, 20 Aug 2025, Jouni Högander <jouni.hogander at intel.com> wrote:
> > Currently we are ignoriong drm_dp_dpcd_read return values when
> > reading PSR
> > and Panel Replay capability DPCD register. Rework intel_psr_dpcd a
> > bit to
> > take care of checking the return value.
> 
> Please switch to drm_dp_dpcd_read_data() while at it to be able to
> just
> check for ret < 0.

Thank you Jani for pointing this out. Please check the new version I
just sent.

BR,

Jouni Högander

> 
> BR,
> Jani.
> 
> > 
> > Signed-off-by: Jouni Högander <jouni.hogander at intel.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_psr.c | 32 ++++++++++++++++----
> > ----
> >  1 file changed, 21 insertions(+), 11 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/display/intel_psr.c
> > b/drivers/gpu/drm/i915/display/intel_psr.c
> > index 609df53f1ef1..68eb02127f47 100644
> > --- a/drivers/gpu/drm/i915/display/intel_psr.c
> > +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> > @@ -580,6 +580,16 @@ static void intel_dp_get_su_granularity(struct
> > intel_dp *intel_dp)
> >  static void _panel_replay_init_dpcd(struct intel_dp *intel_dp)
> >  {
> >  	struct intel_display *display =
> > to_intel_display(intel_dp);
> > +	int ret;
> > +
> > +	ret = drm_dp_dpcd_read(&intel_dp->aux,
> > DP_PANEL_REPLAY_CAP_SUPPORT,
> > +			       &intel_dp->pr_dpcd,
> > sizeof(intel_dp->pr_dpcd));
> > +	if (ret != sizeof(intel_dp->pr_dpcd))
> > +		return;
> > +
> > +	if (!(intel_dp-
> > >pr_dpcd[INTEL_PR_DPCD_INDEX(DP_PANEL_REPLAY_CAP_SUPPORT)] &
> > +	      DP_PANEL_REPLAY_SUPPORT))
> > +		return;
> >  
> >  	if (intel_dp_is_edp(intel_dp)) {
> >  		if (!intel_alpm_aux_less_wake_supported(intel_dp))
> > {
> > @@ -611,6 +621,15 @@ static void _panel_replay_init_dpcd(struct
> > intel_dp *intel_dp)
> >  static void _psr_init_dpcd(struct intel_dp *intel_dp)
> >  {
> >  	struct intel_display *display =
> > to_intel_display(intel_dp);
> > +	int ret;
> > +
> > +	ret = drm_dp_dpcd_read(&intel_dp->aux, DP_PSR_SUPPORT,
> > intel_dp->psr_dpcd,
> > +			       sizeof(intel_dp->psr_dpcd));
> > +	if (ret != sizeof(intel_dp->psr_dpcd))
> > +		return;
> > +
> > +	if (!intel_dp->psr_dpcd[0])
> > +		return;
> >  
> >  	drm_dbg_kms(display->drm, "eDP panel supports PSR version
> > %x\n",
> >  		    intel_dp->psr_dpcd[0]);
> > @@ -656,18 +675,9 @@ static void _psr_init_dpcd(struct intel_dp
> > *intel_dp)
> >  
> >  void intel_psr_init_dpcd(struct intel_dp *intel_dp)
> >  {
> > -	drm_dp_dpcd_read(&intel_dp->aux, DP_PSR_SUPPORT, intel_dp-
> > >psr_dpcd,
> > -			 sizeof(intel_dp->psr_dpcd));
> > -
> > -	drm_dp_dpcd_read(&intel_dp->aux,
> > DP_PANEL_REPLAY_CAP_SUPPORT,
> > -			 &intel_dp->pr_dpcd, sizeof(intel_dp-
> > >pr_dpcd));
> > -
> > -	if (intel_dp-
> > >pr_dpcd[INTEL_PR_DPCD_INDEX(DP_PANEL_REPLAY_CAP_SUPPORT)] &
> > -	    DP_PANEL_REPLAY_SUPPORT)
> > -		_panel_replay_init_dpcd(intel_dp);
> > +	_psr_init_dpcd(intel_dp);
> >  
> > -	if (intel_dp->psr_dpcd[0])
> > -		_psr_init_dpcd(intel_dp);
> > +	_panel_replay_init_dpcd(intel_dp);
> >  
> >  	if (intel_dp->psr.sink_psr2_support ||
> >  	    intel_dp->psr.sink_panel_replay_su_support)
> 



More information about the Intel-xe mailing list