summaryrefslogtreecommitdiff
path: root/drivers/video/fbdev/msm
diff options
context:
space:
mode:
authorJayant Shekhar <jshekhar@codeaurora.org>2017-02-07 12:02:04 +0530
committerJayant Shekhar <jshekhar@codeaurora.org>2017-02-07 15:18:11 +0530
commit4c8baa46841cf35816f19f041a9b33c4f4fc0d3b (patch)
tree9d4569fcc5ebf2054ed677564d1c5314239978ca /drivers/video/fbdev/msm
parentf325453a4d4572e832b2f535e94e94c7e307107e (diff)
msm: sde: Ensure mdp splash cleanup before initiating rotation request
MDP and ROT use same Smmu context banks. If rotation request comes when MDP is operating on physical address then fail the request such that composition can fall back onto GPU. Allow HW rotation when MDP switches to Virtual address access. Change-Id: I8662855ddd09d9ca2bb074a0bcc11e759a6809df Signed-off-by: Jayant Shekhar <jshekhar@codeaurora.org>
Diffstat (limited to 'drivers/video/fbdev/msm')
-rw-r--r--drivers/video/fbdev/msm/mdss.h1
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp.c8
-rw-r--r--drivers/video/fbdev/msm/mdss_smmu.c1
3 files changed, 10 insertions, 0 deletions
diff --git a/drivers/video/fbdev/msm/mdss.h b/drivers/video/fbdev/msm/mdss.h
index 20134c631e61..6182aa2c626e 100644
--- a/drivers/video/fbdev/msm/mdss.h
+++ b/drivers/video/fbdev/msm/mdss.h
@@ -584,6 +584,7 @@ struct mdss_util_intf {
int (*panel_intf_status)(u32 disp_num, u32 intf_type);
struct mdss_panel_cfg* (*panel_intf_type)(int intf_val);
int (*dyn_clk_gating_ctrl)(int enable);
+ bool (*mdp_handoff_pending)(void);
};
struct mdss_util_intf *mdss_get_util_intf(void);
diff --git a/drivers/video/fbdev/msm/mdss_mdp.c b/drivers/video/fbdev/msm/mdss_mdp.c
index d698a2da8744..81e102ad8449 100644
--- a/drivers/video/fbdev/msm/mdss_mdp.c
+++ b/drivers/video/fbdev/msm/mdss_mdp.c
@@ -798,6 +798,13 @@ void mdss_mdp_vbif_reg_unlock(void)
mutex_unlock(&mdata->reg_lock);
}
+bool mdss_mdp_handoff_pending(void)
+{
+ struct mdss_data_type *mdata = mdss_mdp_get_mdata();
+
+ return mdata->handoff_pending;
+}
+
static int mdss_mdp_intr2index(u32 intr_type, u32 intf_num)
{
int i;
@@ -2883,6 +2890,7 @@ static int mdss_mdp_probe(struct platform_device *pdev)
mdss_res->mdss_util->panel_intf_status = mdss_panel_get_intf_status;
mdss_res->mdss_util->vbif_reg_lock = mdss_mdp_vbif_reg_lock;
mdss_res->mdss_util->vbif_reg_unlock = mdss_mdp_vbif_reg_unlock;
+ mdss_res->mdss_util->mdp_handoff_pending = mdss_mdp_handoff_pending;
rc = msm_dss_ioremap_byname(pdev, &mdata->mdss_io, "mdp_phys");
if (rc) {
diff --git a/drivers/video/fbdev/msm/mdss_smmu.c b/drivers/video/fbdev/msm/mdss_smmu.c
index 886e5fc6ba7d..6930444118b6 100644
--- a/drivers/video/fbdev/msm/mdss_smmu.c
+++ b/drivers/video/fbdev/msm/mdss_smmu.c
@@ -850,6 +850,7 @@ int mdss_smmu_probe(struct platform_device *pdev)
mdss_smmu->base.secure_session_ctrl =
mdata->mdss_util->secure_session_ctrl;
mdss_smmu->base.wait_for_transition = mdss_smmu_secure_wait;
+ mdss_smmu->base.handoff_pending = mdata->mdss_util->mdp_handoff_pending;
list_add(&mdss_smmu->_client, &prv->smmu_device_list);