[PATCH 1/3] drm/i915/display: Use display MMIO functions in intel_display_irq.c
Hogander, Jouni
jouni.hogander at intel.com
Thu Jan 9 07:03:37 UTC 2025
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.sousa at intel.com>
Reviewed-by: Jouni Högander <jouni.hogander at 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)
More information about the Intel-xe
mailing list