Loading drivers/video/msm/mdss/mdss_fb.c +15 −5 Original line number Diff line number Diff line Loading @@ -2131,6 +2131,14 @@ static void mdss_fb_release_fences(struct msm_fb_data_type *mfd) mutex_unlock(&sync_pt_data->sync_mutex); } static void mdss_fb_release_kickoff(struct msm_fb_data_type *mfd) { if (mfd->wait_for_kickoff) { atomic_set(&mfd->kickoff_pending, 0); wake_up_all(&mfd->kickoff_wait_q); } } /** * __mdss_fb_sync_buf_done_callback() - process async display events * @p: Notifier block registered for async events. Loading Loading @@ -2171,6 +2179,9 @@ static int __mdss_fb_sync_buf_done_callback(struct notifier_block *p, pr_debug("%s: frame done\n", sync_pt_data->fence_name); mdss_fb_signal_timeline(sync_pt_data); break; case MDP_NOTIFY_FRAME_START: mdss_fb_release_kickoff(mfd); break; } return NOTIFY_OK; Loading Loading @@ -2363,15 +2374,14 @@ static int __mdss_fb_perform_commit(struct msm_fb_data_type *mfd) if (ret) pr_err("pan display failed %x on fb%d\n", ret, mfd->index); atomic_set(&mfd->kickoff_pending, 0); wake_up_all(&mfd->kickoff_wait_q); } if (!ret) mdss_fb_update_backlight(mfd); if (IS_ERR_VALUE(ret) || !sync_pt_data->flushed) if (IS_ERR_VALUE(ret) || !sync_pt_data->flushed) { mdss_fb_release_kickoff(mfd); mdss_fb_signal_timeline(sync_pt_data); } return ret; } Loading Loading @@ -2405,8 +2415,8 @@ static int __mdss_fb_display_thread(void *data) wake_up_all(&mfd->idle_wait_q); } mdss_fb_release_kickoff(mfd); atomic_set(&mfd->commits_pending, 0); atomic_set(&mfd->kickoff_pending, 0); wake_up_all(&mfd->idle_wait_q); return ret; Loading drivers/video/msm/mdss/mdss_fb.h +1 −0 Original line number Diff line number Diff line Loading @@ -69,6 +69,7 @@ enum mdp_notify_event { MDP_NOTIFY_FRAME_FLUSHED, MDP_NOTIFY_FRAME_DONE, MDP_NOTIFY_FRAME_TIMEOUT, MDP_NOTIFY_FRAME_START, }; /** Loading drivers/video/msm/mdss/mdss_mdp_overlay.c +5 −8 Original line number Diff line number Diff line Loading @@ -1428,10 +1428,8 @@ int mdss_mdp_overlay_kickoff(struct msm_fb_data_type *mfd, ATRACE_END("display_commit"); } if (!need_cleanup) { atomic_set(&mfd->kickoff_pending, 0); wake_up_all(&mfd->kickoff_wait_q); } if (!need_cleanup) mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_START); if (IS_ERR_VALUE(ret)) goto commit_fail; Loading Loading @@ -1459,10 +1457,9 @@ commit_fail: ATRACE_END("overlay_cleanup"); mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF, false); mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_FLUSHED); if (need_cleanup) { atomic_set(&mfd->kickoff_pending, 0); wake_up_all(&mfd->kickoff_wait_q); } if (need_cleanup) mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_START); mutex_unlock(&mdp5_data->ov_lock); if (ctl->shared_lock) mutex_unlock(ctl->shared_lock); Loading Loading
drivers/video/msm/mdss/mdss_fb.c +15 −5 Original line number Diff line number Diff line Loading @@ -2131,6 +2131,14 @@ static void mdss_fb_release_fences(struct msm_fb_data_type *mfd) mutex_unlock(&sync_pt_data->sync_mutex); } static void mdss_fb_release_kickoff(struct msm_fb_data_type *mfd) { if (mfd->wait_for_kickoff) { atomic_set(&mfd->kickoff_pending, 0); wake_up_all(&mfd->kickoff_wait_q); } } /** * __mdss_fb_sync_buf_done_callback() - process async display events * @p: Notifier block registered for async events. Loading Loading @@ -2171,6 +2179,9 @@ static int __mdss_fb_sync_buf_done_callback(struct notifier_block *p, pr_debug("%s: frame done\n", sync_pt_data->fence_name); mdss_fb_signal_timeline(sync_pt_data); break; case MDP_NOTIFY_FRAME_START: mdss_fb_release_kickoff(mfd); break; } return NOTIFY_OK; Loading Loading @@ -2363,15 +2374,14 @@ static int __mdss_fb_perform_commit(struct msm_fb_data_type *mfd) if (ret) pr_err("pan display failed %x on fb%d\n", ret, mfd->index); atomic_set(&mfd->kickoff_pending, 0); wake_up_all(&mfd->kickoff_wait_q); } if (!ret) mdss_fb_update_backlight(mfd); if (IS_ERR_VALUE(ret) || !sync_pt_data->flushed) if (IS_ERR_VALUE(ret) || !sync_pt_data->flushed) { mdss_fb_release_kickoff(mfd); mdss_fb_signal_timeline(sync_pt_data); } return ret; } Loading Loading @@ -2405,8 +2415,8 @@ static int __mdss_fb_display_thread(void *data) wake_up_all(&mfd->idle_wait_q); } mdss_fb_release_kickoff(mfd); atomic_set(&mfd->commits_pending, 0); atomic_set(&mfd->kickoff_pending, 0); wake_up_all(&mfd->idle_wait_q); return ret; Loading
drivers/video/msm/mdss/mdss_fb.h +1 −0 Original line number Diff line number Diff line Loading @@ -69,6 +69,7 @@ enum mdp_notify_event { MDP_NOTIFY_FRAME_FLUSHED, MDP_NOTIFY_FRAME_DONE, MDP_NOTIFY_FRAME_TIMEOUT, MDP_NOTIFY_FRAME_START, }; /** Loading
drivers/video/msm/mdss/mdss_mdp_overlay.c +5 −8 Original line number Diff line number Diff line Loading @@ -1428,10 +1428,8 @@ int mdss_mdp_overlay_kickoff(struct msm_fb_data_type *mfd, ATRACE_END("display_commit"); } if (!need_cleanup) { atomic_set(&mfd->kickoff_pending, 0); wake_up_all(&mfd->kickoff_wait_q); } if (!need_cleanup) mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_START); if (IS_ERR_VALUE(ret)) goto commit_fail; Loading Loading @@ -1459,10 +1457,9 @@ commit_fail: ATRACE_END("overlay_cleanup"); mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF, false); mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_FLUSHED); if (need_cleanup) { atomic_set(&mfd->kickoff_pending, 0); wake_up_all(&mfd->kickoff_wait_q); } if (need_cleanup) mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_START); mutex_unlock(&mdp5_data->ov_lock); if (ctl->shared_lock) mutex_unlock(ctl->shared_lock); Loading