On Thu, 2025-08-21 at 10:42 +0300, Jani Nikula wrote: > On Thu, 21 Aug 2025, Jouni Högander <jouni.hogan...@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. > > > > v2: use drm_dp_dpcd_read_data > > > > Signed-off-by: Jouni Högander <jouni.hogan...@intel.com> > > Reviewed-by: Jani Nikula <jani.nik...@intel.com>
Thank you Jani for your review. Pushed patch 1. to drm-intel-next. Left patch 2. out based on discussion with Ville. BR, Jouni Högander > > > > --- > > 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..5addde63168e 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_data(&intel_dp->aux, > > DP_PANEL_REPLAY_CAP_SUPPORT, > > + &intel_dp->pr_dpcd, > > sizeof(intel_dp->pr_dpcd)); > > + if (ret < 0) > > + 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_data(&intel_dp->aux, > > DP_PSR_SUPPORT, intel_dp->psr_dpcd, > > + sizeof(intel_dp->psr_dpcd)); > > + if (ret < 0) > > + 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) >