Commit fc237ec8 authored by Adrián Larumbe's avatar Adrián Larumbe Committed by Steven Price
Browse files

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: default avatarSteven Price <steven.price@arm.com>
Reviewed-by: default avatarBoris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: default avatarAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: default avatarAdrián Larumbe <adrian.larumbe@collabora.com>
Link: https://lore.kernel.org/r/20251019145225.3621989-8-adrian.larumbe@collabora.com


Signed-off-by: default avatarSteven Price <steven.price@arm.com>
parent 4da352cf
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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,
+4 −15
Original line number Diff line number Diff line
@@ -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;
}