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);
  }

Reply via email to