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ä <[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.
Yeah.. will drop the error message.
Thanks,
Ankit
Either way
Reviewed-by: Ville Syrjälä <[email protected]>
}
static void _psr_enable_sink(struct intel_dp *intel_dp,
--
2.45.2