summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJayant Shekhar <jshekhar@codeaurora.org>2014-05-07 20:09:28 +0530
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:29:42 -0700
commitc6d38586a759212b5cd73342c7ac5bf74dcee012 (patch)
treee886526c9f76ca64386274ef6f4e11850e3b2e1b
parent5d518cef788c38ad026aff194c3d1eee69ad0c6d (diff)
msm: mdss: Acquire shared lock after getting frame on wfd
Currently there is a deadlock when wfd and rotation is done simultaneously and trying to acquire the shared lock. To prevent this, acquire shared lock after rotated frame is ready for wfd. Change-Id: I3865f02c345ddadd985ee35134454a789936a79a Signed-off-by: Jayant Shekhar <jshekhar@codeaurora.org>
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_ctl.c3
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_overlay.c9
2 files changed, 9 insertions, 3 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp_ctl.c b/drivers/video/fbdev/msm/mdss_mdp_ctl.c
index 620b41dbf153..138d43c9e0df 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_ctl.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_ctl.c
@@ -2746,7 +2746,8 @@ int mdss_mdp_display_commit(struct mdss_mdp_ctl *ctl, void *arg)
}
}
- mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_READY);
+ if (!ctl->shared_lock)
+ mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_READY);
if (ctl->wait_pingpong)
ctl->wait_pingpong(ctl, NULL);
diff --git a/drivers/video/fbdev/msm/mdss_mdp_overlay.c b/drivers/video/fbdev/msm/mdss_mdp_overlay.c
index d2795d3e9cf1..74401cdc34d5 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_overlay.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_overlay.c
@@ -1297,8 +1297,11 @@ int mdss_mdp_overlay_kickoff(struct msm_fb_data_type *mfd,
int ret = 0;
int sd_in_pipe = 0;
- if (ctl->shared_lock)
+ if (ctl->shared_lock) {
+ mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_BEGIN);
+ mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_READY);
mutex_lock(ctl->shared_lock);
+ }
mutex_lock(&mdp5_data->ov_lock);
mutex_lock(&mdp5_data->list_lock);
@@ -1322,7 +1325,9 @@ int mdss_mdp_overlay_kickoff(struct msm_fb_data_type *mfd,
mdp5_data->sd_enabled = 0;
}
- mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_BEGIN);
+ if (!ctl->shared_lock)
+ mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_BEGIN);
+
mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_ON, false);
if (data)