fbdev: dpu: shadow register update request method is modified.
authorhwangjae lee <hj-yo.lee@samsung.com>
Thu, 21 Jun 2018 06:41:01 +0000 (15:41 +0900)
committerhwangjae lee <hj-yo.lee@samsung.com>
Thu, 21 Jun 2018 07:08:24 +0000 (16:08 +0900)
In DPU common driver, shadow register update request was configured in
order for the used winodw only. However, in this case, if vsync occurs
during windows setup, only shadow register update request windows can be
shadow update.
 So, shadow register update request method is modified to make shdadow
update requests for all windows at once.

Change-Id: I81b2b2aaddd7191df7c33feaa4b7a99dbcbf5fe5
Signed-off-by: hwangjae lee <hj-yo.lee@samsung.com>
drivers/video/fbdev/exynos/dpu20/cursor.c
drivers/video/fbdev/exynos/dpu20/decon_core.c
drivers/video/fbdev/exynos/dpu20/decon_dsi.c

index 0da229dba10768dfed06113f29fa730ecaccc2a6..b940b5b2dfe62b58412bfd49ca7382bfd0e9bd9d 100644 (file)
@@ -73,7 +73,7 @@ static int decon_set_cursor_dpp_config(struct decon_device *decon,
                decon_err("failed to config (WIN%d : DPP%d)\n",
                                                i, win->dpp_id);
                regs->win_regs[i].wincon &= (~WIN_EN_F(i));
-               decon_reg_win_enable_and_update(decon->id, i, false);
+               decon_reg_set_win_enable(decon->id, i, false);
                if (regs->num_of_window != 0)
                        regs->num_of_window--;
 
@@ -232,6 +232,8 @@ int decon_set_cursor_win_config(struct decon_device *decon, int x, int y)
                                &regs->win_regs[regs->cursor_win],
                                regs->win_regs[regs->cursor_win].winmap_state);
 
+       decon_reg_all_win_shadow_update_req(decon->id);
+
        if (psr.trig_mode == DECON_HW_TRIG)
                decon_reg_set_trigger(decon->id, &psr, DECON_TRIG_ENABLE);
 
index 7754858466f47f756a7b138ff16bbf8fa6ccf491..55bf1794874ae31116b694a242cfad19c321e5e3 100644 (file)
@@ -372,6 +372,7 @@ static void decon_set_black_window(struct decon_device *decon)
                        win_regs.offset_y);
        decon_reg_set_window_control(decon->id, decon->dt.dft_win,
                        &win_regs, true);
+       decon_reg_all_win_shadow_update_req(decon->id);
 }
 
 int decon_tui_protection(bool tui_en)
@@ -402,7 +403,8 @@ int decon_tui_protection(bool tui_en)
                /* after stopping decon, we can now update registers
                 * without considering per frame condition (8895) */
                for (win_idx = 0; win_idx < decon->dt.max_win; win_idx++)
-                       decon_reg_win_enable_and_update(decon->id, win_idx, false);
+                       decon_reg_set_win_enable(decon->id, win_idx, false);
+               decon_reg_all_win_shadow_update_req(decon->id);
                decon_reg_update_req_global(decon->id);
                decon_wait_for_vsync(decon, VSYNC_TIMEOUT_MSEC);
 
@@ -1595,7 +1597,7 @@ static int decon_set_dpp_config(struct decon_device *decon,
                        decon_err("failed to config (WIN%d : DPP%d)\n",
                                        i, win->dpp_id);
                        regs->win_regs[i].wincon &= (~WIN_EN_F(i));
-                       decon_reg_win_enable_and_update(decon->id, i, false);
+                       decon_reg_set_win_enable(decon->id, i, false);
                        if (regs->num_of_window != 0)
                                regs->num_of_window--;
                        clear_bit(win->dpp_id, &decon->cur_using_dpp);
@@ -1792,6 +1794,7 @@ static int __decon_update_regs(struct decon_device *decon, struct decon_reg_data
        decon_set_protected_content(decon, regs);
 #endif
 
+       decon_reg_all_win_shadow_update_req(decon->id);
        decon_to_psr_info(decon, &psr);
        if (decon_reg_start(decon->id, &psr) < 0) {
                decon_up_list_saved();
@@ -3638,6 +3641,7 @@ static int decon_initial_display(struct decon_device *decon, bool is_colormap)
        decon_reg_set_window_control(decon->id, decon->dt.dft_win,
                        &win_regs, is_colormap);
 
+       decon_reg_all_win_shadow_update_req(decon->id);
        decon_to_psr_info(decon, &psr);
 
        /* TODO:
index afae068a9bcfd75cfbbe0f98d197ea311e7a4a4d..3aca71c511940e555c9786e4ae8a5246e450aa52 100644 (file)
@@ -512,6 +512,7 @@ int decon_set_par(struct fb_info *info)
        win_regs.offset_y = var->yoffset;
        win_regs.type = decon->dt.dft_idma;
        decon_reg_set_window_control(decon->id, win_no, &win_regs, false);
+       decon_reg_all_win_shadow_update_req(decon->id);
 
        decon_hiber_unblock(decon);
        return 0;