From e95e4f1d5cd99a800c1a57faa685183b7764bd6e Mon Sep 17 00:00:00 2001 From: Jeevan Shriram Date: Tue, 28 Apr 2015 15:51:25 -0700 Subject: [PATCH] msm: mdss: try recovering from pingpong timeout without panic In the current implementation, as soon as the ping pong timeout happens, driver dumps the relevant logs for debugging and panic. It is possible to recover from this situation without panic by performing MDSS control reset and panel write pointer reset. This change tries to recover from pingpong timeout. If the recovery is not successful for 10 consecutive frames, uevent is sent to HAL layer for performing blank and unblank of display driver. Change-Id: Iadc929a79a62bbf222b9022af5cf04f870079ded Signed-off-by: Jeevan Shriram --- drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c b/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c index dce0a09a2589..8b7a0c293396 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c +++ b/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c @@ -20,7 +20,7 @@ #include "mdss_mdp_trace.h" #define VSYNC_EXPIRE_TICK 6 - +#define MAX_RECOVERY_TRIALS 10 #define MAX_SESSIONS 2 #define SPLIT_MIXER_OFFSET 0x800 @@ -689,7 +689,10 @@ static int mdss_mdp_cmd_wait4pingpong(struct mdss_mdp_ctl *ctl, void *arg) } if (rc <= 0) { - if (!ctx->pp_timeout_report_cnt) { + if (ctx->pp_timeout_report_cnt == 0) { + MDSS_XLOG_TOUT_HANDLER("mdp", "dsi0_ctrl", "dsi0_phy", + "dsi1_ctrl", "dsi1_phy"); + } else if (ctx->pp_timeout_report_cnt == MAX_RECOVERY_TRIALS) { WARN(1, "cmd kickoff timed out (%d) ctl=%d\n", rc, ctl->num); MDSS_XLOG_TOUT_HANDLER("mdp", "dsi0_ctrl", "dsi0_phy",