From 46e0ac33540878b7b903e421f8025f0c76da418e Mon Sep 17 00:00:00 2001 From: Jeykumar Sankaran Date: Mon, 12 Oct 2020 23:16:01 -0700 Subject: [PATCH] disp: msm: sde: remove HARD_RESET recovery event on frame-timeouts only On frame timeouts, the driver should only be responsible for reporting the error event to user space clients. Handling of the error events should be left to the user space clients. This change removes explicit mechanism in SDE driver to track error events for a pre-defined threshold levels and RESET hints sent to the user space on handling those error events during frame timeouts. Change-Id: I7bdf2495fae6430384b4031a7edf043b6efe88c5 Signed-off-by: Jeykumar Sankaran --- msm/sde/sde_encoder_phys_cmd.c | 12 +++--------- msm/sde/sde_encoder_phys_vid.c | 16 ++++------------ 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/msm/sde/sde_encoder_phys_cmd.c b/msm/sde/sde_encoder_phys_cmd.c index 9fbafb26b1e4..fe2af2422a19 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 2c556c4ffc2e..a69fbd685c0e 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;