From 9d581d0ef41dd0a34948a4fedaec741ef41b4687 Mon Sep 17 00:00:00 2001 From: Mingwei Yan Date: Thu, 11 Apr 2024 17:40:50 +0800 Subject: [PATCH 1/6] media: rockchip: vpss: fix online use channel assigned to offline Signed-off-by: Mingwei Yan Change-Id: Id7dba90c6162ffe05efdc35b23fc5bdfb9b872a5 --- drivers/media/platform/rockchip/vpss/stream.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/media/platform/rockchip/vpss/stream.c b/drivers/media/platform/rockchip/vpss/stream.c index 65557a2a9757..a93052cbbc54 100644 --- a/drivers/media/platform/rockchip/vpss/stream.c +++ b/drivers/media/platform/rockchip/vpss/stream.c @@ -1206,6 +1206,11 @@ static int rkvpss_start_streaming(struct vb2_queue *queue, unsigned int count) goto free_buf_queue; } + if (hw->is_ofl_ch[stream->id]) { + v4l2_err(&dev->v4l2_dev, "channel[%d] already assigned to offline", stream->id); + goto free_buf_queue; + } + rkvpss_pipeline_open(dev); ret = rkvpss_stream_start(stream); From ac087a3cabb5c8abf1ce19d31bb3ede9f37fe7a4 Mon Sep 17 00:00:00 2001 From: Algea Cao Date: Thu, 9 May 2024 16:42:11 +0800 Subject: [PATCH 2/6] drm/rockchip: vop2: Fix sharp was disabled by mistake When vp0 and other VPs are enabled at the same time, it is necessary to restrict only vp0 to operate sharp registers, otherwise sharp will be turned off by mistake. Change-Id: I81778262a1b669a2f4b15963cb544849a96e89cf Signed-off-by: Algea Cao --- drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index 24f62b5124ed..f81dcbe36f39 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -11543,6 +11543,8 @@ static void vop2_crtc_atomic_flush(struct drm_crtc *crtc, struct drm_atomic_stat struct drm_atomic_state *old_state = old_cstate->state; struct vop2_video_port *vp = to_vop2_video_port(crtc); struct vop2 *vop2 = vp->vop2; + const struct vop2_data *vop2_data = vop2->data; + const struct vop2_video_port_data *vp_data = &vop2_data->vp[vp->id]; struct drm_plane_state *old_pstate; struct drm_plane *plane; unsigned long flags; @@ -11614,7 +11616,8 @@ static void vop2_crtc_atomic_flush(struct drm_crtc *crtc, struct drm_atomic_stat VOP_MODULE_SET(vop2, vp, cubic_lut_update_en, 0); } - vop2_post_sharp_config(crtc); + if (vp_data->feature & VOP_FEATURE_POST_SHARP) + vop2_post_sharp_config(crtc); if (vcstate->line_flag) vop2_crtc_enable_line_flag_event(crtc, vcstate->line_flag); From ab482114ee4fea431d80fab89f61c7f753bff50f Mon Sep 17 00:00:00 2001 From: Tao Huang Date: Fri, 10 May 2024 11:11:18 +0800 Subject: [PATCH 3/6] media: i2c: imx464: Fix lockdep warning [ 3.369732] WARNING: CPU: 4 PID: 1 at drivers/media/v4l2-core/v4l2-ctrls-api.c:874 __v4l2_ctrl_s_ctrl+0x68/0x8c ... [ 3.380218] Call trace: [ 3.380446] __v4l2_ctrl_s_ctrl+0x68/0x8c [ 3.380815] IMX464_probe+0x44c/0x81c [ 3.381165] i2c_device_probe+0x31c/0x350 Signed-off-by: Tao Huang Change-Id: I6dd64d981258c2a7031881630cd74748771cc4cc --- drivers/media/i2c/imx464.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/media/i2c/imx464.c b/drivers/media/i2c/imx464.c index 6193a80678bb..fef6df34e03a 100644 --- a/drivers/media/i2c/imx464.c +++ b/drivers/media/i2c/imx464.c @@ -3041,7 +3041,7 @@ static int IMX464_initialize_controls(struct IMX464 *IMX464) IMX464->link_freq = v4l2_ctrl_new_int_menu(handler, NULL, V4L2_CID_LINK_FREQ, 1, 0, link_freq_menu_items); - __v4l2_ctrl_s_ctrl(IMX464->link_freq, + v4l2_ctrl_s_ctrl(IMX464->link_freq, IMX464->cur_mode->mipi_freq_idx); pixel_rate = (u32)link_freq_menu_items[mode->mipi_freq_idx] / mode->bpp * 2 * IMX464->bus_cfg.bus.mipi_csi2.num_data_lanes; From 90eeed27ac69c094f3717a2f3fc301d42b9501ac Mon Sep 17 00:00:00 2001 From: Tao Huang Date: Fri, 10 May 2024 11:16:28 +0800 Subject: [PATCH 4/6] media: i2c: os04a10: Fix lockdep warning [ 4.433265] WARNING: CPU: 4 PID: 1 at drivers/media/v4l2-core/v4l2-ctrls-api.c:874 __v4l2_ctrl_s_ctrl+0x68/0x8c ... [ 4.443578] Call trace: [ 4.443800] __v4l2_ctrl_s_ctrl+0x68/0x8c [ 4.444154] os04a10_probe+0x468/0x8d4 [ 4.444488] i2c_device_probe+0x31c/0x350 Signed-off-by: Tao Huang Change-Id: Id99cea0ff6a6fed9856a37c0caf2771124882c1c --- drivers/media/i2c/os04a10.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/media/i2c/os04a10.c b/drivers/media/i2c/os04a10.c index 501e55e8974f..aa814d4178fc 100644 --- a/drivers/media/i2c/os04a10.c +++ b/drivers/media/i2c/os04a10.c @@ -2521,7 +2521,7 @@ static int os04a10_initialize_controls(struct os04a10 *os04a10) 0, PIXEL_RATE_WITH_648M, 1, dst_pixel_rate); - __v4l2_ctrl_s_ctrl(os04a10->link_freq, dst_link_freq); + v4l2_ctrl_s_ctrl(os04a10->link_freq, dst_link_freq); h_blank = mode->hts_def - mode->width; os04a10->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, From b911658d78f1d91e0345d8dcc17a38bdb27f5b5a Mon Sep 17 00:00:00 2001 From: Yu Qiaowei Date: Tue, 7 May 2024 14:34:35 +0800 Subject: [PATCH 5/6] video: rockchip: rga3: clear 'ret' on reset request Signed-off-by: Yu Qiaowei Change-Id: I1b9b213621f821ab9e5e2ad1148e074de37a3517 --- drivers/video/rockchip/rga3/rga_job.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/video/rockchip/rga3/rga_job.c b/drivers/video/rockchip/rga3/rga_job.c index fc90e7cf9ca3..cfa913c3f69f 100644 --- a/drivers/video/rockchip/rga3/rga_job.c +++ b/drivers/video/rockchip/rga3/rga_job.c @@ -1130,6 +1130,7 @@ int rga_request_submit(struct rga_request *request) request->is_done = false; request->finished_task_count = 0; request->failed_task_count = 0; + request->ret = 0; request->current_mm = current_mm; /* Unlock after ensuring that the current request will not be resubmitted. */ @@ -1236,6 +1237,7 @@ int rga_request_mpi_submit(struct rga_req *req, struct rga_request *request) request->is_done = false; request->finished_task_count = 0; request->failed_task_count = 0; + request->ret = 0; spin_unlock_irqrestore(&request->lock, flags); From a4c4ab2f3a2fa197a3796f2a8a5f92eca98fe969 Mon Sep 17 00:00:00 2001 From: Jianwei Fan Date: Wed, 8 May 2024 18:47:49 +0800 Subject: [PATCH 6/6] media: rockchip: vicap fix current files is NULL when release fd Change-Id: I1a0907bcf2c75518e8998df3d50136008d3a67f7 Signed-off-by: Jianwei Fan --- drivers/media/platform/rockchip/cif/capture.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/media/platform/rockchip/cif/capture.c b/drivers/media/platform/rockchip/cif/capture.c index 23ea4c72d633..db6a7ca3f237 100644 --- a/drivers/media/platform/rockchip/cif/capture.c +++ b/drivers/media/platform/rockchip/cif/capture.c @@ -5080,6 +5080,7 @@ static void rkcif_free_fence(struct rkcif_stream *stream) unsigned long lock_flags = 0; struct rkcif_fence *vb_fence, *done_fence; struct v4l2_device *v4l2_dev = &stream->cifdev->v4l2_dev; + struct files_struct *files = current->files; LIST_HEAD(local_list); spin_lock_irqsave(&stream->fence_lock, lock_flags); @@ -5100,8 +5101,10 @@ static void rkcif_free_fence(struct rkcif_stream *stream) v4l2_dbg(2, rkcif_debug, v4l2_dev, "%s: free qbuf_fence fd:%d\n", __func__, vb_fence->fence_fd); dma_fence_put(vb_fence->fence); - put_unused_fd(vb_fence->fence_fd); - close_fd(vb_fence->fence_fd); + if (files) { + put_unused_fd(vb_fence->fence_fd); + close_fd(vb_fence->fence_fd); + } kfree(vb_fence); } @@ -5115,8 +5118,10 @@ static void rkcif_free_fence(struct rkcif_stream *stream) v4l2_dbg(2, rkcif_debug, v4l2_dev, "%s: free done_fence fd:%d\n", __func__, done_fence->fence_fd); dma_fence_put(done_fence->fence); - put_unused_fd(done_fence->fence_fd); - close_fd(done_fence->fence_fd); + if (files) { + put_unused_fd(done_fence->fence_fd); + close_fd(done_fence->fence_fd); + } kfree(done_fence); } }