drm/etnaviv: Ignore MC when checking runtime suspend idleness
authorGuido Günther <agx@sigxcpu.org>
Mon, 2 Mar 2020 19:13:35 +0000 (20:13 +0100)
committerLucas Stach <l.stach@pengutronix.de>
Tue, 3 Mar 2020 09:58:57 +0000 (10:58 +0100)
Without that runtime suspend is often blocked due to
etnaviv_gpu_rpm_suspend() returning -EBUSY since the FE seems to trigger
the MC in its idle loop.

Ignoring the MC bit makes the GPU suspend as expected. This was tested
on GC7000.

Signed-off-by: Guido Günther <agx@sigxcpu.org>
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
drivers/gpu/drm/etnaviv/etnaviv_gpu.c

index 52473be..26fe340 100644 (file)
@@ -1835,8 +1835,9 @@ static int etnaviv_gpu_rpm_suspend(struct device *dev)
        if (atomic_read(&gpu->sched.hw_rq_count))
                return -EBUSY;
 
-       /* Check whether the hardware (except FE) is idle */
-       mask = gpu->idle_mask & ~VIVS_HI_IDLE_STATE_FE;
+       /* Check whether the hardware (except FE and MC) is idle */
+       mask = gpu->idle_mask & ~(VIVS_HI_IDLE_STATE_FE |
+                                 VIVS_HI_IDLE_STATE_MC);
        idle = gpu_read(gpu, VIVS_HI_IDLE_STATE) & mask;
        if (idle != mask)
                return -EBUSY;