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

Reply via email to