Hi Iago,
On 08/10/26 08:21, Iago Toral wrote:
Looks good to me, I have a couple of questions below:
El vie, 25-09-2026 a las 16:10 -0300, Maíra Canal escribió:
(...)
diff --git a/drivers/gpu/drm/vc4/vc4_irq.c
b/drivers/gpu/drm/vc4/vc4_irq.c
index 7877d493d80e..98a8db720091 100644
--- a/drivers/gpu/drm/vc4/vc4_irq.c
+++ b/drivers/gpu/drm/vc4/vc4_irq.c
@@ -276,7 +276,7 @@ vc4_irq_disable(struct drm_device *dev)
V3D_WRITE(V3D_INTCTL, V3D_DRIVER_IRQS);
/* Finish any interrupt handler still in flight. */
- synchronize_irq(vc4->irq);
+ disable_irq(vc4->irq);
With this change, do we still need the 2 V3D_WRITEs above this?
Yes, because, before disabling the IRQ, we must make sure that the
V3D interface is quiet.
cancel_work_sync(&vc4->overflow_mem_work);
}
@@ -284,7 +284,6 @@ vc4_irq_disable(struct drm_device *dev)
int vc4_irq_install(struct drm_device *dev, int irq)
{
struct vc4_dev *vc4 = to_vc4_dev(dev);
- int ret;
if (WARN_ON_ONCE(vc4->gen > VC4_GEN_4))
return -ENODEV;
@@ -298,19 +297,8 @@ int vc4_irq_install(struct drm_device *dev, int
irq)
init_waitqueue_head(&vc4->job_wait_queue);
INIT_WORK(&vc4->overflow_mem_work, vc4_overflow_mem_work);
- /* Clear any pending interrupts someone might have left
around
- * for us.
- */
- V3D_WRITE(V3D_INTCTL, V3D_DRIVER_IRQS);
Why this change?
vc4_irq_install() is now called before PM resume, so it can't access HW
registers and that's okay, because cleaning pending interrupts is done
during resume.
Best regards,
- Maíra
-
- ret = devm_request_irq(dev->dev, irq, vc4_irq, 0,
- dev_name(dev->dev), dev);
- if (ret)
- return ret;
-
- vc4_irq_enable(dev);
-
- return 0;
+ return devm_request_irq(dev->dev, irq, vc4_irq,
IRQF_NO_AUTOEN,
+ dev_name(dev->dev), dev);
}