mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
video: rockchip: mpp: rkvenc2: Allow disabled rkvenc-core dtsi
Signed-off-by: Herman Chen <herman.chen@rock-chips.com> Change-Id: Ic2bc6b469e7efbac9b03666a5a0cf791c130ab5b
This commit is contained in:
@@ -1000,6 +1000,8 @@ static void mpp_attach_workqueue(struct mpp_dev *mpp,
|
||||
|
||||
set_bit(core_id, &queue->core_idle);
|
||||
list_add_tail(&mpp->queue_link, &queue->dev_list);
|
||||
if (queue->core_id_max < (u32)core_id)
|
||||
queue->core_id_max = (u32)core_id;
|
||||
|
||||
mpp->core_id = core_id;
|
||||
mpp->queue = queue;
|
||||
@@ -1024,7 +1026,7 @@ static void mpp_detach_workqueue(struct mpp_dev *mpp)
|
||||
queue->cores[mpp->core_id] = NULL;
|
||||
queue->core_count--;
|
||||
|
||||
clear_bit(queue->core_count, &queue->core_idle);
|
||||
clear_bit(mpp->core_id, &queue->core_idle);
|
||||
list_del_init(&mpp->queue_link);
|
||||
|
||||
mpp->queue = NULL;
|
||||
|
||||
@@ -502,6 +502,7 @@ struct mpp_taskqueue {
|
||||
atomic_t reset_request;
|
||||
struct mpp_dev *cores[MPP_MAX_CORE_NUM];
|
||||
unsigned long core_idle;
|
||||
u32 core_id_max;
|
||||
u32 core_count;
|
||||
};
|
||||
|
||||
|
||||
@@ -807,25 +807,25 @@ static void *rkvenc2_prepare(struct mpp_dev *mpp, struct mpp_task *mpp_task)
|
||||
struct mpp_taskqueue *queue = mpp->queue;
|
||||
unsigned long core_idle;
|
||||
unsigned long flags;
|
||||
u32 core_count;
|
||||
u32 core_id_max;
|
||||
s32 core_id;
|
||||
u32 i;
|
||||
|
||||
spin_lock_irqsave(&queue->running_lock, flags);
|
||||
|
||||
core_idle = queue->core_idle;
|
||||
core_count = queue->core_count;
|
||||
core_id_max = queue->core_id_max;
|
||||
|
||||
for (i = 0; i < core_count; i++) {
|
||||
for (i = 0; i < core_id_max; i++) {
|
||||
struct mpp_dev *mpp = queue->cores[i];
|
||||
|
||||
if (mpp && to_rkvenc_dev(mpp)->disable_work)
|
||||
clear_bit(i, &core_idle);
|
||||
}
|
||||
|
||||
core_id = find_first_bit(&core_idle, core_count);
|
||||
core_id = find_first_bit(&core_idle, core_id_max + 1);
|
||||
|
||||
if (core_id >= core_count) {
|
||||
if (core_id >= core_id_max + 1 || !queue->cores[core_id]) {
|
||||
mpp_task = NULL;
|
||||
mpp_dbg_core("core %d all busy %lx\n", core_id, core_idle);
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user