diff options
| author | Jayant Shekhar <jshekhar@codeaurora.org> | 2017-02-07 12:02:04 +0530 |
|---|---|---|
| committer | Jayant Shekhar <jshekhar@codeaurora.org> | 2017-02-07 15:18:11 +0530 |
| commit | 4c8baa46841cf35816f19f041a9b33c4f4fc0d3b (patch) | |
| tree | 9d4569fcc5ebf2054ed677564d1c5314239978ca /drivers/video/fbdev/msm | |
| parent | f325453a4d4572e832b2f535e94e94c7e307107e (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.h | 1 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp.c | 8 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_smmu.c | 1 |
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); |
