Merge "mdss: mdp: unmap buffers before secure transition"
This commit is contained in:
commit
8d9d44abdd
1 changed files with 25 additions and 13 deletions
|
@ -1206,7 +1206,8 @@ static void __overlay_pipe_cleanup(struct msm_fb_data_type *mfd,
|
||||||
* and cleaned up. Also cleanup of any pipe buffers after flip.
|
* and cleaned up. Also cleanup of any pipe buffers after flip.
|
||||||
*/
|
*/
|
||||||
static void mdss_mdp_overlay_cleanup(struct msm_fb_data_type *mfd,
|
static void mdss_mdp_overlay_cleanup(struct msm_fb_data_type *mfd,
|
||||||
struct list_head *destroy_pipes)
|
struct list_head *destroy_pipes,
|
||||||
|
bool locked)
|
||||||
{
|
{
|
||||||
struct mdss_mdp_pipe *pipe, *tmp;
|
struct mdss_mdp_pipe *pipe, *tmp;
|
||||||
struct mdss_overlay_private *mdp5_data = mfd_to_mdp5_data(mfd);
|
struct mdss_overlay_private *mdp5_data = mfd_to_mdp5_data(mfd);
|
||||||
|
@ -1215,6 +1216,7 @@ static void mdss_mdp_overlay_cleanup(struct msm_fb_data_type *mfd,
|
||||||
bool skip_fetch_halt, pair_found;
|
bool skip_fetch_halt, pair_found;
|
||||||
struct mdss_mdp_data *buf, *tmpbuf;
|
struct mdss_mdp_data *buf, *tmpbuf;
|
||||||
|
|
||||||
|
if (!locked)
|
||||||
mutex_lock(&mdp5_data->list_lock);
|
mutex_lock(&mdp5_data->list_lock);
|
||||||
list_for_each_entry(pipe, destroy_pipes, list) {
|
list_for_each_entry(pipe, destroy_pipes, list) {
|
||||||
pair_found = false;
|
pair_found = false;
|
||||||
|
@ -1292,6 +1294,7 @@ static void mdss_mdp_overlay_cleanup(struct msm_fb_data_type *mfd,
|
||||||
ctl->mixer_right->next_pipe_map &= ~pipe->ndx;
|
ctl->mixer_right->next_pipe_map &= ~pipe->ndx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!locked)
|
||||||
mutex_unlock(&mdp5_data->list_lock);
|
mutex_unlock(&mdp5_data->list_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2207,6 +2210,13 @@ static int __overlay_secure_ctrl(struct msm_fb_data_type *mfd)
|
||||||
/*wait for ping pong done */
|
/*wait for ping pong done */
|
||||||
if (ctl->ops.wait_pingpong)
|
if (ctl->ops.wait_pingpong)
|
||||||
mdss_mdp_display_wait4pingpong(ctl, true);
|
mdss_mdp_display_wait4pingpong(ctl, true);
|
||||||
|
/*
|
||||||
|
* unmap the previous commit buffers before
|
||||||
|
* transitioning to secure state
|
||||||
|
*/
|
||||||
|
mdss_mdp_overlay_cleanup(mfd,
|
||||||
|
&mdp5_data->pipes_destroy,
|
||||||
|
true);
|
||||||
ret = mdss_mdp_secure_session_ctrl(1,
|
ret = mdss_mdp_secure_session_ctrl(1,
|
||||||
MDP_SECURE_DISPLAY_OVERLAY_SESSION);
|
MDP_SECURE_DISPLAY_OVERLAY_SESSION);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
@ -2308,11 +2318,6 @@ int mdss_mdp_overlay_kickoff(struct msm_fb_data_type *mfd,
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_lock(&mdp5_data->list_lock);
|
mutex_lock(&mdp5_data->list_lock);
|
||||||
ret = __overlay_secure_ctrl(mfd);
|
|
||||||
if (IS_ERR_VALUE(ret)) {
|
|
||||||
pr_err("secure operation failed %d\n", ret);
|
|
||||||
goto commit_fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
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_BEGIN);
|
||||||
|
@ -2326,10 +2331,6 @@ int mdss_mdp_overlay_kickoff(struct msm_fb_data_type *mfd,
|
||||||
if (ctl->ops.wait_pingpong && mdp5_data->mdata->serialize_wait4pp)
|
if (ctl->ops.wait_pingpong && mdp5_data->mdata->serialize_wait4pp)
|
||||||
mdss_mdp_display_wait4pingpong(ctl, true);
|
mdss_mdp_display_wait4pingpong(ctl, true);
|
||||||
|
|
||||||
/*
|
|
||||||
* Setup pipe in solid fill before unstaging,
|
|
||||||
* to ensure no fetches are happening after dettach or reattach.
|
|
||||||
*/
|
|
||||||
list_for_each_entry_safe(pipe, tmp, &mdp5_data->pipes_cleanup, list) {
|
list_for_each_entry_safe(pipe, tmp, &mdp5_data->pipes_cleanup, list) {
|
||||||
mdss_mdp_mixer_pipe_unstage(pipe, pipe->mixer_left);
|
mdss_mdp_mixer_pipe_unstage(pipe, pipe->mixer_left);
|
||||||
mdss_mdp_mixer_pipe_unstage(pipe, pipe->mixer_right);
|
mdss_mdp_mixer_pipe_unstage(pipe, pipe->mixer_right);
|
||||||
|
@ -2337,6 +2338,17 @@ int mdss_mdp_overlay_kickoff(struct msm_fb_data_type *mfd,
|
||||||
list_move(&pipe->list, &mdp5_data->pipes_destroy);
|
list_move(&pipe->list, &mdp5_data->pipes_destroy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* go to secure state if required, this should be done
|
||||||
|
* after moving the buffers from the previous commit to
|
||||||
|
* destroy list
|
||||||
|
*/
|
||||||
|
ret = __overlay_secure_ctrl(mfd);
|
||||||
|
if (IS_ERR_VALUE(ret)) {
|
||||||
|
pr_err("secure operation failed %d\n", ret);
|
||||||
|
goto commit_fail;
|
||||||
|
}
|
||||||
|
|
||||||
/* call this function before any registers programming */
|
/* call this function before any registers programming */
|
||||||
if (ctl->ops.pre_programming)
|
if (ctl->ops.pre_programming)
|
||||||
ctl->ops.pre_programming(ctl);
|
ctl->ops.pre_programming(ctl);
|
||||||
|
@ -2405,7 +2417,7 @@ int mdss_mdp_overlay_kickoff(struct msm_fb_data_type *mfd,
|
||||||
mdss_fb_update_notify_update(mfd);
|
mdss_fb_update_notify_update(mfd);
|
||||||
commit_fail:
|
commit_fail:
|
||||||
ATRACE_BEGIN("overlay_cleanup");
|
ATRACE_BEGIN("overlay_cleanup");
|
||||||
mdss_mdp_overlay_cleanup(mfd, &mdp5_data->pipes_destroy);
|
mdss_mdp_overlay_cleanup(mfd, &mdp5_data->pipes_destroy, false);
|
||||||
ATRACE_END("overlay_cleanup");
|
ATRACE_END("overlay_cleanup");
|
||||||
mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF);
|
mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF);
|
||||||
mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_FLUSHED);
|
mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_FLUSHED);
|
||||||
|
|
Loading…
Add table
Reference in a new issue