video: driver: remove skip delayed unmap functionality
Change-Id: Ibc3e8d565010aa5ac608aa648c533057c51f4bf4 Signed-off-by: Darshana Patil <quic_darshana@quicinc.com>
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

parent
ca9cc59d28
commit
3362c70642
@@ -472,14 +472,6 @@ int msm_vidc_allocate_buffers(struct msm_vidc_inst *inst,
|
|||||||
enum msm_vidc_buffer_type buf_type, u32 num_buffers);
|
enum msm_vidc_buffer_type buf_type, u32 num_buffers);
|
||||||
int msm_vidc_free_buffers(struct msm_vidc_inst *inst,
|
int msm_vidc_free_buffers(struct msm_vidc_inst *inst,
|
||||||
enum msm_vidc_buffer_type buf_type);
|
enum msm_vidc_buffer_type buf_type);
|
||||||
int msm_vidc_unmap_driver_buf(struct msm_vidc_inst *inst,
|
|
||||||
struct msm_vidc_buffer *buf);
|
|
||||||
int msm_vidc_map_driver_buf(struct msm_vidc_inst *inst,
|
|
||||||
struct msm_vidc_buffer *buf);
|
|
||||||
int msm_vidc_get_delayed_unmap(struct msm_vidc_inst *inst,
|
|
||||||
struct msm_vidc_map *map);
|
|
||||||
int msm_vidc_put_delayed_unmap(struct msm_vidc_inst *inst,
|
|
||||||
struct msm_vidc_map *map);
|
|
||||||
void msm_vidc_update_stats(struct msm_vidc_inst *inst,
|
void msm_vidc_update_stats(struct msm_vidc_inst *inst,
|
||||||
struct msm_vidc_buffer *buf, enum msm_vidc_debugfs_event etype);
|
struct msm_vidc_buffer *buf, enum msm_vidc_debugfs_event etype);
|
||||||
void msm_vidc_stats_handler(struct work_struct *work);
|
void msm_vidc_stats_handler(struct work_struct *work);
|
||||||
|
@@ -853,7 +853,6 @@ struct msm_vidc_map {
|
|||||||
u64 device_addr;
|
u64 device_addr;
|
||||||
struct sg_table *table;
|
struct sg_table *table;
|
||||||
struct dma_buf_attachment *attach;
|
struct dma_buf_attachment *attach;
|
||||||
u32 skip_delayed_unmap:1;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct msm_vidc_mappings {
|
struct msm_vidc_mappings {
|
||||||
|
@@ -2547,33 +2547,6 @@ int msm_vidc_process_readonly_buffers(struct msm_vidc_inst *inst,
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
int msm_vidc_memory_unmap_completely(struct msm_vidc_inst *inst,
|
|
||||||
struct msm_vidc_map *map)
|
|
||||||
{
|
|
||||||
int rc = 0;
|
|
||||||
|
|
||||||
if (!inst || !map) {
|
|
||||||
d_vpr_e("%s: invalid params\n", __func__);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!map->refcount)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
while (map->refcount) {
|
|
||||||
rc = msm_vidc_memory_unmap(inst->core, map);
|
|
||||||
if (rc)
|
|
||||||
break;
|
|
||||||
if (!map->refcount) {
|
|
||||||
msm_vidc_memory_put_dmabuf(inst, map->dmabuf);
|
|
||||||
list_del(&map->list);
|
|
||||||
msm_memory_pool_free(inst, map);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
int msm_vidc_set_auto_framerate(struct msm_vidc_inst *inst, u64 timestamp)
|
int msm_vidc_set_auto_framerate(struct msm_vidc_inst *inst, u64 timestamp)
|
||||||
{
|
{
|
||||||
struct msm_vidc_core *core;
|
struct msm_vidc_core *core;
|
||||||
@@ -2978,159 +2951,6 @@ int msm_vidc_ts_reorder_flush(struct msm_vidc_inst *inst)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int msm_vidc_get_delayed_unmap(struct msm_vidc_inst *inst, struct msm_vidc_map *map)
|
|
||||||
{
|
|
||||||
int rc = 0;
|
|
||||||
|
|
||||||
if (!inst || !map) {
|
|
||||||
d_vpr_e("%s: invalid params\n", __func__);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = msm_vidc_memory_map(inst->core, map);
|
|
||||||
if (rc)
|
|
||||||
return rc;
|
|
||||||
map->skip_delayed_unmap = 1;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int msm_vidc_put_delayed_unmap(struct msm_vidc_inst *inst, struct msm_vidc_map *map)
|
|
||||||
{
|
|
||||||
int rc = 0;
|
|
||||||
|
|
||||||
if (!inst || !map) {
|
|
||||||
d_vpr_e("%s: invalid params\n", __func__);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!map->skip_delayed_unmap) {
|
|
||||||
i_vpr_e(inst, "%s: no delayed unmap, addr %#llx\n",
|
|
||||||
__func__, map->device_addr);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
map->skip_delayed_unmap = 0;
|
|
||||||
rc = msm_vidc_memory_unmap(inst->core, map);
|
|
||||||
if (rc)
|
|
||||||
i_vpr_e(inst, "%s: unmap failed\n", __func__);
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
int msm_vidc_unmap_driver_buf(struct msm_vidc_inst *inst,
|
|
||||||
struct msm_vidc_buffer *buf)
|
|
||||||
{
|
|
||||||
int rc = 0;
|
|
||||||
struct msm_vidc_mappings *mappings;
|
|
||||||
struct msm_vidc_map *map = NULL;
|
|
||||||
bool found = false;
|
|
||||||
|
|
||||||
if (!inst || !buf) {
|
|
||||||
d_vpr_e("%s: invalid params\n", __func__);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
mappings = msm_vidc_get_mappings(inst, buf->type, __func__);
|
|
||||||
if (!mappings)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
/* sanity check to see if it was not removed */
|
|
||||||
list_for_each_entry(map, &mappings->list, list) {
|
|
||||||
if (map->dmabuf == buf->dmabuf) {
|
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!found) {
|
|
||||||
print_vidc_buffer(VIDC_ERR, "err ", "no buf in mappings", inst, buf);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = msm_vidc_memory_unmap(inst->core, map);
|
|
||||||
if (rc) {
|
|
||||||
print_vidc_buffer(VIDC_ERR, "err ", "unmap failed", inst, buf);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* finally delete if refcount is zero */
|
|
||||||
if (!map->refcount) {
|
|
||||||
msm_vidc_memory_put_dmabuf(inst, map->dmabuf);
|
|
||||||
list_del(&map->list);
|
|
||||||
msm_memory_pool_free(inst, map);
|
|
||||||
}
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
int msm_vidc_map_driver_buf(struct msm_vidc_inst *inst,
|
|
||||||
struct msm_vidc_buffer *buf)
|
|
||||||
{
|
|
||||||
int rc = 0;
|
|
||||||
struct msm_vidc_mappings *mappings;
|
|
||||||
struct msm_vidc_map *map;
|
|
||||||
bool found = false;
|
|
||||||
|
|
||||||
if (!inst || !buf) {
|
|
||||||
d_vpr_e("%s: invalid params\n", __func__);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
mappings = msm_vidc_get_mappings(inst, buf->type, __func__);
|
|
||||||
if (!mappings)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* new buffer: map twice for delayed unmap feature sake
|
|
||||||
* existing buffer: map once
|
|
||||||
*/
|
|
||||||
list_for_each_entry(map, &mappings->list, list) {
|
|
||||||
if (map->dmabuf == buf->dmabuf) {
|
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!found) {
|
|
||||||
/* new buffer case */
|
|
||||||
map = msm_memory_pool_alloc(inst, MSM_MEM_POOL_MAP);
|
|
||||||
if (!map) {
|
|
||||||
i_vpr_e(inst, "%s: alloc failed\n", __func__);
|
|
||||||
return -ENOMEM;
|
|
||||||
}
|
|
||||||
INIT_LIST_HEAD(&map->list);
|
|
||||||
list_add_tail(&map->list, &mappings->list);
|
|
||||||
map->type = buf->type;
|
|
||||||
map->dmabuf = msm_vidc_memory_get_dmabuf(inst, buf->fd);
|
|
||||||
if (!map->dmabuf) {
|
|
||||||
rc = -EINVAL;
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
map->region = msm_vidc_get_buffer_region(inst, buf->type, __func__);
|
|
||||||
/* delayed unmap feature needed for decoder output buffers */
|
|
||||||
if (is_decode_session(inst) && is_output_buffer(buf->type)) {
|
|
||||||
rc = msm_vidc_get_delayed_unmap(inst, map);
|
|
||||||
if (rc)
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rc = msm_vidc_memory_map(inst->core, map);
|
|
||||||
if (rc)
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
buf->device_addr = map->device_addr;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
error:
|
|
||||||
if (!found) {
|
|
||||||
if (is_decode_session(inst) && is_output_buffer(buf->type))
|
|
||||||
msm_vidc_put_delayed_unmap(inst, map);
|
|
||||||
msm_vidc_memory_put_dmabuf(inst, map->dmabuf);
|
|
||||||
list_del_init(&map->list);
|
|
||||||
msm_memory_pool_free(inst, map);
|
|
||||||
}
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct msm_vidc_buffer *msm_vidc_get_driver_buf(struct msm_vidc_inst *inst,
|
struct msm_vidc_buffer *msm_vidc_get_driver_buf(struct msm_vidc_inst *inst,
|
||||||
struct vb2_buffer *vb2)
|
struct vb2_buffer *vb2)
|
||||||
{
|
{
|
||||||
|
@@ -215,13 +215,11 @@ int msm_vidc_memory_map(struct msm_vidc_core *core, struct msm_vidc_map *map)
|
|||||||
goto error_attach;
|
goto error_attach;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!map->skip_delayed_unmap) {
|
|
||||||
/*
|
/*
|
||||||
* Get the scatterlist for the given attachment
|
* Get the scatterlist for the given attachment
|
||||||
* Mapping of sg is taken care by map attachment
|
* Mapping of sg is taken care by map attachment
|
||||||
*/
|
*/
|
||||||
attach->dma_map_attrs |= DMA_ATTR_DELAYED_UNMAP;
|
attach->dma_map_attrs |= DMA_ATTR_DELAYED_UNMAP;
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We do not need dma_map function to perform cache operations
|
* We do not need dma_map function to perform cache operations
|
||||||
|
Reference in New Issue
Block a user