Support XPS 16 Panel Replay workaround

This commit is contained in:
Spencer Bull
2026-08-12 15:18:39 -05:00
parent 058eb6392a
commit b53c9cc16a
2 changed files with 24 additions and 17 deletions
@@ -1,21 +1,22 @@
From 9126525701cdf19e6c3d2caf8a6ece559f99a99e Mon Sep 17 00:00:00 2001
From: Gaggery Tsai <gaggery.tsai@intel.com>
Date: Mon, 10 Aug 2026 22:45:00 -0500
Subject: [PATCH] drm/i915/psr: restore DA14260 Panel Replay with ALPM lag
Subject: [PATCH] drm/i915/psr: restore XPS 14/16 Panel Replay with ALPM lag
workaround
Panel Replay ALPM AUX-less wake/sleep cycling cannot resume selective
updates at frame rate on the LGD OLED panel in the Dell XPS 14 DA14260.
Upstream avoids the visible lag by disabling Panel Replay for the exact
Dell 1028:0db9 and LGD 00:22:b9 match, which also removes the idle power
savings.
updates at frame rate on the LGD OLED panels in the Dell XPS 14 DA14260
and XPS 16 DA16260. Upstream avoids the visible lag on the XPS 14 by
disabling Panel Replay for the exact Dell 1028:0db9 and LGD 00:22:b9
match, which also removes the idle power savings. The XPS 16 has the
same sink OUI under Dell subsystem 1028:0dba and exhibits the same lag.
Replace only that exact disable entry with a hardware-scoped workaround.
Exit Panel Replay for relevant frontbuffer activity and re-enter it after
50 ms of idle time. Use a dedicated delayed work item integrated under
the existing PSR mutex and frontbuffer busy-bit tracking; block normal
immediate re-entry while it is armed, wait for sink idle, and cancel it
on invalidate, pause, and disable.
Replace the XPS 14 disable entry and add an exact XPS 16 match for the
hardware-scoped workaround. Exit Panel Replay for relevant frontbuffer
activity and re-enter it after 50 ms of idle time. Use a dedicated
delayed work item integrated under the existing PSR mutex and frontbuffer
busy-bit tracking; block normal immediate re-entry while it is armed,
wait for sink idle, and cancel it on invalidate, pause, and disable.
Other panels retain upstream behavior.
@@ -24,9 +25,9 @@ Signed-off-by: Gaggery Tsai <gaggery.tsai@intel.com>
---
.../drm/i915/display/intel_display_types.h | 1 +
drivers/gpu/drm/i915/display/intel_psr.c | 65 ++++++++++++++++++-
drivers/gpu/drm/i915/display/intel_quirks.c | 9 +--
drivers/gpu/drm/i915/display/intel_quirks.c | 15 +++--
drivers/gpu/drm/i915/display/intel_quirks.h | 1 +
4 files changed, 71 insertions(+), 5 deletions(-)
4 files changed, 77 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index 2e6a857..51ae4ed 100644
@@ -194,13 +195,19 @@ index 883f297..7c772a9 100644
}
struct intel_quirk {
@@ -267,7 +268,7 @@ static const struct intel_dpcd_quirk intel_dpcd_quirks[] = {
@@ -267,7 +268,13 @@ static const struct intel_dpcd_quirk intel_dpcd_quirks[] = {
.subsystem_vendor = 0x1028,
.subsystem_device = 0x0db9,
.sink_oui = SINK_OUI(0x00, 0x22, 0xb9),
- .hook = quirk_disable_edp_panel_replay,
+ .hook = quirk_panel_replay_alpm_cursor_lag,
},
+ {
+ .subsystem_vendor = 0x1028,
+ .subsystem_device = 0x0dba,
+ .sink_oui = SINK_OUI(0x00, 0x22, 0xb9),
+ .hook = quirk_panel_replay_alpm_cursor_lag,
+ },
};
diff --git a/drivers/gpu/drm/i915/display/intel_quirks.h b/drivers/gpu/drm/i915/display/intel_quirks.h
+3 -3
View File
@@ -3,7 +3,7 @@
pkgbase=linux-ptl
pkgver=7.1.8.arch1
pkgrel=1
pkgrel=2
pkgdesc='Linux for Panther Lake with Panel Replay power and OLED VRR fixes'
url='https://github.com/archlinux/linux'
arch=(
@@ -55,7 +55,7 @@ b2sums=('84b59e5572d91f5ea1bb603aa7691851bd9549e1bf18a6bec8e27eb8a6e2de2e33da2ad
'308952977c15ac3ad976ff1d99d0d186814d4b03e1c8512fc3a4c0ac1ecce3f74be8f3900a7fd286492d4f930bedc089674bf713a278fa80c35413e0e6339f97'
'SKIP'
'e672cd8d1f48756cf1062f84b83b4f676504cc6b44496511816a670435e00ccc22720fcbc36d013fd9b393389b955de5ec90715429ddbdcea860e1be80ab13fd'
'5ebe470414df104da9b9b20076369df0fd853ee50800926125c73641aad79dae8f52ab57ff793d9644d4f7834195d17e356567914d7a074b315f9de4924d4836'
'82b976261ed6f9c9ab4e30466eb91c74e94d38b489628d2de5b9974a0406a38bdec493112b84ed9f4b917662c871e70b1ea1c626d467eda245eaf7bfd973848b'
'ed167ad347e83f072316b0d980ad192d97d0c4a69f6d1841a96089aa17caa0e57cb785214ed9297290f034420b5d0838dc75f84c7e9a9459eb49fd9dc22f3a3e')
b2sums_x86_64=('b10d80423aa3eb65e2046bf5b1998f9a7bdbc97494c6881881f50ffcdb5fe2e242782f59dbb6402cd77ce64b988dbf295fd9fa54f20180c76fbe88b82e1dbc9d')
@@ -65,7 +65,7 @@ sha256sums=('ff01dcb449279d5b4cfccdb01fee639cf5ff1803f1749a77844dd33915422c49'
'351cfb04db323bf5dd55ae8ce626650d20ba61441d202cadd8e198c6b9ef8f36'
'SKIP'
'150f059eaf36580f9ca8eff4f917d8c3ee4eb5493507cbc29ce8e91b3ec56a93'
'82f3b6548b8badb9ec9ccc504c3d5d3ebdcb5f89837d5c48048ff8678f92dd61'
'4a1f12817a985361c7497965b7474efb5dd8dcc36d47d04d1bb98fd1941b5901'
'1a0bebfba76248bbda67f8812278835de71754412369454ce60f4dde0bd81916')
export KBUILD_BUILD_HOST=archlinux