[Intel-xe] [PATCH 1/1] fixup! drm/xe/gsc: add gsc device support

Daniele Ceraolo Spurio daniele.ceraolospurio at intel.com
Mon Oct 23 21:53:29 UTC 2023


2 fixes:

1) The gsc_mask variable is not set in all branches, but it is always
   evaluated in an if condition, so we need to initialize it to a valid
   value

2) On MTL+ the GSC interrupts come from the engine, so we can't
   unconditionally call the handler for the GSCFI interface and we
   instead need to check if we're on a platform that does have a GSCFI.

While at it, move the GSCFI irq function call to where the other
non-engine OTHER_CLASS interrupts are handled.

Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi at intel.com>
Cc: Vitaly Lubart <vitaly.lubart at intel.com>
Cc: Alexander Usyskin <alexander.usyskin at intel.com>
---
 drivers/gpu/drm/xe/xe_irq.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
index 61350ed32c61..21d5273d7e61 100644
--- a/drivers/gpu/drm/xe/xe_irq.c
+++ b/drivers/gpu/drm/xe/xe_irq.c
@@ -142,7 +142,7 @@ void xe_irq_enable_hwe(struct xe_gt *gt)
 	struct xe_device *xe = gt_to_xe(gt);
 	u32 ccs_mask, bcs_mask;
 	u32 irqs, dmask, smask;
-	u32 gsc_mask;
+	u32 gsc_mask = 0;
 
 	if (xe_device_uc_enabled(xe)) {
 		irqs = GT_RENDER_USER_INTERRUPT |
@@ -303,11 +303,6 @@ static void gt_irq_handler(struct xe_tile *tile,
 			instance = INTR_ENGINE_INSTANCE(identity[bit]);
 			intr_vec = INTR_ENGINE_INTR(identity[bit]);
 
-			if (class == XE_ENGINE_CLASS_OTHER && instance == OTHER_GSC_INSTANCE) {
-				xe_heci_gsc_irq_handler(xe, intr_vec);
-				continue;
-			}
-
 			engine_gt = pick_engine_gt(tile, class, instance);
 
 			hwe = xe_gt_hw_engine(engine_gt, class, instance, false);
@@ -317,7 +312,11 @@ static void gt_irq_handler(struct xe_tile *tile,
 			}
 
 			if (class == XE_ENGINE_CLASS_OTHER) {
-				gt_other_irq_handler(engine_gt, instance, intr_vec);
+				/* HECI GSCFI interrupts come from outside of GT */
+				if (HAS_HECI_GSCFI(xe) && instance == OTHER_GSC_INSTANCE)
+					xe_heci_gsc_irq_handler(xe, intr_vec);
+				else
+					gt_other_irq_handler(engine_gt, instance, intr_vec);
 				continue;
 			}
 		}
-- 
2.41.0



More information about the Intel-xe mailing list