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);
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)
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 */
unmask_and_enable(gt, GU_MISC_IRQ_OFFSET, GU_MISC_GSE);
- gen11_intr_enable(gt, true);
+ xelp_intr_enable(gt, true);
}
static u32
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 */
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;
}
gu_misc_iir = gen11_gu_misc_irq_ack(gt, master_ctl);
- gen11_intr_enable(gt, false);
+ xelp_intr_enable(gt, false);
return IRQ_HANDLED;
}
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;
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);
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);
}
}
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);
}
static void xe_irq_postinstall(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;
}
}