diff --git a/msm/dsi/dsi_display.c b/msm/dsi/dsi_display.c index 19227042ce..de86f66ad0 100644 --- a/msm/dsi/dsi_display.c +++ b/msm/dsi/dsi_display.c @@ -800,6 +800,9 @@ static int dsi_display_status_check_te(struct dsi_display *display, int rc = 1, i = 0; int const esd_te_timeout = msecs_to_jiffies(3*20); + if (!rechecks) + return rc; + dsi_display_change_te_irq_status(display, true); for (i = 0; i < rechecks; i++) { diff --git a/msm/sde/sde_encoder_phys_cmd.c b/msm/sde/sde_encoder_phys_cmd.c index 9fbafb26b1..fe2af2422a 100644 --- a/msm/sde/sde_encoder_phys_cmd.c +++ b/msm/sde/sde_encoder_phys_cmd.c @@ -23,8 +23,6 @@ #define to_sde_encoder_phys_cmd(x) \ container_of(x, struct sde_encoder_phys_cmd, base) -#define PP_TIMEOUT_MAX_TRIALS 4 - /* * Tearcheck sync start and continue thresholds are empirically found * based on common panels In the future, may want to allow panels to override @@ -507,7 +505,6 @@ static int _sde_encoder_phys_cmd_handle_ppdone_timeout( u32 frame_event = SDE_ENCODER_FRAME_EVENT_ERROR | SDE_ENCODER_FRAME_EVENT_SIGNAL_RELEASE_FENCE; struct drm_connector *conn; - int event; u32 pending_kickoff_cnt; unsigned long lock_flags; @@ -553,14 +550,11 @@ static int _sde_encoder_phys_cmd_handle_ppdone_timeout( * if the recovery event is registered by user, don't panic * trigger panic on first timeout if no listener registered */ - if (recovery_events) { - event = cmd_enc->pp_timeout_report_cnt > PP_TIMEOUT_MAX_TRIALS ? - SDE_RECOVERY_HARD_RESET : SDE_RECOVERY_CAPTURE; + if (recovery_events) sde_connector_event_notify(conn, DRM_EVENT_SDE_HW_RECOVERY, - sizeof(uint8_t), event); - } else if (cmd_enc->pp_timeout_report_cnt) { + sizeof(uint8_t), SDE_RECOVERY_CAPTURE); + else if (cmd_enc->pp_timeout_report_cnt) SDE_DBG_DUMP("dsi_dbg_bus", "panic"); - } /* request a ctl reset before the next kickoff */ phys_enc->enable_state = SDE_ENC_ERR_NEEDS_HW_RESET; diff --git a/msm/sde/sde_encoder_phys_vid.c b/msm/sde/sde_encoder_phys_vid.c index 2c556c4ffc..a69fbd685c 100644 --- a/msm/sde/sde_encoder_phys_vid.c +++ b/msm/sde/sde_encoder_phys_vid.c @@ -26,9 +26,6 @@ #define to_sde_encoder_phys_vid(x) \ container_of(x, struct sde_encoder_phys_vid, base) -/* maximum number of consecutive kickoff errors */ -#define KICKOFF_MAX_ERRORS 2 - /* Poll time to do recovery during active region */ #define POLL_TIME_USEC_FOR_LN_CNT 500 #define MAX_POLL_CNT 10 @@ -931,7 +928,6 @@ static int sde_encoder_phys_vid_prepare_for_kickoff( struct sde_hw_ctl *ctl; bool recovery_events; struct drm_connector *conn; - int event; int rc; if (!phys_enc || !params || !phys_enc->hw_ctl) { @@ -973,15 +969,11 @@ static int sde_encoder_phys_vid_prepare_for_kickoff( * if the recovery event is registered by user, don't panic * trigger panic on first timeout if no listener registered */ - if (recovery_events) { - event = vid_enc->error_count > KICKOFF_MAX_ERRORS ? - SDE_RECOVERY_HARD_RESET : SDE_RECOVERY_CAPTURE; - sde_connector_event_notify(conn, - DRM_EVENT_SDE_HW_RECOVERY, - sizeof(uint8_t), event); - } else { + if (recovery_events) + sde_connector_event_notify(conn, DRM_EVENT_SDE_HW_RECOVERY, + sizeof(uint8_t), SDE_RECOVERY_CAPTURE); + else SDE_DBG_DUMP("panic"); - } /* request a ctl reset before the next flush */ phys_enc->enable_state = SDE_ENC_ERR_NEEDS_HW_RESET; diff --git a/msm/sde/sde_kms.c b/msm/sde/sde_kms.c index dc8cbd4be2..e00ae39464 100644 --- a/msm/sde/sde_kms.c +++ b/msm/sde/sde_kms.c @@ -4669,18 +4669,24 @@ static int _sde_kms_register_events(struct msm_kms *kms, } sde_kms = to_sde_kms(kms); - vm_ops = sde_vm_get_ops(sde_kms); - sde_vm_lock(sde_kms); - if (vm_ops && vm_ops->vm_owns_hw && !vm_ops->vm_owns_hw(sde_kms)) { - sde_vm_unlock(sde_kms); - DRM_INFO("HW is owned by other VM\n"); - return -EACCES; - } + /* check vm ownership, if event registration requires HW access */ switch (obj->type) { case DRM_MODE_OBJECT_CRTC: + vm_ops = sde_vm_get_ops(sde_kms); + sde_vm_lock(sde_kms); + + if (vm_ops && vm_ops->vm_owns_hw + && !vm_ops->vm_owns_hw(sde_kms)) { + sde_vm_unlock(sde_kms); + SDE_DEBUG("HW is owned by other VM\n"); + return -EACCES; + } + crtc = obj_to_crtc(obj); ret = sde_crtc_register_custom_event(sde_kms, crtc, event, en); + + sde_vm_unlock(sde_kms); break; case DRM_MODE_OBJECT_CONNECTOR: conn = obj_to_connector(obj); @@ -4689,7 +4695,6 @@ static int _sde_kms_register_events(struct msm_kms *kms, break; } - sde_vm_unlock(sde_kms); return ret; }