disp: msm: sde: fix crtc_state iteration during vm release

Iterate over the crtc old/new state and decide which ones
to process by checking the active state of both during
the vm release in error cases.

Change-Id: Iab20e89792c53fb72e0c00f1fa5091616c7afbf3
Signed-off-by: Veera Sundaram Sankaran <veeras@codeaurora.org>
This commit is contained in:
Veera Sundaram Sankaran
2020-10-20 11:07:05 -07:00
부모 26b6ae2d21
커밋 303c324c43

파일 보기

@@ -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;
}