Commit d1f8face authored by Andy Yan's avatar Andy Yan Committed by Heiko Stuebner

drm/rockchip: vop2: Add write mask for VP config done

The write mask bit is used to make sure when writing
config done bit for one VP will not overwrite the other.

Unfortunately, the write mask bit is missing on
rk3566/8, that means when we write to these bits,
it will not take any effect.

We need this to make the vop work properly after
rk3566/8 variants.
Signed-off-by: default avatarAndy Yan <andy.yan@rock-chips.com>
Signed-off-by: default avatarHeiko Stuebner <heiko@sntech.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20231211115752.1785013-1-andyshrk@163.com
parent 20529a68
...@@ -268,12 +268,23 @@ static bool vop2_cluster_window(const struct vop2_win *win) ...@@ -268,12 +268,23 @@ static bool vop2_cluster_window(const struct vop2_win *win)
return win->data->feature & WIN_FEATURE_CLUSTER; return win->data->feature & WIN_FEATURE_CLUSTER;
} }
/*
* Note:
* The write mask function is documented but missing on rk3566/8, writes
* to these bits have no effect. For newer soc(rk3588 and following) the
* write mask is needed for register writes.
*
* GLB_CFG_DONE_EN has no write mask bit.
*
*/
static void vop2_cfg_done(struct vop2_video_port *vp) static void vop2_cfg_done(struct vop2_video_port *vp)
{ {
struct vop2 *vop2 = vp->vop2; struct vop2 *vop2 = vp->vop2;
u32 val = RK3568_REG_CFG_DONE__GLB_CFG_DONE_EN;
val |= BIT(vp->id) | (BIT(vp->id) << 16);
regmap_set_bits(vop2->map, RK3568_REG_CFG_DONE, regmap_set_bits(vop2->map, RK3568_REG_CFG_DONE, val);
BIT(vp->id) | RK3568_REG_CFG_DONE__GLB_CFG_DONE_EN);
} }
static void vop2_win_disable(struct vop2_win *win) static void vop2_win_disable(struct vop2_win *win)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment