[Intel-gfx] [PATCH] drm/i915/irq: Refactor gen11 display interrupt handling
Sripada, Radhakrishna
radhakrishna.sripada at intel.com
Mon Dec 2 20:51:53 UTC 2019
> -----Original Message-----
> From: Intel-gfx [mailto:intel-gfx-bounces at lists.freedesktop.org] On Behalf Of
> Matt Roper
> Sent: Monday, December 2, 2019 9:16 AM
> To: intel-gfx at lists.freedesktop.org
> Cc: De Marchi, Lucas <lucas.demarchi at intel.com>
> Subject: [Intel-gfx] [PATCH] drm/i915/irq: Refactor gen11 display interrupt
> handling
>
> Let's move handling and reset for gen11 display IRQs to their own functions,
> similar to how we deal with GT interrupts. This will make the top-level functions
> a bit easier to read and potentially make things easier to deal with in the future
> if new platforms wind up needing different display handling logic.
>
> Cc: Lucas De Marchi <lucas.demarchi at intel.com>
LGTM.
Reviewed-by: Radhakrishna Sripada <radhakrishna.sripada at intel.com>
- Radhakrishna(RK) Sripada
> Signed-off-by: Matt Roper <matthew.d.roper at intel.com>
> ---
> drivers/gpu/drm/i915/i915_irq.c | 57 ++++++++++++++++++++-------------
> 1 file changed, 35 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index 46a9f7dafbf3..a5348f79114f 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -2453,6 +2453,25 @@ static inline void gen11_master_intr_enable(void
> __iomem * const regs)
> raw_reg_write(regs, GEN11_GFX_MSTR_IRQ, GEN11_MASTER_IRQ); }
>
> +static void
> +gen11_display_irq_handler(struct drm_i915_private *i915) {
> + void __iomem * const regs = i915->uncore.regs;
> + const u32 disp_ctl = raw_reg_read(regs, GEN11_DISPLAY_INT_CTL);
> +
> + disable_rpm_wakeref_asserts(&i915->runtime_pm);
> + /*
> + * GEN11_DISPLAY_INT_CTL has same format as GEN8_MASTER_IRQ
> + * for the display related bits.
> + */
> + raw_reg_write(regs, GEN11_DISPLAY_INT_CTL, 0x0);
> + gen8_de_irq_handler(i915, disp_ctl);
> + raw_reg_write(regs, GEN11_DISPLAY_INT_CTL,
> + GEN11_DISPLAY_IRQ_ENABLE);
> +
> + enable_rpm_wakeref_asserts(&i915->runtime_pm);
> +}
> +
> static __always_inline irqreturn_t
> __gen11_irq_handler(struct drm_i915_private * const i915,
> u32 (*intr_disable)(void __iomem * const regs), @@ -2476,21
> +2495,8 @@ __gen11_irq_handler(struct drm_i915_private * const i915,
> gen11_gt_irq_handler(gt, master_ctl);
>
> /* IRQs are synced during runtime_suspend, we don't require a wakeref
> */
> - if (master_ctl & GEN11_DISPLAY_IRQ) {
> - const u32 disp_ctl = raw_reg_read(regs,
> GEN11_DISPLAY_INT_CTL);
> -
> - disable_rpm_wakeref_asserts(&i915->runtime_pm);
> - /*
> - * GEN11_DISPLAY_INT_CTL has same format as
> GEN8_MASTER_IRQ
> - * for the display related bits.
> - */
> - raw_reg_write(regs, GEN11_DISPLAY_INT_CTL, 0x0);
> - gen8_de_irq_handler(i915, disp_ctl);
> - raw_reg_write(regs, GEN11_DISPLAY_INT_CTL,
> - GEN11_DISPLAY_IRQ_ENABLE);
> -
> - enable_rpm_wakeref_asserts(&i915->runtime_pm);
> - }
> + if (master_ctl & GEN11_DISPLAY_IRQ)
> + gen11_display_irq_handler(i915);
>
> gu_misc_iir = gen11_gu_misc_irq_ack(gt, master_ctl);
>
> @@ -2792,15 +2798,11 @@ static void gen8_irq_reset(struct drm_i915_private
> *dev_priv)
> ibx_irq_reset(dev_priv);
> }
>
> -static void gen11_irq_reset(struct drm_i915_private *dev_priv)
> +static void gen11_display_irq_reset(struct drm_i915_private *dev_priv)
> {
> struct intel_uncore *uncore = &dev_priv->uncore;
> enum pipe pipe;
>
> - gen11_master_intr_disable(dev_priv->uncore.regs);
> -
> - gen11_gt_irq_reset(&dev_priv->gt);
> -
> intel_uncore_write(uncore, GEN11_DISPLAY_INT_CTL, 0);
>
> if (INTEL_GEN(dev_priv) >= 12) {
> @@ -2829,13 +2831,24 @@ static void gen11_irq_reset(struct
> drm_i915_private *dev_priv)
> GEN3_IRQ_RESET(uncore, GEN8_DE_PORT_);
> GEN3_IRQ_RESET(uncore, GEN8_DE_MISC_);
> GEN3_IRQ_RESET(uncore, GEN11_DE_HPD_);
> - GEN3_IRQ_RESET(uncore, GEN11_GU_MISC_);
> - GEN3_IRQ_RESET(uncore, GEN8_PCU_);
>
> if (INTEL_PCH_TYPE(dev_priv) >= PCH_ICP)
> GEN3_IRQ_RESET(uncore, SDE);
> }
>
> +static void gen11_irq_reset(struct drm_i915_private *dev_priv) {
> + struct intel_uncore *uncore = &dev_priv->uncore;
> +
> + gen11_master_intr_disable(dev_priv->uncore.regs);
> +
> + gen11_gt_irq_reset(&dev_priv->gt);
> + gen11_display_irq_reset(dev_priv);
> +
> + GEN3_IRQ_RESET(uncore, GEN11_GU_MISC_);
> + GEN3_IRQ_RESET(uncore, GEN8_PCU_);
> +}
> +
> void gen8_irq_power_well_post_enable(struct drm_i915_private *dev_priv,
> u8 pipe_mask)
> {
> --
> 2.23.0
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
More information about the Intel-gfx
mailing list