diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c index 6e4da02f5619..b2a6be1c5385 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c @@ -199,9 +199,13 @@ static int rockchip_drm_aclk_adjust(struct drm_device *dev, funcs = priv->crtc_funcs[drm_crtc_index(crtc)]; if (funcs && funcs->set_aclk) { + struct drm_display_mode *mode = &crtc->state->adjusted_mode; + int linedur_ns = div_u64((u64) mode->crtc_htotal * 1000000, mode->crtc_clock); + if (vop_bw_info->plane_num_4k || crtc_num > 1 || crtc->state->adjusted_mode.crtc_hdisplay > 2560 || - crtc->state->adjusted_mode.crtc_vdisplay > 2560) { + crtc->state->adjusted_mode.crtc_vdisplay > 2560 || + linedur_ns < 7500) {/* 4kp60 linedur_ns roughly equal to 7500 ns */ funcs->set_aclk(crtc, ROCKCHIP_VOP_ACLK_ADVANCED_MODE, vop_bw_info); priv->aclk_adjust_frame_num = 2; } else {