FAILED: patch "[PATCH] drm/rockchip: vop: clear DMA stop bit on RK3066" failed to apply to 5.15-stable tree
Subsystems (5)
[email protected]
maintainerThe patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.15.y
git checkout FETCH_HEAD
git cherry-pick -x 6b44aa559d6c7f4ea591ef9d2352a7250138d62a
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2024100707-brunch-thumb-0511@gregkh' --subject-prefix 'PATCH 5.15.y' HEAD^..
Possible dependencies:
6b44aa559d6c ("drm/rockchip: vop: clear DMA stop bit on RK3066")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 6b44aa559d6c7f4ea591ef9d2352a7250138d62a Mon Sep 17 00:00:00 2001
From: Val Packett <[email protected]>
Date: Mon, 24 Jun 2024 17:40:48 -0300
Subject: [PATCH] drm/rockchip: vop: clear DMA stop bit on RK3066
The RK3066 VOP sets a dma_stop bit when it's done scanning out a frame and needs the driver to acknowledge that by clearing the bit.
Unless we clear it "between" frames, the RGB output only shows noise instead of the picture. atomic_flush is the place for it that least affects other code (doing it on vblank would require converting all other usages of the reg_lock to spin_(un)lock_irq, which would affect performance for everyone).
This seems to be a redundant synchronization mechanism that was removed in later iterations of the VOP hardware block.
drivers/gpu/drm/rockchip/rockchip_drm_vop.c +4 -0
@@ -1583,6 +1583,10 @@ static void vop_crtc_atomic_flush(struct drm_crtc *crtc,VOP_AFBC_SET (vop, enable, s->enable_afbc);vop_cfg_done (vop); +/* Ack the DMA transfer of the previous frame (RK3066). */ +if (VOP_HAS_REG (vop, common, dma_stop)) +VOP_REG_SET (vop, common, dma_stop,0 ); +spin_unlock (&vop->reg_lock);/*
drivers/gpu/drm/rockchip/rockchip_drm_vop.h +1 -0
@@ -122,6 +122,7 @@ struct vop_common {struct vop_reg lut_buffer_index;struct vop_reg gate_en;struct vop_reg mmu_en; +struct vop_reg dma_stop;struct vop_reg out_mode;struct vop_reg standby; };
drivers/gpu/drm/rockchip/rockchip_vop_reg.c +1 -0
@@ -466,6 +466,7 @@ static const struct vop_output rk3066_output = { };static const struct vop_common rk3066_common = { + .dma_stop =VOP_REG (RK3066_SYS_CTRL0 ,0x1 ,0 ), .standby =VOP_REG (RK3066_SYS_CTRL0 ,0x1 ,1 ), .out_mode =VOP_REG (RK3066_DSP_CTRL0 ,0xf ,0 ), .cfg_done =VOP_REG (RK3066_REG_CFG_DONE ,0x1 ,0 ),