From fc4f9d2685e38e2be366ab143273ce7d1fb692d2 Mon Sep 17 00:00:00 2001 From: Sandy Huang Date: Tue, 5 Mar 2024 20:31:48 +0800 Subject: [PATCH] drm/rockchip: vop2: make sure dsc pd off take effect after close dsc pd, the following function will set vop enter standby immediately, this will lead to dsc pd close failed, so we use vop2_power_domain_put_sync() instead of vop2_power_domain_put(). Signed-off-by: Sandy Huang Change-Id: I9120e46ec2047e8358b28a3f153b54b4825a5e60 --- drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index bbf50ff4f5d2..0ab8bdf1a9c7 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -1972,6 +1972,12 @@ static void vop2_power_domain_put(struct vop2_power_domain *pd) vop2_power_domain_put(pd->parent); } +static void vop2_power_domain_put_sync(struct vop2_power_domain *pd) +{ + vop2_power_domain_put(pd); + vop2_wait_power_domain_off(pd); +} + /* * Called if the pd ref_count reach 0 after 2.5 * seconds. @@ -4997,12 +5003,14 @@ static void vop2_crtc_atomic_disable(struct drm_crtc *crtc, if (dual_channel) { vop2_power_domain_put(vop2->dscs[0].pd); vop2_power_domain_put(vop2->dscs[1].pd); + vop2_wait_power_domain_off(vop2->dscs[0].pd); + vop2_wait_power_domain_off(vop2->dscs[1].pd); vop2->dscs[0].pd->vp_mask = 0; vop2->dscs[1].pd->vp_mask = 0; vop2->dscs[0].attach_vp_id = -1; vop2->dscs[1].attach_vp_id = -1; } else { - vop2_power_domain_put(vop2->dscs[vcstate->dsc_id].pd); + vop2_power_domain_put_sync(vop2->dscs[vcstate->dsc_id].pd); vop2->dscs[vcstate->dsc_id].pd->vp_mask = 0; vop2->dscs[vcstate->dsc_id].attach_vp_id = -1; }