From 4a8f31cec65570dd2f4c409a6bb3e1ff2891bb36 Mon Sep 17 00:00:00 2001 From: Hisping Lin Date: Tue, 12 Aug 2025 09:33:04 +0000 Subject: [PATCH 1/9] nvmem: rockchip-secure-otp: Resolve compilation errors Signed-off-by: Hisping Lin Change-Id: I4ed285797a667b9721a09885556f7d0fb31869c1 --- drivers/nvmem/rockchip-secure-otp.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/nvmem/rockchip-secure-otp.c b/drivers/nvmem/rockchip-secure-otp.c index e8df65c3736b..0cd8d0205347 100644 --- a/drivers/nvmem/rockchip-secure-otp.c +++ b/drivers/nvmem/rockchip-secure-otp.c @@ -98,10 +98,9 @@ int rockchip_read_oem_non_protected_otp(unsigned int byte_off, /* Alloc share memory */ shm_size = byte_len; - device_shm = tee_shm_alloc(ctx, shm_size, - TEE_SHM_MAPPED | TEE_SHM_DMA_BUF); + device_shm = tee_shm_alloc_kernel_buf(ctx, shm_size); if (IS_ERR(device_shm)) { - pr_err("tee_shm_alloc failed\n"); + pr_err("tee_shm_alloc_kernel_buf failed\n"); rc = PTR_ERR(device_shm); goto out_sess; } @@ -201,10 +200,9 @@ int rockchip_write_oem_non_protected_otp(unsigned int byte_off, /* Alloc share memory */ shm_size = byte_len; - device_shm = tee_shm_alloc(ctx, shm_size, - TEE_SHM_MAPPED | TEE_SHM_DMA_BUF); + device_shm = tee_shm_alloc_kernel_buf(ctx, shm_size); if (IS_ERR(device_shm)) { - pr_err("tee_shm_alloc failed\n"); + pr_err("tee_shm_alloc_kernel_buf failed\n"); rc = PTR_ERR(device_shm); goto out_sess; } From 97e3aa256f89f5a463e9503a33d89c8d5e5805f4 Mon Sep 17 00:00:00 2001 From: Damon Ding Date: Mon, 4 Aug 2025 21:15:24 +0800 Subject: [PATCH 2/9] drm/rockchip: vop2: Remove the flag &vop2->is_iommu_needed For a specific case, there will be unexpected abnormal display: If the logo display is disabled and the cubit lut is updated before refreshing the first frame, the cubit lut function will be abnormal along with display abnormalities. The reason is: The 3D look-up table is allocated via iommu while the flag &vop2->is_iommu_needed, which to initialize the iommu, is first set before refreshing the first frame. Therefore, for the above case, the cubit lut function is working without iommu initialized. Through analysis of the code logic, we found that the flag &vop2->is_iommu_needed is redundant. After removing it, the iommu will be enabled at the same time as the first atomic flush operation, which may refresh the frame or not. What's more, this method also help to avoid the cubit lut abnormal issue in above case. Change-Id: I196c1652798164690bedbe6cc4c5fce265f1e178 Signed-off-by: Damon Ding --- drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index b5fa6f67078d..0ead76c1ac89 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -925,7 +925,6 @@ struct vop2 { struct drm_prop_enum_list *plane_name_list; struct vop2_shared_mode_res shared_mode_res; bool is_iommu_enabled; - bool is_iommu_needed; bool is_enabled; bool support_multi_area; bool disable_afbc_win; @@ -7241,8 +7240,6 @@ static void vop2_plane_atomic_update(struct drm_plane *plane, struct drm_atomic_ } vop2_win_atomic_update(win, &wsrc, &wdst, pstate); - - vop2->is_iommu_needed = true; } static const struct drm_plane_helper_funcs vop2_plane_helper_funcs = { @@ -13483,7 +13480,7 @@ static void vop2_crtc_atomic_flush(struct drm_crtc *crtc, struct drm_atomic_stat vop2_cfg_update(crtc, old_cstate); - if (!vop2->is_iommu_enabled && vop2->is_iommu_needed) { + if (!vop2->is_iommu_enabled) { enum rockchip_drm_vop_aclk_mode aclk_mode = vop2->aclk_mode; bool enter_vop_aclk_reset_mode = false; From 7b808a6ad826d36257ebe6883b8f07c95d6502ba Mon Sep 17 00:00:00 2001 From: Jian zheng Date: Tue, 10 Jun 2025 09:08:13 +0800 Subject: [PATCH 3/9] soc: rockchip: decompress: support user-space usage allow the absence of memory-region Signed-off-by: Jian zheng Change-Id: Ib602badfc2423700614e251eeb376860ae4a1675 --- drivers/soc/rockchip/rockchip_decompress.c | 33 ++++++++++++---------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/drivers/soc/rockchip/rockchip_decompress.c b/drivers/soc/rockchip/rockchip_decompress.c index 335ebefb02d7..15b4f6601a8e 100644 --- a/drivers/soc/rockchip/rockchip_decompress.c +++ b/drivers/soc/rockchip/rockchip_decompress.c @@ -484,25 +484,28 @@ static int __init rockchip_decom_probe(struct platform_device *pdev) } mem = of_parse_phandle(np, "memory-region", 0); - if (!mem) { - dev_err(dev, "missing \"memory-region\" property\n"); -#ifndef CONFIG_ROCKCHIP_HW_DECOMPRESS_TEST + if (mem) { + ret = of_address_to_resource(mem, 0, ®); + of_node_put(mem); + if (ret) { + dev_err(dev, "invalid \"memory-region\" property\n"); + return -ENODEV; + } + + rk_dec->mem_start = reg.start; + rk_dec->mem_size = resource_size(®); + dev_info(dev, "Using reserved memory region: start=0x%pa, size=0x%zx\n", + &rk_dec->mem_start, rk_dec->mem_size); + } else { +#ifdef CONFIG_ROCKCHIP_HW_DECOMPRESS_TEST return -ENODEV; #endif + /* For user-space usage, memory-region is optional */ + rk_dec->mem_start = 0; + rk_dec->mem_size = 0; + dev_info(dev, "No memory-region specified, user-space memory management\n"); } - ret = of_address_to_resource(mem, 0, ®); - of_node_put(mem); - if (ret) { - dev_err(dev, "missing \"reg\" property\n"); -#ifndef CONFIG_ROCKCHIP_HW_DECOMPRESS_TEST - return -ENODEV; -#endif - } - - rk_dec->mem_start = reg.start; - rk_dec->mem_size = resource_size(®); - rk_dec->num_clocks = devm_clk_bulk_get_all(dev, &rk_dec->clocks); if (rk_dec->num_clocks < 0) { dev_err(dev, "failed to get decompress clock\n"); From 51f120552cc6a4980a40daca656a76b5c4dc5ca6 Mon Sep 17 00:00:00 2001 From: Chaoyi Chen Date: Fri, 16 May 2025 14:22:25 +0800 Subject: [PATCH 4/9] drm/rockchip: vop: Fix writeback interrupt process Fixes: f7e3199891ae ("drm/rockchip: vop: Add writeback support") Change-Id: I6740c489e472368be4b081c5490a776de535c5e7 Signed-off-by: Chaoyi Chen --- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 14 +++++++++++--- drivers/gpu/drm/rockchip/rockchip_vop_reg.c | 4 +++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index c7df6a48f10a..0a11e344a4cc 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -1832,16 +1832,24 @@ static uint32_t vop_read_and_clear_wb_irqs(struct vop *vop) const struct vop_data *vop_data = vop->data; const struct vop_intr *intr = vop_data->wb_intr; uint32_t irqs = VOPL_WB_UV_FIFO_FULL_INTR | VOPL_WB_YRGB_FIFO_FULL_INTR; - uint32_t val; + uint32_t val, ret; if (!intr) return 0; val = VOP_INTR_GET_TYPE2(vop, intr, status, irqs); + ret = val; + + /* For RV1126B, it should use VOPL_WB_YRGB_FIFO_FULL_INTR to + * clear all wb interrupt. + */ + if (vop->version == VOP_VERSION_RV1126B) + val |= VOPL_WB_YRGB_FIFO_FULL_INTR; + if (val) VOP_INTR_SET_TYPE2(vop, intr, clear, val, 1); - return val; + return ret; } static void vop_wb_commit(struct drm_crtc *crtc) @@ -5363,7 +5371,7 @@ static irqreturn_t vop_isr(int irq, void *data) spin_unlock_irqrestore(&vop->irq_lock, flags); /* This is expected for vop iommu irqs, since the irq is shared */ - if (!active_irqs) + if (!active_irqs && !wb_irqs) goto out_disable; if (active_irqs & DSP_HOLD_VALID_INTR) { diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c index 427643e37948..0793b7cad774 100644 --- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c +++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c @@ -2039,8 +2039,10 @@ static const struct vop_wb_regs rv1126b_vop_wb_regs = { }; static const int rv1126_wb_intrs[] = { - VOPL_WB_UV_FIFO_FULL_INTR, VOPL_WB_YRGB_FIFO_FULL_INTR, + VOPL_WB_UV_FIFO_FULL_INTR, + 0, + 0, VOPL_WB_COMPLETE_INTR, }; From 1791848c0daf6676b79a866f0e604ea36daec911 Mon Sep 17 00:00:00 2001 From: Chaoyi Chen Date: Fri, 16 May 2025 14:25:29 +0800 Subject: [PATCH 5/9] drm/rockchip: vop: Remove redundant writeback cleanup The drm_writeback_queue_job() function takes ownership of the passed job and requires the caller to manually set the connector state writeback_job pointer to NULL. Therefore, there is no need to clear the writeback_job again. Related commit: 97eb9eaeb95b ("drm: writeback: Cleanup job ownership handling when queuing job") Change-Id: Ie56de7e3dc617daa629c4d52514ec511ecdfee53 Signed-off-by: Chaoyi Chen --- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index 0a11e344a4cc..ffa2476d7eeb 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -1877,7 +1877,6 @@ static void vop_wb_commit(struct drm_crtc *crtc) fb->pitches[0], &wb_state->yrgb_addr); drm_writeback_queue_job(wb_conn, conn_state); - conn_state->writeback_job = NULL; spin_lock_irqsave(&wb->job_lock, flags); wb->jobs[wb->job_index].pending = true; From 87492351065ef6a01f288623ed522998de22656d Mon Sep 17 00:00:00 2001 From: Chaoyi Chen Date: Thu, 14 Nov 2024 13:59:27 +0000 Subject: [PATCH 6/9] drm/rockchip: vop: Enable writeback complete interrupt for rv1126b Change-Id: Ib070e905f644989f5e3a27fc53632257454560e9 Signed-off-by: Chaoyi Chen --- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 91 +++++++-------------- 1 file changed, 28 insertions(+), 63 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index ffa2476d7eeb..a73733d1daea 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -248,33 +248,9 @@ struct vop_win { struct drm_property *name_prop; }; -/* - * max two jobs a time, one is running(writing back), - * another one will run in next frame. - */ -#define VOP_WB_JOB_MAX 2 - -struct vop_wb_job { - bool pending; - /** - * @fs_vsync_cnt: frame start vysnc counter, - * used to get the write back complete event; - */ - uint32_t fs_vsync_cnt; -}; - struct vop_wb { struct drm_writeback_connector conn; const struct vop_wb_regs *regs; - struct vop_wb_job jobs[VOP_WB_JOB_MAX]; - uint8_t job_index; - - /** - * @job_lock: - * - * spinlock to protect the job between vop_wb_commit and vop_wb_handler in isr. - */ - spinlock_t job_lock; }; enum vop_wb_format { @@ -1791,7 +1767,6 @@ static int vop_wb_connector_init(struct vop *vop) vop->wb.regs = vop_data->wb->regs; vop->wb.conn.encoder.possible_crtcs = drm_crtc_mask(crtc); - spin_lock_init(&vop->wb.job_lock); drm_connector_helper_add(&vop->wb.conn.base, &vop_wb_connector_helper_funcs); ret = drm_writeback_connector_init(vop->drm_dev, &vop->wb.conn, @@ -1821,7 +1796,8 @@ static void vop_wb_irqs_enable(struct vop *vop) { const struct vop_data *vop_data = vop->data; const struct vop_intr *intr = vop_data->wb_intr; - uint32_t irqs = VOPL_WB_UV_FIFO_FULL_INTR | VOPL_WB_YRGB_FIFO_FULL_INTR; + uint32_t irqs = VOPL_WB_UV_FIFO_FULL_INTR | VOPL_WB_YRGB_FIFO_FULL_INTR | + VOPL_WB_COMPLETE_INTR; VOP_INTR_SET_TYPE2(vop, intr, clear, irqs, 1); VOP_INTR_SET_TYPE2(vop, intr, enable, irqs, 1); @@ -1831,7 +1807,8 @@ static uint32_t vop_read_and_clear_wb_irqs(struct vop *vop) { const struct vop_data *vop_data = vop->data; const struct vop_intr *intr = vop_data->wb_intr; - uint32_t irqs = VOPL_WB_UV_FIFO_FULL_INTR | VOPL_WB_YRGB_FIFO_FULL_INTR; + uint32_t irqs = VOPL_WB_UV_FIFO_FULL_INTR | VOPL_WB_YRGB_FIFO_FULL_INTR | + VOPL_WB_COMPLETE_INTR; uint32_t val, ret; if (!intr) @@ -1860,7 +1837,6 @@ static void vop_wb_commit(struct drm_crtc *crtc) struct drm_writeback_connector *wb_conn = &wb->conn; struct drm_connector_state *conn_state = wb_conn->base.state; struct vop_wb_connector_state *wb_state; - unsigned long flags; uint32_t fifo_throd; uint8_t r2y; @@ -1878,13 +1854,6 @@ static void vop_wb_commit(struct drm_crtc *crtc) drm_writeback_queue_job(wb_conn, conn_state); - spin_lock_irqsave(&wb->job_lock, flags); - wb->jobs[wb->job_index].pending = true; - wb->job_index++; - if (wb->job_index >= VOP_WB_JOB_MAX) - wb->job_index = 0; - spin_unlock_irqrestore(&wb->job_lock, flags); - fifo_throd = fb->pitches[0] >> 4; if (fifo_throd > vop->data->wb->fifo_depth) fifo_throd = vop->data->wb->fifo_depth; @@ -1923,33 +1892,6 @@ static void __maybe_unused vop_wb_disable(struct vop *vop) vop_wb_cfg_done(vop); } -static void vop_wb_handler(struct vop *vop) -{ - struct vop_wb *wb = &vop->wb; - struct vop_wb_job *job; - unsigned long flags; - uint8_t i; - - if (!wb->regs) - return; - - /* In one shot mode, wb_en is auto disable */ - spin_lock_irqsave(&wb->job_lock, flags); - for (i = 0; i < VOP_WB_JOB_MAX; i++) { - job = &wb->jobs[i]; - if (job->pending) { - job->fs_vsync_cnt++; - - if (job->fs_vsync_cnt == 2) { - job->pending = false; - job->fs_vsync_cnt = 0; - drm_writeback_signal_completion(&vop->wb.conn, 0); - } - } - } - spin_unlock_irqrestore(&wb->job_lock, flags); -} - static void vop_crtc_load_lut(struct drm_crtc *crtc) { struct vop *vop = to_vop(crtc); @@ -5334,6 +5276,24 @@ static void vop_handle_vblank(struct vop *vop) drm_flip_work_commit(&vop->fb_unref_work, system_unbound_wq); } +static void vop_wb_complete(struct vop *vop) +{ + struct vop_wb *wb = &vop->wb; + bool wb_oneframe_mode; + bool wb_en; + + wb_en = VOP_CTRL_GET2(vop, wb, enable); + wb_oneframe_mode = VOP_CTRL_GET2(vop, wb, one_frame_mode); + /* + * The write back should work in one shot mode, + * stop when write back complete in next vsync. + */ + if (wb_en && !wb_oneframe_mode) + vop_wb_disable(vop); + + drm_writeback_signal_completion(&vop->wb.conn, 0); +} + static irqreturn_t vop_isr(int irq, void *data) { struct vop *vop = data; @@ -5395,7 +5355,6 @@ static irqreturn_t vop_isr(int irq, void *data) VOP_CTRL_SET(vop, level2_overlay_en, vop->pre_overlay); VOP_CTRL_SET(vop, alpha_hard_calc, vop->pre_overlay); spin_unlock_irqrestore(&vop->irq_lock, flags); - vop_wb_handler(vop); drm_crtc_handle_vblank(crtc); vop_handle_vblank(vop); active_irqs &= ~(FS_INTR | FS_FIELD_INTR); @@ -5427,6 +5386,12 @@ static irqreturn_t vop_isr(int irq, void *data) active_irqs = wb_irqs; ERROR_HANDLER(VOPL_WB_UV_FIFO_FULL); ERROR_HANDLER(VOPL_WB_YRGB_FIFO_FULL); + if (active_irqs & VOPL_WB_COMPLETE_INTR) { + active_irqs &= ~VOPL_WB_COMPLETE_INTR; + vop_wb_complete(vop); + } + if (active_irqs) + DRM_ERROR("Unknown writeback IRQs: %02x\n", active_irqs); } out_disable: From 9deae3276c1edaa844cb964895a24c8f3a25263b Mon Sep 17 00:00:00 2001 From: Chaoyi Chen Date: Fri, 16 May 2025 15:24:57 +0800 Subject: [PATCH 7/9] drm/rockchip: vop: Add enabled_win_mask to record enabled win Change-Id: I15bc5fe018280f9cb0c1157ad3cd2b9413e854d2 Signed-off-by: Chaoyi Chen --- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index a73733d1daea..58c24ca09751 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -291,6 +291,11 @@ struct vop { bool aclk_rate_reset; unsigned long aclk_rate; + /** + * @enabled_win_mask: Bitmask of enabled wins attached to the VOP + */ + uint32_t enabled_win_mask; + u32 version; u32 background; u32 line_flag; @@ -621,6 +626,7 @@ static bool vop_is_allwin_disabled(struct vop *vop) static void vop_win_disable(struct vop *vop, struct vop_win *win) { + vop->enabled_win_mask &= ~BIT(win->win_id); /* * FIXUP: some of the vop scale would be abnormal after windows power * on/off so deinit scale to scale_none mode. @@ -2707,6 +2713,8 @@ static void vop_plane_atomic_update(struct drm_plane *plane, VOP_WIN_SET(vop, win, gate, 1); spin_unlock(&vop->reg_lock); + vop->enabled_win_mask |= BIT(win->win_id); + if (rockchip_afbc(plane, fb->modifier)) afbc_en = true; rockchip_drm_dbg_thread_info(vop->dev, VOP_DEBUG_PLANE, @@ -3130,6 +3138,7 @@ static int vop_crtc_loader_protect(struct drm_crtc *crtc, bool on, void *data) struct vop *vop = to_vop(crtc); int sys_status = drm_crtc_index(crtc) ? SYS_STATUS_LCDC1 : SYS_STATUS_LCDC0; + struct vop_win *win; if (on == vop->loader_protect) return 0; @@ -3151,6 +3160,11 @@ static int vop_crtc_loader_protect(struct drm_crtc *crtc, bool on, void *data) rockchip_set_system_status(sys_status); vop_initial(crtc); + if (crtc->primary) { + win = to_vop_win(crtc->primary); + if (VOP_WIN_GET(vop, win, enable)) + vop->enabled_win_mask |= BIT(win->win_id); + } drm_crtc_vblank_on(crtc); vop->loader_protect = true; } else { From 89527bc74515e1779f7e95cfea3e3bf1f449eae0 Mon Sep 17 00:00:00 2001 From: Chaoyi Chen Date: Fri, 16 May 2025 15:28:13 +0800 Subject: [PATCH 8/9] drm/rockchip: vop: Do not commit writeback when all win disabled Change-Id: Iaa96aebaf2d6f225ebd3a35648b219510d38f648 Signed-off-by: Chaoyi Chen --- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index 58c24ca09751..60bb12a15a55 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -1859,6 +1859,11 @@ static void vop_wb_commit(struct drm_crtc *crtc) fb->pitches[0], &wb_state->yrgb_addr); drm_writeback_queue_job(wb_conn, conn_state); + if (!vop->enabled_win_mask) { + drm_warn(vop->drm_dev, "Writeback can not work when all plane are disabled!"); + drm_writeback_signal_completion(&vop->wb.conn, 0); + return; + } fifo_throd = fb->pitches[0] >> 4; if (fifo_throd > vop->data->wb->fifo_depth) From f854f64c008300f5ae3e75cfc7dec5e848850655 Mon Sep 17 00:00:00 2001 From: Chaoyi Chen Date: Tue, 12 Aug 2025 09:58:55 +0800 Subject: [PATCH 9/9] drm/rockchip: vop: Do not clear wb intr status when commit new wb If a new wb commit is too close to the timing of wb dma complete, clearing the wb intr status will lose the wb dma complete status. In this case, the software process is as follows: vop_wb_commit() -> vop_wb_irqs_enable() -> Clear wb intr -> vop_isr() -> vop_read_and_clear_wb_irqs() Since we had cleared the intr in vop_wb_irqs_enable(), the value read by vop_read_and_clear_wb_irqs() is 0, and we have lost the interrupt status. Change-Id: Ida08e94ce1d987f7edbcb6448c0b3f034add1bce Signed-off-by: Chaoyi Chen --- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index 60bb12a15a55..97a3d0de7968 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -1805,7 +1805,6 @@ static void vop_wb_irqs_enable(struct vop *vop) uint32_t irqs = VOPL_WB_UV_FIFO_FULL_INTR | VOPL_WB_YRGB_FIFO_FULL_INTR | VOPL_WB_COMPLETE_INTR; - VOP_INTR_SET_TYPE2(vop, intr, clear, irqs, 1); VOP_INTR_SET_TYPE2(vop, intr, enable, irqs, 1); }