Re: [PATCH 13/19] drm/i915/psr: Write the PR config DPCDs in burst mode

Nautiyal, Ankit K
2026-03-31T11:52:08Z

On 3/31/2026 12:14 AM, Ville Syrjälä wrote:
> 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ä <ville.syrjala@linux.intel.com>
>> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
>> ---
>> 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.

Yeah.. will drop the error message.

Thanks,
Ankit
>
> Either way
> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
>> }
>>
>> static void _psr_enable_sink(struct intel_dp *intel_dp,
>> --
>> 2.45.2