OSDN Git Service

msm: mdss: force revalidate layers after resolution switch
authorVeera Sundaram Sankaran <veeras@codeaurora.org>
Fri, 13 May 2016 20:57:24 +0000 (13:57 -0700)
committerKyle Yan <kyan@codeaurora.org>
Tue, 5 Jul 2016 22:31:53 +0000 (15:31 -0700)
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>
drivers/video/fbdev/msm/mdss_mdp_layer.c

index 65b3b97..17cbdd4 100644 (file)
@@ -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;