Skip to content
Snippets Groups Projects
Commit f90491d4 authored by Maarten Lankhorst's avatar Maarten Lankhorst
Browse files

drm/xe: Remove runtime argument from display s/r functions


The previous change ensures that pm_suspend is only called when
suspending or resuming. This ensures no further bugs like those
in the previous commit.

Signed-off-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
Reviewed-by: default avatarVinod Govindapillai <vinod.govindapillai@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240905150052.174895-3-maarten.lankhorst@linux.intel.com
parent 474f64cb
No related branches found
No related tags found
No related merge requests found
...@@ -309,18 +309,7 @@ static void xe_display_flush_cleanup_work(struct xe_device *xe) ...@@ -309,18 +309,7 @@ static void xe_display_flush_cleanup_work(struct xe_device *xe)
} }
/* TODO: System and runtime suspend/resume sequences will be sanitized as a follow-up. */ /* TODO: System and runtime suspend/resume sequences will be sanitized as a follow-up. */
void xe_display_pm_runtime_suspend(struct xe_device *xe) static void __xe_display_pm_suspend(struct xe_device *xe, bool runtime)
{
if (!xe->info.probe_display)
return;
if (xe->d3cold.allowed)
xe_display_pm_suspend(xe, true);
intel_hpd_poll_enable(xe);
}
void xe_display_pm_suspend(struct xe_device *xe, bool runtime)
{ {
struct intel_display *display = &xe->display; struct intel_display *display = &xe->display;
bool s2idle = suspend_to_idle(); bool s2idle = suspend_to_idle();
...@@ -355,26 +344,31 @@ void xe_display_pm_suspend(struct xe_device *xe, bool runtime) ...@@ -355,26 +344,31 @@ void xe_display_pm_suspend(struct xe_device *xe, bool runtime)
intel_dmc_suspend(xe); intel_dmc_suspend(xe);
} }
void xe_display_pm_suspend_late(struct xe_device *xe) void xe_display_pm_suspend(struct xe_device *xe)
{
__xe_display_pm_suspend(xe, false);
}
void xe_display_pm_runtime_suspend(struct xe_device *xe)
{ {
bool s2idle = suspend_to_idle();
if (!xe->info.probe_display) if (!xe->info.probe_display)
return; return;
intel_power_domains_suspend(xe, s2idle); if (xe->d3cold.allowed)
__xe_display_pm_suspend(xe, true);
intel_display_power_suspend_late(xe); intel_hpd_poll_enable(xe);
} }
void xe_display_pm_runtime_resume(struct xe_device *xe) void xe_display_pm_suspend_late(struct xe_device *xe)
{ {
bool s2idle = suspend_to_idle();
if (!xe->info.probe_display) if (!xe->info.probe_display)
return; return;
intel_hpd_poll_disable(xe); intel_power_domains_suspend(xe, s2idle);
if (xe->d3cold.allowed) intel_display_power_suspend_late(xe);
xe_display_pm_resume(xe, true);
} }
void xe_display_pm_resume_early(struct xe_device *xe) void xe_display_pm_resume_early(struct xe_device *xe)
...@@ -387,7 +381,7 @@ void xe_display_pm_resume_early(struct xe_device *xe) ...@@ -387,7 +381,7 @@ void xe_display_pm_resume_early(struct xe_device *xe)
intel_power_domains_resume(xe); intel_power_domains_resume(xe);
} }
void xe_display_pm_resume(struct xe_device *xe, bool runtime) static void __xe_display_pm_resume(struct xe_device *xe, bool runtime)
{ {
struct intel_display *display = &xe->display; struct intel_display *display = &xe->display;
...@@ -421,6 +415,23 @@ void xe_display_pm_resume(struct xe_device *xe, bool runtime) ...@@ -421,6 +415,23 @@ void xe_display_pm_resume(struct xe_device *xe, bool runtime)
intel_power_domains_enable(xe); intel_power_domains_enable(xe);
} }
void xe_display_pm_resume(struct xe_device *xe)
{
__xe_display_pm_resume(xe, false);
}
void xe_display_pm_runtime_resume(struct xe_device *xe)
{
if (!xe->info.probe_display)
return;
intel_hpd_poll_disable(xe);
if (xe->d3cold.allowed)
__xe_display_pm_resume(xe, true);
}
static void display_device_remove(struct drm_device *dev, void *arg) static void display_device_remove(struct drm_device *dev, void *arg)
{ {
struct xe_device *xe = arg; struct xe_device *xe = arg;
......
...@@ -34,10 +34,10 @@ void xe_display_irq_enable(struct xe_device *xe, u32 gu_misc_iir); ...@@ -34,10 +34,10 @@ void xe_display_irq_enable(struct xe_device *xe, u32 gu_misc_iir);
void xe_display_irq_reset(struct xe_device *xe); void xe_display_irq_reset(struct xe_device *xe);
void xe_display_irq_postinstall(struct xe_device *xe, struct xe_gt *gt); void xe_display_irq_postinstall(struct xe_device *xe, struct xe_gt *gt);
void xe_display_pm_suspend(struct xe_device *xe, bool runtime); void xe_display_pm_suspend(struct xe_device *xe);
void xe_display_pm_suspend_late(struct xe_device *xe); void xe_display_pm_suspend_late(struct xe_device *xe);
void xe_display_pm_resume_early(struct xe_device *xe); void xe_display_pm_resume_early(struct xe_device *xe);
void xe_display_pm_resume(struct xe_device *xe, bool runtime); void xe_display_pm_resume(struct xe_device *xe);
void xe_display_pm_runtime_suspend(struct xe_device *xe); void xe_display_pm_runtime_suspend(struct xe_device *xe);
void xe_display_pm_runtime_resume(struct xe_device *xe); void xe_display_pm_runtime_resume(struct xe_device *xe);
...@@ -65,10 +65,10 @@ static inline void xe_display_irq_enable(struct xe_device *xe, u32 gu_misc_iir) ...@@ -65,10 +65,10 @@ static inline void xe_display_irq_enable(struct xe_device *xe, u32 gu_misc_iir)
static inline void xe_display_irq_reset(struct xe_device *xe) {} static inline void xe_display_irq_reset(struct xe_device *xe) {}
static inline void xe_display_irq_postinstall(struct xe_device *xe, struct xe_gt *gt) {} static inline void xe_display_irq_postinstall(struct xe_device *xe, struct xe_gt *gt) {}
static inline void xe_display_pm_suspend(struct xe_device *xe, bool runtime) {} static inline void xe_display_pm_suspend(struct xe_device *xe) {}
static inline void xe_display_pm_suspend_late(struct xe_device *xe) {} static inline void xe_display_pm_suspend_late(struct xe_device *xe) {}
static inline void xe_display_pm_resume_early(struct xe_device *xe) {} static inline void xe_display_pm_resume_early(struct xe_device *xe) {}
static inline void xe_display_pm_resume(struct xe_device *xe, bool runtime) {} static inline void xe_display_pm_resume(struct xe_device *xe) {}
static inline void xe_display_pm_runtime_suspend(struct xe_device *xe) {} static inline void xe_display_pm_runtime_suspend(struct xe_device *xe) {}
static inline void xe_display_pm_runtime_resume(struct xe_device *xe) {} static inline void xe_display_pm_runtime_resume(struct xe_device *xe) {}
......
...@@ -123,7 +123,7 @@ int xe_pm_suspend(struct xe_device *xe) ...@@ -123,7 +123,7 @@ int xe_pm_suspend(struct xe_device *xe)
for_each_gt(gt, xe, id) for_each_gt(gt, xe, id)
xe_gt_suspend_prepare(gt); xe_gt_suspend_prepare(gt);
xe_display_pm_suspend(xe, false); xe_display_pm_suspend(xe);
/* FIXME: Super racey... */ /* FIXME: Super racey... */
err = xe_bo_evict_all(xe); err = xe_bo_evict_all(xe);
...@@ -133,7 +133,7 @@ int xe_pm_suspend(struct xe_device *xe) ...@@ -133,7 +133,7 @@ int xe_pm_suspend(struct xe_device *xe)
for_each_gt(gt, xe, id) { for_each_gt(gt, xe, id) {
err = xe_gt_suspend(gt); err = xe_gt_suspend(gt);
if (err) { if (err) {
xe_display_pm_resume(xe, false); xe_display_pm_resume(xe);
goto err; goto err;
} }
} }
...@@ -187,7 +187,7 @@ int xe_pm_resume(struct xe_device *xe) ...@@ -187,7 +187,7 @@ int xe_pm_resume(struct xe_device *xe)
for_each_gt(gt, xe, id) for_each_gt(gt, xe, id)
xe_gt_resume(gt); xe_gt_resume(gt);
xe_display_pm_resume(xe, false); xe_display_pm_resume(xe);
err = xe_bo_restore_user(xe); err = xe_bo_restore_user(xe);
if (err) if (err)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment