diff options
| author | Veera Sundaram Sankaran <veeras@codeaurora.org> | 2016-05-13 13:57:24 -0700 |
|---|---|---|
| committer | Kyle Yan <kyan@codeaurora.org> | 2016-07-05 15:31:53 -0700 |
| commit | 40920ca470b94e66ab2b975a9b41d2e4d3cdd79d (patch) | |
| tree | 00e1d8ace7ed5e62b73a0333a35dfe681484e745 | |
| parent | 2bb0363c03e989ab64618f7112d76e7a828d5d6e (diff) | |
msm: mdss: force revalidate layers after resolution switch
Avoid skipping validation for all layers during ATOMIC_COMMIT
validate call after dynamic resolution switching. Though the
configs remain the same for few layers, revalidation is required
based on the new resolution as the src_split and other settings
might have changed.
Change-Id: I3f1f2e09c90e8ff1a6380e35ed9e980b5c2be46c
Signed-off-by: Veera Sundaram Sankaran <veeras@codeaurora.org>
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_layer.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp_layer.c b/drivers/video/fbdev/msm/mdss_mdp_layer.c index 65b3b9739be6..17cbdd44755a 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_layer.c +++ b/drivers/video/fbdev/msm/mdss_mdp_layer.c @@ -1836,7 +1836,7 @@ static int __validate_layers(struct msm_fb_data_type *mfd, struct mdss_mdp_mixer *mixer = NULL; struct mdp_input_layer *layer, *prev_layer, *layer_list; struct mdss_mdp_validate_info_t *validate_info_list = NULL; - bool is_single_layer = false; + bool is_single_layer = false, force_validate; enum layer_pipe_q pipe_q_type; enum layer_zorder_used zorder_used[MDSS_MDP_MAX_STAGE] = {0}; enum mdss_mdp_pipe_rect rect_num; @@ -1895,6 +1895,15 @@ static int __validate_layers(struct msm_fb_data_type *mfd, rec_ndx[rect_num] |= layer_list[i].pipe_ndx; } + /* + * Force all layers to go through full validation after + * dynamic resolution switch, immaterial of the configs in + * the layer. + */ + mutex_lock(&mfd->switch_lock); + force_validate = (mfd->switch_state != MDSS_MDP_NO_UPDATE_REQUESTED); + mutex_unlock(&mfd->switch_lock); + for (i = 0; i < layer_count; i++) { enum layer_zorder_used z = LAYER_ZORDER_NONE; @@ -1980,8 +1989,9 @@ static int __validate_layers(struct msm_fb_data_type *mfd, * are same. validation can be skipped if only buffer handle * is changed. */ - pipe = __find_layer_in_validate_q(&validate_info_list[i], - mdp5_data); + pipe = (force_validate) ? NULL : + __find_layer_in_validate_q( + &validate_info_list[i], mdp5_data); if (pipe) { if (mixer_mux == MDSS_MDP_MIXER_MUX_RIGHT) right_plist[right_cnt++] = pipe; |
