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 <jshriram@codeaurora.org>
This commit is contained in:
Jeevan Shriram 2015-04-28 15:51:25 -07:00 committed by David Keitel
parent 0fae3b24d9
commit e95e4f1d5c

View file

@ -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",