drm/xe/irq: Move ASLE backlight interrupt logic
authorMatt Roper <matthew.d.roper@intel.com>
Thu, 1 Jun 2023 21:52:35 +0000 (14:52 -0700)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Tue, 19 Dec 2023 23:34:19 +0000 (18:34 -0500)
Our only use of GUnit interrupts is to handle ASLE backlight operations
that are reported as GUnit GSE interrupts.  Move the enable/disable of
these interrupts to a more sensible place, in the same area where we
expect display interrupt code to be added by future patches.

Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Link: https://lore.kernel.org/r/20230601215244.678611-23-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/xe/xe_irq.c

index 4d3ea3b66a7b678cfdb9fd8f09d69135417ab5a6..601a54c60aef74a0f65f733ad818069678a4ee9d 100644 (file)
@@ -186,8 +186,6 @@ static void xelp_irq_postinstall(struct xe_device *xe, struct xe_tile *tile)
 
        gt_irq_postinstall(tile);
 
-       unmask_and_enable(tile, GU_MISC_IRQ_OFFSET, GU_MISC_GSE);
-
        xelp_intr_enable(xe, true);
 }
 
@@ -367,8 +365,6 @@ static void dg1_irq_postinstall(struct xe_device *xe, struct xe_tile *tile)
 {
        gt_irq_postinstall(tile);
 
-       unmask_and_enable(tile, GU_MISC_IRQ_OFFSET, GU_MISC_GSE);
-
        if (tile->id == 0)
                dg1_intr_enable(xe, true);
 }
@@ -478,7 +474,6 @@ static void xelp_irq_reset(struct xe_tile *tile)
 
        gt_irq_reset(tile);
 
-       mask_and_disable(tile, GU_MISC_IRQ_OFFSET);
        mask_and_disable(tile, PCU_IRQ_OFFSET);
 }
 
@@ -489,7 +484,6 @@ static void dg1_irq_reset(struct xe_tile *tile)
 
        gt_irq_reset(tile);
 
-       mask_and_disable(tile, GU_MISC_IRQ_OFFSET);
        mask_and_disable(tile, PCU_IRQ_OFFSET);
 }
 
@@ -504,6 +498,9 @@ static void xe_irq_reset(struct xe_device *xe)
                else
                        xelp_irq_reset(tile);
        }
+
+       tile = xe_device_get_root_tile(xe);
+       mask_and_disable(tile, GU_MISC_IRQ_OFFSET);
 }
 
 void xe_gt_irq_postinstall(struct xe_tile *tile)
@@ -523,6 +520,13 @@ static void xe_irq_postinstall(struct xe_device *xe)
 
        for_each_tile(tile, xe, id)
                xe_gt_irq_postinstall(tile);
+
+       /*
+        * ASLE backlight operations are reported via GUnit GSE interrupts
+        * on the root tile.
+        */
+       unmask_and_enable(xe_device_get_root_tile(xe),
+                         GU_MISC_IRQ_OFFSET, GU_MISC_GSE);
 }
 
 static irq_handler_t xe_irq_handler(struct xe_device *xe)