FAILED: patch "[PATCH] drm/i915/display: Clear SEL_FETCH_PLANE_CTL on plane disable" failed to apply to 6.18-stable tree
[email protected]
maintainerThe patch below does not apply to the 6.18-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.18.y
git checkout FETCH_HEAD
git cherry-pick -x 7f1172a2ac0d7e50850785e2e65789c8aac8411a
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026090953-dander-coat-86af@gregkh' --subject-prefix 'PATCH 6.18.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 7f1172a2ac0d7e50850785e2e65789c8aac8411a Mon Sep 17 00:00:00 2001
From: Nemesa Garg <[email protected]>
Date: Tue, 18 Aug 2026 15:21:49 +0530
Subject: [PATCH] drm/i915/display: Clear SEL_FETCH_PLANE_CTL on plane disable
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
icl_plane_disable_sel_fetch_arm() wrote SEL_FETCH_PLANE_CTL = 0 only when crtc_state->enable_psr2_sel_fetch was set. If a plane was disabled after selective fetch had been turned off, the guard fired early and left the register's enable bit set in hardware.
The bit is harmless until selective fetch is re-enabled. When it is, the hardware resumes fetching for the now-disabled plane and keeps its old DDB range reserved.
i9xx_cursor_disable_sel_fetch_arm() has the same guard on SEL_FETCH_CUR_CTL and is fixed the same way.
v2: Add same check for cursor also. [sashiko]
drivers/gpu/drm/i915/display/intel_cursor.c +10 -5
@@ -530,13 +530,18 @@ static int i9xx_check_cursor(struct intel_crtc_state *crtc_state, }static void i9xx_cursor_disable_sel_fetch_arm (struct intel_dsb *dsb, -struct intel_plane *plane, -const struct intel_crtc_state *crtc_state) +struct intel_plane *plane) {struct intel_display *display =to_intel_display (plane);enum pipe pipe = plane->pipe; -if (!crtc_state->enable_psr2_sel_fetch) +/* +* Clear this whenever the hardware has selective fetch, not just when +* the current state uses it. The cursor may have been enabled with +* selective fetch earlier and had its enable bit orphaned when the +* feature was switched off. +*/ +if (!HAS_PSR2_SEL_FETCH (display))return ;intel_de_write_dsb (display, dsb,SEL_FETCH_CUR_CTL (pipe),0 );
@@ -586,7 +591,7 @@ static void i9xx_cursor_update_sel_fetch_arm(struct intel_dsb *dsb,if (crtc_state->enable_psr2_su_region_et)wa_16021440873 (dsb, plane, crtc_state, plane_state);else -i9xx_cursor_disable_sel_fetch_arm (dsb, plane, crtc_state); +i9xx_cursor_disable_sel_fetch_arm (dsb, plane); } }
@@ -695,7 +700,7 @@ static void i9xx_cursor_update_arm(struct intel_dsb *dsb,if (plane_state)i9xx_cursor_update_sel_fetch_arm (dsb, plane, crtc_state, plane_state);else -i9xx_cursor_disable_sel_fetch_arm (dsb, plane, crtc_state); +i9xx_cursor_disable_sel_fetch_arm (dsb, plane); if (plane->cursor.base != base || plane->cursor.size != fbc_ctl ||
drivers/gpu/drm/i915/display/skl_universal_plane.c +10 -5
@@ -879,13 +879,18 @@ skl_plane_disable_arm(struct intel_dsb *dsb, }static void icl_plane_disable_sel_fetch_arm (struct intel_dsb *dsb, -struct intel_plane *plane, -const struct intel_crtc_state *crtc_state) +struct intel_plane *plane) {struct intel_display *display =to_intel_display (plane);enum pipe pipe = plane->pipe; -if (!crtc_state->enable_psr2_sel_fetch) +/* +* Clear this whenever the hardware has selective fetch, not just when +* the current state uses it. The plane may have been enabled with +* selective fetch earlier and had its enable bit orphaned when the +* feature was switched off. +*/ +if (!HAS_PSR2_SEL_FETCH (display))return ;intel_de_write_dsb (display, dsb,SEL_FETCH_PLANE_CTL (pipe, plane->id),0 );
@@ -921,7 +926,7 @@ icl_plane_disable_arm(struct intel_dsb *dsb,skl_write_plane_wm (dsb, plane, crtc_state); -icl_plane_disable_sel_fetch_arm (dsb, plane, crtc_state); +icl_plane_disable_sel_fetch_arm (dsb, plane);if (plane_has_normalizer (plane)) intel_de_write_dsb(display, dsb,
@@ -1641,7 +1646,7 @@ static void icl_plane_update_sel_fetch_arm(struct intel_dsb *dsb,intel_de_write_dsb (display, dsb,SEL_FETCH_PLANE_CTL (pipe, plane->id),SEL_FETCH_PLANE_CTL_ENABLE ); else -icl_plane_disable_sel_fetch_arm (dsb ,plane ,crtc_state ); +icl_plane_disable_sel_fetch_arm (dsb ,plane ); } static void
Sasha Levin
maintainerPATCH 1/1 drm/i915/display: Clear SEL_FETCH_PLANE_CTL on plane disable
From: Nemesa Garg <[email protected]>
[ Upstream commit 7f1172a2ac0d7e50850785e2e65789c8aac8411a ]
icl_plane_disable_sel_fetch_arm() wrote SEL_FETCH_PLANE_CTL = 0 only when crtc_state->enable_psr2_sel_fetch was set. If a plane was disabled after selective fetch had been turned off, the guard fired early and left the register's enable bit set in hardware.
The bit is harmless until selective fetch is re-enabled. When it is, the hardware resumes fetching for the now-disabled plane and keeps its old DDB range reserved.
i9xx_cursor_disable_sel_fetch_arm() has the same guard on SEL_FETCH_CUR_CTL and is fixed the same way.
v2: Add same check for cursor also. [sashiko]
--- drivers/gpu/drm/i915/display/intel_cursor.c | 15 ++++++++++----- .../gpu/drm/i915/display/skl_universal_plane.c | 15 ++++++++++----- 2 files changed, 20 insertions(+), 10 deletions(-)
drivers/gpu/drm/i915/display/intel_cursor.c +10 -5
@@ -530,13 +530,18 @@ static int i9xx_check_cursor(struct intel_crtc_state *crtc_state, }static void i9xx_cursor_disable_sel_fetch_arm (struct intel_dsb *dsb, -struct intel_plane *plane, -const struct intel_crtc_state *crtc_state) +struct intel_plane *plane) {struct intel_display *display =to_intel_display (plane);enum pipe pipe = plane->pipe; -if (!crtc_state->enable_psr2_sel_fetch) +/* +* Clear this whenever the hardware has selective fetch, not just when +* the current state uses it. The cursor may have been enabled with +* selective fetch earlier and had its enable bit orphaned when the +* feature was switched off. +*/ +if (!HAS_PSR2_SEL_FETCH (display))return ;intel_de_write_dsb (display, dsb,SEL_FETCH_CUR_CTL (pipe),0 );
@@ -586,7 +591,7 @@ static void i9xx_cursor_update_sel_fetch_arm(struct intel_dsb *dsb,if (crtc_state->enable_psr2_su_region_et)wa_16021440873 (dsb, plane, crtc_state, plane_state);else -i9xx_cursor_disable_sel_fetch_arm (dsb, plane, crtc_state); +i9xx_cursor_disable_sel_fetch_arm (dsb, plane); } }
@@ -695,7 +700,7 @@ static void i9xx_cursor_update_arm(struct intel_dsb *dsb,if (plane_state)i9xx_cursor_update_sel_fetch_arm (dsb, plane, crtc_state, plane_state);else -i9xx_cursor_disable_sel_fetch_arm (dsb, plane, crtc_state); +i9xx_cursor_disable_sel_fetch_arm (dsb, plane); if (plane->cursor.base != base || plane->cursor.size != fbc_ctl ||
drivers/gpu/drm/i915/display/skl_universal_plane.c +10 -5
@@ -886,13 +886,18 @@ skl_plane_disable_arm(struct intel_dsb *dsb, }static void icl_plane_disable_sel_fetch_arm (struct intel_dsb *dsb, -struct intel_plane *plane, -const struct intel_crtc_state *crtc_state) +struct intel_plane *plane) {struct intel_display *display =to_intel_display (plane);enum pipe pipe = plane->pipe; -if (!crtc_state->enable_psr2_sel_fetch) +/* +* Clear this whenever the hardware has selective fetch, not just when +* the current state uses it. The plane may have been enabled with +* selective fetch earlier and had its enable bit orphaned when the +* feature was switched off. +*/ +if (!HAS_PSR2_SEL_FETCH (display))return ;intel_de_write_dsb (display, dsb,SEL_FETCH_PLANE_CTL (pipe, plane->id),0 );
@@ -912,7 +917,7 @@ icl_plane_disable_arm(struct intel_dsb *dsb,skl_write_plane_wm (dsb, plane, crtc_state); -icl_plane_disable_sel_fetch_arm (dsb, plane, crtc_state); +icl_plane_disable_sel_fetch_arm (dsb, plane);intel_de_write_dsb (display, dsb,PLANE_CTL (pipe, plane_id),0 );intel_de_write_dsb (display, dsb,PLANE_SURF (pipe, plane_id),0 ); }
@@ -1613,7 +1618,7 @@ static void icl_plane_update_sel_fetch_arm(struct intel_dsb *dsb,intel_de_write_dsb (display, dsb,SEL_FETCH_PLANE_CTL (pipe, plane->id),SEL_FETCH_PLANE_CTL_ENABLE ); else -icl_plane_disable_sel_fetch_arm (dsb ,plane ,crtc_state ); +icl_plane_disable_sel_fetch_arm (dsb ,plane ); } static void
Signature · 1 line
2.53.0