Loading msm/sde/sde_crtc.c +19 −4 Original line number Diff line number Diff line Loading @@ -1546,14 +1546,11 @@ static void _sde_crtc_blend_setup(struct drm_crtc *crtc, } for (i = 0; i < sde_crtc->num_mixers; i++) { if (!mixer[i].hw_lm || !mixer[i].hw_ctl) { if (!mixer[i].hw_lm) { SDE_ERROR("invalid lm or ctl assigned to mixer\n"); return; } mixer[i].mixer_op_mode = 0; if (mixer[i].hw_ctl->ops.clear_all_blendstages) mixer[i].hw_ctl->ops.clear_all_blendstages( mixer[i].hw_ctl); /* clear dim_layer settings */ lm = mixer[i].hw_lm; Loading Loading @@ -3078,6 +3075,22 @@ static void _sde_crtc_setup_lm_bounds(struct drm_crtc *crtc, drm_mode_debug_printmodeline(adj_mode); } static void _sde_crtc_clear_all_blend_stages(struct sde_crtc *sde_crtc) { struct sde_crtc_mixer mixer; /* * Use mixer[0] to get hw_ctl which will use ops to clear * all blendstages. Clear all blendstages will iterate through * all mixers. */ if (sde_crtc->num_mixers) { mixer = sde_crtc->mixers[0]; if (mixer.hw_ctl && mixer.hw_ctl->ops.clear_all_blendstages) mixer.hw_ctl->ops.clear_all_blendstages(mixer.hw_ctl); } } static void sde_crtc_atomic_begin(struct drm_crtc *crtc, struct drm_crtc_state *old_state) { Loading Loading @@ -3119,6 +3132,7 @@ static void sde_crtc_atomic_begin(struct drm_crtc *crtc, _sde_crtc_setup_mixers(crtc); _sde_crtc_setup_is_ppsplit(crtc->state); _sde_crtc_setup_lm_bounds(crtc, crtc->state); _sde_crtc_clear_all_blend_stages(sde_crtc); } list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { Loading Loading @@ -3999,6 +4013,7 @@ static void sde_crtc_disable(struct drm_crtc *crtc) ktime_get()); } _sde_crtc_clear_all_blend_stages(sde_crtc); memset(sde_crtc->mixers, 0, sizeof(sde_crtc->mixers)); sde_crtc->num_mixers = 0; sde_crtc->mixers_swapped = false; Loading Loading
msm/sde/sde_crtc.c +19 −4 Original line number Diff line number Diff line Loading @@ -1546,14 +1546,11 @@ static void _sde_crtc_blend_setup(struct drm_crtc *crtc, } for (i = 0; i < sde_crtc->num_mixers; i++) { if (!mixer[i].hw_lm || !mixer[i].hw_ctl) { if (!mixer[i].hw_lm) { SDE_ERROR("invalid lm or ctl assigned to mixer\n"); return; } mixer[i].mixer_op_mode = 0; if (mixer[i].hw_ctl->ops.clear_all_blendstages) mixer[i].hw_ctl->ops.clear_all_blendstages( mixer[i].hw_ctl); /* clear dim_layer settings */ lm = mixer[i].hw_lm; Loading Loading @@ -3078,6 +3075,22 @@ static void _sde_crtc_setup_lm_bounds(struct drm_crtc *crtc, drm_mode_debug_printmodeline(adj_mode); } static void _sde_crtc_clear_all_blend_stages(struct sde_crtc *sde_crtc) { struct sde_crtc_mixer mixer; /* * Use mixer[0] to get hw_ctl which will use ops to clear * all blendstages. Clear all blendstages will iterate through * all mixers. */ if (sde_crtc->num_mixers) { mixer = sde_crtc->mixers[0]; if (mixer.hw_ctl && mixer.hw_ctl->ops.clear_all_blendstages) mixer.hw_ctl->ops.clear_all_blendstages(mixer.hw_ctl); } } static void sde_crtc_atomic_begin(struct drm_crtc *crtc, struct drm_crtc_state *old_state) { Loading Loading @@ -3119,6 +3132,7 @@ static void sde_crtc_atomic_begin(struct drm_crtc *crtc, _sde_crtc_setup_mixers(crtc); _sde_crtc_setup_is_ppsplit(crtc->state); _sde_crtc_setup_lm_bounds(crtc, crtc->state); _sde_crtc_clear_all_blend_stages(sde_crtc); } list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { Loading Loading @@ -3999,6 +4013,7 @@ static void sde_crtc_disable(struct drm_crtc *crtc) ktime_get()); } _sde_crtc_clear_all_blend_stages(sde_crtc); memset(sde_crtc->mixers, 0, sizeof(sde_crtc->mixers)); sde_crtc->num_mixers = 0; sde_crtc->mixers_swapped = false; Loading