summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorJani Nikula <jani.nikula@intel.com>2026-06-02 11:32:49 +0300
committerJani Nikula <jani.nikula@intel.com>2026-06-04 13:50:09 +0300
commitd5c141521349d39e9afbfdffd054ce2b0063e4be (patch)
treee0597b1d0e52deb6dd8570b262e1e9029bc5e261 /drivers
parent131acec1ce8b6b976cd620e3443163cb752b8e42 (diff)
downloadlinux-d5c141521349d39e9afbfdffd054ce2b0063e4be.tar.gz
linux-d5c141521349d39e9afbfdffd054ce2b0063e4be.zip
drm/i915: add intel_display_driver_shutdown()
Add intel_display_driver_shutdown() to be called from the struct pci_driver .shutdown path. Initially, only migrate i915, as there are some subtle differences with xe that will be addressed later. Pick up as much as we can at this point without making major functional changes. There's a slight functional change in that intel_display_driver_shutdown() returns early for !HAS_DISPLAY(). Assume this is what we want, and there are no cases where display engine is present but all pipes have been fused off. Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patch.msgid.link/b6a3ed62d11b4b4999611e9b34c0bd1c531c1069.1780389001.git.jani.nikula@intel.com Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/i915/display/intel_display_driver.c28
-rw-r--r--drivers/gpu/drm/i915/display/intel_display_driver.h1
-rw-r--r--drivers/gpu/drm/i915/i915_driver.c24
3 files changed, 30 insertions, 23 deletions
diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c
index 0326a292ee1e..ab0639e8101a 100644
--- a/drivers/gpu/drm/i915/display/intel_display_driver.c
+++ b/drivers/gpu/drm/i915/display/intel_display_driver.c
@@ -675,6 +675,34 @@ void intel_display_driver_unregister(struct intel_display *display)
intel_vga_unregister(display);
}
+void intel_display_driver_shutdown(struct intel_display *display)
+{
+ if (!HAS_DISPLAY(display))
+ return;
+
+ intel_display_power_disable(display);
+
+ drm_client_dev_suspend(display->drm);
+ drm_kms_helper_poll_disable(display->drm);
+
+ intel_display_driver_disable_user_access(display);
+
+ drm_atomic_helper_shutdown(display->drm);
+
+ flush_workqueue(display->wq.cleanup);
+
+ intel_dp_mst_suspend(display);
+
+ intel_encoder_block_all_hpds(display);
+
+ intel_hpd_cancel_work(display);
+
+ intel_display_driver_suspend_access(display);
+
+ intel_encoder_suspend_all(display);
+ intel_encoder_shutdown_all(display);
+}
+
void intel_display_driver_shutdown_late(struct intel_display *display)
{
if (!HAS_DISPLAY(display))
diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.h b/drivers/gpu/drm/i915/display/intel_display_driver.h
index 61515577758b..7eca3d17dd82 100644
--- a/drivers/gpu/drm/i915/display/intel_display_driver.h
+++ b/drivers/gpu/drm/i915/display/intel_display_driver.h
@@ -24,6 +24,7 @@ void intel_display_driver_remove(struct intel_display *display);
void intel_display_driver_remove_noirq(struct intel_display *display);
void intel_display_driver_remove_nogem(struct intel_display *display);
void intel_display_driver_unregister(struct intel_display *display);
+void intel_display_driver_shutdown(struct intel_display *display);
void intel_display_driver_shutdown_late(struct intel_display *display);
int intel_display_driver_pm_suspend(struct intel_display *display);
diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
index 99fa42561989..2458a8a684e9 100644
--- a/drivers/gpu/drm/i915/i915_driver.c
+++ b/drivers/gpu/drm/i915/i915_driver.c
@@ -54,7 +54,6 @@
#include "display/intel_bw.h"
#include "display/intel_cdclk.h"
#include "display/intel_crtc.h"
-#include "display/intel_display_core.h"
#include "display/intel_display_device.h"
#include "display/intel_display_driver.h"
#include "display/intel_display_power.h"
@@ -1044,29 +1043,8 @@ void i915_driver_shutdown(struct drm_i915_private *i915)
disable_rpm_wakeref_asserts(&i915->runtime_pm);
intel_runtime_pm_disable(&i915->runtime_pm);
- intel_display_power_disable(display);
-
- drm_client_dev_suspend(&i915->drm);
- if (intel_display_device_present(display)) {
- drm_kms_helper_poll_disable(&i915->drm);
- intel_display_driver_disable_user_access(display);
-
- drm_atomic_helper_shutdown(&i915->drm);
- }
-
- flush_workqueue(display->wq.cleanup);
-
- intel_dp_mst_suspend(display);
-
- intel_encoder_block_all_hpds(display);
-
- intel_hpd_cancel_work(display);
- if (intel_display_device_present(display))
- intel_display_driver_suspend_access(display);
-
- intel_encoder_suspend_all(display);
- intel_encoder_shutdown_all(display);
+ intel_display_driver_shutdown(display);
intel_irq_suspend(i915);