Support XPS 16 Panel Replay workaround
This commit is contained in:
@@ -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,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
|
||||||
|
|||||||
Reference in New Issue
Block a user