vidc: Migrate to new ION cache ops API.
New cache ops API are provided thru ION interface
migrating the in kernel cache ops to use the
new cache ops API.
Change-Id: Idf152429316cec2eec8417d72160b7bd53488fc4
Signed-off-by: Deepak Kotur <dkotur@codeaurora.org>
diff --git a/drivers/video/msm/vidc/1080p/ddl/vcd_ddl_helper.c b/drivers/video/msm/vidc/1080p/ddl/vcd_ddl_helper.c
index b3aa486..8c86bae 100644
--- a/drivers/video/msm/vidc/1080p/ddl/vcd_ddl_helper.c
+++ b/drivers/video/msm/vidc/1080p/ddl/vcd_ddl_helper.c
@@ -256,13 +256,14 @@
0x80808080,
frame[i].vcd_frm.alloc_len - luma_size);
if (frame[i].vcd_frm.ion_flag == CACHED) {
- clean_and_invalidate_caches(
- (unsigned long)frame[i].
+ msm_ion_do_cache_op(
+ ddl_context->video_ion_client,
+ frame[i].vcd_frm.buff_ion_handle,
+ (unsigned long *)frame[i].
vcd_frm.virtual,
(unsigned long)frame[i].
vcd_frm.alloc_len,
- (unsigned long)frame[i].
- vcd_frm.physical);
+ ION_IOC_CLEAN_INV_CACHES);
}
} else {
DDL_MSG_ERROR("luma size error");
diff --git a/drivers/video/msm/vidc/common/dec/vdec.c b/drivers/video/msm/vidc/common/dec/vdec.c
index 356a4ae..7fbad23 100644
--- a/drivers/video/msm/vidc/common/dec/vdec.c
+++ b/drivers/video/msm/vidc/common/dec/vdec.c
@@ -236,6 +236,7 @@
s32 buffer_index = -1;
enum vdec_picture pic_type;
u32 ion_flag = 0;
+ struct ion_handle *buff_handle = NULL;
if (!client_ctx || !vcd_frame_data) {
ERR("vid_dec_input_frame_done() NULL pointer\n");
@@ -336,11 +337,14 @@
}
if (vcd_frame_data->data_len > 0) {
ion_flag = vidc_get_fd_info(client_ctx, BUFFER_TYPE_OUTPUT,
- pmem_fd, kernel_vaddr, buffer_index);
+ pmem_fd, kernel_vaddr, buffer_index,
+ &buff_handle);
if (ion_flag == CACHED) {
- invalidate_caches(kernel_vaddr,
+ msm_ion_do_cache_op(client_ctx->user_ion_client,
+ buff_handle,
+ (unsigned long *) kernel_vaddr,
(unsigned long)vcd_frame_data->data_len,
- phy_addr);
+ ION_IOC_INV_CACHES);
}
}
mutex_lock(&client_ctx->msg_queue_lock);
@@ -1200,6 +1204,7 @@
s32 buffer_index = -1;
u32 vcd_status = VCD_ERR_FAIL;
u32 ion_flag = 0;
+ struct ion_handle *buff_handle = NULL;
if (!client_ctx || !input_frame_info)
return false;
@@ -1232,11 +1237,14 @@
BUFFER_TYPE_INPUT,
pmem_fd,
kernel_vaddr,
- buffer_index);
+ buffer_index,
+ &buff_handle);
if (ion_flag == CACHED) {
- clean_caches(kernel_vaddr,
- (unsigned long)vcd_input_buffer.data_len,
- phy_addr);
+ msm_ion_do_cache_op(client_ctx->user_ion_client,
+ buff_handle,
+ (unsigned long *)kernel_vaddr,
+ (unsigned long) vcd_input_buffer.data_len,
+ ION_IOC_CLEAN_CACHES);
}
}
vcd_status = vcd_decode_frame(client_ctx->vcd_handle,
@@ -1263,6 +1271,7 @@
struct file *file;
s32 buffer_index = -1;
u32 vcd_status = VCD_ERR_FAIL;
+ struct ion_handle *buff_handle = NULL;
struct vcd_frame_data vcd_frame;
@@ -1284,7 +1293,9 @@
vcd_frame.ion_flag = vidc_get_fd_info(client_ctx,
BUFFER_TYPE_OUTPUT,
pmem_fd, kernel_vaddr,
- buffer_index);
+ buffer_index,
+ &buff_handle);
+ vcd_frame.buff_ion_handle = buff_handle;
vcd_status = vcd_fill_output_buffer(client_ctx->vcd_handle,
&vcd_frame);
if (!vcd_status)
diff --git a/drivers/video/msm/vidc/common/enc/venc.c b/drivers/video/msm/vidc/common/enc/venc.c
index 3c25751..f983e25 100644
--- a/drivers/video/msm/vidc/common/enc/venc.c
+++ b/drivers/video/msm/vidc/common/enc/venc.c
@@ -198,6 +198,7 @@
struct file *file;
s32 buffer_index = -1;
u32 ion_flag = 0;
+ struct ion_handle *buff_handle = NULL;
if (!client_ctx || !vcd_frame_data) {
ERR("vid_enc_input_frame_done() NULL pointer\n");
@@ -262,11 +263,14 @@
}
if (venc_msg->venc_msg_info.buf.len > 0) {
ion_flag = vidc_get_fd_info(client_ctx, BUFFER_TYPE_OUTPUT,
- pmem_fd, kernel_vaddr, buffer_index);
+ pmem_fd, kernel_vaddr, buffer_index,
+ &buff_handle);
if (ion_flag == CACHED) {
- clean_and_invalidate_caches(kernel_vaddr,
+ msm_ion_do_cache_op(client_ctx->user_ion_client,
+ buff_handle,
+ (unsigned long *) kernel_vaddr,
(unsigned long)venc_msg->venc_msg_info.buf.len,
- phy_addr);
+ ION_IOC_CLEAN_INV_CACHES);
}
}
mutex_lock(&client_ctx->msg_queue_lock);
diff --git a/drivers/video/msm/vidc/common/enc/venc_internal.c b/drivers/video/msm/vidc/common/enc/venc_internal.c
index 37f1001..46dcaf4 100644
--- a/drivers/video/msm/vidc/common/enc/venc_internal.c
+++ b/drivers/video/msm/vidc/common/enc/venc_internal.c
@@ -1656,6 +1656,7 @@
struct file *file;
s32 buffer_index = -1;
u32 ion_flag = 0;
+ struct ion_handle *buff_handle = NULL;
u32 vcd_status = VCD_ERR_FAIL;
@@ -1688,14 +1689,17 @@
vcd_input_buffer.flags = input_frame_info->flags;
ion_flag = vidc_get_fd_info(client_ctx, BUFFER_TYPE_INPUT,
- pmem_fd, kernel_vaddr, buffer_index);
+ pmem_fd, kernel_vaddr, buffer_index,
+ &buff_handle);
if (vcd_input_buffer.data_len > 0) {
if (ion_flag == CACHED) {
- clean_caches(
- (unsigned long) vcd_input_buffer.virtual,
+ msm_ion_do_cache_op(
+ client_ctx->user_ion_client,
+ buff_handle,
+ (unsigned long *) vcd_input_buffer.virtual,
(unsigned long) vcd_input_buffer.data_len,
- (phy_addr + input_frame_info->offset));
+ ION_IOC_CLEAN_CACHES);
}
}
diff --git a/drivers/video/msm/vidc/common/init/vidc_init.c b/drivers/video/msm/vidc/common/init/vidc_init.c
index cd128dd..5c647d2 100644
--- a/drivers/video/msm/vidc/common/init/vidc_init.c
+++ b/drivers/video/msm/vidc/common/init/vidc_init.c
@@ -366,7 +366,8 @@
u32 vidc_get_fd_info(struct video_client_ctx *client_ctx,
enum buffer_dir buffer, int pmem_fd,
- unsigned long kvaddr, int index)
+ unsigned long kvaddr, int index,
+ struct ion_handle **buff_handle)
{
struct buf_addr_table *buf_addr_table;
u32 rc = 0;
@@ -377,9 +378,13 @@
else
buf_addr_table = client_ctx->output_buf_addr_table;
if (buf_addr_table[index].pmem_fd == pmem_fd) {
- if (buf_addr_table[index].kernel_vaddr == kvaddr)
+ if (buf_addr_table[index].kernel_vaddr == kvaddr) {
rc = buf_addr_table[index].buff_ion_flag;
- }
+ *buff_handle = buf_addr_table[index].buff_ion_handle;
+ } else
+ *buff_handle = NULL;
+ } else
+ *buff_handle = NULL;
return rc;
}
EXPORT_SYMBOL(vidc_get_fd_info);
diff --git a/drivers/video/msm/vidc/common/vcd/vcd_sub.c b/drivers/video/msm/vidc/common/vcd/vcd_sub.c
index b5f643f..6f7e8d1 100644
--- a/drivers/video/msm/vidc/common/vcd/vcd_sub.c
+++ b/drivers/video/msm/vidc/common/vcd/vcd_sub.c
@@ -223,13 +223,15 @@
}
u32 vcd_get_ion_flag(struct video_client_ctx *client_ctx,
- unsigned long kernel_vaddr)
+ unsigned long kernel_vaddr,
+ struct ion_handle **buff_ion_handle)
{
unsigned long phy_addr, user_vaddr;
int pmem_fd;
struct file *file;
s32 buffer_index = -1;
u32 ion_flag = 0;
+ struct ion_handle *buff_handle = NULL;
if (vidc_lookup_addr_table(client_ctx, BUFFER_TYPE_INPUT,
false, &user_vaddr, &kernel_vaddr,
@@ -237,13 +239,17 @@
&buffer_index)) {
ion_flag = vidc_get_fd_info(client_ctx, BUFFER_TYPE_INPUT,
- pmem_fd, kernel_vaddr, buffer_index);
+ pmem_fd, kernel_vaddr, buffer_index,
+ &buff_handle);
+ *buff_ion_handle = buff_handle;
return ion_flag;
} else if (vidc_lookup_addr_table(client_ctx, BUFFER_TYPE_OUTPUT,
false, &user_vaddr, &kernel_vaddr, &phy_addr, &pmem_fd, &file,
&buffer_index)) {
ion_flag = vidc_get_fd_info(client_ctx, BUFFER_TYPE_OUTPUT,
- pmem_fd, kernel_vaddr, buffer_index);
+ pmem_fd, kernel_vaddr, buffer_index,
+ &buff_handle);
+ *buff_ion_handle = buff_handle;
return ion_flag;
} else {
VCD_MSG_ERROR("Couldn't get ion flag");
@@ -588,6 +594,7 @@
struct vcd_buffer_entry *buf_entry;
u8 *physical;
u32 ion_flag = 0;
+ struct ion_handle *buff_handle = NULL;
buf_entry = vcd_find_buffer_pool_entry(buf_pool, buffer);
if (buf_entry) {
@@ -600,8 +607,8 @@
cctxt->client_data, (unsigned long)buffer);
ion_flag = vcd_get_ion_flag(cctxt->client_data,
- (unsigned long)buffer);
-
+ (unsigned long)buffer,
+ &buff_handle);
if (!physical) {
VCD_MSG_ERROR("Couldn't get physical address");
return VCD_ERR_BAD_POINTER;
@@ -625,6 +632,7 @@
buf_entry->frame.virtual = buf_entry->virtual;
buf_entry->frame.physical = buf_entry->physical;
buf_entry->frame.ion_flag = ion_flag;
+ buf_entry->frame.buff_ion_handle = buff_handle;
buf_pool->validated++;
diff --git a/include/media/msm/vcd_api.h b/include/media/msm/vcd_api.h
index 8bb2558..6304c93 100644
--- a/include/media/msm/vcd_api.h
+++ b/include/media/msm/vcd_api.h
@@ -70,6 +70,7 @@
u32 intrlcd_ip_frm_tag;
u8 *desc_buf;
u32 desc_size;
+ struct ion_handle *buff_ion_handle;
};
struct vcd_sequence_hdr {
diff --git a/include/media/msm/vidc_init.h b/include/media/msm/vidc_init.h
index 4e28c74..3084962 100644
--- a/include/media/msm/vidc_init.h
+++ b/include/media/msm/vidc_init.h
@@ -67,7 +67,8 @@
void vidc_release_firmware(void);
u32 vidc_get_fd_info(struct video_client_ctx *client_ctx,
enum buffer_dir buffer, int pmem_fd,
- unsigned long kvaddr, int index);
+ unsigned long kvaddr, int index,
+ struct ion_handle **buff_handle);
u32 vidc_lookup_addr_table(struct video_client_ctx *client_ctx,
enum buffer_dir buffer, u32 search_with_user_vaddr,
unsigned long *user_vaddr, unsigned long *kernel_vaddr,