Merge "disp: msm: dsi: avoid TE status check based on rechecks count"

This commit is contained in:
qctecmdr
2020-11-21 13:13:35 -08:00
committed by Gerrit - the friendly Code Review server
4 changed files with 23 additions and 29 deletions

View File

@@ -800,6 +800,9 @@ static int dsi_display_status_check_te(struct dsi_display *display,
int rc = 1, i = 0; int rc = 1, i = 0;
int const esd_te_timeout = msecs_to_jiffies(3*20); int const esd_te_timeout = msecs_to_jiffies(3*20);
if (!rechecks)
return rc;
dsi_display_change_te_irq_status(display, true); dsi_display_change_te_irq_status(display, true);
for (i = 0; i < rechecks; i++) { for (i = 0; i < rechecks; i++) {

View File

@@ -23,8 +23,6 @@
#define to_sde_encoder_phys_cmd(x) \ #define to_sde_encoder_phys_cmd(x) \
container_of(x, struct sde_encoder_phys_cmd, base) container_of(x, struct sde_encoder_phys_cmd, base)
#define PP_TIMEOUT_MAX_TRIALS 4
/* /*
* Tearcheck sync start and continue thresholds are empirically found * Tearcheck sync start and continue thresholds are empirically found
* based on common panels In the future, may want to allow panels to override * 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 u32 frame_event = SDE_ENCODER_FRAME_EVENT_ERROR
| SDE_ENCODER_FRAME_EVENT_SIGNAL_RELEASE_FENCE; | SDE_ENCODER_FRAME_EVENT_SIGNAL_RELEASE_FENCE;
struct drm_connector *conn; struct drm_connector *conn;
int event;
u32 pending_kickoff_cnt; u32 pending_kickoff_cnt;
unsigned long lock_flags; 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 * if the recovery event is registered by user, don't panic
* trigger panic on first timeout if no listener registered * trigger panic on first timeout if no listener registered
*/ */
if (recovery_events) { if (recovery_events)
event = cmd_enc->pp_timeout_report_cnt > PP_TIMEOUT_MAX_TRIALS ?
SDE_RECOVERY_HARD_RESET : SDE_RECOVERY_CAPTURE;
sde_connector_event_notify(conn, DRM_EVENT_SDE_HW_RECOVERY, sde_connector_event_notify(conn, DRM_EVENT_SDE_HW_RECOVERY,
sizeof(uint8_t), event); sizeof(uint8_t), SDE_RECOVERY_CAPTURE);
} else if (cmd_enc->pp_timeout_report_cnt) { else if (cmd_enc->pp_timeout_report_cnt)
SDE_DBG_DUMP("dsi_dbg_bus", "panic"); SDE_DBG_DUMP("dsi_dbg_bus", "panic");
}
/* request a ctl reset before the next kickoff */ /* request a ctl reset before the next kickoff */
phys_enc->enable_state = SDE_ENC_ERR_NEEDS_HW_RESET; phys_enc->enable_state = SDE_ENC_ERR_NEEDS_HW_RESET;

View File

@@ -26,9 +26,6 @@
#define to_sde_encoder_phys_vid(x) \ #define to_sde_encoder_phys_vid(x) \
container_of(x, struct sde_encoder_phys_vid, base) 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 */ /* Poll time to do recovery during active region */
#define POLL_TIME_USEC_FOR_LN_CNT 500 #define POLL_TIME_USEC_FOR_LN_CNT 500
#define MAX_POLL_CNT 10 #define MAX_POLL_CNT 10
@@ -931,7 +928,6 @@ static int sde_encoder_phys_vid_prepare_for_kickoff(
struct sde_hw_ctl *ctl; struct sde_hw_ctl *ctl;
bool recovery_events; bool recovery_events;
struct drm_connector *conn; struct drm_connector *conn;
int event;
int rc; int rc;
if (!phys_enc || !params || !phys_enc->hw_ctl) { 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 * if the recovery event is registered by user, don't panic
* trigger panic on first timeout if no listener registered * trigger panic on first timeout if no listener registered
*/ */
if (recovery_events) { if (recovery_events)
event = vid_enc->error_count > KICKOFF_MAX_ERRORS ? sde_connector_event_notify(conn, DRM_EVENT_SDE_HW_RECOVERY,
SDE_RECOVERY_HARD_RESET : SDE_RECOVERY_CAPTURE; sizeof(uint8_t), SDE_RECOVERY_CAPTURE);
sde_connector_event_notify(conn, else
DRM_EVENT_SDE_HW_RECOVERY,
sizeof(uint8_t), event);
} else {
SDE_DBG_DUMP("panic"); SDE_DBG_DUMP("panic");
}
/* request a ctl reset before the next flush */ /* request a ctl reset before the next flush */
phys_enc->enable_state = SDE_ENC_ERR_NEEDS_HW_RESET; phys_enc->enable_state = SDE_ENC_ERR_NEEDS_HW_RESET;

View File

@@ -4669,18 +4669,24 @@ static int _sde_kms_register_events(struct msm_kms *kms,
} }
sde_kms = to_sde_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) { switch (obj->type) {
case DRM_MODE_OBJECT_CRTC: 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); crtc = obj_to_crtc(obj);
ret = sde_crtc_register_custom_event(sde_kms, crtc, event, en); ret = sde_crtc_register_custom_event(sde_kms, crtc, event, en);
sde_vm_unlock(sde_kms);
break; break;
case DRM_MODE_OBJECT_CONNECTOR: case DRM_MODE_OBJECT_CONNECTOR:
conn = obj_to_connector(obj); conn = obj_to_connector(obj);
@@ -4689,7 +4695,6 @@ static int _sde_kms_register_events(struct msm_kms *kms,
break; break;
} }
sde_vm_unlock(sde_kms);
return ret; return ret;
} }