On Wed, 20 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.
Please switch to drm_dp_dpcd_read_data() while at it to be able to just check for ret < 0. BR, Jani. > > Signed-off-by: Jouni Högander <jouni.hogan...@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) -- Jani Nikula, Intel