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

Reply via email to