[PATCH 8/8] drm/i915/irq: move i915->irq_lock to display->irq.lock

Gustavo Sousa gustavo.sousa at intel.com
Tue May 6 21:30:33 UTC 2025


Quoting Jani Nikula (2025-05-06 10:06:50-03:00)
>Observe that i915->irq_lock is no longer used to protect anything
>outside of display. Make it a display thing.
>
>This allows us to remove the ugly #define irq_lock irq.lock hack from xe
>compat header.
>
>Note that this is slightly more subtle than it first looks. For i915,
>there's no functional change here. The lock is moved. However, for xe,
>we'll now have *two* locks, xe->irq.lock and display->irq.lock. These
>should protect different things, though. Indeed, nesting in the past
>would've lead to a deadlock because they were the same lock.
>
>With the i915 references gone, we can make a handful more files
>independent of i915_drv.h.
>
>Signed-off-by: Jani Nikula <jani.nikula at intel.com>

Besides reviewing the patch itself, I also did a git-grep to check for
lexical references to irq_lock in the code after this patch is applied.

I found 2 references in comments:

 (1) A reference to "drm_i915_private::irq_lock" in the comment for member
     detection_work_enabled of struct intel_hotplug. I think we can
     simply refer to "intel_display::irq::lock" now.

 (2) A reference to "i915->irq_lock" in a comment inside struct intel_rps.
     Looking at the history, it looks like we started using gt->irq_lock
     with commit d762043f7ab1 ("drm/i915: Extract GT powermanagement
     interrupt handling"), which failed to update the comment. I think
     we can update the comment to make it more accurate. I guess that
     could be on a patch of its own...

So, with the small tweak suggested in (1),

  Reviewed-by: Gustavo Sousa <gustavo.sousa at intel.com>

>---
> drivers/gpu/drm/i915/display/i9xx_plane.c     |  43 +++---
> .../gpu/drm/i915/display/intel_display_core.h |   3 +
> .../gpu/drm/i915/display/intel_display_irq.c  | 114 +++++++---------
> .../gpu/drm/i915/display/intel_display_rps.c  |  12 +-
> .../drm/i915/display/intel_display_types.h    |   2 +-
> drivers/gpu/drm/i915/display/intel_dp.c       |  10 +-
> drivers/gpu/drm/i915/display/intel_dsi_vbt.c  |   9 +-
> .../drm/i915/display/intel_fifo_underrun.c    |  44 +++---
> drivers/gpu/drm/i915/display/intel_hotplug.c  | 129 +++++++-----------
> .../gpu/drm/i915/display/intel_hotplug_irq.c  |  22 ++-
> drivers/gpu/drm/i915/display/intel_tv.c       |  14 +-
> .../drm/i915/display/skl_universal_plane.c    |  10 +-
> drivers/gpu/drm/i915/i915_driver.c            |   1 -
> drivers/gpu/drm/i915/i915_drv.h               |   2 -
> .../gpu/drm/xe/compat-i915-headers/i915_drv.h |  11 --
> 15 files changed, 168 insertions(+), 258 deletions(-)
>
>diff --git a/drivers/gpu/drm/i915/display/i9xx_plane.c b/drivers/gpu/drm/i915/display/i9xx_plane.c
>index 5e8344fdfc28..83778a6ff007 100644
>--- a/drivers/gpu/drm/i915/display/i9xx_plane.c
>+++ b/drivers/gpu/drm/i915/display/i9xx_plane.c
>@@ -7,9 +7,10 @@
> #include <drm/drm_atomic_helper.h>
> #include <drm/drm_blend.h>
> #include <drm/drm_fourcc.h>
>+#include <drm/drm_print.h>
> 
>-#include "i915_drv.h"
> #include "i915_reg.h"
>+#include "i915_utils.h"
> #include "i9xx_plane.h"
> #include "i9xx_plane_regs.h"
> #include "intel_atomic.h"
>@@ -631,92 +632,84 @@ static void
> bdw_primary_enable_flip_done(struct intel_plane *plane)
> {
>         struct intel_display *display = to_intel_display(plane);
>-        struct drm_i915_private *i915 = to_i915(plane->base.dev);
>         enum pipe pipe = plane->pipe;
> 
>-        spin_lock_irq(&i915->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
>         bdw_enable_pipe_irq(display, pipe, GEN8_PIPE_PRIMARY_FLIP_DONE);
>-        spin_unlock_irq(&i915->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> static void
> bdw_primary_disable_flip_done(struct intel_plane *plane)
> {
>         struct intel_display *display = to_intel_display(plane);
>-        struct drm_i915_private *i915 = to_i915(plane->base.dev);
>         enum pipe pipe = plane->pipe;
> 
>-        spin_lock_irq(&i915->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
>         bdw_disable_pipe_irq(display, pipe, GEN8_PIPE_PRIMARY_FLIP_DONE);
>-        spin_unlock_irq(&i915->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> static void
> ivb_primary_enable_flip_done(struct intel_plane *plane)
> {
>         struct intel_display *display = to_intel_display(plane);
>-        struct drm_i915_private *i915 = to_i915(plane->base.dev);
> 
>-        spin_lock_irq(&i915->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
>         ilk_enable_display_irq(display, DE_PLANE_FLIP_DONE_IVB(plane->i9xx_plane));
>-        spin_unlock_irq(&i915->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> static void
> ivb_primary_disable_flip_done(struct intel_plane *plane)
> {
>         struct intel_display *display = to_intel_display(plane);
>-        struct drm_i915_private *i915 = to_i915(plane->base.dev);
> 
>-        spin_lock_irq(&i915->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
>         ilk_disable_display_irq(display, DE_PLANE_FLIP_DONE_IVB(plane->i9xx_plane));
>-        spin_unlock_irq(&i915->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> static void
> ilk_primary_enable_flip_done(struct intel_plane *plane)
> {
>         struct intel_display *display = to_intel_display(plane);
>-        struct drm_i915_private *i915 = to_i915(plane->base.dev);
> 
>-        spin_lock_irq(&i915->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
>         ilk_enable_display_irq(display, DE_PLANE_FLIP_DONE(plane->i9xx_plane));
>-        spin_unlock_irq(&i915->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> static void
> ilk_primary_disable_flip_done(struct intel_plane *plane)
> {
>         struct intel_display *display = to_intel_display(plane);
>-        struct drm_i915_private *i915 = to_i915(plane->base.dev);
> 
>-        spin_lock_irq(&i915->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
>         ilk_disable_display_irq(display, DE_PLANE_FLIP_DONE(plane->i9xx_plane));
>-        spin_unlock_irq(&i915->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> static void
> vlv_primary_enable_flip_done(struct intel_plane *plane)
> {
>         struct intel_display *display = to_intel_display(plane);
>-        struct drm_i915_private *i915 = to_i915(plane->base.dev);
>         enum pipe pipe = plane->pipe;
> 
>-        spin_lock_irq(&i915->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
>         i915_enable_pipestat(display, pipe, PLANE_FLIP_DONE_INT_STATUS_VLV);
>-        spin_unlock_irq(&i915->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> static void
> vlv_primary_disable_flip_done(struct intel_plane *plane)
> {
>         struct intel_display *display = to_intel_display(plane);
>-        struct drm_i915_private *i915 = to_i915(plane->base.dev);
>         enum pipe pipe = plane->pipe;
> 
>-        spin_lock_irq(&i915->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
>         i915_disable_pipestat(display, pipe, PLANE_FLIP_DONE_INT_STATUS_VLV);
>-        spin_unlock_irq(&i915->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> static bool i9xx_plane_can_async_flip(u64 modifier)
>diff --git a/drivers/gpu/drm/i915/display/intel_display_core.h b/drivers/gpu/drm/i915/display/intel_display_core.h
>index dc834cef75c7..ebbd3618260c 100644
>--- a/drivers/gpu/drm/i915/display/intel_display_core.h
>+++ b/drivers/gpu/drm/i915/display/intel_display_core.h
>@@ -458,6 +458,9 @@ struct intel_display {
>         } ips;
> 
>         struct {
>+                /* protects the irq masks */
>+                spinlock_t lock;
>+
>                 /*
>                  * Most platforms treat the display irq block as an always-on
>                  * power domain. vlv/chv can disable it at runtime and need
>diff --git a/drivers/gpu/drm/i915/display/intel_display_irq.c b/drivers/gpu/drm/i915/display/intel_display_irq.c
>index 264ddeba121b..3e73832e5e81 100644
>--- a/drivers/gpu/drm/i915/display/intel_display_irq.c
>+++ b/drivers/gpu/drm/i915/display/intel_display_irq.c
>@@ -135,7 +135,7 @@ void ilk_update_display_irq(struct intel_display *display,
>         struct drm_i915_private *dev_priv = to_i915(display->drm);
>         u32 new_val;
> 
>-        lockdep_assert_held(&dev_priv->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
>         drm_WARN_ON(display->drm, enabled_irq_mask & ~interrupt_mask);
> 
>         new_val = dev_priv->irq_mask;
>@@ -173,7 +173,7 @@ void bdw_update_port_irq(struct intel_display *display,
>         u32 new_val;
>         u32 old_val;
> 
>-        lockdep_assert_held(&dev_priv->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
> 
>         drm_WARN_ON(display->drm, enabled_irq_mask & ~interrupt_mask);
> 
>@@ -206,7 +206,7 @@ static void bdw_update_pipe_irq(struct intel_display *display,
>         struct drm_i915_private *dev_priv = to_i915(display->drm);
>         u32 new_val;
> 
>-        lockdep_assert_held(&dev_priv->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
> 
>         drm_WARN_ON(display->drm, enabled_irq_mask & ~interrupt_mask);
> 
>@@ -254,7 +254,7 @@ void ibx_display_interrupt_update(struct intel_display *display,
> 
>         drm_WARN_ON(display->drm, enabled_irq_mask & ~interrupt_mask);
> 
>-        lockdep_assert_held(&dev_priv->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
> 
>         if (drm_WARN_ON(display->drm, !intel_irqs_enabled(dev_priv)))
>                 return;
>@@ -276,11 +276,10 @@ void ibx_disable_display_interrupt(struct intel_display *display, u32 bits)
> u32 i915_pipestat_enable_mask(struct intel_display *display,
>                               enum pipe pipe)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>         u32 status_mask = display->irq.pipestat_irq_mask[pipe];
>         u32 enable_mask = status_mask << 16;
> 
>-        lockdep_assert_held(&dev_priv->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
> 
>         if (DISPLAY_VER(display) < 5)
>                 goto out;
>@@ -329,7 +328,7 @@ void i915_enable_pipestat(struct intel_display *display,
>                       "pipe %c: status_mask=0x%x\n",
>                       pipe_name(pipe), status_mask);
> 
>-        lockdep_assert_held(&dev_priv->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
>         drm_WARN_ON(display->drm, !intel_irqs_enabled(dev_priv));
> 
>         if ((display->irq.pipestat_irq_mask[pipe] & status_mask) == status_mask)
>@@ -353,7 +352,7 @@ void i915_disable_pipestat(struct intel_display *display,
>                       "pipe %c: status_mask=0x%x\n",
>                       pipe_name(pipe), status_mask);
> 
>-        lockdep_assert_held(&dev_priv->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
>         drm_WARN_ON(display->drm, !intel_irqs_enabled(dev_priv));
> 
>         if ((display->irq.pipestat_irq_mask[pipe] & status_mask) == 0)
>@@ -380,22 +379,20 @@ static bool i915_has_legacy_blc_interrupt(struct intel_display *display)
> /* enable ASLE pipestat for OpRegion */
> static void i915_enable_asle_pipestat(struct intel_display *display)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>-
>         if (!intel_opregion_asle_present(display))
>                 return;
> 
>         if (!i915_has_legacy_blc_interrupt(display))
>                 return;
> 
>-        spin_lock_irq(&dev_priv->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
> 
>         i915_enable_pipestat(display, PIPE_B, PIPE_LEGACY_BLC_EVENT_STATUS);
>         if (DISPLAY_VER(display) >= 4)
>                 i915_enable_pipestat(display, PIPE_A,
>                                      PIPE_LEGACY_BLC_EVENT_STATUS);
> 
>-        spin_unlock_irq(&dev_priv->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> #if IS_ENABLED(CONFIG_DEBUG_FS)
>@@ -514,14 +511,13 @@ static void i9xx_pipestat_irq_reset(struct intel_display *display)
> void i9xx_pipestat_irq_ack(struct intel_display *display,
>                            u32 iir, u32 pipe_stats[I915_MAX_PIPES])
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>         enum pipe pipe;
> 
>-        spin_lock(&dev_priv->irq_lock);
>+        spin_lock(&display->irq.lock);
> 
>         if ((display->platform.valleyview || display->platform.cherryview) &&
>             !display->irq.vlv_display_irqs_enabled) {
>-                spin_unlock(&dev_priv->irq_lock);
>+                spin_unlock(&display->irq.lock);
>                 return;
>         }
> 
>@@ -576,7 +572,7 @@ void i9xx_pipestat_irq_ack(struct intel_display *display,
>                         intel_de_write(display, reg, enable_mask);
>                 }
>         }
>-        spin_unlock(&dev_priv->irq_lock);
>+        spin_unlock(&display->irq.lock);
> }
> 
> void i915_pipestat_irq_handler(struct intel_display *display,
>@@ -1566,13 +1562,12 @@ void i915gm_irq_cstate_wa(struct intel_display *display, bool enable)
> int i8xx_enable_vblank(struct drm_crtc *crtc)
> {
>         struct intel_display *display = to_intel_display(crtc->dev);
>-        struct drm_i915_private *dev_priv = to_i915(crtc->dev);
>         enum pipe pipe = to_intel_crtc(crtc)->pipe;
>         unsigned long irqflags;
> 
>-        spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
>+        spin_lock_irqsave(&display->irq.lock, irqflags);
>         i915_enable_pipestat(display, pipe, PIPE_VBLANK_INTERRUPT_STATUS);
>-        spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
>+        spin_unlock_irqrestore(&display->irq.lock, irqflags);
> 
>         return 0;
> }
>@@ -1580,13 +1575,12 @@ int i8xx_enable_vblank(struct drm_crtc *crtc)
> void i8xx_disable_vblank(struct drm_crtc *crtc)
> {
>         struct intel_display *display = to_intel_display(crtc->dev);
>-        struct drm_i915_private *dev_priv = to_i915(crtc->dev);
>         enum pipe pipe = to_intel_crtc(crtc)->pipe;
>         unsigned long irqflags;
> 
>-        spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
>+        spin_lock_irqsave(&display->irq.lock, irqflags);
>         i915_disable_pipestat(display, pipe, PIPE_VBLANK_INTERRUPT_STATUS);
>-        spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
>+        spin_unlock_irqrestore(&display->irq.lock, irqflags);
> }
> 
> int i915gm_enable_vblank(struct drm_crtc *crtc)
>@@ -1610,14 +1604,13 @@ void i915gm_disable_vblank(struct drm_crtc *crtc)
> int i965_enable_vblank(struct drm_crtc *crtc)
> {
>         struct intel_display *display = to_intel_display(crtc->dev);
>-        struct drm_i915_private *dev_priv = to_i915(crtc->dev);
>         enum pipe pipe = to_intel_crtc(crtc)->pipe;
>         unsigned long irqflags;
> 
>-        spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
>+        spin_lock_irqsave(&display->irq.lock, irqflags);
>         i915_enable_pipestat(display, pipe,
>                              PIPE_START_VBLANK_INTERRUPT_STATUS);
>-        spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
>+        spin_unlock_irqrestore(&display->irq.lock, irqflags);
> 
>         return 0;
> }
>@@ -1625,28 +1618,26 @@ int i965_enable_vblank(struct drm_crtc *crtc)
> void i965_disable_vblank(struct drm_crtc *crtc)
> {
>         struct intel_display *display = to_intel_display(crtc->dev);
>-        struct drm_i915_private *dev_priv = to_i915(crtc->dev);
>         enum pipe pipe = to_intel_crtc(crtc)->pipe;
>         unsigned long irqflags;
> 
>-        spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
>+        spin_lock_irqsave(&display->irq.lock, irqflags);
>         i915_disable_pipestat(display, pipe,
>                               PIPE_START_VBLANK_INTERRUPT_STATUS);
>-        spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
>+        spin_unlock_irqrestore(&display->irq.lock, irqflags);
> }
> 
> int ilk_enable_vblank(struct drm_crtc *crtc)
> {
>         struct intel_display *display = to_intel_display(crtc->dev);
>-        struct drm_i915_private *dev_priv = to_i915(crtc->dev);
>         enum pipe pipe = to_intel_crtc(crtc)->pipe;
>         unsigned long irqflags;
>         u32 bit = DISPLAY_VER(display) >= 7 ?
>                 DE_PIPE_VBLANK_IVB(pipe) : DE_PIPE_VBLANK(pipe);
> 
>-        spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
>+        spin_lock_irqsave(&display->irq.lock, irqflags);
>         ilk_enable_display_irq(display, bit);
>-        spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
>+        spin_unlock_irqrestore(&display->irq.lock, irqflags);
> 
>         /* Even though there is no DMC, frame counter can get stuck when
>          * PSR is active as no frames are generated.
>@@ -1660,15 +1651,14 @@ int ilk_enable_vblank(struct drm_crtc *crtc)
> void ilk_disable_vblank(struct drm_crtc *crtc)
> {
>         struct intel_display *display = to_intel_display(crtc->dev);
>-        struct drm_i915_private *dev_priv = to_i915(crtc->dev);
>         enum pipe pipe = to_intel_crtc(crtc)->pipe;
>         unsigned long irqflags;
>         u32 bit = DISPLAY_VER(display) >= 7 ?
>                 DE_PIPE_VBLANK_IVB(pipe) : DE_PIPE_VBLANK(pipe);
> 
>-        spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
>+        spin_lock_irqsave(&display->irq.lock, irqflags);
>         ilk_disable_display_irq(display, bit);
>-        spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
>+        spin_unlock_irqrestore(&display->irq.lock, irqflags);
> }
> 
> static bool gen11_dsi_configure_te(struct intel_crtc *intel_crtc,
>@@ -1707,7 +1697,6 @@ int bdw_enable_vblank(struct drm_crtc *_crtc)
> {
>         struct intel_crtc *crtc = to_intel_crtc(_crtc);
>         struct intel_display *display = to_intel_display(crtc);
>-        struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
>         enum pipe pipe = crtc->pipe;
>         unsigned long irqflags;
> 
>@@ -1717,9 +1706,9 @@ int bdw_enable_vblank(struct drm_crtc *_crtc)
>         if (crtc->vblank_psr_notify && display->irq.vblank_enable_count++ == 0)
>                 schedule_work(&display->irq.vblank_notify_work);
> 
>-        spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
>+        spin_lock_irqsave(&display->irq.lock, irqflags);
>         bdw_enable_pipe_irq(display, pipe, GEN8_PIPE_VBLANK);
>-        spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
>+        spin_unlock_irqrestore(&display->irq.lock, irqflags);
> 
>         /* Even if there is no DMC, frame counter can get stuck when
>          * PSR is active as no frames are generated, so check only for PSR.
>@@ -1734,16 +1723,15 @@ void bdw_disable_vblank(struct drm_crtc *_crtc)
> {
>         struct intel_crtc *crtc = to_intel_crtc(_crtc);
>         struct intel_display *display = to_intel_display(crtc);
>-        struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
>         enum pipe pipe = crtc->pipe;
>         unsigned long irqflags;
> 
>         if (gen11_dsi_configure_te(crtc, false))
>                 return;
> 
>-        spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
>+        spin_lock_irqsave(&display->irq.lock, irqflags);
>         bdw_disable_pipe_irq(display, pipe, GEN8_PIPE_VBLANK);
>-        spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
>+        spin_unlock_irqrestore(&display->irq.lock, irqflags);
> 
>         if (crtc->vblank_psr_notify && --display->irq.vblank_enable_count == 0)
>                 schedule_work(&display->irq.vblank_notify_work);
>@@ -1880,12 +1868,10 @@ static void _vlv_display_irq_reset(struct intel_display *display)
> 
> void vlv_display_irq_reset(struct intel_display *display)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>-
>-        spin_lock_irq(&dev_priv->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
>         if (display->irq.vlv_display_irqs_enabled)
>                 _vlv_display_irq_reset(display);
>-        spin_unlock_irq(&dev_priv->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> void i9xx_display_irq_reset(struct intel_display *display)
>@@ -1900,33 +1886,29 @@ void i9xx_display_irq_reset(struct intel_display *display)
> 
> void i915_display_irq_postinstall(struct intel_display *display)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>-
>         /*
>          * Interrupt setup is already guaranteed to be single-threaded, this is
>          * just to make the assert_spin_locked check happy.
>          */
>-        spin_lock_irq(&dev_priv->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
>         i915_enable_pipestat(display, PIPE_A, PIPE_CRC_DONE_INTERRUPT_STATUS);
>         i915_enable_pipestat(display, PIPE_B, PIPE_CRC_DONE_INTERRUPT_STATUS);
>-        spin_unlock_irq(&dev_priv->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> 
>         i915_enable_asle_pipestat(display);
> }
> 
> void i965_display_irq_postinstall(struct intel_display *display)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>-
>         /*
>          * Interrupt setup is already guaranteed to be single-threaded, this is
>          * just to make the assert_spin_locked check happy.
>          */
>-        spin_lock_irq(&dev_priv->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
>         i915_enable_pipestat(display, PIPE_A, PIPE_GMBUS_INTERRUPT_STATUS);
>         i915_enable_pipestat(display, PIPE_A, PIPE_CRC_DONE_INTERRUPT_STATUS);
>         i915_enable_pipestat(display, PIPE_B, PIPE_CRC_DONE_INTERRUPT_STATUS);
>-        spin_unlock_irq(&dev_priv->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> 
>         i915_enable_asle_pipestat(display);
> }
>@@ -1982,12 +1964,10 @@ static void _vlv_display_irq_postinstall(struct intel_display *display)
> 
> void vlv_display_irq_postinstall(struct intel_display *display)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>-
>-        spin_lock_irq(&dev_priv->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
>         if (display->irq.vlv_display_irqs_enabled)
>                 _vlv_display_irq_postinstall(display);
>-        spin_unlock_irq(&dev_priv->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> void ibx_display_irq_reset(struct intel_display *display)
>@@ -2084,10 +2064,10 @@ void gen8_irq_power_well_post_enable(struct intel_display *display,
>                 gen8_de_pipe_flip_done_mask(display);
>         enum pipe pipe;
> 
>-        spin_lock_irq(&dev_priv->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
> 
>         if (!intel_irqs_enabled(dev_priv)) {
>-                spin_unlock_irq(&dev_priv->irq_lock);
>+                spin_unlock_irq(&display->irq.lock);
>                 return;
>         }
> 
>@@ -2096,7 +2076,7 @@ void gen8_irq_power_well_post_enable(struct intel_display *display,
>                                             display->irq.de_irq_mask[pipe],
>                                             ~display->irq.de_irq_mask[pipe] | extra_ier);
> 
>-        spin_unlock_irq(&dev_priv->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> void gen8_irq_power_well_pre_disable(struct intel_display *display,
>@@ -2105,17 +2085,17 @@ void gen8_irq_power_well_pre_disable(struct intel_display *display,
>         struct drm_i915_private *dev_priv = to_i915(display->drm);
>         enum pipe pipe;
> 
>-        spin_lock_irq(&dev_priv->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
> 
>         if (!intel_irqs_enabled(dev_priv)) {
>-                spin_unlock_irq(&dev_priv->irq_lock);
>+                spin_unlock_irq(&display->irq.lock);
>                 return;
>         }
> 
>         for_each_pipe_masked(display, pipe, pipe_mask)
>                 intel_display_irq_regs_reset(display, GEN8_DE_PIPE_IRQ_REGS(pipe));
> 
>-        spin_unlock_irq(&dev_priv->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> 
>         /* make sure we're done processing display irqs */
>         intel_synchronize_irq(dev_priv);
>@@ -2153,7 +2133,7 @@ void valleyview_enable_display_irqs(struct intel_display *display)
> {
>         struct drm_i915_private *dev_priv = to_i915(display->drm);
> 
>-        spin_lock_irq(&dev_priv->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
> 
>         if (display->irq.vlv_display_irqs_enabled)
>                 goto out;
>@@ -2166,14 +2146,14 @@ void valleyview_enable_display_irqs(struct intel_display *display)
>         }
> 
> out:
>-        spin_unlock_irq(&dev_priv->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> void valleyview_disable_display_irqs(struct intel_display *display)
> {
>         struct drm_i915_private *dev_priv = to_i915(display->drm);
> 
>-        spin_lock_irq(&dev_priv->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
> 
>         if (!display->irq.vlv_display_irqs_enabled)
>                 goto out;
>@@ -2183,7 +2163,7 @@ void valleyview_disable_display_irqs(struct intel_display *display)
>         if (intel_irqs_enabled(dev_priv))
>                 _vlv_display_irq_reset(display);
> out:
>-        spin_unlock_irq(&dev_priv->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> void ilk_de_irq_postinstall(struct intel_display *display)
>@@ -2371,6 +2351,8 @@ void dg1_de_irq_postinstall(struct intel_display *display)
> 
> void intel_display_irq_init(struct intel_display *display)
> {
>+        spin_lock_init(&display->irq.lock);
>+
>         display->drm->vblank_disable_immediate = true;
> 
>         intel_hotplug_irq_init(display);
>diff --git a/drivers/gpu/drm/i915/display/intel_display_rps.c b/drivers/gpu/drm/i915/display/intel_display_rps.c
>index 941bff5a5eb0..678b24115951 100644
>--- a/drivers/gpu/drm/i915/display/intel_display_rps.c
>+++ b/drivers/gpu/drm/i915/display/intel_display_rps.c
>@@ -86,20 +86,16 @@ void intel_display_rps_mark_interactive(struct intel_display *display,
> 
> void ilk_display_rps_enable(struct intel_display *display)
> {
>-        struct drm_i915_private *i915 = to_i915(display->drm);
>-
>-        spin_lock(&i915->irq_lock);
>+        spin_lock(&display->irq.lock);
>         ilk_enable_display_irq(display, DE_PCU_EVENT);
>-        spin_unlock(&i915->irq_lock);
>+        spin_unlock(&display->irq.lock);
> }
> 
> void ilk_display_rps_disable(struct intel_display *display)
> {
>-        struct drm_i915_private *i915 = to_i915(display->drm);
>-
>-        spin_lock(&i915->irq_lock);
>+        spin_lock(&display->irq.lock);
>         ilk_disable_display_irq(display, DE_PCU_EVENT);
>-        spin_unlock(&i915->irq_lock);
>+        spin_unlock(&display->irq.lock);
> }
> 
> void ilk_display_rps_irq_handler(struct intel_display *display)
>diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
>index 7415564d058a..d6d0440dcee9 100644
>--- a/drivers/gpu/drm/i915/display/intel_display_types.h
>+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
>@@ -1388,7 +1388,7 @@ struct intel_crtc {
>         /* armed event for DSB based updates */
>         struct drm_pending_vblank_event *dsb_event;
> 
>-        /* Access to these should be protected by dev_priv->irq_lock. */
>+        /* Access to these should be protected by display->irq.lock. */
>         bool cpu_fifo_underrun_disabled;
>         bool pch_fifo_underrun_disabled;
> 
>diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
>index b299b5d8b68e..593b29b56714 100644
>--- a/drivers/gpu/drm/i915/display/intel_dp.c
>+++ b/drivers/gpu/drm/i915/display/intel_dp.c
>@@ -45,12 +45,13 @@
> #include <drm/drm_crtc.h>
> #include <drm/drm_edid.h>
> #include <drm/drm_fixed.h>
>+#include <drm/drm_print.h>
> #include <drm/drm_probe_helper.h>
> 
> #include "g4x_dp.h"
>-#include "i915_drv.h"
> #include "i915_irq.h"
> #include "i915_reg.h"
>+#include "i915_utils.h"
> #include "intel_alpm.h"
> #include "intel_atomic.h"
> #include "intel_audio.h"
>@@ -58,6 +59,7 @@
> #include "intel_combo_phy_regs.h"
> #include "intel_connector.h"
> #include "intel_crtc.h"
>+#include "intel_crtc_state_dump.h"
> #include "intel_cx0_phy.h"
> #include "intel_ddi.h"
> #include "intel_de.h"
>@@ -92,7 +94,6 @@
> #include "intel_tc.h"
> #include "intel_vdsc.h"
> #include "intel_vrr.h"
>-#include "intel_crtc_state_dump.h"
> 
> /* DP DSC throughput values used for slice count calculations KPixels/s */
> #define DP_DSC_PEAK_PIXEL_RATE                        2720000
>@@ -6219,12 +6220,11 @@ static void intel_dp_oob_hotplug_event(struct drm_connector *_connector,
>         struct intel_connector *connector = to_intel_connector(_connector);
>         struct intel_display *display = to_intel_display(connector);
>         struct intel_encoder *encoder = intel_attached_encoder(connector);
>-        struct drm_i915_private *i915 = to_i915(display->drm);
>         bool hpd_high = hpd_state == connector_status_connected;
>         unsigned int hpd_pin = encoder->hpd_pin;
>         bool need_work = false;
> 
>-        spin_lock_irq(&i915->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
>         if (hpd_high != test_bit(hpd_pin, &display->hotplug.oob_hotplug_last_state)) {
>                 display->hotplug.event_bits |= BIT(hpd_pin);
> 
>@@ -6233,7 +6233,7 @@ static void intel_dp_oob_hotplug_event(struct drm_connector *_connector,
>                              hpd_high);
>                 need_work = true;
>         }
>-        spin_unlock_irq(&i915->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> 
>         if (need_work)
>                 intel_hpd_schedule_detection(display);
>diff --git a/drivers/gpu/drm/i915/display/intel_dsi_vbt.c b/drivers/gpu/drm/i915/display/intel_dsi_vbt.c
>index 4e92504f5c14..29c920983413 100644
>--- a/drivers/gpu/drm/i915/display/intel_dsi_vbt.c
>+++ b/drivers/gpu/drm/i915/display/intel_dsi_vbt.c
>@@ -31,16 +31,16 @@
> #include <linux/pinctrl/machine.h>
> #include <linux/slab.h>
> #include <linux/string_helpers.h>
>-
> #include <linux/unaligned.h>
> 
> #include <drm/drm_crtc.h>
> #include <drm/drm_edid.h>
>+#include <drm/drm_print.h>
> 
> #include <video/mipi_display.h>
> 
>-#include "i915_drv.h"
> #include "i915_reg.h"
>+#include "i915_utils.h"
> #include "intel_de.h"
> #include "intel_display_types.h"
> #include "intel_dsi.h"
>@@ -321,7 +321,6 @@ enum {
> static void icl_native_gpio_set_value(struct intel_display *display,
>                                       int gpio, bool value)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>         int index;
> 
>         if (drm_WARN_ON(display->drm, DISPLAY_VER(display) == 11 && gpio >= MIPI_RESET_2))
>@@ -341,12 +340,12 @@ static void icl_native_gpio_set_value(struct intel_display *display,
>                  * The locking protects against concurrent SHOTPLUG_CTL_DDI
>                  * modifications in irq setup and handling.
>                  */
>-                spin_lock_irq(&dev_priv->irq_lock);
>+                spin_lock_irq(&display->irq.lock);
>                 intel_de_rmw(display, SHOTPLUG_CTL_DDI,
>                              SHOTPLUG_CTL_DDI_HPD_ENABLE(index) |
>                              SHOTPLUG_CTL_DDI_HPD_OUTPUT_DATA(index),
>                              value ? SHOTPLUG_CTL_DDI_HPD_OUTPUT_DATA(index) : 0);
>-                spin_unlock_irq(&dev_priv->irq_lock);
>+                spin_unlock_irq(&display->irq.lock);
>                 break;
>         case MIPI_AVDD_EN_1:
>         case MIPI_AVDD_EN_2:
>diff --git a/drivers/gpu/drm/i915/display/intel_fifo_underrun.c b/drivers/gpu/drm/i915/display/intel_fifo_underrun.c
>index 7c7cd29b0944..2a787897b2d3 100644
>--- a/drivers/gpu/drm/i915/display/intel_fifo_underrun.c
>+++ b/drivers/gpu/drm/i915/display/intel_fifo_underrun.c
>@@ -25,7 +25,8 @@
>  *
>  */
> 
>-#include "i915_drv.h"
>+#include <drm/drm_print.h>
>+
> #include "i915_reg.h"
> #include "intel_de.h"
> #include "intel_display_irq.h"
>@@ -57,11 +58,10 @@
> 
> static bool ivb_can_enable_err_int(struct intel_display *display)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>         struct intel_crtc *crtc;
>         enum pipe pipe;
> 
>-        lockdep_assert_held(&dev_priv->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
> 
>         for_each_pipe(display, pipe) {
>                 crtc = intel_crtc_for_pipe(display, pipe);
>@@ -75,11 +75,10 @@ static bool ivb_can_enable_err_int(struct intel_display *display)
> 
> static bool cpt_can_enable_serr_int(struct intel_display *display)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>         enum pipe pipe;
>         struct intel_crtc *crtc;
> 
>-        lockdep_assert_held(&dev_priv->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
> 
>         for_each_pipe(display, pipe) {
>                 crtc = intel_crtc_for_pipe(display, pipe);
>@@ -94,11 +93,10 @@ static bool cpt_can_enable_serr_int(struct intel_display *display)
> static void i9xx_check_fifo_underruns(struct intel_crtc *crtc)
> {
>         struct intel_display *display = to_intel_display(crtc);
>-        struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
>         i915_reg_t reg = PIPESTAT(display, crtc->pipe);
>         u32 enable_mask;
> 
>-        lockdep_assert_held(&dev_priv->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
> 
>         if ((intel_de_read(display, reg) & PIPE_FIFO_UNDERRUN_STATUS) == 0)
>                 return;
>@@ -115,10 +113,9 @@ static void i9xx_set_fifo_underrun_reporting(struct intel_display *display,
>                                              enum pipe pipe,
>                                              bool enable, bool old)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>         i915_reg_t reg = PIPESTAT(display, pipe);
> 
>-        lockdep_assert_held(&dev_priv->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
> 
>         if (enable) {
>                 u32 enable_mask = i915_pipestat_enable_mask(display, pipe);
>@@ -148,11 +145,10 @@ static void ilk_set_fifo_underrun_reporting(struct intel_display *display,
> static void ivb_check_fifo_underruns(struct intel_crtc *crtc)
> {
>         struct intel_display *display = to_intel_display(crtc);
>-        struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
>         enum pipe pipe = crtc->pipe;
>         u32 err_int = intel_de_read(display, GEN7_ERR_INT);
> 
>-        lockdep_assert_held(&dev_priv->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
> 
>         if ((err_int & ERR_INT_FIFO_UNDERRUN(pipe)) == 0)
>                 return;
>@@ -213,11 +209,10 @@ static void ibx_set_fifo_underrun_reporting(struct intel_display *display,
> static void cpt_check_pch_fifo_underruns(struct intel_crtc *crtc)
> {
>         struct intel_display *display = to_intel_display(crtc);
>-        struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
>         enum pipe pch_transcoder = crtc->pipe;
>         u32 serr_int = intel_de_read(display, SERR_INT);
> 
>-        lockdep_assert_held(&dev_priv->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
> 
>         if ((serr_int & SERR_INT_TRANS_FIFO_UNDERRUN(pch_transcoder)) == 0)
>                 return;
>@@ -258,11 +253,10 @@ static void cpt_set_fifo_underrun_reporting(struct intel_display *display,
> static bool __intel_set_cpu_fifo_underrun_reporting(struct intel_display *display,
>                                                     enum pipe pipe, bool enable)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>         struct intel_crtc *crtc = intel_crtc_for_pipe(display, pipe);
>         bool old;
> 
>-        lockdep_assert_held(&dev_priv->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
> 
>         old = !crtc->cpu_fifo_underrun_disabled;
>         crtc->cpu_fifo_underrun_disabled = !enable;
>@@ -298,13 +292,12 @@ static bool __intel_set_cpu_fifo_underrun_reporting(struct intel_display *displa
> bool intel_set_cpu_fifo_underrun_reporting(struct intel_display *display,
>                                            enum pipe pipe, bool enable)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>         unsigned long flags;
>         bool ret;
> 
>-        spin_lock_irqsave(&dev_priv->irq_lock, flags);
>+        spin_lock_irqsave(&display->irq.lock, flags);
>         ret = __intel_set_cpu_fifo_underrun_reporting(display, pipe, enable);
>-        spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
>+        spin_unlock_irqrestore(&display->irq.lock, flags);
> 
>         return ret;
> }
>@@ -327,7 +320,6 @@ bool intel_set_pch_fifo_underrun_reporting(struct intel_display *display,
>                                            enum pipe pch_transcoder,
>                                            bool enable)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>         struct intel_crtc *crtc = intel_crtc_for_pipe(display, pch_transcoder);
>         unsigned long flags;
>         bool old;
>@@ -341,7 +333,7 @@ bool intel_set_pch_fifo_underrun_reporting(struct intel_display *display,
>          * crtc on LPT won't cause issues.
>          */
> 
>-        spin_lock_irqsave(&dev_priv->irq_lock, flags);
>+        spin_lock_irqsave(&display->irq.lock, flags);
> 
>         old = !crtc->pch_fifo_underrun_disabled;
>         crtc->pch_fifo_underrun_disabled = !enable;
>@@ -355,7 +347,7 @@ bool intel_set_pch_fifo_underrun_reporting(struct intel_display *display,
>                                                 pch_transcoder,
>                                                 enable, old);
> 
>-        spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
>+        spin_unlock_irqrestore(&display->irq.lock, flags);
>         return old;
> }
> 
>@@ -422,10 +414,9 @@ void intel_pch_fifo_underrun_irq_handler(struct intel_display *display,
>  */
> void intel_check_cpu_fifo_underruns(struct intel_display *display)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>         struct intel_crtc *crtc;
> 
>-        spin_lock_irq(&dev_priv->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
> 
>         for_each_intel_crtc(display->drm, crtc) {
>                 if (crtc->cpu_fifo_underrun_disabled)
>@@ -437,7 +428,7 @@ void intel_check_cpu_fifo_underruns(struct intel_display *display)
>                         ivb_check_fifo_underruns(crtc);
>         }
> 
>-        spin_unlock_irq(&dev_priv->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> /**
>@@ -450,10 +441,9 @@ void intel_check_cpu_fifo_underruns(struct intel_display *display)
>  */
> void intel_check_pch_fifo_underruns(struct intel_display *display)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>         struct intel_crtc *crtc;
> 
>-        spin_lock_irq(&dev_priv->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
> 
>         for_each_intel_crtc(display->drm, crtc) {
>                 if (crtc->pch_fifo_underrun_disabled)
>@@ -463,7 +453,7 @@ void intel_check_pch_fifo_underruns(struct intel_display *display)
>                         cpt_check_pch_fifo_underruns(crtc);
>         }
> 
>-        spin_unlock_irq(&dev_priv->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> void intel_init_fifo_underrun_reporting(struct intel_display *display,
>diff --git a/drivers/gpu/drm/i915/display/intel_hotplug.c b/drivers/gpu/drm/i915/display/intel_hotplug.c
>index 6885e5a09079..fc5d8928c37e 100644
>--- a/drivers/gpu/drm/i915/display/intel_hotplug.c
>+++ b/drivers/gpu/drm/i915/display/intel_hotplug.c
>@@ -183,9 +183,7 @@ static bool intel_hpd_irq_storm_detect(struct intel_display *display,
> 
> static bool detection_work_enabled(struct intel_display *display)
> {
>-        struct drm_i915_private *i915 = to_i915(display->drm);
>-
>-        lockdep_assert_held(&i915->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
> 
>         return display->hotplug.detection_work_enabled;
> }
>@@ -195,7 +193,7 @@ mod_delayed_detection_work(struct intel_display *display, struct delayed_work *w
> {
>         struct drm_i915_private *i915 = to_i915(display->drm);
> 
>-        lockdep_assert_held(&i915->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
> 
>         if (!detection_work_enabled(display))
>                 return false;
>@@ -208,7 +206,7 @@ queue_delayed_detection_work(struct intel_display *display, struct delayed_work
> {
>         struct drm_i915_private *i915 = to_i915(display->drm);
> 
>-        lockdep_assert_held(&i915->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
> 
>         if (!detection_work_enabled(display))
>                 return false;
>@@ -221,7 +219,7 @@ queue_detection_work(struct intel_display *display, struct work_struct *work)
> {
>         struct drm_i915_private *i915 = to_i915(display->drm);
> 
>-        lockdep_assert_held(&i915->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
> 
>         if (!detection_work_enabled(display))
>                 return false;
>@@ -232,12 +230,11 @@ queue_detection_work(struct intel_display *display, struct work_struct *work)
> static void
> intel_hpd_irq_storm_switch_to_polling(struct intel_display *display)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>         struct drm_connector_list_iter conn_iter;
>         struct intel_connector *connector;
>         bool hpd_disabled = false;
> 
>-        lockdep_assert_held(&dev_priv->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
> 
>         drm_connector_list_iter_begin(display->drm, &conn_iter);
>         for_each_intel_connector_iter(connector, &conn_iter) {
>@@ -276,7 +273,6 @@ static void intel_hpd_irq_storm_reenable_work(struct work_struct *work)
> {
>         struct intel_display *display =
>                 container_of(work, typeof(*display), hotplug.reenable_work.work);
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>         struct drm_connector_list_iter conn_iter;
>         struct intel_connector *connector;
>         struct ref_tracker *wakeref;
>@@ -284,7 +280,7 @@ static void intel_hpd_irq_storm_reenable_work(struct work_struct *work)
> 
>         wakeref = intel_display_rpm_get(display);
> 
>-        spin_lock_irq(&dev_priv->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
> 
>         drm_connector_list_iter_begin(display->drm, &conn_iter);
>         for_each_intel_connector_iter(connector, &conn_iter) {
>@@ -308,7 +304,7 @@ static void intel_hpd_irq_storm_reenable_work(struct work_struct *work)
> 
>         intel_hpd_irq_setup(display);
> 
>-        spin_unlock_irq(&dev_priv->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> 
>         intel_display_rpm_put(display, wakeref);
> }
>@@ -376,9 +372,7 @@ static bool hpd_pin_has_pulse(struct intel_display *display, enum hpd_pin pin)
> 
> static bool hpd_pin_is_blocked(struct intel_display *display, enum hpd_pin pin)
> {
>-        struct drm_i915_private *i915 = to_i915(display->drm);
>-
>-        lockdep_assert_held(&i915->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
> 
>         return display->hotplug.stats[pin].blocked_count;
> }
>@@ -400,14 +394,13 @@ static void i915_digport_work_func(struct work_struct *work)
> {
>         struct intel_display *display =
>                 container_of(work, struct intel_display, hotplug.dig_port_work);
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>         struct intel_hotplug *hotplug = &display->hotplug;
>         u32 long_hpd_pin_mask, short_hpd_pin_mask;
>         struct intel_encoder *encoder;
>         u32 blocked_hpd_pin_mask;
>         u32 old_bits = 0;
> 
>-        spin_lock_irq(&dev_priv->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
> 
>         blocked_hpd_pin_mask = get_blocked_hpd_pin_mask(display);
>         long_hpd_pin_mask = hotplug->long_hpd_pin_mask & ~blocked_hpd_pin_mask;
>@@ -415,7 +408,7 @@ static void i915_digport_work_func(struct work_struct *work)
>         short_hpd_pin_mask = hotplug->short_hpd_pin_mask & ~blocked_hpd_pin_mask;
>         hotplug->short_hpd_pin_mask &= ~short_hpd_pin_mask;
> 
>-        spin_unlock_irq(&dev_priv->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> 
>         for_each_intel_encoder(display->drm, encoder) {
>                 struct intel_digital_port *dig_port;
>@@ -442,11 +435,11 @@ static void i915_digport_work_func(struct work_struct *work)
>         }
> 
>         if (old_bits) {
>-                spin_lock_irq(&dev_priv->irq_lock);
>+                spin_lock_irq(&display->irq.lock);
>                 display->hotplug.event_bits |= old_bits;
>                 queue_delayed_detection_work(display,
>                                              &display->hotplug.hotplug_work, 0);
>-                spin_unlock_irq(&dev_priv->irq_lock);
>+                spin_unlock_irq(&display->irq.lock);
>         }
> }
> 
>@@ -460,17 +453,16 @@ static void i915_digport_work_func(struct work_struct *work)
> void intel_hpd_trigger_irq(struct intel_digital_port *dig_port)
> {
>         struct intel_display *display = to_intel_display(dig_port);
>-        struct drm_i915_private *i915 = to_i915(display->drm);
>         struct intel_hotplug *hotplug = &display->hotplug;
>         struct intel_encoder *encoder = &dig_port->base;
> 
>-        spin_lock_irq(&i915->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
> 
>         hotplug->short_hpd_pin_mask |= BIT(encoder->hpd_pin);
>         if (!hpd_pin_is_blocked(display, encoder->hpd_pin))
>                 queue_work(hotplug->dp_wq, &hotplug->dig_port_work);
> 
>-        spin_unlock_irq(&i915->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> /*
>@@ -480,7 +472,6 @@ static void i915_hotplug_work_func(struct work_struct *work)
> {
>         struct intel_display *display =
>                 container_of(work, struct intel_display, hotplug.hotplug_work.work);
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>         struct intel_hotplug *hotplug = &display->hotplug;
>         struct drm_connector_list_iter conn_iter;
>         struct intel_connector *connector;
>@@ -494,7 +485,7 @@ static void i915_hotplug_work_func(struct work_struct *work)
>         mutex_lock(&display->drm->mode_config.mutex);
>         drm_dbg_kms(display->drm, "running encoder hotplug functions\n");
> 
>-        spin_lock_irq(&dev_priv->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
> 
>         blocked_hpd_pin_mask = get_blocked_hpd_pin_mask(display);
>         hpd_event_bits = hotplug->event_bits & ~blocked_hpd_pin_mask;
>@@ -505,7 +496,7 @@ static void i915_hotplug_work_func(struct work_struct *work)
>         /* Enable polling for connectors which had HPD IRQ storms */
>         intel_hpd_irq_storm_switch_to_polling(display);
> 
>-        spin_unlock_irq(&dev_priv->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> 
>         /* Skip calling encode hotplug handlers if ignore long HPD set*/
>         if (display->hotplug.ignore_long_hpd) {
>@@ -569,13 +560,13 @@ static void i915_hotplug_work_func(struct work_struct *work)
>         /* Remove shared HPD pins that have changed */
>         retry &= ~changed;
>         if (retry) {
>-                spin_lock_irq(&dev_priv->irq_lock);
>+                spin_lock_irq(&display->irq.lock);
>                 display->hotplug.retry_bits |= retry;
> 
>                 mod_delayed_detection_work(display,
>                                            &display->hotplug.hotplug_work,
>                                            msecs_to_jiffies(HPD_RETRY_DELAY));
>-                spin_unlock_irq(&dev_priv->irq_lock);
>+                spin_unlock_irq(&display->irq.lock);
>         }
> }
> 
>@@ -599,7 +590,6 @@ static void i915_hotplug_work_func(struct work_struct *work)
> void intel_hpd_irq_handler(struct intel_display *display,
>                            u32 pin_mask, u32 long_mask)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>         struct intel_encoder *encoder;
>         bool storm_detected = false;
>         bool queue_dig = false, queue_hp = false;
>@@ -610,7 +600,7 @@ void intel_hpd_irq_handler(struct intel_display *display,
>         if (!pin_mask)
>                 return;
> 
>-        spin_lock(&dev_priv->irq_lock);
>+        spin_lock(&display->irq.lock);
> 
>         /*
>          * Determine whether ->hpd_pulse() exists for each pin, and
>@@ -711,7 +701,7 @@ void intel_hpd_irq_handler(struct intel_display *display,
>                 queue_delayed_detection_work(display,
>                                              &display->hotplug.hotplug_work, 0);
> 
>-        spin_unlock(&dev_priv->irq_lock);
>+        spin_unlock(&display->irq.lock);
> }
> 
> /**
>@@ -730,7 +720,6 @@ void intel_hpd_irq_handler(struct intel_display *display,
>  */
> void intel_hpd_init(struct intel_display *display)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>         int i;
> 
>         if (!HAS_DISPLAY(display))
>@@ -745,9 +734,9 @@ void intel_hpd_init(struct intel_display *display)
>          * Interrupt setup is already guaranteed to be single-threaded, this is
>          * just to make the assert_spin_locked checks happy.
>          */
>-        spin_lock_irq(&dev_priv->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
>         intel_hpd_irq_setup(display);
>-        spin_unlock_irq(&dev_priv->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> static void i915_hpd_poll_detect_connectors(struct intel_display *display)
>@@ -797,7 +786,6 @@ static void i915_hpd_poll_init_work(struct work_struct *work)
> {
>         struct intel_display *display =
>                 container_of(work, typeof(*display), hotplug.poll_init_work);
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>         struct drm_connector_list_iter conn_iter;
>         struct intel_connector *connector;
>         intel_wakeref_t wakeref;
>@@ -820,7 +808,7 @@ static void i915_hpd_poll_init_work(struct work_struct *work)
>                 cancel_work(&display->hotplug.poll_init_work);
>         }
> 
>-        spin_lock_irq(&dev_priv->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
> 
>         drm_connector_list_iter_begin(display->drm, &conn_iter);
>         for_each_intel_connector_iter(connector, &conn_iter) {
>@@ -841,7 +829,7 @@ static void i915_hpd_poll_init_work(struct work_struct *work)
>         }
>         drm_connector_list_iter_end(&conn_iter);
> 
>-        spin_unlock_irq(&dev_priv->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> 
>         if (enabled)
>                 drm_kms_helper_poll_reschedule(display->drm);
>@@ -879,8 +867,6 @@ static void i915_hpd_poll_init_work(struct work_struct *work)
>  */
> void intel_hpd_poll_enable(struct intel_display *display)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>-
>         if (!HAS_DISPLAY(display) || !intel_display_device_enabled(display))
>                 return;
> 
>@@ -892,10 +878,10 @@ void intel_hpd_poll_enable(struct intel_display *display)
>          * As well, there's no issue if we race here since we always reschedule
>          * this worker anyway
>          */
>-        spin_lock_irq(&dev_priv->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
>         queue_detection_work(display,
>                              &display->hotplug.poll_init_work);
>-        spin_unlock_irq(&dev_priv->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> /**
>@@ -919,17 +905,15 @@ void intel_hpd_poll_enable(struct intel_display *display)
>  */
> void intel_hpd_poll_disable(struct intel_display *display)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>-
>         if (!HAS_DISPLAY(display))
>                 return;
> 
>         WRITE_ONCE(display->hotplug.poll_enabled, false);
> 
>-        spin_lock_irq(&dev_priv->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
>         queue_detection_work(display,
>                              &display->hotplug.poll_init_work);
>-        spin_unlock_irq(&dev_priv->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> void intel_hpd_poll_fini(struct intel_display *display)
>@@ -981,12 +965,10 @@ static bool cancel_all_detection_work(struct intel_display *display)
> 
> void intel_hpd_cancel_work(struct intel_display *display)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>-
>         if (!HAS_DISPLAY(display))
>                 return;
> 
>-        spin_lock_irq(&dev_priv->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
> 
>         drm_WARN_ON(display->drm, get_blocked_hpd_pin_mask(display));
> 
>@@ -995,7 +977,7 @@ void intel_hpd_cancel_work(struct intel_display *display)
>         display->hotplug.event_bits = 0;
>         display->hotplug.retry_bits = 0;
> 
>-        spin_unlock_irq(&dev_priv->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> 
>         cancel_work_sync(&display->hotplug.dig_port_work);
> 
>@@ -1009,13 +991,12 @@ void intel_hpd_cancel_work(struct intel_display *display)
> 
> static void queue_work_for_missed_irqs(struct intel_display *display)
> {
>-        struct drm_i915_private *i915 = to_i915(display->drm);
>         struct intel_hotplug *hotplug = &display->hotplug;
>         bool queue_hp_work = false;
>         u32 blocked_hpd_pin_mask;
>         enum hpd_pin pin;
> 
>-        lockdep_assert_held(&i915->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
> 
>         blocked_hpd_pin_mask = get_blocked_hpd_pin_mask(display);
>         if ((hotplug->event_bits | hotplug->retry_bits) & ~blocked_hpd_pin_mask)
>@@ -1043,10 +1024,9 @@ static void queue_work_for_missed_irqs(struct intel_display *display)
> 
> static bool block_hpd_pin(struct intel_display *display, enum hpd_pin pin)
> {
>-        struct drm_i915_private *i915 = to_i915(display->drm);
>         struct intel_hotplug *hotplug = &display->hotplug;
> 
>-        lockdep_assert_held(&i915->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
> 
>         hotplug->stats[pin].blocked_count++;
> 
>@@ -1055,10 +1035,9 @@ static bool block_hpd_pin(struct intel_display *display, enum hpd_pin pin)
> 
> static bool unblock_hpd_pin(struct intel_display *display, enum hpd_pin pin)
> {
>-        struct drm_i915_private *i915 = to_i915(display->drm);
>         struct intel_hotplug *hotplug = &display->hotplug;
> 
>-        lockdep_assert_held(&i915->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
> 
>         if (drm_WARN_ON(display->drm, hotplug->stats[pin].blocked_count == 0))
>                 return true;
>@@ -1095,19 +1074,18 @@ static bool unblock_hpd_pin(struct intel_display *display, enum hpd_pin pin)
> void intel_hpd_block(struct intel_encoder *encoder)
> {
>         struct intel_display *display = to_intel_display(encoder);
>-        struct drm_i915_private *i915 = to_i915(display->drm);
>         struct intel_hotplug *hotplug = &display->hotplug;
>         bool do_flush = false;
> 
>         if (encoder->hpd_pin == HPD_NONE)
>                 return;
> 
>-        spin_lock_irq(&i915->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
> 
>         if (block_hpd_pin(display, encoder->hpd_pin))
>                 do_flush = true;
> 
>-        spin_unlock_irq(&i915->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> 
>         if (do_flush && hpd_pin_has_pulse(display, encoder->hpd_pin))
>                 flush_work(&hotplug->dig_port_work);
>@@ -1125,17 +1103,16 @@ void intel_hpd_block(struct intel_encoder *encoder)
> void intel_hpd_unblock(struct intel_encoder *encoder)
> {
>         struct intel_display *display = to_intel_display(encoder);
>-        struct drm_i915_private *i915 = to_i915(display->drm);
> 
>         if (encoder->hpd_pin == HPD_NONE)
>                 return;
> 
>-        spin_lock_irq(&i915->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
> 
>         if (unblock_hpd_pin(display, encoder->hpd_pin))
>                 queue_work_for_missed_irqs(display);
> 
>-        spin_unlock_irq(&i915->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> /**
>@@ -1149,14 +1126,13 @@ void intel_hpd_unblock(struct intel_encoder *encoder)
> void intel_hpd_clear_and_unblock(struct intel_encoder *encoder)
> {
>         struct intel_display *display = to_intel_display(encoder);
>-        struct drm_i915_private *i915 = to_i915(display->drm);
>         struct intel_hotplug *hotplug = &display->hotplug;
>         enum hpd_pin pin = encoder->hpd_pin;
> 
>         if (pin == HPD_NONE)
>                 return;
> 
>-        spin_lock_irq(&i915->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
> 
>         if (unblock_hpd_pin(display, pin)) {
>                 hotplug->event_bits &= ~BIT(pin);
>@@ -1165,39 +1141,34 @@ void intel_hpd_clear_and_unblock(struct intel_encoder *encoder)
>                 hotplug->long_hpd_pin_mask &= ~BIT(pin);
>         }
> 
>-        spin_unlock_irq(&i915->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> void intel_hpd_enable_detection_work(struct intel_display *display)
> {
>-        struct drm_i915_private *i915 = to_i915(display->drm);
>-
>-        spin_lock_irq(&i915->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
>         display->hotplug.detection_work_enabled = true;
>         queue_work_for_missed_irqs(display);
>-        spin_unlock_irq(&i915->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> void intel_hpd_disable_detection_work(struct intel_display *display)
> {
>-        struct drm_i915_private *i915 = to_i915(display->drm);
>-
>-        spin_lock_irq(&i915->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
>         display->hotplug.detection_work_enabled = false;
>-        spin_unlock_irq(&i915->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> 
>         cancel_all_detection_work(display);
> }
> 
> bool intel_hpd_schedule_detection(struct intel_display *display)
> {
>-        struct drm_i915_private *i915 = to_i915(display->drm);
>         unsigned long flags;
>         bool ret;
> 
>-        spin_lock_irqsave(&i915->irq_lock, flags);
>+        spin_lock_irqsave(&display->irq.lock, flags);
>         ret = queue_delayed_detection_work(display, &display->hotplug.hotplug_work, 0);
>-        spin_unlock_irqrestore(&i915->irq_lock, flags);
>+        spin_unlock_irqrestore(&display->irq.lock, flags);
> 
>         return ret;
> }
>@@ -1228,7 +1199,6 @@ static ssize_t i915_hpd_storm_ctl_write(struct file *file,
> {
>         struct seq_file *m = file->private_data;
>         struct intel_display *display = m->private;
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>         struct intel_hotplug *hotplug = &display->hotplug;
>         unsigned int new_threshold;
>         int i;
>@@ -1260,12 +1230,12 @@ static ssize_t i915_hpd_storm_ctl_write(struct file *file,
>         else
>                 drm_dbg_kms(display->drm, "Disabling HPD storm detection\n");
> 
>-        spin_lock_irq(&dev_priv->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
>         hotplug->hpd_storm_threshold = new_threshold;
>         /* Reset the HPD storm stats so we don't accidentally trigger a storm */
>         for_each_hpd_pin(i)
>                 hotplug->stats[i].count = 0;
>-        spin_unlock_irq(&dev_priv->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> 
>         /* Re-enable hpd immediately if we were in an irq storm */
>         flush_delayed_work(&display->hotplug.reenable_work);
>@@ -1310,7 +1280,6 @@ static ssize_t i915_hpd_short_storm_ctl_write(struct file *file,
> {
>         struct seq_file *m = file->private_data;
>         struct intel_display *display = m->private;
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>         struct intel_hotplug *hotplug = &display->hotplug;
>         char *newline;
>         char tmp[16];
>@@ -1339,12 +1308,12 @@ static ssize_t i915_hpd_short_storm_ctl_write(struct file *file,
>         drm_dbg_kms(display->drm, "%sabling HPD short storm detection\n",
>                     new_state ? "En" : "Dis");
> 
>-        spin_lock_irq(&dev_priv->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
>         hotplug->hpd_short_storm_enabled = new_state;
>         /* Reset the HPD storm stats so we don't accidentally trigger a storm */
>         for_each_hpd_pin(i)
>                 hotplug->stats[i].count = 0;
>-        spin_unlock_irq(&dev_priv->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> 
>         /* Re-enable hpd immediately if we were in an irq storm */
>         flush_delayed_work(&display->hotplug.reenable_work);
>diff --git a/drivers/gpu/drm/i915/display/intel_hotplug_irq.c b/drivers/gpu/drm/i915/display/intel_hotplug_irq.c
>index c841399e5c88..c024b42369c8 100644
>--- a/drivers/gpu/drm/i915/display/intel_hotplug_irq.c
>+++ b/drivers/gpu/drm/i915/display/intel_hotplug_irq.c
>@@ -3,8 +3,10 @@
>  * Copyright © 2023 Intel Corporation
>  */
> 
>-#include "i915_drv.h"
>+#include <drm/drm_print.h>
>+
> #include "i915_reg.h"
>+#include "i915_utils.h"
> #include "intel_de.h"
> #include "intel_display_irq.h"
> #include "intel_display_types.h"
>@@ -183,9 +185,7 @@ static void intel_hpd_init_pins(struct intel_display *display)
> void i915_hotplug_interrupt_update_locked(struct intel_display *display,
>                                           u32 mask, u32 bits)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>-
>-        lockdep_assert_held(&dev_priv->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
>         drm_WARN_ON(display->drm, bits & ~mask);
> 
>         intel_de_rmw(display, PORT_HOTPLUG_EN(display), mask, bits);
>@@ -207,11 +207,9 @@ void i915_hotplug_interrupt_update(struct intel_display *display,
>                                    u32 mask,
>                                    u32 bits)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>-
>-        spin_lock_irq(&dev_priv->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
>         i915_hotplug_interrupt_update_locked(display, mask, bits);
>-        spin_unlock_irq(&dev_priv->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> static bool gen11_port_hotplug_long_detect(enum hpd_pin pin, u32 val)
>@@ -556,7 +554,6 @@ void xelpdp_pica_irq_handler(struct intel_display *display, u32 iir)
> 
> void icp_irq_handler(struct intel_display *display, u32 pch_iir)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>         u32 ddi_hotplug_trigger = pch_iir & SDE_DDI_HOTPLUG_MASK_ICP;
>         u32 tc_hotplug_trigger = pch_iir & SDE_TC_HOTPLUG_MASK_ICP;
>         u32 pin_mask = 0, long_mask = 0;
>@@ -565,9 +562,9 @@ void icp_irq_handler(struct intel_display *display, u32 pch_iir)
>                 u32 dig_hotplug_reg;
> 
>                 /* Locking due to DSI native GPIO sequences */
>-                spin_lock(&dev_priv->irq_lock);
>+                spin_lock(&display->irq.lock);
>                 dig_hotplug_reg = intel_de_rmw(display, SHOTPLUG_CTL_DDI, 0, 0);
>-                spin_unlock(&dev_priv->irq_lock);
>+                spin_unlock(&display->irq.lock);
> 
>                 intel_get_hpd_pins(display, &pin_mask, &long_mask,
>                                    ddi_hotplug_trigger, dig_hotplug_reg,
>@@ -1395,10 +1392,9 @@ static void i915_hpd_enable_detection(struct intel_encoder *encoder)
> 
> static void i915_hpd_irq_setup(struct intel_display *display)
> {
>-        struct drm_i915_private *dev_priv = to_i915(display->drm);
>         u32 hotplug_en;
> 
>-        lockdep_assert_held(&dev_priv->irq_lock);
>+        lockdep_assert_held(&display->irq.lock);
> 
>         /*
>          * Note HDMI and DP share hotplug bits. Enable bits are the same for all
>diff --git a/drivers/gpu/drm/i915/display/intel_tv.c b/drivers/gpu/drm/i915/display/intel_tv.c
>index 2e3f3f0207e8..acf0b3733908 100644
>--- a/drivers/gpu/drm/i915/display/intel_tv.c
>+++ b/drivers/gpu/drm/i915/display/intel_tv.c
>@@ -33,15 +33,15 @@
> #include <drm/drm_atomic_helper.h>
> #include <drm/drm_crtc.h>
> #include <drm/drm_edid.h>
>+#include <drm/drm_print.h>
> #include <drm/drm_probe_helper.h>
> 
>-#include "i915_drv.h"
> #include "i915_reg.h"
> #include "intel_connector.h"
> #include "intel_crtc.h"
> #include "intel_de.h"
>-#include "intel_display_irq.h"
> #include "intel_display_driver.h"
>+#include "intel_display_irq.h"
> #include "intel_display_types.h"
> #include "intel_dpll.h"
> #include "intel_hotplug.h"
>@@ -1585,19 +1585,17 @@ intel_tv_detect_type(struct intel_tv *intel_tv,
> {
>         struct intel_display *display = to_intel_display(connector->dev);
>         struct intel_crtc *crtc = to_intel_crtc(connector->state->crtc);
>-        struct drm_device *dev = connector->dev;
>-        struct drm_i915_private *dev_priv = to_i915(dev);
>         u32 tv_ctl, save_tv_ctl;
>         u32 tv_dac, save_tv_dac;
>         int type;
> 
>         /* Disable TV interrupts around load detect or we'll recurse */
>         if (connector->polled & DRM_CONNECTOR_POLL_HPD) {
>-                spin_lock_irq(&dev_priv->irq_lock);
>+                spin_lock_irq(&display->irq.lock);
>                 i915_disable_pipestat(display, 0,
>                                       PIPE_HOTPLUG_INTERRUPT_STATUS |
>                                       PIPE_HOTPLUG_TV_INTERRUPT_STATUS);
>-                spin_unlock_irq(&dev_priv->irq_lock);
>+                spin_unlock_irq(&display->irq.lock);
>         }
> 
>         save_tv_dac = tv_dac = intel_de_read(display, TV_DAC);
>@@ -1668,11 +1666,11 @@ intel_tv_detect_type(struct intel_tv *intel_tv,
> 
>         /* Restore interrupt config */
>         if (connector->polled & DRM_CONNECTOR_POLL_HPD) {
>-                spin_lock_irq(&dev_priv->irq_lock);
>+                spin_lock_irq(&display->irq.lock);
>                 i915_enable_pipestat(display, 0,
>                                      PIPE_HOTPLUG_INTERRUPT_STATUS |
>                                      PIPE_HOTPLUG_TV_INTERRUPT_STATUS);
>-                spin_unlock_irq(&dev_priv->irq_lock);
>+                spin_unlock_irq(&display->irq.lock);
>         }
> 
>         return type;
>diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c b/drivers/gpu/drm/i915/display/skl_universal_plane.c
>index 8739195aba69..844519286b1c 100644
>--- a/drivers/gpu/drm/i915/display/skl_universal_plane.c
>+++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c
>@@ -2690,24 +2690,22 @@ static void
> skl_plane_enable_flip_done(struct intel_plane *plane)
> {
>         struct intel_display *display = to_intel_display(plane);
>-        struct drm_i915_private *i915 = to_i915(plane->base.dev);
>         enum pipe pipe = plane->pipe;
> 
>-        spin_lock_irq(&i915->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
>         bdw_enable_pipe_irq(display, pipe, GEN9_PIPE_PLANE_FLIP_DONE(plane->id));
>-        spin_unlock_irq(&i915->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> static void
> skl_plane_disable_flip_done(struct intel_plane *plane)
> {
>         struct intel_display *display = to_intel_display(plane);
>-        struct drm_i915_private *i915 = to_i915(plane->base.dev);
>         enum pipe pipe = plane->pipe;
> 
>-        spin_lock_irq(&i915->irq_lock);
>+        spin_lock_irq(&display->irq.lock);
>         bdw_disable_pipe_irq(display, pipe, GEN9_PIPE_PLANE_FLIP_DONE(plane->id));
>-        spin_unlock_irq(&i915->irq_lock);
>+        spin_unlock_irq(&display->irq.lock);
> }
> 
> static bool skl_plane_has_rc_ccs(struct intel_display *display,
>diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
>index 96a52f963475..273bc43468a0 100644
>--- a/drivers/gpu/drm/i915/i915_driver.c
>+++ b/drivers/gpu/drm/i915/i915_driver.c
>@@ -234,7 +234,6 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv)
> 
>         intel_uncore_mmio_debug_init_early(dev_priv);
> 
>-        spin_lock_init(&dev_priv->irq_lock);
>         spin_lock_init(&dev_priv->gpu_error.lock);
> 
>         intel_sbi_init(dev_priv);
>diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
>index c0eec8fe5cad..d0e1980dcba2 100644
>--- a/drivers/gpu/drm/i915/i915_drv.h
>+++ b/drivers/gpu/drm/i915/i915_drv.h
>@@ -222,8 +222,6 @@ struct drm_i915_private {
>         };
>         unsigned int engine_uabi_class_count[I915_LAST_UABI_ENGINE_CLASS + 1];
> 
>-        /* protects the irq masks */
>-        spinlock_t irq_lock;
>         bool irqs_enabled;
> 
>         /* LPT/WPT IOSF sideband protection */
>diff --git a/drivers/gpu/drm/xe/compat-i915-headers/i915_drv.h b/drivers/gpu/drm/xe/compat-i915-headers/i915_drv.h
>index dd36f9b06b89..9b7572e06f34 100644
>--- a/drivers/gpu/drm/xe/compat-i915-headers/i915_drv.h
>+++ b/drivers/gpu/drm/xe/compat-i915-headers/i915_drv.h
>@@ -60,15 +60,4 @@ static inline struct drm_i915_private *to_i915(const struct drm_device *dev)
> #define HAS_FLAT_CCS(xe) (xe_device_has_flat_ccs(xe))
> #define HAS_128_BYTE_Y_TILING(xe) (xe || 1)
> 
>-#ifdef CONFIG_ARM64
>-/*
>- * arm64 indirectly includes linux/rtc.h,
>- * which defines a irq_lock, so include it
>- * here before #define-ing it
>- */
>-#include <linux/rtc.h>
>-#endif
>-
>-#define irq_lock irq.lock
>-
> #endif
>-- 
>2.39.5
>


More information about the Intel-xe mailing list