summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDhaval Patel <pdhaval@codeaurora.org>2015-12-04 08:54:22 -0800
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 21:13:20 -0700
commit6760890c53341cc3d9ad7bd722f0d3e086f1d00a (patch)
tree73b3090d18adfbf5267fd82315b1f0a0740ba403
parent2434172c311aa5247cad81bf5796240f855b623a (diff)
msm: mdss: set the correct buffer state after operation
Rotator modules uses the buffer but does not set the correct state. Configure the buffer state, alloc time, free time, data planes to provide valid information during debugging. Change-Id: I7e0942699abfbd3a4be9c531a6174cdc917b22a4 Signed-off-by: Dhaval Patel <pdhaval@codeaurora.org>
-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,