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
parent 9fbbeb65ba
commit a14aea9aac

View File

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