Hi Val, Am Montag, 27. Mai 2024, 09:16:33 CEST schrieb Val Packett: > On the RK3066, there is a bit that must be cleared, otherwise > the picture does not show up on the display (at least for RGB). > > Fixes: f4a6de8 ("drm: rockchip: vop: add rk3066 vop definitions") > Cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Val Packett <val@xxxxxxxxxxxx> > --- > v2: doing this on vblank makes more sense; added fixes tag can you give a rationale for this please? I.e. does this dma-stop bit need to be set on each vblank that happens to push this frame to the display somehow? Because at least in theory atomic_flush where this was living in in v1, might happen at a slower interval? Thanks Heiko > --- > drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 6 ++++++ > drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 1 + > drivers/gpu/drm/rockchip/rockchip_vop_reg.c | 1 + > 3 files changed, 8 insertions(+) > > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > index a13473b2d..2731fe2b2 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > @@ -1766,6 +1766,12 @@ static void vop_handle_vblank(struct vop *vop) > } > spin_unlock(&drm->event_lock); > > + if (VOP_HAS_REG(vop, common, dma_stop)) { > + spin_lock(&vop->reg_lock); > + VOP_REG_SET(vop, common, dma_stop, 0); > + spin_unlock(&vop->reg_lock); > + } > + > if (test_and_clear_bit(VOP_PENDING_FB_UNREF, &vop->pending)) > drm_flip_work_commit(&vop->fb_unref_work, system_unbound_wq); > } > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h > index b33e5bdc2..0cf512cc1 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h > @@ -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; > }; > diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c > index b9ee02061..9bcb40a64 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c > +++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c > @@ -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), >