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:
Herman Chen
2022-08-05 15:30:39 +08:00
committed by Tao Huang
parent 495e32cf39
commit 9f7d75a79c
3 changed files with 9 additions and 6 deletions

View File

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

View File

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

View File

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