Merge "disp: msm: dsi: avoid TE status check based on rechecks count"
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

commit
69e06f9fd7
@@ -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++) {
|
||||||
|
@@ -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;
|
||||||
|
@@ -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;
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user