mirror of
https://github.com/torvalds/linux.git
synced 2026-07-30 19:21:28 +02:00
drm/i915/psr: Deactivate PSR only on LNL and when selective fetch enabled
Using intel_psr_exit in frontbuffer flush on older platforms seems to be causing problems. Sending single full frame update using intel_psr_force_update is anyways more optimal compared to psr deactivate/activate -> move back to this approach on PSR1, PSR HW tracking and Panel Replay full frame update and use deactivate/activate only on LunarLake and only when selective fetch is enabled. Tested-by: Lemen <lemen@lemen.xyz> Tested-by: Koos Vriezen <koos.vriezen@gmail.com> Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14946 Signed-off-by: Jouni Högander <jouni.hogander@intel.com> Reviewed-by: Mika Kahola <mika.kahola@intel.com> Link: https://lore.kernel.org/r/20250922102725.2752742-1-jouni.hogander@intel.com
This commit is contained in:
parent
40ac9b3eb0
commit
924adb0bbd
|
|
@ -3402,6 +3402,7 @@ static void _psr_flush_handle(struct intel_dp *intel_dp)
|
|||
struct intel_display *display = to_intel_display(intel_dp);
|
||||
|
||||
if (DISPLAY_VER(display) < 20 && intel_dp->psr.psr2_sel_fetch_enabled) {
|
||||
/* Selective fetch prior LNL */
|
||||
if (intel_dp->psr.psr2_sel_fetch_cff_enabled) {
|
||||
/* can we turn CFF off? */
|
||||
if (intel_dp->psr.busy_frontbuffer_bits == 0)
|
||||
|
|
@ -3420,12 +3421,19 @@ static void _psr_flush_handle(struct intel_dp *intel_dp)
|
|||
intel_psr_configure_full_frame_update(intel_dp);
|
||||
|
||||
intel_psr_force_update(intel_dp);
|
||||
} else if (!intel_dp->psr.psr2_sel_fetch_enabled) {
|
||||
/*
|
||||
* PSR1 on all platforms
|
||||
* PSR2 HW tracking
|
||||
* Panel Replay Full frame update
|
||||
*/
|
||||
intel_psr_force_update(intel_dp);
|
||||
} else {
|
||||
/* Selective update LNL onwards */
|
||||
intel_psr_exit(intel_dp);
|
||||
}
|
||||
|
||||
if ((!intel_dp->psr.psr2_sel_fetch_enabled || DISPLAY_VER(display) >= 20) &&
|
||||
!intel_dp->psr.busy_frontbuffer_bits)
|
||||
if (!intel_dp->psr.active && !intel_dp->psr.busy_frontbuffer_bits)
|
||||
queue_work(display->wq.unordered, &intel_dp->psr.work);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user