]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/i915/irq: add struct i915_irq_regs triplet
authorJani Nikula <jani.nikula@intel.com>
Wed, 2 Oct 2024 10:26:43 +0000 (13:26 +0300)
committerJani Nikula <jani.nikula@intel.com>
Thu, 3 Oct 2024 12:42:41 +0000 (15:42 +0300)
Add struct i915_irq_regs to hold IMR/IER/IIR register offsets to pass to
gen3_irq_reset() and gen3_irq_init(). This helps in grouping the
registers and further cleanup.

Note: gen3_irq_reset() and gen3_irq_init() really did have the
IMR/IER/IIR parameters in different order.

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241002102645.136155-1-jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/i915_irq.c
drivers/gpu/drm/i915/i915_irq.h
drivers/gpu/drm/i915/i915_reg_defs.h
drivers/gpu/drm/xe/display/ext/i915_irq.c

index ef1a60fc26fa8010142b138d76c269ed3c6b95cb..db3b4f7f175977802201b2e17dad802d24e6e170 100644 (file)
@@ -77,19 +77,18 @@ static inline void pmu_irq_stats(struct drm_i915_private *i915,
        WRITE_ONCE(i915->pmu.irq_count, i915->pmu.irq_count + 1);
 }
 
-void gen3_irq_reset(struct intel_uncore *uncore, i915_reg_t imr,
-                   i915_reg_t iir, i915_reg_t ier)
+void gen3_irq_reset(struct intel_uncore *uncore, struct i915_irq_regs regs)
 {
-       intel_uncore_write(uncore, imr, 0xffffffff);
-       intel_uncore_posting_read(uncore, imr);
+       intel_uncore_write(uncore, regs.imr, 0xffffffff);
+       intel_uncore_posting_read(uncore, regs.imr);
 
-       intel_uncore_write(uncore, ier, 0);
+       intel_uncore_write(uncore, regs.ier, 0);
 
        /* IIR can theoretically queue up two events. Be paranoid. */
-       intel_uncore_write(uncore, iir, 0xffffffff);
-       intel_uncore_posting_read(uncore, iir);
-       intel_uncore_write(uncore, iir, 0xffffffff);
-       intel_uncore_posting_read(uncore, iir);
+       intel_uncore_write(uncore, regs.iir, 0xffffffff);
+       intel_uncore_posting_read(uncore, regs.iir);
+       intel_uncore_write(uncore, regs.iir, 0xffffffff);
+       intel_uncore_posting_read(uncore, regs.iir);
 }
 
 /*
@@ -111,16 +110,14 @@ void gen3_assert_iir_is_zero(struct intel_uncore *uncore, i915_reg_t reg)
        intel_uncore_posting_read(uncore, reg);
 }
 
-void gen3_irq_init(struct intel_uncore *uncore,
-                  i915_reg_t imr, u32 imr_val,
-                  i915_reg_t ier, u32 ier_val,
-                  i915_reg_t iir)
+void gen3_irq_init(struct intel_uncore *uncore, struct i915_irq_regs regs,
+                  u32 imr_val, u32 ier_val)
 {
-       gen3_assert_iir_is_zero(uncore, iir);
+       gen3_assert_iir_is_zero(uncore, regs.iir);
 
-       intel_uncore_write(uncore, ier, ier_val);
-       intel_uncore_write(uncore, imr, imr_val);
-       intel_uncore_posting_read(uncore, imr);
+       intel_uncore_write(uncore, regs.ier, ier_val);
+       intel_uncore_write(uncore, regs.imr, imr_val);
+       intel_uncore_posting_read(uncore, regs.imr);
 }
 
 /**
index cde4cac5eca2a809e1bff2da413b840d3f9a56ee..361ba46eed76d7be8f3b01aa6b4b323c8300cf74 100644 (file)
@@ -42,37 +42,33 @@ void intel_synchronize_hardirq(struct drm_i915_private *i915);
 
 void gen3_assert_iir_is_zero(struct intel_uncore *uncore, i915_reg_t reg);
 
-void gen3_irq_reset(struct intel_uncore *uncore, i915_reg_t imr,
-                   i915_reg_t iir, i915_reg_t ier);
+void gen3_irq_reset(struct intel_uncore *uncore, struct i915_irq_regs regs);
 
-void gen3_irq_init(struct intel_uncore *uncore,
-                  i915_reg_t imr, u32 imr_val,
-                  i915_reg_t ier, u32 ier_val,
-                  i915_reg_t iir);
+void gen3_irq_init(struct intel_uncore *uncore, struct i915_irq_regs regs,
+                  u32 imr_val, u32 ier_val);
 
 #define GEN8_IRQ_RESET_NDX(uncore, type, which) \
 ({ \
        unsigned int which_ = which; \
-       gen3_irq_reset((uncore), GEN8_##type##_IMR(which_), \
-                      GEN8_##type##_IIR(which_), GEN8_##type##_IER(which_)); \
+       gen3_irq_reset((uncore), I915_IRQ_REGS(GEN8_##type##_IMR(which_), \
+                                              GEN8_##type##_IER(which_), \
+                                              GEN8_##type##_IIR(which_))); \
 })
 
 #define GEN3_IRQ_RESET(uncore, type) \
-       gen3_irq_reset((uncore), type##IMR, type##IIR, type##IER)
+       gen3_irq_reset((uncore), I915_IRQ_REGS(type##IMR, type##IER, type##IIR))
 
 #define GEN8_IRQ_INIT_NDX(uncore, type, which, imr_val, ier_val) \
 ({ \
        unsigned int which_ = which; \
-       gen3_irq_init((uncore), \
-                     GEN8_##type##_IMR(which_), imr_val, \
-                     GEN8_##type##_IER(which_), ier_val, \
-                     GEN8_##type##_IIR(which_)); \
+       gen3_irq_init((uncore), I915_IRQ_REGS(GEN8_##type##_IMR(which_), \
+                                             GEN8_##type##_IER(which_), \
+                                             GEN8_##type##_IIR(which_)), \
+                     imr_val, ier_val); \
 })
 
 #define GEN3_IRQ_INIT(uncore, type, imr_val, ier_val) \
-       gen3_irq_init((uncore), \
-                     type##IMR, imr_val, \
-                     type##IER, ier_val, \
-                     type##IIR)
+       gen3_irq_init((uncore), I915_IRQ_REGS(type##IMR, type##IER, type##IIR), \
+                     imr_val, ier_val)
 
 #endif /* __I915_IRQ_H__ */
