[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