summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Salido <salidoa@google.com>2016-07-14 13:43:54 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2016-11-05 17:12:51 -0700
commit13217ef8f3116f0022087d0378bd26b7dce17fdc (patch)
tree05be69214c51dd5ff8c8fa05e401a84d9a0daf80
parentc45ea09f985a27538d9aafd652bb55806dff151b (diff)
msm: mdss: avoid scheduling pp work during continuous updates
Ping pong work is only relevant when last frame update happens to go into idle screen cases. If a commit is in progress there is no need to schedule this work. bug 30115868 CRs-Fixed: 1081525 Change-Id: I61956a4038f80f55d9507be87d7f7ee278ccf45e Signed-off-by: Adrian Salido <salidoa@google.com> (cherry picked from commit e49a573e0ece576ece60c087595ea12ae4191ae8) Signed-off-by: Abhijit Kulkarni <kabhijit@codeaurora.org>
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp.h1
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_ctl.c15
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c3
3 files changed, 14 insertions, 5 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp.h b/drivers/video/fbdev/msm/mdss_mdp.h
index 97ff1bb839e1..565c9533fdfe 100644
--- a/drivers/video/fbdev/msm/mdss_mdp.h
+++ b/drivers/video/fbdev/msm/mdss_mdp.h
@@ -541,6 +541,7 @@ struct mdss_mdp_ctl {
/* dynamic resolution switch during cont-splash handoff */
bool switch_with_handoff;
struct mdss_mdp_avr_info avr_info;
+ bool commit_in_progress;
};
struct mdss_mdp_mixer {
diff --git a/drivers/video/fbdev/msm/mdss_mdp_ctl.c b/drivers/video/fbdev/msm/mdss_mdp_ctl.c
index 1d61653b76bb..6423bd12a732 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_ctl.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_ctl.c
@@ -5708,7 +5708,9 @@ int mdss_mdp_display_commit(struct mdss_mdp_ctl *ctl, void *arg,
} else {
sctl_flush_bits = sctl->flush_bits;
}
+ sctl->commit_in_progress = true;
}
+ ctl->commit_in_progress = true;
ctl_flush_bits = ctl->flush_bits;
ATRACE_END("postproc_programming");
@@ -5836,11 +5838,16 @@ int mdss_mdp_display_commit(struct mdss_mdp_ctl *ctl, void *arg,
ATRACE_BEGIN("flush_kickoff");
mdss_mdp_ctl_write(ctl, MDSS_MDP_REG_CTL_FLUSH, ctl_flush_bits);
- if (sctl && sctl_flush_bits) {
- mdss_mdp_ctl_write(sctl, MDSS_MDP_REG_CTL_FLUSH,
- sctl_flush_bits);
- sctl->flush_bits = 0;
+ if (sctl) {
+ if (sctl_flush_bits) {
+ mdss_mdp_ctl_write(sctl, MDSS_MDP_REG_CTL_FLUSH,
+ sctl_flush_bits);
+ sctl->flush_bits = 0;
+ }
+ sctl->commit_in_progress = false;
}
+ ctl->commit_in_progress = false;
+
MDSS_XLOG(ctl->intf_num, ctl_flush_bits, sctl_flush_bits,
split_lm_valid);
wmb();
diff --git a/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c b/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c
index 4eb121f01aca..0eefa142e959 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c
@@ -1204,7 +1204,8 @@ static void mdss_mdp_cmd_pingpong_done(void *arg)
atomic_read(&ctx->koff_cnt));
if (sync_ppdone) {
atomic_inc(&ctx->pp_done_cnt);
- schedule_work(&ctx->pp_done_work);
+ if (!ctl->commit_in_progress)
+ schedule_work(&ctx->pp_done_work);
mdss_mdp_resource_control(ctl,
MDP_RSRC_CTL_EVENT_PP_DONE);