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 9126525701cdf19e6c3d2caf8a6ece559f99a99e Mon Sep 17 00:00:00 2001
From: Gaggery Tsai <gaggery.tsai@intel.com> From: Gaggery Tsai <gaggery.tsai@intel.com>
Date: Mon, 10 Aug 2026 22:45:00 -0500 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 workaround
Panel Replay ALPM AUX-less wake/sleep cycling cannot resume selective 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. updates at frame rate on the LGD OLED panels in the Dell XPS 14 DA14260
Upstream avoids the visible lag by disabling Panel Replay for the exact and XPS 16 DA16260. Upstream avoids the visible lag on the XPS 14 by
Dell 1028:0db9 and LGD 00:22:b9 match, which also removes the idle power disabling Panel Replay for the exact Dell 1028:0db9 and LGD 00:22:b9
savings. 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. Replace the XPS 14 disable entry and add an exact XPS 16 match for the
Exit Panel Replay for relevant frontbuffer activity and re-enter it after hardware-scoped workaround. Exit Panel Replay for relevant frontbuffer
50 ms of idle time. Use a dedicated delayed work item integrated under activity and re-enter it after 50 ms of idle time. Use a dedicated
the existing PSR mutex and frontbuffer busy-bit tracking; block normal delayed work item integrated under the existing PSR mutex and frontbuffer
immediate re-entry while it is armed, wait for sink idle, and cancel it busy-bit tracking; block normal immediate re-entry while it is armed,
on invalidate, pause, and disable. wait for sink idle, and cancel it on invalidate, pause, and disable.
Other panels retain upstream behavior. 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 + .../drm/i915/display/intel_display_types.h | 1 +
drivers/gpu/drm/i915/display/intel_psr.c | 65 ++++++++++++++++++- 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 + 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 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 index 2e6a857..51ae4ed 100644
@@ -194,13 +195,19 @@ index 883f297..7c772a9 100644
} }
struct intel_quirk { 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_vendor = 0x1028,
.subsystem_device = 0x0db9, .subsystem_device = 0x0db9,
.sink_oui = SINK_OUI(0x00, 0x22, 0xb9), .sink_oui = SINK_OUI(0x00, 0x22, 0xb9),
- .hook = quirk_disable_edp_panel_replay, - .hook = quirk_disable_edp_panel_replay,
+ .hook = quirk_panel_replay_alpm_cursor_lag, + .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 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 pkgbase=linux-ptl
pkgver=7.1.8.arch1 pkgver=7.1.8.arch1
pkgrel=1 pkgrel=2
pkgdesc='Linux for Panther Lake with Panel Replay power and OLED VRR fixes' pkgdesc='Linux for Panther Lake with Panel Replay power and OLED VRR fixes'
url='https://github.com/archlinux/linux' url='https://github.com/archlinux/linux'
arch=( arch=(
@@ -55,7 +55,7 @@ b2sums=('84b59e5572d91f5ea1bb603aa7691851bd9549e1bf18a6bec8e27eb8a6e2de2e33da2ad
'308952977c15ac3ad976ff1d99d0d186814d4b03e1c8512fc3a4c0ac1ecce3f74be8f3900a7fd286492d4f930bedc089674bf713a278fa80c35413e0e6339f97' '308952977c15ac3ad976ff1d99d0d186814d4b03e1c8512fc3a4c0ac1ecce3f74be8f3900a7fd286492d4f930bedc089674bf713a278fa80c35413e0e6339f97'
'SKIP' 'SKIP'
'e672cd8d1f48756cf1062f84b83b4f676504cc6b44496511816a670435e00ccc22720fcbc36d013fd9b393389b955de5ec90715429ddbdcea860e1be80ab13fd' 'e672cd8d1f48756cf1062f84b83b4f676504cc6b44496511816a670435e00ccc22720fcbc36d013fd9b393389b955de5ec90715429ddbdcea860e1be80ab13fd'
'5ebe470414df104da9b9b20076369df0fd853ee50800926125c73641aad79dae8f52ab57ff793d9644d4f7834195d17e356567914d7a074b315f9de4924d4836' '82b976261ed6f9c9ab4e30466eb91c74e94d38b489628d2de5b9974a0406a38bdec493112b84ed9f4b917662c871e70b1ea1c626d467eda245eaf7bfd973848b'
'ed167ad347e83f072316b0d980ad192d97d0c4a69f6d1841a96089aa17caa0e57cb785214ed9297290f034420b5d0838dc75f84c7e9a9459eb49fd9dc22f3a3e') 'ed167ad347e83f072316b0d980ad192d97d0c4a69f6d1841a96089aa17caa0e57cb785214ed9297290f034420b5d0838dc75f84c7e9a9459eb49fd9dc22f3a3e')
b2sums_x86_64=('b10d80423aa3eb65e2046bf5b1998f9a7bdbc97494c6881881f50ffcdb5fe2e242782f59dbb6402cd77ce64b988dbf295fd9fa54f20180c76fbe88b82e1dbc9d') b2sums_x86_64=('b10d80423aa3eb65e2046bf5b1998f9a7bdbc97494c6881881f50ffcdb5fe2e242782f59dbb6402cd77ce64b988dbf295fd9fa54f20180c76fbe88b82e1dbc9d')
@@ -65,7 +65,7 @@ sha256sums=('ff01dcb449279d5b4cfccdb01fee639cf5ff1803f1749a77844dd33915422c49'
'351cfb04db323bf5dd55ae8ce626650d20ba61441d202cadd8e198c6b9ef8f36' '351cfb04db323bf5dd55ae8ce626650d20ba61441d202cadd8e198c6b9ef8f36'
'SKIP' 'SKIP'
'150f059eaf36580f9ca8eff4f917d8c3ee4eb5493507cbc29ce8e91b3ec56a93' '150f059eaf36580f9ca8eff4f917d8c3ee4eb5493507cbc29ce8e91b3ec56a93'
'82f3b6548b8badb9ec9ccc504c3d5d3ebdcb5f89837d5c48048ff8678f92dd61' '4a1f12817a985361c7497965b7474efb5dd8dcc36d47d04d1bb98fd1941b5901'
'1a0bebfba76248bbda67f8812278835de71754412369454ce60f4dde0bd81916') '1a0bebfba76248bbda67f8812278835de71754412369454ce60f4dde0bd81916')
export KBUILD_BUILD_HOST=archlinux export KBUILD_BUILD_HOST=archlinux