diff options
| author | Jani Nikula <jani.nikula@intel.com> | 2026-06-02 11:32:44 +0300 |
|---|---|---|
| committer | Jani Nikula <jani.nikula@intel.com> | 2026-06-04 13:50:09 +0300 |
| commit | 1908dbad53d9515bcef14ee7b990d3e47f0b3f63 (patch) | |
| tree | 049f75ed4cea6243cdbe374e8602b8a2fef9c755 | |
| parent | bc16416bd7235abcd8c61ee30fc3d4d25fb74dbc (diff) | |
drm/xe/display: relocate the xe_display_pm_runtime_*() functions
Keep the xe_display_pm_runtime_*() functions together, in
suspend/suspend_late/resume order. Also relocate the dependent d3cold
functions near usage in the runtime pm functions.
Reviewed-by: MichaĆ Grzelak <michal.grzelak@intel.com>
Link: https://patch.msgid.link/3e7de41c1a27ef250eb9c35c4858120bc9846301.1780389001.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
| -rw-r--r-- | drivers/gpu/drm/xe/display/xe_display.c | 160 |
1 files changed, 80 insertions, 80 deletions
diff --git a/drivers/gpu/drm/xe/display/xe_display.c b/drivers/gpu/drm/xe/display/xe_display.c index 96ed98369415..7f4ad09f9cce 100644 --- a/drivers/gpu/drm/xe/display/xe_display.c +++ b/drivers/gpu/drm/xe/display/xe_display.c @@ -310,53 +310,6 @@ static bool suspend_to_idle(void) return false; } -static void xe_display_enable_d3cold(struct xe_device *xe) -{ - struct intel_display *display = xe->display; - - if (!xe->info.probe_display) - return; - - /* - * We do a lot of poking in a lot of registers, make sure they work - * properly. - */ - intel_display_power_disable(display); - - intel_display_flush_cleanup_work(display); - - intel_opregion_suspend(display, PCI_D3cold); - - intel_dmc_suspend(display); - - if (intel_display_device_present(display)) - intel_hpd_poll_enable(display); -} - -static void xe_display_disable_d3cold(struct xe_device *xe) -{ - struct intel_display *display = xe->display; - - if (!xe->info.probe_display) - return; - - intel_dmc_resume(display); - - if (intel_display_device_present(display)) - drm_mode_config_reset(&xe->drm); - - intel_display_driver_init_hw(display); - - intel_hpd_init(display); - - if (intel_display_device_present(display)) - intel_hpd_poll_disable(display); - - intel_opregion_resume(display); - - intel_display_power_enable(display); -} - void xe_display_pm_suspend(struct xe_device *xe) { struct intel_display *display = xe->display; @@ -392,21 +345,6 @@ void xe_display_pm_suspend(struct xe_device *xe) intel_dmc_suspend(display); } -void xe_display_pm_runtime_suspend(struct xe_device *xe) -{ - struct intel_display *display = xe->display; - - if (!xe->info.probe_display) - return; - - if (xe->d3cold.allowed) { - xe_display_enable_d3cold(xe); - return; - } - - intel_hpd_poll_enable(display); -} - void xe_display_pm_suspend_late(struct xe_device *xe) { struct intel_display *display = xe->display; @@ -418,24 +356,6 @@ void xe_display_pm_suspend_late(struct xe_device *xe) intel_display_power_suspend_late(display, s2idle); } -void xe_display_pm_runtime_suspend_late(struct xe_device *xe) -{ - struct intel_display *display = xe->display; - - if (!xe->info.probe_display) - return; - - if (xe->d3cold.allowed) - xe_display_pm_suspend_late(xe); - - /* - * If xe_display_pm_suspend_late() is not called, it is likely - * that we will be on dynamic DC states with DMC wakelock enabled. We - * need to flush the release work in that case. - */ - intel_dmc_wl_flush_release_work(display); -} - void xe_display_pm_resume_early(struct xe_device *xe) { struct intel_display *display = xe->display; @@ -483,6 +403,86 @@ void xe_display_pm_resume(struct xe_device *xe) intel_display_power_enable(display); } +static void xe_display_enable_d3cold(struct xe_device *xe) +{ + struct intel_display *display = xe->display; + + if (!xe->info.probe_display) + return; + + /* + * We do a lot of poking in a lot of registers, make sure they work + * properly. + */ + intel_display_power_disable(display); + + intel_display_flush_cleanup_work(display); + + intel_opregion_suspend(display, PCI_D3cold); + + intel_dmc_suspend(display); + + if (intel_display_device_present(display)) + intel_hpd_poll_enable(display); +} + +static void xe_display_disable_d3cold(struct xe_device *xe) +{ + struct intel_display *display = xe->display; + + if (!xe->info.probe_display) + return; + + intel_dmc_resume(display); + + if (intel_display_device_present(display)) + drm_mode_config_reset(&xe->drm); + + intel_display_driver_init_hw(display); + + intel_hpd_init(display); + + if (intel_display_device_present(display)) + intel_hpd_poll_disable(display); + + intel_opregion_resume(display); + + intel_display_power_enable(display); +} + +void xe_display_pm_runtime_suspend(struct xe_device *xe) +{ + struct intel_display *display = xe->display; + + if (!xe->info.probe_display) + return; + + if (xe->d3cold.allowed) { + xe_display_enable_d3cold(xe); + return; + } + + intel_hpd_poll_enable(display); +} + +void xe_display_pm_runtime_suspend_late(struct xe_device *xe) +{ + struct intel_display *display = xe->display; + + if (!xe->info.probe_display) + return; + + if (xe->d3cold.allowed) + xe_display_pm_suspend_late(xe); + + /* + * If xe_display_pm_suspend_late() is not called, it is likely + * that we will be on dynamic DC states with DMC wakelock enabled. We + * need to flush the release work in that case. + */ + intel_dmc_wl_flush_release_work(display); +} + void xe_display_pm_runtime_resume(struct xe_device *xe) { struct intel_display *display = xe->display; |
