On Mon, Mar 30, 2026 at 09:36:50AM +0530, Ankit Nautiyal wrote: > Replace the consecutive single-byte writes to PANEL_REPLAY_CONFIG and > CONFIG2 with one drm_dp_dpcd_write() burst starting at PANEL_REPLAY_CONFIG, > reducing AUX transactions. > > v2: Drop extra conditions, and optimize variables. (Ville) > > Suggested-by: Ville Syrjälä <[email protected]> > Signed-off-by: Ankit Nautiyal <[email protected]> > --- > drivers/gpu/drm/i915/display/intel_psr.c | 29 ++++++++++++++---------- > 1 file changed, 17 insertions(+), 12 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_psr.c > b/drivers/gpu/drm/i915/display/intel_psr.c > index 2f1b48cd8efd..ca054135ca30 100644 > --- a/drivers/gpu/drm/i915/display/intel_psr.c > +++ b/drivers/gpu/drm/i915/display/intel_psr.c > @@ -782,27 +782,32 @@ static bool psr2_su_region_et_valid(struct > intel_connector *connector, bool pane > static void _panel_replay_enable_sink(struct intel_dp *intel_dp, > const struct intel_crtc_state *crtc_state) > { > - u8 val = DP_PANEL_REPLAY_ENABLE | > - DP_PANEL_REPLAY_VSC_SDP_CRC_EN | > - DP_PANEL_REPLAY_UNRECOVERABLE_ERROR_EN | > - DP_PANEL_REPLAY_RFB_STORAGE_ERROR_EN | > - DP_PANEL_REPLAY_ACTIVE_FRAME_CRC_ERROR_EN; > - u8 panel_replay_config2 = DP_PANEL_REPLAY_CRC_VERIFICATION; > + struct intel_display *display = to_intel_display(intel_dp); > + u8 panel_replay_config[2]; > + int ret; > + > + panel_replay_config[0] = DP_PANEL_REPLAY_ENABLE | > + DP_PANEL_REPLAY_VSC_SDP_CRC_EN | > + DP_PANEL_REPLAY_UNRECOVERABLE_ERROR_EN | > + DP_PANEL_REPLAY_RFB_STORAGE_ERROR_EN | > + DP_PANEL_REPLAY_ACTIVE_FRAME_CRC_ERROR_EN; > + panel_replay_config[1] = DP_PANEL_REPLAY_CRC_VERIFICATION; > > if (crtc_state->has_sel_update) > - val |= DP_PANEL_REPLAY_SU_ENABLE; > + panel_replay_config[0] |= DP_PANEL_REPLAY_SU_ENABLE; > > if (crtc_state->enable_psr2_su_region_et) > - val |= DP_PANEL_REPLAY_ENABLE_SU_REGION_ET; > + panel_replay_config[0] |= DP_PANEL_REPLAY_ENABLE_SU_REGION_ET; > > if (crtc_state->req_psr2_sdp_prior_scanline) > - panel_replay_config2 |= > + panel_replay_config[1] |= > DP_PANEL_REPLAY_SU_REGION_SCANLINE_CAPTURE; > > - drm_dp_dpcd_writeb(&intel_dp->aux, PANEL_REPLAY_CONFIG, val); > + ret = drm_dp_dpcd_write(&intel_dp->aux, PANEL_REPLAY_CONFIG, > + panel_replay_config, > sizeof(panel_replay_config)); > > - drm_dp_dpcd_writeb(&intel_dp->aux, PANEL_REPLAY_CONFIG2, > - panel_replay_config2); > + if (ret != sizeof(panel_replay_config)) > + drm_dbg_kms(display->drm, "Failed to write Panel Replay > Configs\n");
Looks like we don't actually check for errors on any of the other DPCD accesses here. So I'd probably drop it here as well. Either way Reviewed-by: Ville Syrjälä <[email protected]> > } > > static void _psr_enable_sink(struct intel_dp *intel_dp, > -- > 2.45.2 -- Ville Syrjälä Intel
