[Intel-xe] [PATCH 5/8] drm/xe/irq: Rename and clarify top-level interrupt handling routines
Lucas De Marchi
lucas.demarchi at intel.com
Fri Mar 31 22:25:07 UTC 2023
On Thu, Mar 30, 2023 at 11:24:02AM -0700, Matt Roper wrote:
>Platforms supported by the Xe driver handle top-level interrupts in one
>of two ways:
> - Xe_LP platforms only have a "graphics master" register and lack a
> "master tile" register, so top-level interrupt detection and
> enable/disable happens in the graphics master.
> - Xe_LP+ (aka DG1) and beyond have a "master tile" interrupt register
> that controls the enable/disable of top-level interrupts and must
> also be consulted to determine which tiles have received interrupts
> before the driver moves on the process the graphics master register.
>
>For functions that are only relevant to the first set of platforms,
>rename the function prefix to Xe_LP since "gen11" doesn't make sense in
>the Xe driver. Also add some comments briefly describing the two
>top-level handlers.
>
>Signed-off-by: Matt Roper <matthew.d.roper at intel.com>
>---
> drivers/gpu/drm/xe/xe_irq.c | 46 +++++++++++++++++++------------------
> 1 file changed, 24 insertions(+), 22 deletions(-)
>
>diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
>index b1b94ba43b3f..de0c27c0a09c 100644
>--- a/drivers/gpu/drm/xe/xe_irq.c
>+++ b/drivers/gpu/drm/xe/xe_irq.c
>@@ -70,7 +70,7 @@ static void mask_and_disable(struct xe_gt *gt, u32 irqregs)
> xe_mmio_read32(gt, IIR(irqregs).reg);
> }
>
>-static u32 gen11_intr_disable(struct xe_gt *gt)
>+static u32 xelp_intr_disable(struct xe_gt *gt)
> {
> xe_mmio_write32(gt, GFX_MSTR_IRQ.reg, 0);
>
>@@ -98,7 +98,7 @@ gen11_gu_misc_irq_ack(struct xe_gt *gt, const u32 master_ctl)
> return iir;
> }
>
>-static inline void gen11_intr_enable(struct xe_gt *gt, bool stall)
>+static inline void xelp_intr_enable(struct xe_gt *gt, bool stall)
> {
> xe_mmio_write32(gt, GFX_MSTR_IRQ.reg, MASTER_IRQ);
> if (stall)
>@@ -168,7 +168,7 @@ static void gen11_gt_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
> xe_mmio_write32(gt, GUC_SG_INTR_MASK.reg, ~0);
> }
>
>-static void gen11_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
>+static void xelp_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
> {
> /* TODO: PCH */
>
>@@ -176,7 +176,7 @@ static void gen11_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
>
> unmask_and_enable(gt, GU_MISC_IRQ_REGS, GU_MISC_GSE);
>
>- gen11_intr_enable(gt, true);
>+ xelp_intr_enable(gt, true);
> }
>
> static u32
>@@ -278,7 +278,11 @@ static void gen11_gt_irq_handler(struct xe_device *xe, struct xe_gt *gt,
> spin_unlock(&xe->irq.lock);
> }
>
>-static irqreturn_t gen11_irq_handler(int irq, void *arg)
>+/*
>+ * Top-level interrupt handler for Xe_LP platforms (which did not have
>+ * a "master tile" interrupt register.
>+ */
>+static irqreturn_t xelp_irq_handler(int irq, void *arg)
> {
> struct xe_device *xe = arg;
> struct xe_gt *gt = xe_device_get_gt(xe, 0); /* Only 1 GT here */
>@@ -286,9 +290,9 @@ static irqreturn_t gen11_irq_handler(int irq, void *arg)
> long unsigned int intr_dw[2];
> u32 identity[32];
>
>- master_ctl = gen11_intr_disable(gt);
>+ master_ctl = xelp_intr_disable(gt);
> if (!master_ctl) {
>- gen11_intr_enable(gt, false);
>+ xelp_intr_enable(gt, false);
> return IRQ_NONE;
> }
>
>@@ -298,7 +302,7 @@ static irqreturn_t gen11_irq_handler(int irq, void *arg)
>
> gu_misc_iir = gen11_gu_misc_irq_ack(gt, master_ctl);
>
>- gen11_intr_enable(gt, false);
>+ xelp_intr_enable(gt, false);
>
> xe_display_irq_enable(xe, gu_misc_iir);
>
>@@ -342,6 +346,11 @@ static void dg1_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
> dg1_intr_enable(xe, true);
> }
>
>+/*
>+ * Top-level interrupt handler for Xe_LP+ and beyond. These platforms have
>+ * a "master tile" interrupt register which must be consulted before the
>+ * "graphics master" interrupt register.
>+ */
> static irqreturn_t dg1_irq_handler(int irq, void *arg)
> {
> struct xe_device *xe = arg;
>@@ -435,9 +444,9 @@ static void gen11_gt_irq_reset(struct xe_gt *gt)
> xe_mmio_write32(gt, GUC_SG_INTR_MASK.reg, ~0);
> }
>
>-static void gen11_irq_reset(struct xe_gt *gt)
>+static void xelp_irq_reset(struct xe_gt *gt)
> {
>- gen11_intr_disable(gt);
>+ xelp_intr_disable(gt);
>
> gen11_gt_irq_reset(gt);
>
>@@ -462,13 +471,10 @@ static void xe_irq_reset(struct xe_device *xe)
> u8 id;
>
> for_each_gt(gt, xe, id) {
>- if (GRAPHICS_VERx100(xe) >= 1210) {
>+ if (GRAPHICS_VERx100(xe) >= 1210)
> dg1_irq_reset(gt);
>- } else if (GRAPHICS_VER(xe) >= 11) {
>- gen11_irq_reset(gt);
>- } else {
>- drm_err(&xe->drm, "No interrupt reset hook");
>- }
>+ else
>+ xelp_irq_reset(gt);
> }
>
> xe_display_irq_reset(xe);
>@@ -480,10 +486,8 @@ void xe_gt_irq_postinstall(struct xe_gt *gt)
>
> if (GRAPHICS_VERx100(xe) >= 1210)
> dg1_irq_postinstall(xe, gt);
>- else if (GRAPHICS_VER(xe) >= 11)
>- gen11_irq_postinstall(xe, gt);
> else
>- drm_err(&xe->drm, "No interrupt postinstall hook");
>+ xelp_irq_postinstall(xe, gt);
>
> xe_display_irq_postinstall(xe, gt);
> }
>@@ -501,10 +505,8 @@ static irq_handler_t xe_irq_handler(struct xe_device *xe)
> {
> if (GRAPHICS_VERx100(xe) >= 1210) {
> return dg1_irq_handler;
>- } else if (GRAPHICS_VER(xe) >= 11) {
>- return gen11_irq_handler;
> } else {
>- return NULL;
>+ return xelp_irq_handler;
also a great cleanup of dead code since these else branches
unreachable.
Reviewed-by: Lucas De Marchi <lucas.demarchi at intel.com>
thanks
Lucas De Marchi
More information about the Intel-xe
mailing list