diff mbox

drm/vc4: Move IRQ enable to PM path

Message ID 1514563543-32511-1-git-send-email-stschake@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Stefan Schake Dec. 29, 2017, 4:05 p.m. UTC
We were calling enable_irq on bind, where it was already enabled previously
by the IRQ helper. Additionally, dev->irq is not set correctly until after
postinstall and so was always zero here, triggering a warning in 4.15.
Fix both by moving the enable to the power management resume path, where we
know there was a previous disable invocation during suspend.

Fixes: 253696ccd613 ("drm/vc4: Account for interrupts in flight")
Signed-off-by: Stefan Schake <stschake@gmail.com>
---
I tested replacing the enable/disable dance with just synchronize_irq,
but that only made the original kernel OOPS more sporadic.

 drivers/gpu/drm/vc4/vc4_irq.c | 3 ---
 drivers/gpu/drm/vc4/vc4_v3d.c | 3 +++
 2 files changed, 3 insertions(+), 3 deletions(-)

Comments

Stefan Wahren Dec. 30, 2017, 8:03 p.m. UTC | #1
> Stefan Schake <stschake@gmail.com> hat am 29. Dezember 2017 um 17:05 geschrieben:
> 
> 
> We were calling enable_irq on bind, where it was already enabled previously
> by the IRQ helper. Additionally, dev->irq is not set correctly until after
> postinstall and so was always zero here, triggering a warning in 4.15.
> Fix both by moving the enable to the power management resume path, where we
> know there was a previous disable invocation during suspend.
> 
> Fixes: 253696ccd613 ("drm/vc4: Account for interrupts in flight")
> Signed-off-by: Stefan Schake <stschake@gmail.com>

Tested-by: Stefan Wahren <stefan.wahren@i2se.com>
Eric Anholt Jan. 4, 2018, 12:28 a.m. UTC | #2
Stefan Schake <stschake@gmail.com> writes:

> We were calling enable_irq on bind, where it was already enabled previously
> by the IRQ helper. Additionally, dev->irq is not set correctly until after
> postinstall and so was always zero here, triggering a warning in 4.15.
> Fix both by moving the enable to the power management resume path, where we
> know there was a previous disable invocation during suspend.
>
> Fixes: 253696ccd613 ("drm/vc4: Account for interrupts in flight")
> Signed-off-by: Stefan Schake <stschake@gmail.com>
> ---
> I tested replacing the enable/disable dance with just synchronize_irq,
> but that only made the original kernel OOPS more sporadic.

Reviewed and applied.  Thanks!

Somewhere on the infinite TODO list is to stop using the DRM IRQ helpers
and just install our IRQ handler on our own, which I think would have
avoided this trouble.
diff mbox

Patch

diff --git a/drivers/gpu/drm/vc4/vc4_irq.c b/drivers/gpu/drm/vc4/vc4_irq.c
index 26eddbb..3dd62d7 100644
--- a/drivers/gpu/drm/vc4/vc4_irq.c
+++ b/drivers/gpu/drm/vc4/vc4_irq.c
@@ -209,9 +209,6 @@ 
 {
 	struct vc4_dev *vc4 = to_vc4_dev(dev);
 
-	/* Undo the effects of a previous vc4_irq_uninstall. */
-	enable_irq(dev->irq);
-
 	/* Enable both the render done and out of memory interrupts. */
 	V3D_WRITE(V3D_INTENA, V3D_DRIVER_IRQS);
 
diff --git a/drivers/gpu/drm/vc4/vc4_v3d.c b/drivers/gpu/drm/vc4/vc4_v3d.c
index 622cd43..493f392b 100644
--- a/drivers/gpu/drm/vc4/vc4_v3d.c
+++ b/drivers/gpu/drm/vc4/vc4_v3d.c
@@ -327,6 +327,9 @@  static int vc4_v3d_runtime_resume(struct device *dev)
 		return ret;
 
 	vc4_v3d_init_hw(vc4->dev);
+
+	/* We disabled the IRQ as part of vc4_irq_uninstall in suspend. */
+	enable_irq(vc4->dev->irq);
 	vc4_irq_postinstall(vc4->dev);
 
 	return 0;