[Intel-xe] [PATCH 5/6] drm/xe: move xe IRQ-related display logic to xe_display.c

Rodrigo Vivi rodrigo.vivi at intel.com
Fri Feb 3 20:27:41 UTC 2023


From: Mauro Carvalho Chehab <mchehab at kernel.org>

It is very ugly to read code with lots of ifdefs. Also, it makes
harder when the display part can be disabled in runtime.

Move the IRQ-related core to xe_display.c, making the code
clearer and more modular.

Signed-off-by: Mauro Carvalho Chehab <mchehab at kernel.org>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
---
 drivers/gpu/drm/xe/xe_display.c | 37 +++++++++++++++++++++++++++++++++
 drivers/gpu/drm/xe/xe_display.h | 14 +++++++++++++
 drivers/gpu/drm/xe/xe_irq.c     | 37 +++++++--------------------------
 3 files changed, 59 insertions(+), 29 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_display.c b/drivers/gpu/drm/xe/xe_display.c
index 8d83b7c34ad6..262d8e06b51f 100644
--- a/drivers/gpu/drm/xe/xe_display.c
+++ b/drivers/gpu/drm/xe/xe_display.c
@@ -187,4 +187,41 @@ void xe_display_modset_driver_remove(struct xe_device *xe)
 	intel_modeset_driver_remove(xe);
 }
 
+/* IRQ-related functions */
+
+void xe_display_irq_handler(struct xe_device *xe, u32 master_ctl)
+{
+	if (!xe->info.enable_display)
+		return;
+
+	if (master_ctl & GEN11_DISPLAY_IRQ)
+		gen11_display_irq_handler(xe);
+}
+
+void xe_display_irq_enable(struct xe_device *xe, u32 gu_misc_iir)
+{
+	if (!xe->info.enable_display)
+		return;
+
+	if (gu_misc_iir & GEN11_GU_MISC_GSE)
+		intel_opregion_asle_intr(xe);
+}
+
+void xe_display_irq_reset(struct xe_device *xe)
+{
+	if (!xe->info.enable_display)
+		return;
+
+	gen11_display_irq_reset(xe);
+}
+
+void xe_display_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
+{
+	if (!xe->info.enable_display)
+		return;
+
+	if (gt->info.id == XE_GT0)
+		gen11_display_irq_postinstall(xe);
+}
+
 #endif
diff --git a/drivers/gpu/drm/xe/xe_display.h b/drivers/gpu/drm/xe/xe_display.h
index 79aba827b254..11f98ccfaf4e 100644
--- a/drivers/gpu/drm/xe/xe_display.h
+++ b/drivers/gpu/drm/xe/xe_display.h
@@ -9,6 +9,9 @@
 #if IS_ENABLED(CONFIG_DRM_XE_DISPLAY)
 #include <drm/drm_drv.h>
 
+#include "display/intel_opregion.h"
+#include "display/ext/i915_irq.h"
+
 int xe_display_enable(struct pci_dev *pdev, struct drm_driver *driver);
 
 int xe_display_init_nommio(struct xe_device *xe);
@@ -27,6 +30,12 @@ void xe_display_register(struct xe_device *xe);
 void xe_display_unregister(struct xe_device *xe);
 void xe_display_modset_driver_remove(struct xe_device *xe);
 
+void xe_display_irq_handler(struct xe_device *xe, u32 master_ctl);
+void xe_display_irq_enable(struct xe_device *xe, u32 gu_misc_iir);
+
+void xe_display_irq_reset(struct xe_device *xe);
+void xe_display_irq_postinstall(struct xe_device *xe, struct xe_gt *gt);
+
 #else
 static inline int
 xe_display_enable(struct pci_dev *pdev, struct drm_driver *driver) { return 0; };
@@ -55,5 +64,10 @@ static inline void xe_display_register(struct xe_device *xe) {};
 static inline void xe_display_unregister(struct xe_device *xe) {};
 static inline void xe_display_modset_driver_remove(struct xe_device *xe) {};
 