index a685db1e815d804543be36ca826d4ab24d008667..e251bcc0c89f5710125bc70f07851b2cb978c89c 100644 (file)
@@ -284,4 +284,14 @@ typedef struct {
 #define i915_mmio_reg_equal(a, b) (i915_mmio_reg_offset(a) == i915_mmio_reg_offset(b))
 #define i915_mmio_reg_valid(r) (!i915_mmio_reg_equal(r, INVALID_MMIO_REG))
 
+/* A triplet for IMR/IER/IIR registers. */
+struct i915_irq_regs {
+       i915_reg_t imr;
+       i915_reg_t ier;
+       i915_reg_t iir;
+};
+
+#define I915_IRQ_REGS(_imr, _ier, _iir) \
+       ((const struct i915_irq_regs){ .imr = (_imr), .ier = (_ier), .iir = (_iir) })
+
 #endif /* __I915_REG_DEFS__ */
index eb40f1cb44f680c3230e94bae0284941ddb7401b..977ef47ea1f969bfae949984339c84b78338a5ff 100644 (file)
@@ -7,19 +7,18 @@
 #include "i915_reg.h"
 #include "intel_uncore.h"
 
-void gen3_irq_reset(struct intel_uncore *uncore, i915_reg_t imr,
-                   i915_reg_t iir, i915_reg_t ier)
+void gen3_irq_reset(struct intel_uncore *uncore, struct i915_irq_regs regs)
 {
-       intel_uncore_write(uncore, imr, 0xffffffff);
-       intel_uncore_posting_read(uncore, imr);
+       intel_uncore_write(uncore, regs.imr, 0xffffffff);
+       intel_uncore_posting_read(uncore, regs.imr);
 
-       intel_uncore_write(uncore, ier, 0);
+       intel_uncore_write(uncore, regs.ier, 0);
 
        /* IIR can theoretically queue up two events. Be paranoid. */
-       intel_uncore_write(uncore, iir, 0xffffffff);
-       intel_uncore_posting_read(uncore, iir);
-       intel_uncore_write(uncore, iir, 0xffffffff);
-       intel_uncore_posting_read(uncore, iir);
+       intel_uncore_write(uncore, regs.iir, 0xffffffff);
+       intel_uncore_posting_read(uncore, regs.iir);
+       intel_uncore_write(uncore, regs.iir, 0xffffffff);
+       intel_uncore_posting_read(uncore, regs.iir);
 }
 
 /*
@@ -42,16 +41,14 @@ void gen3_assert_iir_is_zero(struct intel_uncore *uncore, i915_reg_t reg)
        intel_uncore_posting_read(uncore, reg);
 }
 
-void gen3_irq_init(struct intel_uncore *uncore,
-                  i915_reg_t imr, u32 imr_val,
-                  i915_reg_t ier, u32 ier_val,
-                  i915_reg_t iir)
+void gen3_irq_init(struct intel_uncore *uncore, struct i915_irq_regs regs,
+                  u32 imr_val, u32 ier_val)
 {
-       gen3_assert_iir_is_zero(uncore, iir);
+       gen3_assert_iir_is_zero(uncore, regs.iir);
 
-       intel_uncore_write(uncore, ier, ier_val);
-       intel_uncore_write(uncore, imr, imr_val);
-       intel_uncore_posting_read(uncore, imr);
+       intel_uncore_write(uncore, regs.ier, ier_val);
+       intel_uncore_write(uncore, regs.imr, imr_val);
+       intel_uncore_posting_read(uncore, regs.imr);
 }
 
 bool intel_irqs_enabled(struct xe_device *xe)