From 3f23ab26121a6caee9af86f8ec42fac2f2a9b9f1 Mon Sep 17 00:00:00 2001 From: Sandy Huang Date: Wed, 11 Jan 2023 15:48:58 +0800 Subject: [PATCH] drm/rockchip: vop2: fix splash screen when adjust gamma Fixes: 52c123bfd469 ("drm/rockchip: vop2: Move color cfg to atomic_flush") Signed-off-by: Sandy Huang Change-Id: Ida8d8ce7edd59015226fd7436c60610f510b5c05 --- drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index a9911b50375e..5650d639fd01 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -997,6 +997,15 @@ static inline uint32_t vop2_read_grf_reg(struct regmap *regmap, const struct vop return (vop2_grf_readl(regmap, reg) >> reg->shift) & reg->mask; } +static inline void vop2_write_reg_uncached(struct vop2 *vop2, const struct vop_reg *reg, uint32_t v) +{ + uint32_t offset = reg->offset; + uint32_t cached_val = vop2->regsbak[offset >> 2]; + + v = (cached_val & ~(reg->mask << reg->shift)) | ((v & reg->mask) << reg->shift); + writel(v, vop2->regs + offset); +} + static inline void vop2_mask_write(struct vop2 *vop2, uint32_t offset, uint32_t mask, uint32_t shift, uint32_t v, bool write_mask, bool relaxed) @@ -3304,7 +3313,7 @@ static void rk3568_crtc_load_lut(struct drm_crtc *crtc) spin_lock(&vop2->reg_lock); VOP_MODULE_SET(vop2, vp, dsp_lut_en, 1); - VOP_MODULE_SET(vop2, vp, gamma_update_en, 1); + vop2_write_reg_uncached(vop2, &vp->regs->gamma_update_en, 1); vop2_cfg_done(crtc); vp->gamma_lut_active = true; @@ -3325,7 +3334,7 @@ static void rk3588_crtc_load_lut(struct drm_crtc *crtc, u32 *lut) vop2_write_lut(vop2, i << 2, lut[i]); VOP_MODULE_SET(vop2, vp, dsp_lut_en, 1); - VOP_MODULE_SET(vop2, vp, gamma_update_en, 1); + vop2_write_reg_uncached(vop2, &vp->regs->gamma_update_en, 1); vp->gamma_lut_active = true; spin_unlock(&vop2->reg_lock);