]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/panfrost: Don't rework job IRQ enable mask in the enable path
authorAdrián Larumbe <adrian.larumbe@collabora.com>
Sun, 19 Oct 2025 14:52:12 +0000 (15:52 +0100)
committerSteven Price <steven.price@arm.com>
Mon, 20 Oct 2025 15:05:17 +0000 (16:05 +0100)
Up until now, panfrost_job_enable_interrupts() would always recalculate the
same job IRQ enablement mask, which is effectively a constant.

Replace it with a compile-time constant value, and also in another couple
places where an equivalent expression was being used.

Reviewed-by: Steven Price <steven.price@arm.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Adrián Larumbe <adrian.larumbe@collabora.com>
Link: https://lore.kernel.org/r/20251019145225.3621989-8-adrian.larumbe@collabora.com
Signed-off-by: Steven Price <steven.price@arm.com>
drivers/gpu/drm/panfrost/panfrost_device.h
drivers/gpu/drm/panfrost/panfrost_job.c

index 474b232bb38e9a2fe8e39d3b339246a54729242c..ac7147ed806b64f2009b20e0c08e968b084c4d0c 100644 (file)
@@ -26,6 +26,10 @@ struct panfrost_perfcnt;
 
 #define MAX_PM_DOMAINS 5
 
+#define ALL_JS_INT_MASK                                        \
+       (GENMASK(16 + NUM_JOB_SLOTS - 1, 16) |          \
+        GENMASK(NUM_JOB_SLOTS - 1, 0))
+
 enum panfrost_drv_comp_bits {
        PANFROST_COMP_BIT_GPU,
        PANFROST_COMP_BIT_JOB,
index d53e9db945adfbb61fe706578a447b773aeaf623..dc4228af78f917c5b8c6047b442a61fd99fa6c04 100644 (file)
@@ -432,17 +432,10 @@ static struct dma_fence *panfrost_job_run(struct drm_sched_job *sched_job)
 
 void panfrost_job_enable_interrupts(struct panfrost_device *pfdev)
 {
-       int j;
-       u32 irq_mask = 0;
-
        clear_bit(PANFROST_COMP_BIT_JOB, pfdev->is_suspended);
 
-       for (j = 0; j < NUM_JOB_SLOTS; j++) {
-               irq_mask |= MK_JS_MASK(j);
-       }
-
-       job_write(pfdev, JOB_INT_CLEAR, irq_mask);
-       job_write(pfdev, JOB_INT_MASK, irq_mask);
+       job_write(pfdev, JOB_INT_CLEAR, ALL_JS_INT_MASK);
+       job_write(pfdev, JOB_INT_MASK, ALL_JS_INT_MASK);
 }
 
 void panfrost_job_suspend_irq(struct panfrost_device *pfdev)
@@ -761,9 +754,7 @@ panfrost_reset(struct panfrost_device *pfdev,
                drm_sched_start(&pfdev->js->queue[i].sched, 0);
 
        /* Re-enable job interrupts now that everything has been restarted. */
-       job_write(pfdev, JOB_INT_MASK,
-                 GENMASK(16 + NUM_JOB_SLOTS - 1, 16) |
-                 GENMASK(NUM_JOB_SLOTS - 1, 0));
+       job_write(pfdev, JOB_INT_MASK, ALL_JS_INT_MASK);
 
        dma_fence_end_signalling(cookie);
 }
@@ -836,9 +827,7 @@ static irqreturn_t panfrost_job_irq_handler_thread(int irq, void *data)
 
        /* Enable interrupts only if we're not about to get suspended */
        if (!test_bit(PANFROST_COMP_BIT_JOB, pfdev->is_suspended))
-               job_write(pfdev, JOB_INT_MASK,
-                         GENMASK(16 + NUM_JOB_SLOTS - 1, 16) |
-                         GENMASK(NUM_JOB_SLOTS - 1, 0));
+               job_write(pfdev, JOB_INT_MASK, ALL_JS_INT_MASK);
 
        return IRQ_HANDLED;
 }