diff options
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_util.c | 1 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_rotator.c | 16 |
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, |
