The GPU may still keep its state when in suspend, which breaks the
assumption that the hardware is in a clean state before the init
routine runs. Make sure to reset the GPU when coming back from
suspend, so this assumption is validated.

Signed-off-by: Lucas Stach <l.stach at pengutronix.de>
---
 drivers/gpu/drm/etnaviv/etnaviv_gpu.c | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c 
b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
index b382cf505262..433d2df0907b 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
@@ -1531,17 +1531,13 @@ static int etnaviv_gpu_hw_suspend(struct etnaviv_gpu 
*gpu)
 #ifdef CONFIG_PM
 static int etnaviv_gpu_hw_resume(struct etnaviv_gpu *gpu)
 {
-       u32 clock;
        int ret;

        ret = mutex_lock_killable(&gpu->lock);
        if (ret)
                return ret;

-       clock = VIVS_HI_CLOCK_CONTROL_DISABLE_DEBUG_REGISTERS |
-               VIVS_HI_CLOCK_CONTROL_FSCALE_VAL(0x40);
-
-       etnaviv_gpu_load_clock(gpu, clock);
+       etnaviv_hw_reset(gpu);
        etnaviv_gpu_hw_init(gpu);

        gpu->switch_context = true;
-- 
2.8.1

Reply via email to