[PATCH v2 3/8] drm/xe/irq: add hw engine irq handler
Niranjana Vishwanathapura
niranjana.vishwanathapura at intel.com
Wed Jul 10 16:34:45 UTC 2024
On Thu, Jun 27, 2024 at 03:40:38PM +0300, Dani Liberman wrote:
>From: Ilia Levi <illevi at habana.ai>
>
>Introduce a simplified MSIX IRQ handler for HW engines.
>
>Rather than having a single handler for all kinds of interrupts, we
>will allocate different MSIX IRQs which will map directly to the HW
>engine that generated the interrupt.
>
>This patch provides only the handler itself - its usage will be introduced
>later.
>
>Signed-off-by: Ilia Levi <illevi at habana.ai>
>---
> drivers/gpu/drm/xe/xe_irq.c | 18 +++++++++++++++++-
> drivers/gpu/drm/xe/xe_irq.h | 1 +
> 2 files changed, 18 insertions(+), 1 deletion(-)
>
>diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
>index b552af53db2f..28173e946e77 100644
>--- a/drivers/gpu/drm/xe/xe_irq.c
>+++ b/drivers/gpu/drm/xe/xe_irq.c
>@@ -821,7 +821,23 @@ void xe_irq_resume(struct xe_device *xe)
> xe_irq_enable_hwe(gt);
> }
>
>-static int xe_irq_alloc_msix(struct xe_device *xe, void *irq_buf, bool dynamic_msix, u32 *msix)
>+/*
>+ * This handles MI_USER_INTERRUPT.
>+ * In MSI-X mode command streamers raise an interrupt only as a result of
>+ * MI_USER_INTERRUPT and MI_FLUSH_DW_NOTIFY commands.
>+ * Currently, there is no use-case for MI_FLUSH_DW_NOTIFY.
>+ */
>+irqreturn_t xe_irq_hwe_handler(int irq, void *arg)
As this is MSIX only, may be rename it to xe_irq_msix_hwe_handler()?
Niranjana
>+{
>+ struct xe_hw_engine *hwe = arg;
>+
>+ xe_hw_engine_handle_irq(hwe, GT_RENDER_USER_INTERRUPT);
>+
>+ return IRQ_HANDLED;
>+}
>+
>+static int xe_irq_alloc_msix(struct xe_device *xe, void *irq_buf,
>+ bool dynamic_msix, u32 *msix)
> {
> struct xa_limit limit;
> int ret = 0;
>diff --git a/drivers/gpu/drm/xe/xe_irq.h b/drivers/gpu/drm/xe/xe_irq.h
>index 6529dff90f76..4ab63e61a062 100644
>--- a/drivers/gpu/drm/xe/xe_irq.h
>+++ b/drivers/gpu/drm/xe/xe_irq.h
>@@ -19,5 +19,6 @@ void xe_irq_enable_hwe(struct xe_gt *gt);
> int xe_request_irq(struct xe_device *xe, irq_handler_t handler, void *irq_buf, const char *name,
> bool dynamic_msix, u32 *msix);
> void xe_free_irq(struct xe_device *xe, u32 msix);
>+irqreturn_t xe_irq_hwe_handler(int irq, void *arg);
>
> #endif
>--
>2.34.1
>
More information about the Intel-xe
mailing list