Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/rockchip: vop2: switch to FIELD_PREP_WM16 macro

The era of hand-rolled HIWORD_UPDATE macros is over, at least for those
drivers that use constant masks.

Remove VOP2's HIWORD_UPDATE macro from the vop2 header file, and replace
all instances in rockchip_vop2_reg.c (the only user of this particular
HIWORD_UPDATE definition) with equivalent FIELD_PREP_WM16 instances. This
gives us better error checking.

Reviewed-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
Tested-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
Signed-off-by: Yury Norov (NVIDIA) <yury.norov@gmail.com>

authored by

Nicolas Frattaroli and committed by
Yury Norov
9040ecd0 1a99efa3

+9 -7
-1
drivers/gpu/drm/rockchip/rockchip_drm_vop2.h
··· 33 33 #define WIN_FEATURE_AFBDC BIT(0) 34 34 #define WIN_FEATURE_CLUSTER BIT(1) 35 35 36 - #define HIWORD_UPDATE(v, h, l) ((GENMASK(h, l) << 16) | ((v) << (l))) 37 36 /* 38 37 * the delay number of a window in different mode. 39 38 */
+9 -6
drivers/gpu/drm/rockchip/rockchip_vop2_reg.c
··· 7 7 #include <linux/bitfield.h> 8 8 #include <linux/kernel.h> 9 9 #include <linux/component.h> 10 + #include <linux/hw_bitfield.h> 10 11 #include <linux/mod_devicetable.h> 11 12 #include <linux/platform_device.h> 12 13 #include <linux/of.h> ··· 1696 1695 die |= RK3588_SYS_DSP_INFACE_EN_HDMI0 | 1697 1696 FIELD_PREP(RK3588_SYS_DSP_INFACE_EN_EDP_HDMI0_MUX, vp->id); 1698 1697 val = rk3588_get_hdmi_pol(polflags); 1699 - regmap_write(vop2->vop_grf, RK3588_GRF_VOP_CON2, HIWORD_UPDATE(1, 1, 1)); 1700 - regmap_write(vop2->vo1_grf, RK3588_GRF_VO1_CON0, HIWORD_UPDATE(val, 6, 5)); 1698 + regmap_write(vop2->vop_grf, RK3588_GRF_VOP_CON2, FIELD_PREP_WM16(BIT(1), 1)); 1699 + regmap_write(vop2->vo1_grf, RK3588_GRF_VO1_CON0, 1700 + FIELD_PREP_WM16(GENMASK(6, 5), val)); 1701 1701 break; 1702 1702 case ROCKCHIP_VOP2_EP_HDMI1: 1703 1703 div &= ~RK3588_DSP_IF_EDP_HDMI1_DCLK_DIV; ··· 1709 1707 die |= RK3588_SYS_DSP_INFACE_EN_HDMI1 | 1710 1708 FIELD_PREP(RK3588_SYS_DSP_INFACE_EN_EDP_HDMI1_MUX, vp->id); 1711 1709 val = rk3588_get_hdmi_pol(polflags); 1712 - regmap_write(vop2->vop_grf, RK3588_GRF_VOP_CON2, HIWORD_UPDATE(1, 4, 4)); 1713 - regmap_write(vop2->vo1_grf, RK3588_GRF_VO1_CON0, HIWORD_UPDATE(val, 8, 7)); 1710 + regmap_write(vop2->vop_grf, RK3588_GRF_VOP_CON2, FIELD_PREP_WM16(BIT(4), 1)); 1711 + regmap_write(vop2->vo1_grf, RK3588_GRF_VO1_CON0, 1712 + FIELD_PREP_WM16(GENMASK(8, 7), val)); 1714 1713 break; 1715 1714 case ROCKCHIP_VOP2_EP_EDP0: 1716 1715 div &= ~RK3588_DSP_IF_EDP_HDMI0_DCLK_DIV; ··· 1721 1718 die &= ~RK3588_SYS_DSP_INFACE_EN_EDP_HDMI0_MUX; 1722 1719 die |= RK3588_SYS_DSP_INFACE_EN_EDP0 | 1723 1720 FIELD_PREP(RK3588_SYS_DSP_INFACE_EN_EDP_HDMI0_MUX, vp->id); 1724 - regmap_write(vop2->vop_grf, RK3588_GRF_VOP_CON2, HIWORD_UPDATE(1, 0, 0)); 1721 + regmap_write(vop2->vop_grf, RK3588_GRF_VOP_CON2, FIELD_PREP_WM16(BIT(0), 1)); 1725 1722 break; 1726 1723 case ROCKCHIP_VOP2_EP_EDP1: 1727 1724 div &= ~RK3588_DSP_IF_EDP_HDMI1_DCLK_DIV; ··· 1731 1728 die &= ~RK3588_SYS_DSP_INFACE_EN_EDP_HDMI1_MUX; 1732 1729 die |= RK3588_SYS_DSP_INFACE_EN_EDP1 | 1733 1730 FIELD_PREP(RK3588_SYS_DSP_INFACE_EN_EDP_HDMI1_MUX, vp->id); 1734 - regmap_write(vop2->vop_grf, RK3588_GRF_VOP_CON2, HIWORD_UPDATE(1, 3, 3)); 1731 + regmap_write(vop2->vop_grf, RK3588_GRF_VOP_CON2, FIELD_PREP_WM16(BIT(3), 1)); 1735 1732 break; 1736 1733 case ROCKCHIP_VOP2_EP_MIPI0: 1737 1734 div &= ~RK3588_DSP_IF_MIPI0_PCLK_DIV;