We can't call panthor_pwr_irq_suspend() if the device is suspended,
or this leads to a hang when the IOMEM region is accessed while the
clks are disabled. Do what other sub-components do and conditionally
call panthor_pwr_irq_suspend() if we know the PWR regbank block is
accessible.

Fixes: c27787f2b77f ("drm/panthor: Introduce panthor_pwr API and power control 
framework")
Signed-off-by: Boris Brezillon <[email protected]>
---
 drivers/gpu/drm/panthor/panthor_pwr.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/panthor/panthor_pwr.c 
b/drivers/gpu/drm/panthor/panthor_pwr.c
index 7c7f424a1436..090362bd700b 100644
--- a/drivers/gpu/drm/panthor/panthor_pwr.c
+++ b/drivers/gpu/drm/panthor/panthor_pwr.c
@@ -453,7 +453,8 @@ void panthor_pwr_unplug(struct panthor_device *ptdev)
                return;
 
        /* Make sure the IRQ handler is not running after that point. */
-       panthor_pwr_irq_suspend(&ptdev->pwr->irq);
+       if (!IS_ENABLED(CONFIG_PM) || pm_runtime_active(ptdev->base.dev))
+               panthor_pwr_irq_suspend(&ptdev->pwr->irq);
 
        /* Wake-up all waiters. */
        spin_lock_irqsave(&ptdev->pwr->reqs_lock, flags);

-- 
2.54.0

Reply via email to