mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 06:04:44 +01:00
drm/panfrost: Don't rework job IRQ enable mask in the enable path
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>
This commit is contained in:
parent
4da352cf8f
commit
fc237ec882
2 changed files with 8 additions and 15 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue