disp: msm: sde: reset dim layer dirty prop during idle pc
During idle power collapse, dim layer dirty flags are stored in sde_crtc_state which might be invalid if state swap occurs. This change adds revalidate mask in sde_crtc structure to revalidate after coming out of idle power collapse. Change-Id: Ie2f34a794896a3f8e729ef7d1f3ae35340123257 Signed-off-by: Yashwanth <yvulapu@codeaurora.org> Signed-off-by: Samantha Tran <samtran@codeaurora.org>
Cette révision appartient à :
@@ -1796,6 +1796,11 @@ static void _sde_crtc_blend_setup(struct drm_crtc *crtc,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (test_bit(SDE_CRTC_DIRTY_DIM_LAYERS, &sde_crtc->revalidate_mask)) {
|
||||||
|
set_bit(SDE_CRTC_DIRTY_DIM_LAYERS, sde_crtc_state->dirty);
|
||||||
|
clear_bit(SDE_CRTC_DIRTY_DIM_LAYERS, &sde_crtc->revalidate_mask);
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < sde_crtc->num_mixers; i++) {
|
for (i = 0; i < sde_crtc->num_mixers; i++) {
|
||||||
if (!mixer[i].hw_lm) {
|
if (!mixer[i].hw_lm) {
|
||||||
SDE_ERROR("invalid lm or ctl assigned to mixer\n");
|
SDE_ERROR("invalid lm or ctl assigned to mixer\n");
|
||||||
@@ -4245,6 +4250,7 @@ void sde_crtc_reset_sw_state(struct drm_crtc *crtc)
|
|||||||
{
|
{
|
||||||
struct sde_crtc_state *cstate = to_sde_crtc_state(crtc->state);
|
struct sde_crtc_state *cstate = to_sde_crtc_state(crtc->state);
|
||||||
struct drm_plane *plane;
|
struct drm_plane *plane;
|
||||||
|
struct sde_crtc *sde_crtc = to_sde_crtc(crtc);
|
||||||
|
|
||||||
/* mark planes, mixers, and other blocks dirty for next update */
|
/* mark planes, mixers, and other blocks dirty for next update */
|
||||||
drm_atomic_crtc_for_each_plane(plane, crtc)
|
drm_atomic_crtc_for_each_plane(plane, crtc)
|
||||||
@@ -4254,7 +4260,7 @@ void sde_crtc_reset_sw_state(struct drm_crtc *crtc)
|
|||||||
sde_crtc_clear_cached_mixer_cfg(crtc);
|
sde_crtc_clear_cached_mixer_cfg(crtc);
|
||||||
|
|
||||||
/* mark other properties which need to be dirty for next update */
|
/* mark other properties which need to be dirty for next update */
|
||||||
set_bit(SDE_CRTC_DIRTY_DIM_LAYERS, cstate->dirty);
|
set_bit(SDE_CRTC_DIRTY_DIM_LAYERS, &sde_crtc->revalidate_mask);
|
||||||
if (cstate->num_ds_enabled)
|
if (cstate->num_ds_enabled)
|
||||||
set_bit(SDE_CRTC_DIRTY_DEST_SCALER, cstate->dirty);
|
set_bit(SDE_CRTC_DIRTY_DEST_SCALER, cstate->dirty);
|
||||||
}
|
}
|
||||||
|
@@ -282,6 +282,7 @@ struct sde_frame_data {
|
|||||||
* @cp_feature_list : list of color processing features supported on a crtc
|
* @cp_feature_list : list of color processing features supported on a crtc
|
||||||
* @cp_active_list : list of color processing features are active
|
* @cp_active_list : list of color processing features are active
|
||||||
* @cp_dirty_list : list of color processing features are dirty
|
* @cp_dirty_list : list of color processing features are dirty
|
||||||
|
* @revalidate_mask : stores dirty flags to revalidate after idlepc
|
||||||
* @ad_dirty : list containing ad properties that are dirty
|
* @ad_dirty : list containing ad properties that are dirty
|
||||||
* @ad_active : list containing ad properties that are active
|
* @ad_active : list containing ad properties that are active
|
||||||
* @crtc_lock : crtc lock around create, destroy and access.
|
* @crtc_lock : crtc lock around create, destroy and access.
|
||||||
@@ -382,6 +383,7 @@ struct sde_crtc {
|
|||||||
spinlock_t spin_lock;
|
spinlock_t spin_lock;
|
||||||
spinlock_t fevent_spin_lock;
|
spinlock_t fevent_spin_lock;
|
||||||
bool kickoff_in_progress;
|
bool kickoff_in_progress;
|
||||||
|
unsigned long revalidate_mask;
|
||||||
|
|
||||||
/* for handling internal event thread */
|
/* for handling internal event thread */
|
||||||
struct sde_crtc_event event_cache[SDE_CRTC_MAX_EVENT_COUNT];
|
struct sde_crtc_event event_cache[SDE_CRTC_MAX_EVENT_COUNT];
|
||||||
|
Référencer dans un nouveau ticket
Bloquer un utilisateur