Commit 4157849c authored by Ilia Levi's avatar Ilia Levi Committed by Michal Wajdeczko
Browse files

drm/xe: move memirq out of VF



Up until now only VF used Memory Based Interrupts (memirq).
Moving it out of VF to cater for other usages, specifically MSI-X.

Signed-off-by: default avatarIlia Levi <ilia.levi@intel.com>
Reviewed-by: default avatarMichal Wajdeczko <michal.wajdeczko@intel.com>
Signed-off-by: default avatarMichal Wajdeczko <michal.wajdeczko@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240918053942.1331811-4-illevi@habana.ai
parent 6fa86e7a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -676,7 +676,7 @@ int xe_device_probe(struct xe_device *xe)
		err = xe_ggtt_init_early(tile->mem.ggtt);
		if (err)
			return err;
		err = xe_memirq_init(&tile->sriov.vf.memirq);
		err = xe_memirq_init(&tile->memirq);
		if (err)
			return err;
	}
+3 −3
Original line number Diff line number Diff line
@@ -226,14 +226,14 @@ struct xe_tile {
			struct xe_lmtt lmtt;
		} pf;
		struct {
			/** @sriov.vf.memirq: Memory Based Interrupts. */
			struct xe_memirq memirq;

			/** @sriov.vf.ggtt_balloon: GGTT regions excluded from use. */
			struct xe_ggtt_node *ggtt_balloon[2];
		} vf;
	} sriov;

	/** @memirq: Memory Based Interrupts. */
	struct xe_memirq memirq;

	/** @pcode: tile's PCODE */
	struct {
		/** @pcode.lock: protecting tile's PCODE mailbox data */
+1 −1
Original line number Diff line number Diff line
@@ -866,7 +866,7 @@ int xe_guc_enable_communication(struct xe_guc *guc)
		struct xe_gt *gt = guc_to_gt(guc);
		struct xe_tile *tile = gt_to_tile(gt);

		err = xe_memirq_init_guc(&tile->sriov.vf.memirq, guc);
		err = xe_memirq_init_guc(&tile->memirq, guc);
		if (err)
			return err;
	} else {
+3 −3
Original line number Diff line number Diff line
@@ -567,7 +567,7 @@ static void vf_irq_reset(struct xe_device *xe)

	for_each_tile(tile, xe, id) {
		if (xe_device_has_memirq(xe))
			xe_memirq_reset(&tile->sriov.vf.memirq);
			xe_memirq_reset(&tile->memirq);
		else
			gt_irq_reset(tile);
	}
@@ -610,7 +610,7 @@ static void vf_irq_postinstall(struct xe_device *xe)

	for_each_tile(tile, xe, id)
		if (xe_device_has_memirq(xe))
			xe_memirq_postinstall(&tile->sriov.vf.memirq);
			xe_memirq_postinstall(&tile->memirq);

	if (GRAPHICS_VERx100(xe) < 1210)
		xelp_intr_enable(xe, true);
@@ -653,7 +653,7 @@ static irqreturn_t vf_mem_irq_handler(int irq, void *arg)
	spin_unlock(&xe->irq.lock);

	for_each_tile(tile, xe, id)
		xe_memirq_handler(&tile->sriov.vf.memirq);
		xe_memirq_handler(&tile->memirq);

	return IRQ_HANDLED;
}
+1 −1
Original line number Diff line number Diff line
@@ -599,7 +599,7 @@ static void set_context_control(u32 *regs, struct xe_hw_engine *hwe)

static void set_memory_based_intr(u32 *regs, struct xe_hw_engine *hwe)
{
	struct xe_memirq *memirq = &gt_to_tile(hwe->gt)->sriov.vf.memirq;
	struct xe_memirq *memirq = &gt_to_tile(hwe->gt)->memirq;
	struct xe_device *xe = gt_to_xe(hwe->gt);

	if (!xe_device_uses_memirq(xe))
Loading