drm/rockchip: vop: Add timeout for DSP hold
authorBrian Norris <briannorris@chromium.org>
Fri, 8 Oct 2021 22:31:04 +0000 (15:31 -0700)
committerHeiko Stuebner <heiko@sntech.de>
Sun, 17 Oct 2021 21:47:18 +0000 (23:47 +0200)
If hardware is malfunctioning (e.g., misconfigured clocks?), we can get
stuck here forever, holding various DRM locks and eventually locking up
the entire system. It's better to complain loudly and move on, than to
lock up the system.

In local tests, this operation takes less than 20ms.

Signed-off-by: Brian Norris <briannorris@chromium.org>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20211008153102.1.I2a5dbaaada35023a9703a8db7af501528fbb6e31@changeid
drivers/gpu/drm/rockchip/rockchip_drm_vop.c

index ba9e14da41b4811a581c76e211a5c5b99f9e32d4..b28ea5d6a3e26b7aeb07e02d8fb3bb0f6ed856c4 100644 (file)
@@ -726,7 +726,9 @@ static void vop_crtc_atomic_disable(struct drm_crtc *crtc,
 
        spin_unlock(&vop->reg_lock);
 
-       wait_for_completion(&vop->dsp_hold_completion);
+       if (!wait_for_completion_timeout(&vop->dsp_hold_completion,
+                                        msecs_to_jiffies(200)))
+               WARN(1, "%s: timed out waiting for DSP hold", crtc->name);
 
        vop_dsp_hold_valid_irq_disable(vop);