On Fri, 2025-01-03 at 14:41 -0300, Gustavo Sousa wrote: > Most of MMIO accesses from intel_display_irq.c are currently done via > uncore_*() functions instead of the display-specific ones, namely > intel_de_*(). Because of that, DMC wakelock ends up being ignored and > some invalid MMIO accesses are performed while display is in dynamic > DC > states. Thus, update the display IRQ code to use the intel_de_*() > MMIO > functions. > > After this change, we are left with some IRQ-specific functions that > still use the unwrapped uncore_*() functions (i.e. gen2_irq_init, > gen3_irq_reset and gen2_assert_iir_is_zero). We will deal with them > in > an upcoming change. > > Signed-off-by: Gustavo Sousa <gustavo.so...@intel.com>
Reviewed-by: Jouni Högander <jouni.hogan...@intel.com> > --- > > Since most of the changes in this patch are somewhat mechanic, it > might be > easier to review this specific patch (after turned into a commit) > with the > following script: > > #!/bin/bash > pairs=( > intel_uncore_posting_read intel_de_posting_read > intel_uncore_read intel_de_read > intel_uncore_rmw intel_de_rmw > intel_uncore_write intel_de_write > ) > > sed_script=$( > for ((i = 0; i < ${#pairs[@]}; i += 2)); do > echo "s/\\<${pairs[i]}([^,]\\+/${pairs[i+1]}(display/g" > done > ) > > new_file_obj=$( > git show > HEAD~:drivers/gpu/drm/i915/display/intel_display_irq.c \ > | sed "$sed_script" \ > | git hash-object -w --stdin > ) > > exec git diff --word-diff \ > $new_file_obj \ > HEAD:drivers/gpu/drm/i915/display/intel_display_irq.c > > > .../gpu/drm/i915/display/intel_display_irq.c | 222 ++++++++++------ > -- > 1 file changed, 121 insertions(+), 101 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_display_irq.c > b/drivers/gpu/drm/i915/display/intel_display_irq.c > index 069043f9d894..9662368a651d 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_irq.c > +++ b/drivers/gpu/drm/i915/display/intel_display_irq.c > @@ -44,6 +44,7 @@ intel_handle_vblank(struct drm_i915_private > *dev_priv, enum pipe pipe) > void ilk_update_display_irq(struct drm_i915_private *dev_priv, > u32 interrupt_mask, u32 > enabled_irq_mask) > { > + struct intel_display *display = &dev_priv->display; > u32 new_val; > > lockdep_assert_held(&dev_priv->irq_lock); > @@ -56,8 +57,8 @@ void ilk_update_display_irq(struct drm_i915_private > *dev_priv, > if (new_val != dev_priv->irq_mask && > !drm_WARN_ON(&dev_priv->drm, > !intel_irqs_enabled(dev_priv))) { > dev_priv->irq_mask = new_val; > - intel_uncore_write(&dev_priv->uncore, DEIMR, > dev_priv->irq_mask); > - intel_uncore_posting_read(&dev_priv->uncore, DEIMR); > + intel_de_write(display, DEIMR, dev_priv->irq_mask); > + intel_de_posting_read(display, DEIMR); > } > } > > @@ -80,6 +81,7 @@ void ilk_disable_display_irq(struct > drm_i915_private *i915, u32 bits) > void bdw_update_port_irq(struct drm_i915_private *dev_priv, > u32 interrupt_mask, u32 enabled_irq_mask) > { > + struct intel_display *display = &dev_priv->display; > u32 new_val; > u32 old_val; > > @@ -90,15 +92,15 @@ void bdw_update_port_irq(struct drm_i915_private > *dev_priv, > if (drm_WARN_ON(&dev_priv->drm, > !intel_irqs_enabled(dev_priv))) > return; > > - old_val = intel_uncore_read(&dev_priv->uncore, > GEN8_DE_PORT_IMR); > + old_val = intel_de_read(display, GEN8_DE_PORT_IMR); > > new_val = old_val; > new_val &= ~interrupt_mask; > new_val |= (~enabled_irq_mask & interrupt_mask); > > if (new_val != old_val) { > - intel_uncore_write(&dev_priv->uncore, > GEN8_DE_PORT_IMR, new_val); > - intel_uncore_posting_read(&dev_priv->uncore, > GEN8_DE_PORT_IMR); > + intel_de_write(display, GEN8_DE_PORT_IMR, new_val); > + intel_de_posting_read(display, GEN8_DE_PORT_IMR); > } > } > > @@ -113,6 +115,7 @@ static void bdw_update_pipe_irq(struct > drm_i915_private *dev_priv, > enum pipe pipe, u32 interrupt_mask, > u32 enabled_irq_mask) > { > + struct intel_display *display = &dev_priv->display; > u32 new_val; > > lockdep_assert_held(&dev_priv->irq_lock); > @@ -128,9 +131,8 @@ static void bdw_update_pipe_irq(struct > drm_i915_private *dev_priv, > > if (new_val != dev_priv->display.irq.de_irq_mask[pipe]) { > dev_priv->display.irq.de_irq_mask[pipe] = new_val; > - intel_uncore_write(&dev_priv->uncore, > GEN8_DE_PIPE_IMR(pipe), > - dev_priv- > >display.irq.de_irq_mask[pipe]); > - intel_uncore_posting_read(&dev_priv->uncore, > GEN8_DE_PIPE_IMR(pipe)); > + intel_de_write(display, GEN8_DE_PIPE_IMR(pipe), > display->irq.de_irq_mask[pipe]); > + intel_de_posting_read(display, > GEN8_DE_PIPE_IMR(pipe)); > } > } > > @@ -156,7 +158,8 @@ void ibx_display_interrupt_update(struct > drm_i915_private *dev_priv, > u32 interrupt_mask, > u32 enabled_irq_mask) > { > - u32 sdeimr = intel_uncore_read(&dev_priv->uncore, SDEIMR); > + struct intel_display *display = &dev_priv->display; > + u32 sdeimr = intel_de_read(display, SDEIMR); > > sdeimr &= ~interrupt_mask; > sdeimr |= (~enabled_irq_mask & interrupt_mask); > @@ -168,8 +171,8 @@ void ibx_display_interrupt_update(struct > drm_i915_private *dev_priv, > if (drm_WARN_ON(&dev_priv->drm, > !intel_irqs_enabled(dev_priv))) > return; > > - intel_uncore_write(&dev_priv->uncore, SDEIMR, sdeimr); > - intel_uncore_posting_read(&dev_priv->uncore, SDEIMR); > + intel_de_write(display, SDEIMR, sdeimr); > + intel_de_posting_read(display, SDEIMR); > } > > void ibx_enable_display_interrupt(struct drm_i915_private *i915, u32 > bits) > @@ -229,6 +232,7 @@ u32 i915_pipestat_enable_mask(struct > drm_i915_private *dev_priv, > void i915_enable_pipestat(struct drm_i915_private *dev_priv, > enum pipe pipe, u32 status_mask) > { > + struct intel_display *display = &dev_priv->display; > i915_reg_t reg = PIPESTAT(dev_priv, pipe); > u32 enable_mask; > > @@ -245,13 +249,14 @@ void i915_enable_pipestat(struct > drm_i915_private *dev_priv, > dev_priv->display.irq.pipestat_irq_mask[pipe] |= > status_mask; > enable_mask = i915_pipestat_enable_mask(dev_priv, pipe); > > - intel_uncore_write(&dev_priv->uncore, reg, enable_mask | > status_mask); > - intel_uncore_posting_read(&dev_priv->uncore, reg); > + intel_de_write(display, reg, enable_mask | status_mask); > + intel_de_posting_read(display, reg); > } > > void i915_disable_pipestat(struct drm_i915_private *dev_priv, > enum pipe pipe, u32 status_mask) > { > + struct intel_display *display = &dev_priv->display; > i915_reg_t reg = PIPESTAT(dev_priv, pipe); > u32 enable_mask; > > @@ -268,8 +273,8 @@ void i915_disable_pipestat(struct > drm_i915_private *dev_priv, > dev_priv->display.irq.pipestat_irq_mask[pipe] &= > ~status_mask; > enable_mask = i915_pipestat_enable_mask(dev_priv, pipe); > > - intel_uncore_write(&dev_priv->uncore, reg, enable_mask | > status_mask); > - intel_uncore_posting_read(&dev_priv->uncore, reg); > + intel_de_write(display, reg, enable_mask | status_mask); > + intel_de_posting_read(display, reg); > } > > static bool i915_has_legacy_blc_interrupt(struct intel_display > *display) > @@ -373,55 +378,58 @@ static void flip_done_handler(struct > drm_i915_private *i915, > static void hsw_pipe_crc_irq_handler(struct drm_i915_private > *dev_priv, > enum pipe pipe) > { > + struct intel_display *display = &dev_priv->display; > + > display_pipe_crc_irq_handler(dev_priv, pipe, > - intel_uncore_read(&dev_priv- > >uncore, PIPE_CRC_RES_HSW(pipe)), > + intel_de_read(display, > PIPE_CRC_RES_HSW(pipe)), > 0, 0, 0, 0); > } > > static void ivb_pipe_crc_irq_handler(struct drm_i915_private > *dev_priv, > enum pipe pipe) > { > + struct intel_display *display = &dev_priv->display; > + > display_pipe_crc_irq_handler(dev_priv, pipe, > - intel_uncore_read(&dev_priv- > >uncore, PIPE_CRC_RES_1_IVB(pipe)), > - intel_uncore_read(&dev_priv- > >uncore, PIPE_CRC_RES_2_IVB(pipe)), > - intel_uncore_read(&dev_priv- > >uncore, PIPE_CRC_RES_3_IVB(pipe)), > - intel_uncore_read(&dev_priv- > >uncore, PIPE_CRC_RES_4_IVB(pipe)), > - intel_uncore_read(&dev_priv- > >uncore, PIPE_CRC_RES_5_IVB(pipe))); > + intel_de_read(display, > PIPE_CRC_RES_1_IVB(pipe)), > + intel_de_read(display, > PIPE_CRC_RES_2_IVB(pipe)), > + intel_de_read(display, > PIPE_CRC_RES_3_IVB(pipe)), > + intel_de_read(display, > PIPE_CRC_RES_4_IVB(pipe)), > + intel_de_read(display, > PIPE_CRC_RES_5_IVB(pipe))); > } > > static void i9xx_pipe_crc_irq_handler(struct drm_i915_private > *dev_priv, > enum pipe pipe) > { > + struct intel_display *display = &dev_priv->display; > u32 res1, res2; > > if (DISPLAY_VER(dev_priv) >= 3) > - res1 = intel_uncore_read(&dev_priv->uncore, > - > PIPE_CRC_RES_RES1_I915(dev_priv, pipe)); > + res1 = intel_de_read(display, > PIPE_CRC_RES_RES1_I915(dev_priv, pipe)); > else > res1 = 0; > > if (DISPLAY_VER(dev_priv) >= 5 || IS_G4X(dev_priv)) > - res2 = intel_uncore_read(&dev_priv->uncore, > - > PIPE_CRC_RES_RES2_G4X(dev_priv, pipe)); > + res2 = intel_de_read(display, > PIPE_CRC_RES_RES2_G4X(dev_priv, pipe)); > else > res2 = 0; > > display_pipe_crc_irq_handler(dev_priv, pipe, > - intel_uncore_read(&dev_priv- > >uncore, PIPE_CRC_RES_RED(dev_priv, pipe)), > - intel_uncore_read(&dev_priv- > >uncore, PIPE_CRC_RES_GREEN(dev_priv, pipe)), > - intel_uncore_read(&dev_priv- > >uncore, PIPE_CRC_RES_BLUE(dev_priv, pipe)), > + intel_de_read(display, > PIPE_CRC_RES_RED(dev_priv, pipe)), > + intel_de_read(display, > PIPE_CRC_RES_GREEN(dev_priv, pipe)), > + intel_de_read(display, > PIPE_CRC_RES_BLUE(dev_priv, pipe)), > res1, res2); > } > > static void i9xx_pipestat_irq_reset(struct drm_i915_private > *dev_priv) > { > + struct intel_display *display = &dev_priv->display; > enum pipe pipe; > > for_each_pipe(dev_priv, pipe) { > - intel_uncore_write(&dev_priv->uncore, > - PIPESTAT(dev_priv, pipe), > - PIPESTAT_INT_STATUS_MASK | > - PIPE_FIFO_UNDERRUN_STATUS); > + intel_de_write(display, > + PIPESTAT(dev_priv, pipe), > + PIPESTAT_INT_STATUS_MASK | > PIPE_FIFO_UNDERRUN_STATUS); > > dev_priv->display.irq.pipestat_irq_mask[pipe] = 0; > } > @@ -430,6 +438,7 @@ static void i9xx_pipestat_irq_reset(struct > drm_i915_private *dev_priv) > void i9xx_pipestat_irq_ack(struct drm_i915_private *dev_priv, > u32 iir, u32 pipe_stats[I915_MAX_PIPES]) > { > + struct intel_display *display = &dev_priv->display; > enum pipe pipe; > > spin_lock(&dev_priv->irq_lock); > @@ -474,7 +483,7 @@ void i9xx_pipestat_irq_ack(struct > drm_i915_private *dev_priv, > continue; > > reg = PIPESTAT(dev_priv, pipe); > - pipe_stats[pipe] = intel_uncore_read(&dev_priv- > >uncore, reg) & status_mask; > + pipe_stats[pipe] = intel_de_read(display, reg) & > status_mask; > enable_mask = i915_pipestat_enable_mask(dev_priv, > pipe); > > /* > @@ -487,8 +496,8 @@ void i9xx_pipestat_irq_ack(struct > drm_i915_private *dev_priv, > * an interrupt is still pending. > */ > if (pipe_stats[pipe]) { > - intel_uncore_write(&dev_priv->uncore, reg, > pipe_stats[pipe]); > - intel_uncore_write(&dev_priv->uncore, reg, > enable_mask); > + intel_de_write(display, reg, > pipe_stats[pipe]); > + intel_de_write(display, reg, enable_mask); > } > } > spin_unlock(&dev_priv->irq_lock); > @@ -605,7 +614,7 @@ static void ibx_irq_handler(struct > drm_i915_private *dev_priv, u32 pch_iir) > for_each_pipe(dev_priv, pipe) > drm_dbg(&dev_priv->drm, " pipe %c FDI IIR: > 0x%08x\n", > pipe_name(pipe), > - intel_uncore_read(&dev_priv->uncore, > FDI_RX_IIR(pipe))); > + intel_de_read(display, > FDI_RX_IIR(pipe))); > } > > if (pch_iir & (SDE_TRANSB_CRC_DONE | SDE_TRANSA_CRC_DONE)) > @@ -624,7 +633,8 @@ static void ibx_irq_handler(struct > drm_i915_private *dev_priv, u32 pch_iir) > > static void ivb_err_int_handler(struct drm_i915_private *dev_priv) > { > - u32 err_int = intel_uncore_read(&dev_priv->uncore, > GEN7_ERR_INT); > + struct intel_display *display = &dev_priv->display; > + u32 err_int = intel_de_read(display, GEN7_ERR_INT); > enum pipe pipe; > > if (err_int & ERR_INT_POISON) > @@ -642,12 +652,13 @@ static void ivb_err_int_handler(struct > drm_i915_private *dev_priv) > } > } > > - intel_uncore_write(&dev_priv->uncore, GEN7_ERR_INT, > err_int); > + intel_de_write(display, GEN7_ERR_INT, err_int); > } > > static void cpt_serr_int_handler(struct drm_i915_private *dev_priv) > { > - u32 serr_int = intel_uncore_read(&dev_priv->uncore, > SERR_INT); > + struct intel_display *display = &dev_priv->display; > + u32 serr_int = intel_de_read(display, SERR_INT); > enum pipe pipe; > > if (serr_int & SERR_INT_POISON) > @@ -657,7 +668,7 @@ static void cpt_serr_int_handler(struct > drm_i915_private *dev_priv) > if (serr_int & SERR_INT_TRANS_FIFO_UNDERRUN(pipe)) > intel_pch_fifo_underrun_irq_handler(dev_priv > , pipe); > > - intel_uncore_write(&dev_priv->uncore, SERR_INT, serr_int); > + intel_de_write(display, SERR_INT, serr_int); > } > > static void cpt_irq_handler(struct drm_i915_private *dev_priv, u32 > pch_iir) > @@ -691,7 +702,7 @@ static void cpt_irq_handler(struct > drm_i915_private *dev_priv, u32 pch_iir) > for_each_pipe(dev_priv, pipe) > drm_dbg(&dev_priv->drm, " pipe %c FDI IIR: > 0x%08x\n", > pipe_name(pipe), > - intel_uncore_read(&dev_priv->uncore, > FDI_RX_IIR(pipe))); > + intel_de_read(display, > FDI_RX_IIR(pipe))); > } > > if (pch_iir & SDE_ERROR_CPT) > @@ -732,7 +743,7 @@ void ilk_display_irq_handler(struct > drm_i915_private *dev_priv, u32 de_iir) > > /* check event from PCH */ > if (de_iir & DE_PCH_EVENT) { > - u32 pch_iir = intel_uncore_read(&dev_priv->uncore, > SDEIIR); > + u32 pch_iir = intel_de_read(display, SDEIIR); > > if (HAS_PCH_CPT(dev_priv)) > cpt_irq_handler(dev_priv, pch_iir); > @@ -740,7 +751,7 @@ void ilk_display_irq_handler(struct > drm_i915_private *dev_priv, u32 de_iir) > ibx_irq_handler(dev_priv, pch_iir); > > /* should clear PCH hotplug event before clear CPU > irq */ > - intel_uncore_write(&dev_priv->uncore, SDEIIR, > pch_iir); > + intel_de_write(display, SDEIIR, pch_iir); > } > > if (DISPLAY_VER(dev_priv) == 5 && de_iir & DE_PCU_EVENT) > @@ -766,8 +777,7 @@ void ivb_display_irq_handler(struct > drm_i915_private *dev_priv, u32 de_iir) > struct intel_dp *intel_dp = > enc_to_intel_dp(encoder); > u32 psr_iir; > > - psr_iir = intel_uncore_rmw(&dev_priv- > >uncore, > - EDP_PSR_IIR, 0, > 0); > + psr_iir = intel_de_rmw(display, EDP_PSR_IIR, > 0, 0); > intel_psr_irq_handler(intel_dp, psr_iir); > break; > } > @@ -789,12 +799,12 @@ void ivb_display_irq_handler(struct > drm_i915_private *dev_priv, u32 de_iir) > > /* check event from PCH */ > if (!HAS_PCH_NOP(dev_priv) && (de_iir & DE_PCH_EVENT_IVB)) { > - u32 pch_iir = intel_uncore_read(&dev_priv->uncore, > SDEIIR); > + u32 pch_iir = intel_de_read(display, SDEIIR); > > cpt_irq_handler(dev_priv, pch_iir); > > /* clear PCH hotplug event before clear CPU irq */ > - intel_uncore_write(&dev_priv->uncore, SDEIIR, > pch_iir); > + intel_de_write(display, SDEIIR, pch_iir); > } > } > > @@ -925,8 +935,7 @@ gen8_de_misc_irq_handler(struct drm_i915_private > *dev_priv, u32 iir) > } > > if (iir & XELPDP_RM_TIMEOUT) { > - u32 val = intel_uncore_read(&dev_priv- > >uncore, > - > RM_TIMEOUT_REG_CAPTURE); > + u32 val = intel_de_read(display, > RM_TIMEOUT_REG_CAPTURE); > drm_warn(&dev_priv->drm, "Register Access > Timeout = 0x%x\n", val); > found = true; > } > @@ -949,7 +958,7 @@ gen8_de_misc_irq_handler(struct drm_i915_private > *dev_priv, u32 iir) > else > iir_reg = EDP_PSR_IIR; > > - psr_iir = intel_uncore_rmw(&dev_priv- > >uncore, iir_reg, 0, 0); > + psr_iir = intel_de_rmw(display, iir_reg, 0, > 0); > > if (psr_iir) > found = true; > @@ -969,6 +978,7 @@ gen8_de_misc_irq_handler(struct drm_i915_private > *dev_priv, u32 iir) > static void gen11_dsi_te_interrupt_handler(struct drm_i915_private > *dev_priv, > u32 te_trigger) > { > + struct intel_display *display = &dev_priv->display; > enum pipe pipe = INVALID_PIPE; > enum transcoder dsi_trans; > enum port port; > @@ -978,8 +988,7 @@ static void gen11_dsi_te_interrupt_handler(struct > drm_i915_private *dev_priv, > * Incase of dual link, TE comes from DSI_1 > * this is to check if dual link is enabled > */ > - val = intel_uncore_read(&dev_priv->uncore, > - TRANS_DDI_FUNC_CTL2(dev_priv, > TRANSCODER_DSI_0)); > + val = intel_de_read(display, TRANS_DDI_FUNC_CTL2(dev_priv, > TRANSCODER_DSI_0)); > val &= PORT_SYNC_MODE_ENABLE; > > /* > @@ -991,7 +1000,7 @@ static void > gen11_dsi_te_interrupt_handler(struct drm_i915_private *dev_priv, > dsi_trans = (port == PORT_A) ? TRANSCODER_DSI_0 : > TRANSCODER_DSI_1; > > /* Check if DSI configured in command mode */ > - val = intel_uncore_read(&dev_priv->uncore, > DSI_TRANS_FUNC_CONF(dsi_trans)); > + val = intel_de_read(display, > DSI_TRANS_FUNC_CONF(dsi_trans)); > val = val & OP_MODE_MASK; > > if (val != CMD_MODE_NO_GATE && val != CMD_MODE_TE_GATE) { > @@ -1000,8 +1009,7 @@ static void > gen11_dsi_te_interrupt_handler(struct drm_i915_private *dev_priv, > } > > /* Get PIPE for handling VBLANK event */ > - val = intel_uncore_read(&dev_priv->uncore, > - TRANS_DDI_FUNC_CTL(dev_priv, > dsi_trans)); > + val = intel_de_read(display, TRANS_DDI_FUNC_CTL(dev_priv, > dsi_trans)); > switch (val & TRANS_DDI_EDP_INPUT_MASK) { > case TRANS_DDI_EDP_INPUT_A_ON: > pipe = PIPE_A; > @@ -1021,7 +1029,7 @@ static void > gen11_dsi_te_interrupt_handler(struct drm_i915_private *dev_priv, > > /* clear TE in dsi IIR */ > port = (te_trigger & DSI1_TE) ? PORT_B : PORT_A; > - intel_uncore_rmw(&dev_priv->uncore, > DSI_INTR_IDENT_REG(port), 0, 0); > + intel_de_rmw(display, DSI_INTR_IDENT_REG(port), 0, 0); > } > > static u32 gen8_de_pipe_flip_done_mask(struct drm_i915_private > *i915) > @@ -1034,10 +1042,11 @@ static u32 gen8_de_pipe_flip_done_mask(struct > drm_i915_private *i915) > > static void gen8_read_and_ack_pch_irqs(struct drm_i915_private > *i915, u32 *pch_iir, u32 *pica_iir) > { > + struct intel_display *display = &i915->display; > u32 pica_ier = 0; > > *pica_iir = 0; > - *pch_iir = intel_de_read(i915, SDEIIR); > + *pch_iir = intel_de_read(display, SDEIIR); > if (!*pch_iir) > return; > > @@ -1049,15 +1058,15 @@ static void gen8_read_and_ack_pch_irqs(struct > drm_i915_private *i915, u32 *pch_i > if (*pch_iir & SDE_PICAINTERRUPT) { > drm_WARN_ON(&i915->drm, INTEL_PCH_TYPE(i915) < > PCH_MTL); > > - pica_ier = intel_de_rmw(i915, PICAINTERRUPT_IER, ~0, > 0); > - *pica_iir = intel_de_read(i915, PICAINTERRUPT_IIR); > - intel_de_write(i915, PICAINTERRUPT_IIR, *pica_iir); > + pica_ier = intel_de_rmw(display, PICAINTERRUPT_IER, > ~0, 0); > + *pica_iir = intel_de_read(display, > PICAINTERRUPT_IIR); > + intel_de_write(display, PICAINTERRUPT_IIR, > *pica_iir); > } > > - intel_de_write(i915, SDEIIR, *pch_iir); > + intel_de_write(display, SDEIIR, *pch_iir); > > if (pica_ier) > - intel_de_write(i915, PICAINTERRUPT_IER, pica_ier); > + intel_de_write(display, PICAINTERRUPT_IER, > pica_ier); > } > > void gen8_de_irq_handler(struct drm_i915_private *dev_priv, u32 > master_ctl) > @@ -1069,9 +1078,9 @@ void gen8_de_irq_handler(struct > drm_i915_private *dev_priv, u32 master_ctl) > drm_WARN_ON_ONCE(&dev_priv->drm, !HAS_DISPLAY(dev_priv)); > > if (master_ctl & GEN8_DE_MISC_IRQ) { > - iir = intel_uncore_read(&dev_priv->uncore, > GEN8_DE_MISC_IIR); > + iir = intel_de_read(display, GEN8_DE_MISC_IIR); > if (iir) { > - intel_uncore_write(&dev_priv->uncore, > GEN8_DE_MISC_IIR, iir); > + intel_de_write(display, GEN8_DE_MISC_IIR, > iir); > gen8_de_misc_irq_handler(dev_priv, iir); > } else { > drm_err_ratelimited(&dev_priv->drm, > @@ -1080,9 +1089,9 @@ void gen8_de_irq_handler(struct > drm_i915_private *dev_priv, u32 master_ctl) > } > > if (DISPLAY_VER(dev_priv) >= 11 && (master_ctl & > GEN11_DE_HPD_IRQ)) { > - iir = intel_uncore_read(&dev_priv->uncore, > GEN11_DE_HPD_IIR); > + iir = intel_de_read(display, GEN11_DE_HPD_IIR); > if (iir) { > - intel_uncore_write(&dev_priv->uncore, > GEN11_DE_HPD_IIR, iir); > + intel_de_write(display, GEN11_DE_HPD_IIR, > iir); > gen11_hpd_irq_handler(dev_priv, iir); > } else { > drm_err_ratelimited(&dev_priv->drm, > @@ -1091,11 +1100,11 @@ void gen8_de_irq_handler(struct > drm_i915_private *dev_priv, u32 master_ctl) > } > > if (master_ctl & GEN8_DE_PORT_IRQ) { > - iir = intel_uncore_read(&dev_priv->uncore, > GEN8_DE_PORT_IIR); > + iir = intel_de_read(display, GEN8_DE_PORT_IIR); > if (iir) { > bool found = false; > > - intel_uncore_write(&dev_priv->uncore, > GEN8_DE_PORT_IIR, iir); > + intel_de_write(display, GEN8_DE_PORT_IIR, > iir); > > if (iir & gen8_de_port_aux_mask(dev_priv)) { > intel_dp_aux_irq_handler(display); > @@ -1148,14 +1157,14 @@ void gen8_de_irq_handler(struct > drm_i915_private *dev_priv, u32 master_ctl) > if (!(master_ctl & GEN8_DE_PIPE_IRQ(pipe))) > continue; > > - iir = intel_uncore_read(&dev_priv->uncore, > GEN8_DE_PIPE_IIR(pipe)); > + iir = intel_de_read(display, > GEN8_DE_PIPE_IIR(pipe)); > if (!iir) { > drm_err_ratelimited(&dev_priv->drm, > "The master control > interrupt lied (DE PIPE)!\n"); > continue; > } > > - intel_uncore_write(&dev_priv->uncore, > GEN8_DE_PIPE_IIR(pipe), iir); > + intel_de_write(display, GEN8_DE_PIPE_IIR(pipe), > iir); > > if (iir & GEN8_PIPE_VBLANK) > intel_handle_vblank(dev_priv, pipe); > @@ -1221,14 +1230,15 @@ void gen8_de_irq_handler(struct > drm_i915_private *dev_priv, u32 master_ctl) > > u32 gen11_gu_misc_irq_ack(struct drm_i915_private *i915, const u32 > master_ctl) > { > + struct intel_display *display = &i915->display; > u32 iir; > > if (!(master_ctl & GEN11_GU_MISC_IRQ)) > return 0; > > - iir = intel_de_read(i915, GEN11_GU_MISC_IIR); > + iir = intel_de_read(display, GEN11_GU_MISC_IIR); > if (likely(iir)) > - intel_de_write(i915, GEN11_GU_MISC_IIR, iir); > + intel_de_write(display, GEN11_GU_MISC_IIR, iir); > > return iir; > } > @@ -1243,6 +1253,7 @@ void gen11_gu_misc_irq_handler(struct > drm_i915_private *i915, const u32 iir) > > void gen11_display_irq_handler(struct drm_i915_private *i915) > { > + struct intel_display *display = &i915->display; > u32 disp_ctl; > > disable_rpm_wakeref_asserts(&i915->runtime_pm); > @@ -1250,17 +1261,18 @@ void gen11_display_irq_handler(struct > drm_i915_private *i915) > * GEN11_DISPLAY_INT_CTL has same format as GEN8_MASTER_IRQ > * for the display related bits. > */ > - disp_ctl = intel_de_read(i915, GEN11_DISPLAY_INT_CTL); > + disp_ctl = intel_de_read(display, GEN11_DISPLAY_INT_CTL); > > - intel_de_write(i915, GEN11_DISPLAY_INT_CTL, 0); > + intel_de_write(display, GEN11_DISPLAY_INT_CTL, 0); > gen8_de_irq_handler(i915, disp_ctl); > - intel_de_write(i915, GEN11_DISPLAY_INT_CTL, > GEN11_DISPLAY_IRQ_ENABLE); > + intel_de_write(display, GEN11_DISPLAY_INT_CTL, > GEN11_DISPLAY_IRQ_ENABLE); > > enable_rpm_wakeref_asserts(&i915->runtime_pm); > } > > static void i915gm_irq_cstate_wa_enable(struct drm_i915_private > *i915) > { > + struct intel_display *display = &i915->display; > lockdep_assert_held(&i915->drm.vblank_time_lock); > > /* > @@ -1270,15 +1282,18 @@ static void > i915gm_irq_cstate_wa_enable(struct drm_i915_private *i915) > * only when vblank/CRC interrupts are actually enabled. > */ > if (i915->display.irq.vblank_enabled++ == 0) > - intel_uncore_write(&i915->uncore, SCPD0, > _MASKED_BIT_ENABLE(CSTATE_RENDER_CLOCK_GATE_DISABLE)); > + intel_de_write(display, SCPD0, > + > _MASKED_BIT_ENABLE(CSTATE_RENDER_CLOCK_GATE_DISABLE)); > } > > static void i915gm_irq_cstate_wa_disable(struct drm_i915_private > *i915) > { > + struct intel_display *display = &i915->display; > lockdep_assert_held(&i915->drm.vblank_time_lock); > > if (--i915->display.irq.vblank_enabled == 0) > - intel_uncore_write(&i915->uncore, SCPD0, > _MASKED_BIT_DISABLE(CSTATE_RENDER_CLOCK_GATE_DISABLE)); > + intel_de_write(display, SCPD0, > + > _MASKED_BIT_DISABLE(CSTATE_RENDER_CLOCK_GATE_DISABLE)); > } > > void i915gm_irq_cstate_wa(struct drm_i915_private *i915, bool > enable) > @@ -1398,7 +1413,7 @@ void ilk_disable_vblank(struct drm_crtc *crtc) > static bool gen11_dsi_configure_te(struct intel_crtc *intel_crtc, > bool enable) > { > - struct drm_i915_private *dev_priv = to_i915(intel_crtc- > >base.dev); > + struct intel_display *display = > to_intel_display(intel_crtc); > enum port port; > > if (!(intel_crtc->mode_flags & > @@ -1411,10 +1426,9 @@ static bool gen11_dsi_configure_te(struct > intel_crtc *intel_crtc, > else > port = PORT_A; > > - intel_uncore_rmw(&dev_priv->uncore, DSI_INTR_MASK_REG(port), > DSI_TE_EVENT, > - enable ? 0 : DSI_TE_EVENT); > + intel_de_rmw(display, DSI_INTR_MASK_REG(port), DSI_TE_EVENT, > enable ? 0 : DSI_TE_EVENT); > > - intel_uncore_rmw(&dev_priv->uncore, > DSI_INTR_IDENT_REG(port), 0, 0); > + intel_de_rmw(display, DSI_INTR_IDENT_REG(port), 0, 0); > > return true; > } > @@ -1483,15 +1497,16 @@ void bdw_disable_vblank(struct drm_crtc > *_crtc) > > static void _vlv_display_irq_reset(struct drm_i915_private > *dev_priv) > { > + struct intel_display *display = &dev_priv->display; > struct intel_uncore *uncore = &dev_priv->uncore; > > if (IS_CHERRYVIEW(dev_priv)) > - intel_uncore_write(uncore, DPINVGTT, > DPINVGTT_STATUS_MASK_CHV); > + intel_de_write(display, DPINVGTT, > DPINVGTT_STATUS_MASK_CHV); > else > - intel_uncore_write(uncore, DPINVGTT, > DPINVGTT_STATUS_MASK_VLV); > + intel_de_write(display, DPINVGTT, > DPINVGTT_STATUS_MASK_VLV); > > i915_hotplug_interrupt_update_locked(dev_priv, 0xffffffff, > 0); > - intel_uncore_rmw(uncore, PORT_HOTPLUG_STAT(dev_priv), 0, 0); > + intel_de_rmw(display, PORT_HOTPLUG_STAT(dev_priv), 0, 0); > > i9xx_pipestat_irq_reset(dev_priv); > > @@ -1507,10 +1522,11 @@ void vlv_display_irq_reset(struct > drm_i915_private *dev_priv) > > void i9xx_display_irq_reset(struct drm_i915_private *i915) > { > + struct intel_display *display = &i915->display; > + > if (I915_HAS_HOTPLUG(i915)) { > i915_hotplug_interrupt_update(i915, 0xffffffff, 0); > - intel_uncore_rmw(&i915->uncore, > - PORT_HOTPLUG_STAT(i915), 0, 0); > + intel_de_rmw(display, PORT_HOTPLUG_STAT(i915), 0, > 0); > } > > i9xx_pipestat_irq_reset(i915); > @@ -1552,14 +1568,15 @@ void vlv_display_irq_postinstall(struct > drm_i915_private *dev_priv) > > void gen8_display_irq_reset(struct drm_i915_private *dev_priv) > { > + struct intel_display *display = &dev_priv->display; > struct intel_uncore *uncore = &dev_priv->uncore; > enum pipe pipe; > > if (!HAS_DISPLAY(dev_priv)) > return; > > - intel_uncore_write(uncore, EDP_PSR_IMR, 0xffffffff); > - intel_uncore_write(uncore, EDP_PSR_IIR, 0xffffffff); > + intel_de_write(display, EDP_PSR_IMR, 0xffffffff); > + intel_de_write(display, EDP_PSR_IIR, 0xffffffff); > > for_each_pipe(dev_priv, pipe) > if (intel_display_power_is_enabled(dev_priv, > @@ -1572,6 +1589,7 @@ void gen8_display_irq_reset(struct > drm_i915_private *dev_priv) > > void gen11_display_irq_reset(struct drm_i915_private *dev_priv) > { > + struct intel_display *display = &dev_priv->display; > struct intel_uncore *uncore = &dev_priv->uncore; > enum pipe pipe; > u32 trans_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | > @@ -1580,7 +1598,7 @@ void gen11_display_irq_reset(struct > drm_i915_private *dev_priv) > if (!HAS_DISPLAY(dev_priv)) > return; > > - intel_uncore_write(uncore, GEN11_DISPLAY_INT_CTL, 0); > + intel_de_write(display, GEN11_DISPLAY_INT_CTL, 0); > > if (DISPLAY_VER(dev_priv) >= 12) { > enum transcoder trans; > @@ -1592,16 +1610,16 @@ void gen11_display_irq_reset(struct > drm_i915_private *dev_priv) > if > (!intel_display_power_is_enabled(dev_priv, domain)) > continue; > > - intel_uncore_write(uncore, > - TRANS_PSR_IMR(dev_priv, > trans), > - 0xffffffff); > - intel_uncore_write(uncore, > - TRANS_PSR_IIR(dev_priv, > trans), > - 0xffffffff); > + intel_de_write(display, > + TRANS_PSR_IMR(dev_priv, > trans), > + 0xffffffff); > + intel_de_write(display, > + TRANS_PSR_IIR(dev_priv, > trans), > + 0xffffffff); > } > } else { > - intel_uncore_write(uncore, EDP_PSR_IMR, 0xffffffff); > - intel_uncore_write(uncore, EDP_PSR_IIR, 0xffffffff); > + intel_de_write(display, EDP_PSR_IMR, 0xffffffff); > + intel_de_write(display, EDP_PSR_IIR, 0xffffffff); > } > > for_each_pipe(dev_priv, pipe) > @@ -1890,23 +1908,25 @@ static void icp_irq_postinstall(struct > drm_i915_private *dev_priv) > > void gen11_de_irq_postinstall(struct drm_i915_private *dev_priv) > { > + struct intel_display *display = &dev_priv->display; > + > if (!HAS_DISPLAY(dev_priv)) > return; > > gen8_de_irq_postinstall(dev_priv); > > - intel_uncore_write(&dev_priv->uncore, GEN11_DISPLAY_INT_CTL, > - GEN11_DISPLAY_IRQ_ENABLE); > + intel_de_write(display, GEN11_DISPLAY_INT_CTL, > GEN11_DISPLAY_IRQ_ENABLE); > } > > void dg1_de_irq_postinstall(struct drm_i915_private *i915) > { > + struct intel_display *display = &i915->display; > + > if (!HAS_DISPLAY(i915)) > return; > > gen8_de_irq_postinstall(i915); > - intel_uncore_write(&i915->uncore, GEN11_DISPLAY_INT_CTL, > - GEN11_DISPLAY_IRQ_ENABLE); > + intel_de_write(display, GEN11_DISPLAY_INT_CTL, > GEN11_DISPLAY_IRQ_ENABLE); > } > > void intel_display_irq_init(struct drm_i915_private *i915)