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:
Yandong Lin
2023-04-18 10:33:58 +08:00
committed by Tao Huang
parent d3eea38dbb
commit 92104b3709
7 changed files with 354 additions and 645 deletions

View File

@@ -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,

View File

@@ -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);

View File

@@ -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, \

View File

@@ -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;

View File

@@ -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

View File

@@ -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 {