disp: msm: sde: detach dsc/vdc encoder blocks properly during modeswitch

In the current code if there is a switch from DSC to non-DSC
mode, all the DSC blocks attached to the sde_encoder are not
cleaned up properly. Due to this, during virt disable these
DSC blocks are disabled and flushed resulting in underruns
on other ctl paths which might be using them. This change
properly cleans up all the dsc/vdc attached to the sde
encoder to avoid such issues.

Change-Id: Ie644701cbda6b4d056bc7ef30300be96096c5214
Signed-off-by: Yashwanth <quic_yvulapu@quicinc.com>
Signed-off-by: Narendra Muppalla <quic_nmuppall@quicinc.com>
This commit is contained in:
Yashwanth
2022-04-19 14:26:24 +05:30
committed by Gerrit - the friendly Code Review server
부모 9fbbeb65ba
커밋 a14aea9aac

파일 보기

@@ -2491,7 +2491,7 @@ static void _sde_encoder_virt_populate_hw_res(struct drm_encoder *drm_enc)
for (i = 0; i < MAX_CHANNELS_PER_ENC; i++) {
sde_enc->hw_dsc[i] = NULL;
if (!sde_rm_get_hw(&sde_kms->rm, &dsc_iter))
break;
continue;
sde_enc->hw_dsc[i] = to_sde_hw_dsc(dsc_iter.hw);
}
@@ -2499,7 +2499,7 @@ static void _sde_encoder_virt_populate_hw_res(struct drm_encoder *drm_enc)
for (i = 0; i < MAX_CHANNELS_PER_ENC; i++) {
sde_enc->hw_vdc[i] = NULL;
if (!sde_rm_get_hw(&sde_kms->rm, &vdc_iter))
break;
continue;
sde_enc->hw_vdc[i] = to_sde_hw_vdc(vdc_iter.hw);
}