Loading drivers/gpu/drm/msm/sde/sde_crtc.c +9 −42 Original line number Diff line number Diff line Loading @@ -2380,7 +2380,6 @@ static void sde_crtc_frame_event_work(struct kthread_work *work) struct sde_crtc *sde_crtc; struct sde_kms *sde_kms; unsigned long flags; bool frame_done = false; bool in_clone_mode = false; if (!work) { Loading Loading @@ -2435,10 +2434,6 @@ static void sde_crtc_frame_event_work(struct kthread_work *work) SDE_EVT32_VERBOSE(DRMID(crtc), fevent->event, SDE_EVTLOG_FUNC_CASE3); } if (fevent->event & (SDE_ENCODER_FRAME_EVENT_DONE | SDE_ENCODER_FRAME_EVENT_ERROR)) frame_done = true; } if (fevent->event & SDE_ENCODER_FRAME_EVENT_SIGNAL_RELEASE_FENCE) { Loading @@ -2459,9 +2454,6 @@ static void sde_crtc_frame_event_work(struct kthread_work *work) SDE_ERROR("crtc%d ts:%lld received panel dead event\n", crtc->base.id, ktime_to_ns(fevent->ts)); if (frame_done) complete_all(&sde_crtc->frame_done_comp); spin_lock_irqsave(&sde_crtc->spin_lock, flags); list_add_tail(&fevent->list, &sde_crtc->frame_event_list); spin_unlock_irqrestore(&sde_crtc->spin_lock, flags); Loading Loading @@ -3341,10 +3333,10 @@ static void sde_crtc_destroy_state(struct drm_crtc *crtc, &cstate->property_state); } static int _sde_crtc_wait_for_frame_done(struct drm_crtc *crtc) static int _sde_crtc_flush_event_thread(struct drm_crtc *crtc) { struct sde_crtc *sde_crtc; int ret, rc = 0, i; int i; if (!crtc) { SDE_ERROR("invalid argument\n"); Loading @@ -3368,17 +3360,9 @@ static int _sde_crtc_wait_for_frame_done(struct drm_crtc *crtc) kthread_flush_work(&sde_crtc->frame_events[i].work); } ret = wait_for_completion_timeout(&sde_crtc->frame_done_comp, msecs_to_jiffies(SDE_FRAME_DONE_TIMEOUT)); if (!ret) { SDE_ERROR("frame done completion wait timed out, ret:%d\n", ret); SDE_EVT32(DRMID(crtc), SDE_EVTLOG_FATAL); rc = -ETIMEDOUT; } SDE_EVT32_VERBOSE(DRMID(crtc), SDE_EVTLOG_FUNC_EXIT); return rc; return 0; } static int _sde_crtc_commit_kickoff_rot(struct drm_crtc *crtc, Loading Loading @@ -3705,7 +3689,6 @@ void sde_crtc_commit_kickoff(struct drm_crtc *crtc, struct sde_kms *sde_kms; struct sde_crtc_state *cstate; bool is_error, reset_req; int ret; if (!crtc) { SDE_ERROR("invalid argument\n"); Loading Loading @@ -3764,23 +3747,11 @@ void sde_crtc_commit_kickoff(struct drm_crtc *crtc, } sde_crtc->reset_request = reset_req; /* wait for frame_event_done completion */ SDE_ATRACE_BEGIN("wait_for_frame_done_event"); ret = _sde_crtc_wait_for_frame_done(crtc); SDE_ATRACE_END("wait_for_frame_done_event"); SDE_ATRACE_BEGIN("flush_event_thread"); _sde_crtc_flush_event_thread(crtc); SDE_ATRACE_END("flush_event_thread"); sde_crtc_calc_fps(sde_crtc); if (ret) { SDE_ERROR("crtc%d wait for frame done failed;frame_pending%d\n", crtc->base.id, atomic_read(&sde_crtc->frame_pending)); is_error = true; /* force offline rotation mode since the commit has no pipes */ cstate->sbuf_cfg.rot_op_mode = SDE_CTL_ROT_OP_MODE_OFFLINE; } if (atomic_inc_return(&sde_crtc->frame_pending) == 1) { /* acquire bandwidth and other resources */ SDE_DEBUG("crtc%d first commit\n", crtc->base.id); Loading Loading @@ -3818,7 +3789,6 @@ void sde_crtc_commit_kickoff(struct drm_crtc *crtc, sde_encoder_kickoff(encoder, false); } reinit_completion(&sde_crtc->frame_done_comp); SDE_ATRACE_END("crtc_commit"); return; } Loading Loading @@ -4219,11 +4189,7 @@ static void sde_crtc_disable(struct drm_crtc *crtc) if (cstate->num_ds_enabled) sde_crtc->ds_reconfig = true; /* wait for frame_event_done completion */ if (_sde_crtc_wait_for_frame_done(crtc)) SDE_ERROR("crtc%d wait for frame done failed;frame_pending%d\n", crtc->base.id, atomic_read(&sde_crtc->frame_pending)); _sde_crtc_flush_event_thread(crtc); SDE_EVT32(DRMID(crtc), sde_crtc->enabled, sde_crtc->suspend, sde_crtc->vblank_requested, Loading @@ -4238,6 +4204,8 @@ static void sde_crtc_disable(struct drm_crtc *crtc) sde_crtc->enabled = false; if (atomic_read(&sde_crtc->frame_pending)) { SDE_ERROR("crtc%d frame_pending%d\n", crtc->base.id, atomic_read(&sde_crtc->frame_pending)); SDE_EVT32(DRMID(crtc), atomic_read(&sde_crtc->frame_pending), SDE_EVTLOG_FUNC_CASE2); sde_core_perf_crtc_release_bw(crtc); Loading Loading @@ -6097,7 +6065,6 @@ struct drm_crtc *sde_crtc_init(struct drm_device *dev, struct drm_plane *plane) mutex_init(&sde_crtc->rp_lock); INIT_LIST_HEAD(&sde_crtc->rp_head); init_completion(&sde_crtc->frame_done_comp); sde_crtc->enabled = false; INIT_LIST_HEAD(&sde_crtc->frame_event_list); Loading drivers/gpu/drm/msm/sde/sde_crtc.h +0 −2 Original line number Diff line number Diff line Loading @@ -190,7 +190,6 @@ struct sde_crtc_fps_info { * @frame_events : static allocation of in-flight frame events * @frame_event_list : available frame event list * @spin_lock : spin lock for frame event, transaction status, etc... * @frame_done_comp : for frame_event_done synchronization * @event_thread : Pointer to event handler thread * @event_worker : Event worker queue * @event_cache : Local cache of event worker structures Loading Loading @@ -262,7 +261,6 @@ struct sde_crtc { struct sde_crtc_frame_event frame_events[SDE_CRTC_FRAME_EVENT_SIZE]; struct list_head frame_event_list; spinlock_t spin_lock; struct completion frame_done_comp; /* for handling internal event thread */ struct sde_crtc_event event_cache[SDE_CRTC_MAX_EVENT_COUNT]; Loading Loading
drivers/gpu/drm/msm/sde/sde_crtc.c +9 −42 Original line number Diff line number Diff line Loading @@ -2380,7 +2380,6 @@ static void sde_crtc_frame_event_work(struct kthread_work *work) struct sde_crtc *sde_crtc; struct sde_kms *sde_kms; unsigned long flags; bool frame_done = false; bool in_clone_mode = false; if (!work) { Loading Loading @@ -2435,10 +2434,6 @@ static void sde_crtc_frame_event_work(struct kthread_work *work) SDE_EVT32_VERBOSE(DRMID(crtc), fevent->event, SDE_EVTLOG_FUNC_CASE3); } if (fevent->event & (SDE_ENCODER_FRAME_EVENT_DONE | SDE_ENCODER_FRAME_EVENT_ERROR)) frame_done = true; } if (fevent->event & SDE_ENCODER_FRAME_EVENT_SIGNAL_RELEASE_FENCE) { Loading @@ -2459,9 +2454,6 @@ static void sde_crtc_frame_event_work(struct kthread_work *work) SDE_ERROR("crtc%d ts:%lld received panel dead event\n", crtc->base.id, ktime_to_ns(fevent->ts)); if (frame_done) complete_all(&sde_crtc->frame_done_comp); spin_lock_irqsave(&sde_crtc->spin_lock, flags); list_add_tail(&fevent->list, &sde_crtc->frame_event_list); spin_unlock_irqrestore(&sde_crtc->spin_lock, flags); Loading Loading @@ -3341,10 +3333,10 @@ static void sde_crtc_destroy_state(struct drm_crtc *crtc, &cstate->property_state); } static int _sde_crtc_wait_for_frame_done(struct drm_crtc *crtc) static int _sde_crtc_flush_event_thread(struct drm_crtc *crtc) { struct sde_crtc *sde_crtc; int ret, rc = 0, i; int i; if (!crtc) { SDE_ERROR("invalid argument\n"); Loading @@ -3368,17 +3360,9 @@ static int _sde_crtc_wait_for_frame_done(struct drm_crtc *crtc) kthread_flush_work(&sde_crtc->frame_events[i].work); } ret = wait_for_completion_timeout(&sde_crtc->frame_done_comp, msecs_to_jiffies(SDE_FRAME_DONE_TIMEOUT)); if (!ret) { SDE_ERROR("frame done completion wait timed out, ret:%d\n", ret); SDE_EVT32(DRMID(crtc), SDE_EVTLOG_FATAL); rc = -ETIMEDOUT; } SDE_EVT32_VERBOSE(DRMID(crtc), SDE_EVTLOG_FUNC_EXIT); return rc; return 0; } static int _sde_crtc_commit_kickoff_rot(struct drm_crtc *crtc, Loading Loading @@ -3705,7 +3689,6 @@ void sde_crtc_commit_kickoff(struct drm_crtc *crtc, struct sde_kms *sde_kms; struct sde_crtc_state *cstate; bool is_error, reset_req; int ret; if (!crtc) { SDE_ERROR("invalid argument\n"); Loading Loading @@ -3764,23 +3747,11 @@ void sde_crtc_commit_kickoff(struct drm_crtc *crtc, } sde_crtc->reset_request = reset_req; /* wait for frame_event_done completion */ SDE_ATRACE_BEGIN("wait_for_frame_done_event"); ret = _sde_crtc_wait_for_frame_done(crtc); SDE_ATRACE_END("wait_for_frame_done_event"); SDE_ATRACE_BEGIN("flush_event_thread"); _sde_crtc_flush_event_thread(crtc); SDE_ATRACE_END("flush_event_thread"); sde_crtc_calc_fps(sde_crtc); if (ret) { SDE_ERROR("crtc%d wait for frame done failed;frame_pending%d\n", crtc->base.id, atomic_read(&sde_crtc->frame_pending)); is_error = true; /* force offline rotation mode since the commit has no pipes */ cstate->sbuf_cfg.rot_op_mode = SDE_CTL_ROT_OP_MODE_OFFLINE; } if (atomic_inc_return(&sde_crtc->frame_pending) == 1) { /* acquire bandwidth and other resources */ SDE_DEBUG("crtc%d first commit\n", crtc->base.id); Loading Loading @@ -3818,7 +3789,6 @@ void sde_crtc_commit_kickoff(struct drm_crtc *crtc, sde_encoder_kickoff(encoder, false); } reinit_completion(&sde_crtc->frame_done_comp); SDE_ATRACE_END("crtc_commit"); return; } Loading Loading @@ -4219,11 +4189,7 @@ static void sde_crtc_disable(struct drm_crtc *crtc) if (cstate->num_ds_enabled) sde_crtc->ds_reconfig = true; /* wait for frame_event_done completion */ if (_sde_crtc_wait_for_frame_done(crtc)) SDE_ERROR("crtc%d wait for frame done failed;frame_pending%d\n", crtc->base.id, atomic_read(&sde_crtc->frame_pending)); _sde_crtc_flush_event_thread(crtc); SDE_EVT32(DRMID(crtc), sde_crtc->enabled, sde_crtc->suspend, sde_crtc->vblank_requested, Loading @@ -4238,6 +4204,8 @@ static void sde_crtc_disable(struct drm_crtc *crtc) sde_crtc->enabled = false; if (atomic_read(&sde_crtc->frame_pending)) { SDE_ERROR("crtc%d frame_pending%d\n", crtc->base.id, atomic_read(&sde_crtc->frame_pending)); SDE_EVT32(DRMID(crtc), atomic_read(&sde_crtc->frame_pending), SDE_EVTLOG_FUNC_CASE2); sde_core_perf_crtc_release_bw(crtc); Loading Loading @@ -6097,7 +6065,6 @@ struct drm_crtc *sde_crtc_init(struct drm_device *dev, struct drm_plane *plane) mutex_init(&sde_crtc->rp_lock); INIT_LIST_HEAD(&sde_crtc->rp_head); init_completion(&sde_crtc->frame_done_comp); sde_crtc->enabled = false; INIT_LIST_HEAD(&sde_crtc->frame_event_list); Loading
drivers/gpu/drm/msm/sde/sde_crtc.h +0 −2 Original line number Diff line number Diff line Loading @@ -190,7 +190,6 @@ struct sde_crtc_fps_info { * @frame_events : static allocation of in-flight frame events * @frame_event_list : available frame event list * @spin_lock : spin lock for frame event, transaction status, etc... * @frame_done_comp : for frame_event_done synchronization * @event_thread : Pointer to event handler thread * @event_worker : Event worker queue * @event_cache : Local cache of event worker structures Loading Loading @@ -262,7 +261,6 @@ struct sde_crtc { struct sde_crtc_frame_event frame_events[SDE_CRTC_FRAME_EVENT_SIZE]; struct list_head frame_event_list; spinlock_t spin_lock; struct completion frame_done_comp; /* for handling internal event thread */ struct sde_crtc_event event_cache[SDE_CRTC_MAX_EVENT_COUNT]; Loading