aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMing Qian <ming.qian@nxp.com>2022-06-28 06:19:52 +0100
committerMauro Carvalho Chehab <mchehab@kernel.org>2022-07-08 14:53:35 +0100
commita621cc4bed97e49f5a8019f5215dec7e208a7c4d (patch)
tree3dba3103223cf17cdc785b761a48d2f626980441
parentmedia: Fix incorrect P010 chroma order description (diff)
media: amphion: release core lock before reset vpu core
In reset vpu core, driver will wait for a response event, but if there are still some events unhandled, they will be handled first, driver may acquire core lock for that. So if we do reset in core lock, it may led to reset timeout. Fixes: 9f599f351e86a ("media: amphion: add vpu core driver") Signed-off-by: Ming Qian <ming.qian@nxp.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
-rw-r--r--drivers/media/platform/amphion/vpu_core.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/media/platform/amphion/vpu_core.c b/drivers/media/platform/amphion/vpu_core.c
index 3cca7ae2355d..73faa50d2865 100644
--- a/drivers/media/platform/amphion/vpu_core.c
+++ b/drivers/media/platform/amphion/vpu_core.c
@@ -452,8 +452,13 @@ int vpu_inst_unregister(struct vpu_inst *inst)
}
vpu_core_check_hang(core);
if (core->state == VPU_CORE_HANG && !core->instance_mask) {
+ int err;
+
dev_info(core->dev, "reset hang core\n");
- if (!vpu_core_sw_reset(core)) {
+ mutex_unlock(&core->lock);
+ err = vpu_core_sw_reset(core);
+ mutex_lock(&core->lock);
+ if (!err) {
core->state = VPU_CORE_ACTIVE;
core->hang_mask = 0;
}