+static inline void xe_display_irq_handler(struct xe_device *xe, u32 master_ctl) {};
+static inline void xe_display_irq_enable(struct xe_device *xe, u32 gu_misc_iir) {};
+static inline void xe_display_irq_reset(struct xe_device *xe) {};
+static inline void xe_display_irq_postinstall(struct xe_device *xe, struct xe_gt *gt) {};
+
 #endif /* CONFIG_DRM_XE_DISPLAY */
 #endif /* _XE_DISPLAY_H_ */
diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
index e1cc057f50ba..7b7ddd11c2b8 100644
--- a/drivers/gpu/drm/xe/xe_irq.c
+++ b/drivers/gpu/drm/xe/xe_irq.c
@@ -8,17 +8,13 @@
 #include <drm/drm_managed.h>
 
 #include "xe_device.h"
+#include "xe_display.h"
 #include "xe_drv.h"
 #include "xe_guc.h"
 #include "xe_gt.h"
 #include "xe_hw_engine.h"
 #include "xe_mmio.h"
 
-#if IS_ENABLED(CONFIG_DRM_XE_DISPLAY)
-#include "display/intel_opregion.h"
-#include "display/ext/i915_irq.h"
-#endif
-
 #include "i915_reg.h"
 #include "gt/intel_gt_regs.h"
 
@@ -298,19 +294,13 @@ static irqreturn_t gen11_irq_handler(int irq, void *arg)
 
 	gen11_gt_irq_handler(xe, gt, master_ctl, intr_dw, identity);
 
-#if IS_ENABLED(CONFIG_DRM_XE_DISPLAY)
-	if (xe->info.enable_display && (master_ctl & GEN11_DISPLAY_IRQ))
-		gen11_display_irq_handler(xe);
-#endif
+	xe_display_irq_handler(xe, master_ctl);
 
 	gu_misc_iir = gen11_gu_misc_irq_ack(gt, master_ctl);
 
 	gen11_intr_enable(gt, false);
 
-#if IS_ENABLED(CONFIG_DRM_XE_DISPLAY)
-	if (xe->info.enable_display && (gu_misc_iir & GEN11_GU_MISC_GSE))
-		intel_opregion_asle_intr(xe);
-#endif
+	xe_display_irq_enable(xe, gu_misc_iir);
 
 	return IRQ_HANDLED;
 }
@@ -393,19 +383,13 @@ static irqreturn_t dg1_irq_handler(int irq, void *arg)
 		gen11_gt_irq_handler(xe, gt, master_ctl, intr_dw, identity);
 	}
 
-#if IS_ENABLED(CONFIG_DRM_XE_DISPLAY)
-	if (master_ctl & GEN11_DISPLAY_IRQ)
-		gen11_display_irq_handler(xe);
-#endif
+	xe_display_irq_handler(xe, master_ctl);
 
 	gu_misc_iir = gen11_gu_misc_irq_ack(gt, master_ctl);
 
 	dg1_intr_enable(xe, false);
 
-#if IS_ENABLED(CONFIG_DRM_XE_DISPLAY)
-	if (xe->info.enable_display && (gu_misc_iir & GEN11_GU_MISC_GSE))
-		intel_opregion_asle_intr(xe);
-#endif
+	xe_display_irq_enable(xe, gu_misc_iir);
 
 	return IRQ_HANDLED;
 }
@@ -487,10 +471,8 @@ void xe_irq_reset(struct xe_device *xe)
 			drm_err(&xe->drm, "No interrupt reset hook");
 		}
 	}
-#if IS_ENABLED(CONFIG_DRM_XE_DISPLAY)
-	if (xe->info.enable_display)
-		gen11_display_irq_reset(xe);
-#endif
+
+	xe_display_irq_reset(xe);
 }
 
 void xe_gt_irq_postinstall(struct xe_gt *gt)
@@ -504,10 +486,7 @@ void xe_gt_irq_postinstall(struct xe_gt *gt)
 	else
 		drm_err(&xe->drm, "No interrupt postinstall hook");
 
-#if IS_ENABLED(CONFIG_DRM_XE_DISPLAY)
-	if (xe->info.enable_display && (gt->info.id == XE_GT0))
-		gen11_display_irq_postinstall(gt_to_xe(gt));
-#endif
+	xe_display_irq_postinstall(xe, gt);
 }
 
 static void xe_irq_postinstall(struct xe_device *xe)
-- 
2.39.1



More information about the Intel-xe mailing list