On Fri, May 29, 2026 at 02:03:59PM +0300, Jani Nikula wrote: > 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. > > Signed-off-by: Jani Nikula <[email protected]>
Reviewed-by: Ville Syrjälä <[email protected]> > --- > .../drm/i915/display/intel_display_driver.c | 28 +++++++++++++++++++ > .../drm/i915/display/intel_display_driver.h | 1 + > drivers/gpu/drm/i915/i915_driver.c | 24 +--------------- > 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 7f2d191b9ef0..90b2a62798c1 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_driver.c > +++ b/drivers/gpu/drm/i915/display/intel_display_driver.c > @@ -681,6 +681,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 140c562a8627..80313ee07b07 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" > @@ -1042,29 +1041,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); > > -- > 2.47.3 -- Ville Syrjälä Intel
