From cd54066dfb6d1b38afd5bcf45bd9856c2e8175b1 Mon Sep 17 00:00:00 2001 From: Sandy Huang Date: Mon, 23 Apr 2018 15:46:11 +0800 Subject: [PATCH] drm/rockchip: vop: ignore crtc close when crtc is disabled when in suspend state, the crtc clock is disabled, if we do reboot at this time, the following call will lead to system panic: ->rockchip_drm_platform_shutdown() ->vop_crtc_close() Change-Id: I1989d0da4d033d608d59587385da288789d9c2c1 Signed-off-by: Sandy Huang --- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index a4a00ebbce12..99b62bafb238 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -1392,6 +1392,7 @@ static void vop_crtc_disable(struct drm_crtc *crtc) disable_irq(vop->irq); vop->is_enabled = false; + smp_wmb(); if (vop->is_iommu_enabled) { /* * vop standby complete, so iommu detach is safe. @@ -2328,7 +2329,14 @@ static void vop_crtc_close(struct drm_crtc *crtc) if (!crtc) return; vop = to_vop(crtc); + mutex_lock(&vop->vop_lock); + if (!vop->is_enabled) { + mutex_unlock(&vop->vop_lock); + return; + } + vop_disable_all_planes(vop); + mutex_unlock(&vop->vop_lock); } static const struct rockchip_crtc_funcs private_crtc_funcs = {