Loading drivers/video/msm/mdss/mdss_mdp_ctl.c +5 −0 Original line number Diff line number Diff line Loading @@ -1875,6 +1875,11 @@ int mdss_mdp_display_commit(struct mdss_mdp_ctl *ctl, void *arg) } } mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_READY); if (ctl->wait_pingpong) ctl->wait_pingpong(ctl, NULL); /* postprocessing setup, including dspp */ mdss_mdp_pp_setup_locked(ctl); Loading drivers/video/msm/mdss/mdss_mdp_intf_cmd.c +18 −1 Original line number Diff line number Diff line Loading @@ -40,6 +40,8 @@ struct mdss_mdp_cmd_ctx { struct mutex clk_mtx; spinlock_t clk_lock; struct work_struct clk_work; struct work_struct pp_done_work; atomic_t pp_done_cnt; struct mdss_panel_recovery recovery; }; Loading Loading @@ -292,6 +294,8 @@ static void mdss_mdp_cmd_pingpong_done(void *arg) complete_all(&ctx->pp_comp); if (ctx->koff_cnt) { atomic_inc(&ctx->pp_done_cnt); schedule_work(&ctx->pp_done_work); ctx->koff_cnt--; if (ctx->koff_cnt) { pr_err("%s: too many kickoffs=%d!\n", __func__, Loading @@ -307,6 +311,16 @@ static void mdss_mdp_cmd_pingpong_done(void *arg) spin_unlock(&ctx->clk_lock); } static void pingpong_done_work(struct work_struct *work) { struct mdss_mdp_cmd_ctx *ctx = container_of(work, typeof(*ctx), pp_done_work); if (ctx->ctl) while (atomic_add_unless(&ctx->pp_done_cnt, -1, 0)) mdss_mdp_ctl_notify(ctx->ctl, MDP_NOTIFY_FRAME_DONE); } static void clk_ctrl_work(struct work_struct *work) { struct mdss_mdp_cmd_ctx *ctx = Loading Loading @@ -426,7 +440,6 @@ static int mdss_mdp_cmd_wait4pingpong(struct mdss_mdp_ctl *ctl, void *arg) rc = -EPERM; mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_TIMEOUT); } else { mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_DONE); rc = 0; } } Loading Loading @@ -527,6 +540,8 @@ int mdss_mdp_cmd_stop(struct mdss_mdp_ctl *ctl) mdss_mdp_cmd_clk_off(ctx); flush_work(&ctx->pp_done_work); ctx->panel_on = 0; mdss_mdp_set_intr_callback(MDSS_MDP_IRQ_PING_PONG_RD_PTR, ctx->pp_num, Loading Loading @@ -593,6 +608,8 @@ int mdss_mdp_cmd_start(struct mdss_mdp_ctl *ctl) spin_lock_init(&ctx->clk_lock); mutex_init(&ctx->clk_mtx); INIT_WORK(&ctx->clk_work, clk_ctrl_work); INIT_WORK(&ctx->pp_done_work, pingpong_done_work); atomic_set(&ctx->pp_done_cnt, 0); INIT_LIST_HEAD(&ctx->vsync_handlers); ctx->recovery.fxn = mdss_mdp_cmd_underflow_recovery; Loading drivers/video/msm/mdss/mdss_mdp_overlay.c +1 −15 Original line number Diff line number Diff line Loading @@ -885,14 +885,6 @@ int mdss_mdp_overlay_kickoff(struct msm_fb_data_type *mfd, mutex_lock(&mdp5_data->ov_lock); mutex_lock(&mfd->lock); ret = mdss_mdp_display_wait4pingpong(mdp5_data->ctl); if (ret) { mutex_unlock(&mfd->lock); mutex_unlock(&mdp5_data->ov_lock); if (ctl->shared_lock) mutex_unlock(ctl->shared_lock); return ret; } /* * check if there is a secure display session */ Loading Loading @@ -1016,13 +1008,6 @@ commit_fail: if (ctl->shared_lock) mutex_unlock(ctl->shared_lock); if (!IS_ERR_VALUE(ret)) { ret = mdss_mdp_display_wait4pingpong(mdp5_data->ctl); if (ret) pr_warn("wait for ping pong on fb%d failed!\n", mfd->index); } return ret; } Loading Loading @@ -2514,6 +2499,7 @@ int mdss_mdp_overlay_init(struct msm_fb_data_type *mfd) goto init_fail; } } mfd->mdp_sync_pt_data.async_wait_fences = true; pm_runtime_set_suspended(&mfd->pdev->dev); pm_runtime_enable(&mfd->pdev->dev); Loading Loading
drivers/video/msm/mdss/mdss_mdp_ctl.c +5 −0 Original line number Diff line number Diff line Loading @@ -1875,6 +1875,11 @@ int mdss_mdp_display_commit(struct mdss_mdp_ctl *ctl, void *arg) } } mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_READY); if (ctl->wait_pingpong) ctl->wait_pingpong(ctl, NULL); /* postprocessing setup, including dspp */ mdss_mdp_pp_setup_locked(ctl); Loading
drivers/video/msm/mdss/mdss_mdp_intf_cmd.c +18 −1 Original line number Diff line number Diff line Loading @@ -40,6 +40,8 @@ struct mdss_mdp_cmd_ctx { struct mutex clk_mtx; spinlock_t clk_lock; struct work_struct clk_work; struct work_struct pp_done_work; atomic_t pp_done_cnt; struct mdss_panel_recovery recovery; }; Loading Loading @@ -292,6 +294,8 @@ static void mdss_mdp_cmd_pingpong_done(void *arg) complete_all(&ctx->pp_comp); if (ctx->koff_cnt) { atomic_inc(&ctx->pp_done_cnt); schedule_work(&ctx->pp_done_work); ctx->koff_cnt--; if (ctx->koff_cnt) { pr_err("%s: too many kickoffs=%d!\n", __func__, Loading @@ -307,6 +311,16 @@ static void mdss_mdp_cmd_pingpong_done(void *arg) spin_unlock(&ctx->clk_lock); } static void pingpong_done_work(struct work_struct *work) { struct mdss_mdp_cmd_ctx *ctx = container_of(work, typeof(*ctx), pp_done_work); if (ctx->ctl) while (atomic_add_unless(&ctx->pp_done_cnt, -1, 0)) mdss_mdp_ctl_notify(ctx->ctl, MDP_NOTIFY_FRAME_DONE); } static void clk_ctrl_work(struct work_struct *work) { struct mdss_mdp_cmd_ctx *ctx = Loading Loading @@ -426,7 +440,6 @@ static int mdss_mdp_cmd_wait4pingpong(struct mdss_mdp_ctl *ctl, void *arg) rc = -EPERM; mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_TIMEOUT); } else { mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_DONE); rc = 0; } } Loading Loading @@ -527,6 +540,8 @@ int mdss_mdp_cmd_stop(struct mdss_mdp_ctl *ctl) mdss_mdp_cmd_clk_off(ctx); flush_work(&ctx->pp_done_work); ctx->panel_on = 0; mdss_mdp_set_intr_callback(MDSS_MDP_IRQ_PING_PONG_RD_PTR, ctx->pp_num, Loading Loading @@ -593,6 +608,8 @@ int mdss_mdp_cmd_start(struct mdss_mdp_ctl *ctl) spin_lock_init(&ctx->clk_lock); mutex_init(&ctx->clk_mtx); INIT_WORK(&ctx->clk_work, clk_ctrl_work); INIT_WORK(&ctx->pp_done_work, pingpong_done_work); atomic_set(&ctx->pp_done_cnt, 0); INIT_LIST_HEAD(&ctx->vsync_handlers); ctx->recovery.fxn = mdss_mdp_cmd_underflow_recovery; Loading
drivers/video/msm/mdss/mdss_mdp_overlay.c +1 −15 Original line number Diff line number Diff line Loading @@ -885,14 +885,6 @@ int mdss_mdp_overlay_kickoff(struct msm_fb_data_type *mfd, mutex_lock(&mdp5_data->ov_lock); mutex_lock(&mfd->lock); ret = mdss_mdp_display_wait4pingpong(mdp5_data->ctl); if (ret) { mutex_unlock(&mfd->lock); mutex_unlock(&mdp5_data->ov_lock); if (ctl->shared_lock) mutex_unlock(ctl->shared_lock); return ret; } /* * check if there is a secure display session */ Loading Loading @@ -1016,13 +1008,6 @@ commit_fail: if (ctl->shared_lock) mutex_unlock(ctl->shared_lock); if (!IS_ERR_VALUE(ret)) { ret = mdss_mdp_display_wait4pingpong(mdp5_data->ctl); if (ret) pr_warn("wait for ping pong on fb%d failed!\n", mfd->index); } return ret; } Loading Loading @@ -2514,6 +2499,7 @@ int mdss_mdp_overlay_init(struct msm_fb_data_type *mfd) goto init_fail; } } mfd->mdp_sync_pt_data.async_wait_fences = true; pm_runtime_set_suspended(&mfd->pdev->dev); pm_runtime_enable(&mfd->pdev->dev); Loading