From 9d77db3c730780c8ef5ccd4b66403ff5675cfe4e Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 13 May 2024 10:30:14 +0000
Subject: [PATCH] modify sin led gpio
---
kernel/drivers/video/rockchip/mpp/mpp_common.c | 69 ++++++++++++----------------------
1 files changed, 24 insertions(+), 45 deletions(-)
diff --git a/kernel/drivers/video/rockchip/mpp/mpp_common.c b/kernel/drivers/video/rockchip/mpp/mpp_common.c
index dbc625c..d43ebf4 100644
--- a/kernel/drivers/video/rockchip/mpp/mpp_common.c
+++ b/kernel/drivers/video/rockchip/mpp/mpp_common.c
@@ -36,14 +36,6 @@
#include "mpp_common.h"
#include "mpp_iommu.h"
-#define MPP_WAIT_TIMEOUT_DELAY (2000)
-
-/* Use 'v' as magic number */
-#define MPP_IOC_MAGIC 'v'
-
-#define MPP_IOC_CFG_V1 _IOW(MPP_IOC_MAGIC, 1, unsigned int)
-#define MPP_IOC_CFG_V2 _IOW(MPP_IOC_MAGIC, 2, unsigned int)
-
/* input parmater structure for version 1 */
struct mpp_msg_v1 {
__u32 cmd;
@@ -51,14 +43,6 @@
__u32 size;
__u32 offset;
__u64 data_ptr;
-};
-
-#define MPP_BAT_MSG_DONE (0x00000001)
-
-struct mpp_bat_msg {
- __u64 flag;
- __u32 fd;
- __s32 ret;
};
#ifdef CONFIG_ROCKCHIP_MPP_PROC_FS
@@ -355,9 +339,9 @@
mutex_unlock(&queue->session_lock);
if (task_count) {
- mpp_dbg_session("session %d:%d task not finished %d\n",
- session->pid, session->index,
- atomic_read(&queue->detach_count));
+ mpp_dbg_session("session %d:%d not finished %d task cnt %d\n",
+ session->device_type, session->index,
+ atomic_read(&queue->detach_count), task_count);
mpp_session_clear_pending(session);
} else {
@@ -588,6 +572,7 @@
mpp_dev_reset(mpp);
mpp_power_off(mpp);
+ mpp_iommu_dev_deactivate(mpp->iommu_info, mpp);
set_bit(TASK_STATE_TIMEOUT, &task->state);
set_bit(TASK_STATE_DONE, &task->state);
/* Wake up the GET thread */
@@ -717,10 +702,6 @@
group->resets[type] = rst;
group->queue = mpp->queue;
}
- /* if reset not in the same queue, it means different device
- * may reset in the same time, then rw_sem_on should set true.
- */
- group->rw_sem_on |= (group->queue != mpp->queue) ? true : false;
dev_info(mpp->dev, "reset_group->rw_sem_on=%d\n", group->rw_sem_on);
up_write(&group->rw_sem);
@@ -821,12 +802,19 @@
mpp_set_grf(mpp->grf_info);
}
/*
+ * Lock the reader locker of the device resource lock here,
+ * release at the finish operation
+ */
+ mpp_reset_down_read(mpp->reset_group);
+
+ /*
* for iommu share hardware, should attach to ensure
* working in current device
*/
ret = mpp_iommu_attach(mpp->iommu_info);
if (ret) {
dev_err(mpp->dev, "mpp_iommu_attach failed\n");
+ mpp_reset_up_read(mpp->reset_group);
return -ENODATA;
}
@@ -836,11 +824,6 @@
if (mpp->auto_freq_en && mpp->hw_ops->set_freq)
mpp->hw_ops->set_freq(mpp, task);
- /*
- * TODO: Lock the reader locker of the device resource lock here,
- * release at the finish operation
- */
- mpp_reset_down_read(mpp->reset_group);
mpp_iommu_dev_activate(mpp->iommu_info, mpp);
if (mpp->dev_ops->run)
@@ -922,23 +905,15 @@
}
mpp = mpp_get_task_used_device(task, session);
- ret = wait_event_timeout(task->wait,
- test_bit(TASK_STATE_DONE, &task->state),
- msecs_to_jiffies(MPP_WAIT_TIMEOUT_DELAY));
- if (ret > 0) {
- if (mpp->dev_ops->result)
- ret = mpp->dev_ops->result(mpp, task, msgs);
- } else {
- atomic_inc(&task->abort_request);
- set_bit(TASK_STATE_ABORT, &task->state);
- mpp_err("timeout, pid %d session %d:%d count %d cur_task %p id %d\n",
- session->pid, session->pid, session->index,
- atomic_read(&session->task_count), task,
- task->task_id);
- }
+ ret = wait_event_interruptible(task->wait, test_bit(TASK_STATE_DONE, &task->state));
+ if (ret == -ERESTARTSYS)
+ mpp_err("wait task break by signal\n");
- mpp_debug_func(DEBUG_TASK_INFO, "task %d kref_%d\n",
- task->task_id, kref_read(&task->ref));
+ if (mpp->dev_ops->result)
+ ret = mpp->dev_ops->result(mpp, task, msgs);
+ mpp_debug_func(DEBUG_TASK_INFO, "wait done session %d:%d count %d task %d state %lx\n",
+ session->device_type, session->index, atomic_read(&session->task_count),
+ task->task_index, task->state);
mpp_session_pop_pending(session, task);
@@ -1013,6 +988,10 @@
return -ENODEV;
} else {
mpp->reset_group = mpp->srv->reset_groups[reset_group_node];
+ if (!mpp->reset_group->queue)
+ mpp->reset_group->queue = queue;
+ if (mpp->reset_group->queue != mpp->queue)
+ mpp->reset_group->rw_sem_on = true;
}
}
@@ -2266,7 +2245,7 @@
irq_ret = mpp->dev_ops->irq(mpp);
if (task) {
- if (irq_ret != IRQ_NONE) {
+ if (irq_ret == IRQ_WAKE_THREAD) {
/* if wait or delayed work timeout, abort request will turn on,
* isr should not to response, and handle it in delayed work
*/
--
Gitblit v1.6.2