]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/i915/psr: Apply SDP on prior scanline workaround for Xe3p
authorJouni Högander <jouni.hogander@intel.com>
Fri, 15 May 2026 09:57:56 +0000 (12:57 +0300)
committerJouni Högander <jouni.hogander@intel.com>
Mon, 18 May 2026 06:06:40 +0000 (09:06 +0300)
In Xe3p there is an HW optimization done. When there is an SU triggered in
Capture state, Link will be kept ON post Capture CRC SDP. Before valid SU
pixels Intel source will transmit dummy pixels. Some TCONS are improperly
considering these dummy pixels as a valid pixel data. Prior Xe3p link was
was turned off even if there was SU triggered in capture state and no dummy
pixels were transmitted. These dummy pixels are problem only if SDP on
prior scanline is used and Early Transport is not in use. The workaround is
to start SU area always at scanline 0.

v2: use intel_display_wa

Bspec: 74741, 79482
Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
Link: https://patch.msgid.link/20260515095756.2799483-5-jouni.hogander@intel.com
drivers/gpu/drm/i915/display/intel_display_wa.c
drivers/gpu/drm/i915/display/intel_display_wa.h
drivers/gpu/drm/i915/display/intel_psr.c

index 7d3d63a59882b4e9cadde7dc52c8a94df2c0e5d5..2094eda09c912f6a77dfad1bfb4ffa683fd27eba 100644 (file)
@@ -136,6 +136,8 @@ bool __intel_display_wa(struct intel_display *display, enum intel_display_wa wa,
                return DISPLAY_VER(display) == 20 &&
                        IS_DISPLAY_VERx100_STEP(display, 3000,
                                                STEP_A0, STEP_B0);
+       case INTEL_DISPLAY_WA_16029024088:
+               return DISPLAY_VER(display) >= 35;
        case INTEL_DISPLAY_WA_18034343758:
                return DISPLAY_VER(display) == 20 ||
                        (display->platform.pantherlake &&
index 15fec843f15e1bc2207839718b0435ec15b7e4fd..9cdd148ea4fadb617826e69f8032858c58e8cfb1 100644 (file)
@@ -52,6 +52,7 @@ enum intel_display_wa {
        INTEL_DISPLAY_WA_16023588340,
        INTEL_DISPLAY_WA_16025573575,
        INTEL_DISPLAY_WA_16025596647,
+       INTEL_DISPLAY_WA_16029024088,
        INTEL_DISPLAY_WA_18034343758,
        INTEL_DISPLAY_WA_22010178259,
        INTEL_DISPLAY_WA_22010947358,
index bb1c0252837eb6084a5d501dc2a916068696a9eb..b0414bd1dc6b18f5b29b03c2955d85ae82da54c3 100644 (file)
@@ -2913,6 +2913,11 @@ intel_psr_apply_su_area_workarounds(struct intel_crtc_state *crtc_state)
            crtc_state->splitter.enable)
                crtc_state->psr2_su_area.y1 = 0;
 
+       if (intel_display_wa(display, INTEL_DISPLAY_WA_16029024088) &&
+           crtc_state->req_psr2_sdp_prior_scanline &&
+           !crtc_state->enable_psr2_su_region_et)
+               crtc_state->psr2_su_area.y1 = 0;
+
        /* Wa 14019834836 */
        if (DISPLAY_VER(display) == 30)
                intel_psr_apply_pr_link_on_su_wa(crtc_state);