mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 18:41:58 +09:00
video: rockchip: mpp: refactor rkvdec2_link worker flow
Signed-off-by: Yandong Lin <yandong.lin@rock-chips.com> Change-Id: I00a1a5551e1684d615130e5f3dd0714e284b6aa8
This commit is contained in:
@@ -141,9 +141,7 @@ mpp_taskqueue_is_running(struct mpp_taskqueue *queue)
|
||||
return flag;
|
||||
}
|
||||
|
||||
static int
|
||||
mpp_taskqueue_pending_to_run(struct mpp_taskqueue *queue,
|
||||
struct mpp_task *task)
|
||||
int mpp_taskqueue_pending_to_run(struct mpp_taskqueue *queue, struct mpp_task *task)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
@@ -2022,7 +2020,7 @@ int mpp_task_dump_mem_region(struct mpp_dev *mpp,
|
||||
if (!task)
|
||||
return -EIO;
|
||||
|
||||
mpp_err("--- dump mem region ---\n");
|
||||
mpp_err("--- dump task %d mem region ---\n", task->task_index);
|
||||
if (!list_empty(&task->mem_region_list)) {
|
||||
list_for_each_entry_safe(mem, n,
|
||||
&task->mem_region_list,
|
||||
|
||||
@@ -693,6 +693,8 @@ void mpp_session_deinit(struct mpp_session *session);
|
||||
void mpp_session_cleanup_detach(struct mpp_taskqueue *queue,
|
||||
struct kthread_work *work);
|
||||
|
||||
int mpp_taskqueue_pending_to_run(struct mpp_taskqueue *queue, struct mpp_task *task);
|
||||
|
||||
int mpp_dev_probe(struct mpp_dev *mpp,
|
||||
struct platform_device *pdev);
|
||||
int mpp_dev_remove(struct mpp_dev *mpp);
|
||||
|
||||
@@ -98,7 +98,7 @@ extern unsigned int mpp_dev_debug;
|
||||
#define mpp_err(fmt, args...) \
|
||||
pr_err("%s:%d: " fmt, __func__, __LINE__, ##args)
|
||||
|
||||
#define mpp_dbg_link_flow(fmt, args...) \
|
||||
#define mpp_dbg_link(fmt, args...) \
|
||||
do { \
|
||||
if (unlikely(mpp_dev_debug & DEBUG_LINK_TABLE)) { \
|
||||
pr_info("%s:%d: " fmt, \
|
||||
|
||||
@@ -262,7 +262,7 @@ int rkvdec2_task_init(struct mpp_dev *mpp, struct mpp_session *session,
|
||||
task->strm_addr = task->reg[RKVDEC_REG_RLC_BASE_INDEX];
|
||||
task->clk_mode = CLK_MODE_NORMAL;
|
||||
task->slot_idx = -1;
|
||||
init_waitqueue_head(&task->wait);
|
||||
init_waitqueue_head(&mpp_task->wait);
|
||||
/* get resolution info */
|
||||
if (session->priv) {
|
||||
struct rkvdec2_session_priv *priv = session->priv;
|
||||
|
||||
@@ -150,8 +150,6 @@ struct rkvdec2_task {
|
||||
int slot_idx;
|
||||
u32 need_hack;
|
||||
|
||||
/* event for task wait timeout or session timeout */
|
||||
wait_queue_head_t wait;
|
||||
/* link table DMA buffer */
|
||||
struct mpp_dma_buffer *table;
|
||||
};
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -140,35 +140,16 @@ struct rkvdec_link_dev {
|
||||
u32 decoded;
|
||||
u32 total;
|
||||
u32 error;
|
||||
u32 stuff_err;
|
||||
u32 stuff_total;
|
||||
u32 stuff_on_error;
|
||||
u32 hack_task_running;
|
||||
|
||||
struct rkvdec_link_info *info;
|
||||
struct mpp_dma_buffer *table;
|
||||
u32 link_node_size;
|
||||
u32 link_reg_count;
|
||||
|
||||
struct mpp_task **tasks_hw;
|
||||
u32 task_capacity;
|
||||
s32 task_total;
|
||||
s32 task_decoded;
|
||||
s32 task_size;
|
||||
s32 task_count;
|
||||
s32 task_write;
|
||||
s32 task_read;
|
||||
s32 task_send;
|
||||
s32 task_recv;
|
||||
|
||||
/* taskqueue variables */
|
||||
u32 task_running;
|
||||
u32 task_prepared;
|
||||
s32 task_to_run;
|
||||
u32 task_on_timeout;
|
||||
|
||||
/* taskqueue trigger variables */
|
||||
u32 task_irq;
|
||||
u32 task_irq_prev;
|
||||
atomic_t task_pending;
|
||||
/* timeout can be trigger in different thread so atomic is needed */
|
||||
atomic_t task_timeout;
|
||||
u32 task_timeout_prev;
|
||||
@@ -183,6 +164,12 @@ struct rkvdec_link_dev {
|
||||
u32 task_cnt;
|
||||
u64 stuff_cycle_sum;
|
||||
u32 stuff_cnt;
|
||||
|
||||
/* link info */
|
||||
u32 task_capacity;
|
||||
struct mpp_dma_buffer *table_array;
|
||||
struct list_head unused_list;
|
||||
struct list_head used_list;
|
||||
};
|
||||
|
||||
enum RKVDEC2_CCU_MODE {
|
||||
|
||||
Reference in New Issue
Block a user