summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_util.c1
-rw-r--r--drivers/video/fbdev/msm/mdss_rotator.c16
2 files changed, 15 insertions, 2 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp_util.c b/drivers/video/fbdev/msm/mdss_mdp_util.c
index fe0c2e5d3a75..ab18644e0580 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_util.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_util.c
@@ -1322,6 +1322,7 @@ void mdss_mdp_data_free(struct mdss_mdp_data *data, bool rotator, int dir)
mdss_iommu_ctrl(1);
for (i = 0; i < data->num_planes && data->p[i].len; i++)
mdss_mdp_put_img(&data->p[i], rotator, dir);
+ memset(&data->p, 0, sizeof(struct mdss_mdp_img_data) * MAX_PLANES);
mdss_iommu_ctrl(0);
data->num_planes = 0;
diff --git a/drivers/video/fbdev/msm/mdss_rotator.c b/drivers/video/fbdev/msm/mdss_rotator.c
index dcd62362b026..d7fdafd21640 100644
--- a/drivers/video/fbdev/msm/mdss_rotator.c
+++ b/drivers/video/fbdev/msm/mdss_rotator.c
@@ -508,6 +508,8 @@ static int mdss_rotator_import_buffer(struct mdp_layer_buffer *buffer,
ret = mdss_mdp_data_get_and_validate_size(data, planes,
buffer->plane_count, flags, dev, true, dir, buffer);
+ data->state = MDP_BUF_STATE_READY;
+ data->last_alloc = local_clock();
return ret;
}
@@ -534,12 +536,14 @@ static int mdss_rotator_map_and_check_data(struct mdss_rot_entry *entry)
}
/* if error during map, the caller will release the data */
+ entry->src_buf.state = MDP_BUF_STATE_ACTIVE;
ret = mdss_mdp_data_map(&entry->src_buf, true, DMA_TO_DEVICE);
if (ret) {
pr_err("source buffer mapping failed ret:%d\n", ret);
goto end;
}
+ entry->dst_buf.state = MDP_BUF_STATE_ACTIVE;
ret = mdss_mdp_data_map(&entry->dst_buf, true, DMA_FROM_DEVICE);
if (ret) {
pr_err("destination buffer mapping failed ret:%d\n", ret);
@@ -624,8 +628,16 @@ static struct mdss_rot_perf *mdss_rotator_find_session(
static void mdss_rotator_release_data(struct mdss_rot_entry *entry)
{
- mdss_mdp_data_free(&entry->src_buf, true, DMA_TO_DEVICE);
- mdss_mdp_data_free(&entry->dst_buf, true, DMA_FROM_DEVICE);
+ struct mdss_mdp_data *src_buf = &entry->src_buf;
+ struct mdss_mdp_data *dst_buf = &entry->dst_buf;
+
+ mdss_mdp_data_free(src_buf, true, DMA_TO_DEVICE);
+ src_buf->last_freed = local_clock();
+ src_buf->state = MDP_BUF_STATE_UNUSED;
+
+ mdss_mdp_data_free(dst_buf, true, DMA_FROM_DEVICE);
+ dst_buf->last_freed = local_clock();
+ dst_buf->state = MDP_BUF_STATE_UNUSED;
}
static int mdss_rotator_import_data(struct mdss_rot_mgr *mgr,