diff --git a/msm/sde/sde_kms.c b/msm/sde/sde_kms.c index 6c720ceb24..b6e43ba510 100644 --- a/msm/sde/sde_kms.c +++ b/msm/sde/sde_kms.c @@ -2689,18 +2689,21 @@ static void sde_kms_vm_res_release(struct msm_kms *kms, struct drm_atomic_state *state) { struct drm_crtc *crtc; - struct drm_crtc_state *crtc_state; + struct drm_crtc_state *new_cstate, *old_cstate; struct sde_vm_ops *vm_ops; enum sde_crtc_vm_req vm_req; struct sde_kms *sde_kms = to_sde_kms(kms); int i; - for_each_new_crtc_in_state(state, crtc, crtc_state, i) { - struct sde_crtc_state *cstate; + for_each_oldnew_crtc_in_state(state, crtc, old_cstate, new_cstate, i) { + struct sde_crtc_state *new_state; - cstate = to_sde_crtc_state(state->crtcs[0].new_state); + if (!new_cstate->active && !old_cstate->active) + continue; - vm_req = sde_crtc_get_property(cstate, CRTC_PROP_VM_REQ_STATE); + new_state = to_sde_crtc_state(new_cstate); + vm_req = sde_crtc_get_property(new_state, + CRTC_PROP_VM_REQ_STATE); if (vm_req != VM_REQ_ACQUIRE) return; }