Lines Matching +full:non +full:- +full:linear
1 // SPDX-License-Identifier: GPL-2.0-only
4 * Author: Andy Yan <andy.yan@rock-chips.com>
68 DRM_FORMAT_YUV420_8BIT, /* yuv420_8bit non-Linear mode only */
69 DRM_FORMAT_YUV420_10BIT, /* yuv420_10bit non-Linear mode only */
70 DRM_FORMAT_YUYV, /* yuv422_8bit non-Linear mode only*/
71 DRM_FORMAT_Y210, /* yuv422_10bit non-Linear mode only */
76 * RGB: linear mode and afbc
77 * YUV: linear mode and rfbc
78 * rfbc is a rockchip defined non-linear mode, produced by
94 DRM_FORMAT_NV12, /* yuv420_8bit linear mode, 2 plane */
95 DRM_FORMAT_NV21, /* yvu420_8bit linear mode, 2 plane */
96 DRM_FORMAT_NV16, /* yuv422_8bit linear mode, 2 plane */
97 DRM_FORMAT_NV61, /* yvu422_8bit linear mode, 2 plane */
98 DRM_FORMAT_NV24, /* yuv444_8bit linear mode, 2 plane */
99 DRM_FORMAT_NV42, /* yvu444_8bit linear mode, 2 plane */
100 DRM_FORMAT_NV15, /* yuv420_10bit linear mode, 2 plane, no padding */
101 DRM_FORMAT_NV20, /* yuv422_10bit linear mode, 2 plane, no padding */
102 DRM_FORMAT_NV30, /* yuv444_10bit linear mode, 2 plane, no padding */
114 DRM_FORMAT_NV12, /* yuv420_8bit linear mode, 2 plane */
115 DRM_FORMAT_NV21, /* yvu420_8bit linear mode, 2 plane */
116 DRM_FORMAT_NV16, /* yuv422_8bit linear mode, 2 plane */
117 DRM_FORMAT_NV61, /* yvu422_8bit linear mode, 2 plane */
118 DRM_FORMAT_NV20, /* yuv422_10bit linear mode, 2 plane, no padding */
119 DRM_FORMAT_NV24, /* yuv444_8bit linear mode, 2 plane */
120 DRM_FORMAT_NV42, /* yvu444_8bit linear mode, 2 plane */
121 DRM_FORMAT_NV30, /* yuv444_10bit linear mode, 2 plane, no padding */
122 DRM_FORMAT_NV15, /* yuv420_10bit linear mode, 2 plane, no padding */
123 DRM_FORMAT_YVYU, /* yuv422_8bit[YVYU] linear mode */
124 DRM_FORMAT_VYUY, /* yuv422_8bit[VYUY] linear mode */
125 DRM_FORMAT_YUYV, /* yuv422_8bit[YUYV] linear mode */
126 DRM_FORMAT_UYVY, /* yuv422_8bit[UYVY] linear mode */
138 DRM_FORMAT_NV12, /* yuv420_8bit linear mode, 2 plane */
139 DRM_FORMAT_NV21, /* yuv420_8bit linear mode, 2 plane */
140 DRM_FORMAT_NV15, /* yuv420_10bit linear mode, 2 plane, no padding */
141 DRM_FORMAT_NV16, /* yuv422_8bit linear mode, 2 plane */
142 DRM_FORMAT_NV61, /* yuv422_8bit linear mode, 2 plane */
143 DRM_FORMAT_NV20, /* yuv422_10bit linear mode, 2 plane, no padding */
144 DRM_FORMAT_NV24, /* yuv444_8bit linear mode, 2 plane */
145 DRM_FORMAT_NV42, /* yuv444_8bit linear mode, 2 plane */
146 DRM_FORMAT_NV30, /* yuv444_10bit linear mode, 2 plane, no padding */
147 DRM_FORMAT_YVYU, /* yuv422_8bit[YVYU] linear mode */
148 DRM_FORMAT_VYUY, /* yuv422_8bit[VYUY] linear mode */
171 DRM_FORMAT_NV12, /* yuv420_8bit linear mode, 2 plane */
172 DRM_FORMAT_NV21, /* yvu420_8bit linear mode, 2 plane */
173 DRM_FORMAT_NV16, /* yuv422_8bit linear mode, 2 plane */
174 DRM_FORMAT_NV61, /* yvu422_8bit linear mode, 2 plane */
175 DRM_FORMAT_NV20, /* yuv422_10bit linear mode, 2 plane, no padding */
176 DRM_FORMAT_NV24, /* yuv444_8bit linear mode, 2 plane */
177 DRM_FORMAT_NV42, /* yvu444_8bit linear mode, 2 plane */
178 DRM_FORMAT_NV30, /* yuv444_10bit linear mode, 2 plane, no padding */
179 DRM_FORMAT_NV15, /* yuv420_10bit linear mode, 2 plane, no padding */
180 DRM_FORMAT_YVYU, /* yuv422_8bit[YVYU] linear mode */
181 DRM_FORMAT_VYUY, /* yuv422_8bit[VYUY] linear mode */
182 DRM_FORMAT_YUYV, /* yuv422_8bit[YUYV] linear mode */
183 DRM_FORMAT_UYVY, /* yuv422_8bit[UYVY] linear mode */
583 * Every esmart win and smart win support 4 Multi-region.
589 * * nearest-neighbor/bilinear/bicubic for scale up
590 * * nearest-neighbor/bilinear/average for scale down
593 * @TODO describe the wind like cpu-map dt nodes;
597 .name = "Smart0-win0",
612 .name = "Smart1-win0",
626 .name = "Esmart1-win0",
640 .name = "Esmart0-win0",
654 .name = "Cluster0-win0",
670 .name = "Cluster1-win0",
807 * Every esmart win support 4 Multi-region.
819 * * nearest-neighbor/bilinear/multi-phase filter for scale up
820 * * nearest-neighbor/bilinear/multi-phase filter for scale down
827 * * nearest-neighbor/bilinear/bicubic for scale up
828 * * nearest-neighbor/bilinear for scale down
854 .name = "Cluster0-win0",
871 .name = "Cluster1-win0",
888 .name = "Esmart0-win0",
904 .name = "Esmart1-win0",
920 .name = "Esmart2-win0",
936 .name = "Esmart3-win0",
1096 * Every esmart win and smart win support 4 Multi-region.
1102 * * nearest-neighbor/bilinear/bicubic for scale up
1103 * * nearest-neighbor/bilinear/average for scale down
1122 .name = "Cluster0-win0",
1141 .name = "Cluster1-win0",
1160 .name = "Cluster2-win0",
1179 .name = "Cluster3-win0",
1198 .name = "Esmart0-win0",
1215 .name = "Esmart1-win0",
1232 .name = "Esmart2-win0",
1249 .name = "Esmart3-win0",
1373 struct vop2 *vop2 = vp->vop2; in rk3568_set_intf_mux()
1374 struct drm_crtc *crtc = &vp->crtc; in rk3568_set_intf_mux()
1384 FIELD_PREP(RK3568_SYS_DSP_INFACE_EN_RGB_MUX, vp->id); in rk3568_set_intf_mux()
1388 regmap_write(vop2->sys_grf, RK3568_GRF_VO_CON1, BIT(3 + 16) | BIT(3)); in rk3568_set_intf_mux()
1390 regmap_write(vop2->sys_grf, RK3568_GRF_VO_CON1, BIT(3 + 16)); in rk3568_set_intf_mux()
1395 FIELD_PREP(RK3568_SYS_DSP_INFACE_EN_HDMI_MUX, vp->id); in rk3568_set_intf_mux()
1402 FIELD_PREP(RK3568_SYS_DSP_INFACE_EN_EDP_MUX, vp->id); in rk3568_set_intf_mux()
1409 FIELD_PREP(RK3568_SYS_DSP_INFACE_EN_MIPI0_MUX, vp->id); in rk3568_set_intf_mux()
1416 FIELD_PREP(RK3568_SYS_DSP_INFACE_EN_MIPI1_MUX, vp->id); in rk3568_set_intf_mux()
1423 FIELD_PREP(RK3568_SYS_DSP_INFACE_EN_LVDS0_MUX, vp->id); in rk3568_set_intf_mux()
1430 FIELD_PREP(RK3568_SYS_DSP_INFACE_EN_LVDS1_MUX, vp->id); in rk3568_set_intf_mux()
1435 drm_err(vop2->drm, "Invalid interface id %d on vp%d\n", id, vp->id); in rk3568_set_intf_mux()
1444 return crtc->state->adjusted_mode.crtc_clock * 1000LL; in rk3568_set_intf_mux()
1449 struct vop2 *vop2 = vp->vop2; in rk3576_set_intf_mux()
1450 struct drm_crtc *crtc = &vp->crtc; in rk3576_set_intf_mux()
1451 struct drm_display_mode *adjusted_mode = &crtc->state->adjusted_mode; in rk3576_set_intf_mux()
1452 struct rockchip_crtc_state *vcstate = to_rockchip_crtc_state(crtc->state); in rk3576_set_intf_mux()
1453 u8 port_pix_rate = vp->data->pixel_rate; in rk3576_set_intf_mux()
1458 if (vcstate->output_mode == ROCKCHIP_OUT_MODE_YUV420 || adjusted_mode->crtc_clock > 600000) in rk3576_set_intf_mux()
1463 if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK) in rk3576_set_intf_mux()
1464 dclk_core_rate = adjusted_mode->crtc_clock / 2; in rk3576_set_intf_mux()
1466 dclk_core_rate = adjusted_mode->crtc_clock / port_pix_rate; in rk3576_set_intf_mux()
1468 dclk_in_rate = adjusted_mode->crtc_clock / dclk_div; in rk3576_set_intf_mux()
1477 if (vcstate->output_mode == ROCKCHIP_OUT_MODE_YUV420) { in rk3576_set_intf_mux()
1502 drm_err(vop2->drm, "Invalid interface id %d on vp%d\n", id, vp->id); in rk3576_set_intf_mux()
1513 ctrl |= FIELD_PREP(RK3576_DSP_IF_MUX, vp->id); in rk3576_set_intf_mux()
1551 struct vop2 *vop2 = vp->vop2; in rk3588_calc_cru_cfg()
1552 struct drm_crtc *crtc = &vp->crtc; in rk3588_calc_cru_cfg()
1553 struct drm_display_mode *adjusted_mode = &crtc->state->adjusted_mode; in rk3588_calc_cru_cfg()
1554 struct rockchip_crtc_state *vcstate = to_rockchip_crtc_state(crtc->state); in rk3588_calc_cru_cfg()
1555 int output_mode = vcstate->output_mode; in rk3588_calc_cru_cfg()
1556 unsigned long v_pixclk = adjusted_mode->crtc_clock * 1000LL; /* video timing pixclk */ in rk3588_calc_cru_cfg()
1601 drm_err(vop2->drm, "DP dclk_out_rate out of range, dclk_out_rate: %ld Hz\n", in rk3588_calc_cru_cfg()
1618 drm_err(vop2->drm, "MIPI dclk out of range, dclk_out_rate: %ld Hz\n", in rk3588_calc_cru_cfg()
1637 drm_dbg(vop2->drm, "dclk: %ld, pixclk_div: %d, dclk_div: %d\n", in rk3588_calc_cru_cfg()
1671 struct vop2 *vop2 = vp->vop2; in rk3588_set_intf_mux()
1696 FIELD_PREP(RK3588_SYS_DSP_INFACE_EN_EDP_HDMI0_MUX, vp->id); in rk3588_set_intf_mux()
1698 regmap_write(vop2->vop_grf, RK3588_GRF_VOP_CON2, HIWORD_UPDATE(1, 1, 1)); in rk3588_set_intf_mux()
1699 regmap_write(vop2->vo1_grf, RK3588_GRF_VO1_CON0, HIWORD_UPDATE(val, 6, 5)); in rk3588_set_intf_mux()
1708 FIELD_PREP(RK3588_SYS_DSP_INFACE_EN_EDP_HDMI1_MUX, vp->id); in rk3588_set_intf_mux()
1710 regmap_write(vop2->vop_grf, RK3588_GRF_VOP_CON2, HIWORD_UPDATE(1, 4, 4)); in rk3588_set_intf_mux()
1711 regmap_write(vop2->vo1_grf, RK3588_GRF_VO1_CON0, HIWORD_UPDATE(val, 8, 7)); in rk3588_set_intf_mux()
1720 FIELD_PREP(RK3588_SYS_DSP_INFACE_EN_EDP_HDMI0_MUX, vp->id); in rk3588_set_intf_mux()
1721 regmap_write(vop2->vop_grf, RK3588_GRF_VOP_CON2, HIWORD_UPDATE(1, 0, 0)); in rk3588_set_intf_mux()
1730 FIELD_PREP(RK3588_SYS_DSP_INFACE_EN_EDP_HDMI1_MUX, vp->id); in rk3588_set_intf_mux()
1731 regmap_write(vop2->vop_grf, RK3588_GRF_VOP_CON2, HIWORD_UPDATE(1, 3, 3)); in rk3588_set_intf_mux()
1737 val = rk3588_get_mipi_port_mux(vp->id); in rk3588_set_intf_mux()
1745 val = rk3588_get_mipi_port_mux(vp->id); in rk3588_set_intf_mux()
1752 FIELD_PREP(RK3588_SYS_DSP_INFACE_EN_DP0_MUX, vp->id); in rk3588_set_intf_mux()
1759 FIELD_PREP(RK3588_SYS_DSP_INFACE_EN_DP1_MUX, vp->id); in rk3588_set_intf_mux()
1764 drm_err(vop2->drm, "Invalid interface id %d on vp%d\n", id, vp->id); in rk3588_set_intf_mux()
1786 int src_glb_alpha_en = is_opaque(alpha_config->src_glb_alpha_value) ? 0 : 1; in vop2_parse_alpha()
1787 int dst_glb_alpha_en = is_opaque(alpha_config->dst_glb_alpha_value) ? 0 : 1; in vop2_parse_alpha()
1788 int src_color_mode = alpha_config->src_premulti_en ? in vop2_parse_alpha()
1790 int dst_color_mode = alpha_config->dst_premulti_en ? in vop2_parse_alpha()
1793 alpha->src_color_ctrl.val = 0; in vop2_parse_alpha()
1794 alpha->dst_color_ctrl.val = 0; in vop2_parse_alpha()
1795 alpha->src_alpha_ctrl.val = 0; in vop2_parse_alpha()
1796 alpha->dst_alpha_ctrl.val = 0; in vop2_parse_alpha()
1798 if (!alpha_config->src_pixel_alpha_en) in vop2_parse_alpha()
1799 alpha->src_color_ctrl.bits.blend_mode = ALPHA_GLOBAL; in vop2_parse_alpha()
1800 else if (alpha_config->src_pixel_alpha_en && !src_glb_alpha_en) in vop2_parse_alpha()
1801 alpha->src_color_ctrl.bits.blend_mode = ALPHA_PER_PIX; in vop2_parse_alpha()
1803 alpha->src_color_ctrl.bits.blend_mode = ALPHA_PER_PIX_GLOBAL; in vop2_parse_alpha()
1805 alpha->src_color_ctrl.bits.alpha_en = 1; in vop2_parse_alpha()
1807 if (alpha->src_color_ctrl.bits.blend_mode == ALPHA_GLOBAL) { in vop2_parse_alpha()
1808 alpha->src_color_ctrl.bits.color_mode = src_color_mode; in vop2_parse_alpha()
1809 alpha->src_color_ctrl.bits.factor_mode = SRC_FAC_ALPHA_SRC_GLOBAL; in vop2_parse_alpha()
1810 } else if (alpha->src_color_ctrl.bits.blend_mode == ALPHA_PER_PIX) { in vop2_parse_alpha()
1811 alpha->src_color_ctrl.bits.color_mode = src_color_mode; in vop2_parse_alpha()
1812 alpha->src_color_ctrl.bits.factor_mode = SRC_FAC_ALPHA_ONE; in vop2_parse_alpha()
1814 alpha->src_color_ctrl.bits.color_mode = ALPHA_SRC_PRE_MUL; in vop2_parse_alpha()
1815 alpha->src_color_ctrl.bits.factor_mode = SRC_FAC_ALPHA_SRC_GLOBAL; in vop2_parse_alpha()
1817 alpha->src_color_ctrl.bits.glb_alpha = alpha_config->src_glb_alpha_value >> 8; in vop2_parse_alpha()
1818 alpha->src_color_ctrl.bits.alpha_mode = ALPHA_STRAIGHT; in vop2_parse_alpha()
1819 alpha->src_color_ctrl.bits.alpha_cal_mode = ALPHA_SATURATION; in vop2_parse_alpha()
1821 alpha->dst_color_ctrl.bits.alpha_mode = ALPHA_STRAIGHT; in vop2_parse_alpha()
1822 alpha->dst_color_ctrl.bits.alpha_cal_mode = ALPHA_SATURATION; in vop2_parse_alpha()
1823 alpha->dst_color_ctrl.bits.blend_mode = ALPHA_GLOBAL; in vop2_parse_alpha()
1824 alpha->dst_color_ctrl.bits.glb_alpha = alpha_config->dst_glb_alpha_value >> 8; in vop2_parse_alpha()
1825 alpha->dst_color_ctrl.bits.color_mode = dst_color_mode; in vop2_parse_alpha()
1826 alpha->dst_color_ctrl.bits.factor_mode = ALPHA_SRC_INVERSE; in vop2_parse_alpha()
1828 alpha->src_alpha_ctrl.bits.alpha_mode = ALPHA_STRAIGHT; in vop2_parse_alpha()
1829 alpha->src_alpha_ctrl.bits.blend_mode = alpha->src_color_ctrl.bits.blend_mode; in vop2_parse_alpha()
1830 alpha->src_alpha_ctrl.bits.alpha_cal_mode = ALPHA_SATURATION; in vop2_parse_alpha()
1831 alpha->src_alpha_ctrl.bits.factor_mode = ALPHA_ONE; in vop2_parse_alpha()
1833 alpha->dst_alpha_ctrl.bits.alpha_mode = ALPHA_STRAIGHT; in vop2_parse_alpha()
1834 if (alpha_config->dst_pixel_alpha_en && !dst_glb_alpha_en) in vop2_parse_alpha()
1835 alpha->dst_alpha_ctrl.bits.blend_mode = ALPHA_PER_PIX; in vop2_parse_alpha()
1837 alpha->dst_alpha_ctrl.bits.blend_mode = ALPHA_PER_PIX_GLOBAL; in vop2_parse_alpha()
1838 alpha->dst_alpha_ctrl.bits.alpha_cal_mode = ALPHA_NO_SATURATION; in vop2_parse_alpha()
1839 alpha->dst_alpha_ctrl.bits.factor_mode = ALPHA_SRC_INVERSE; in vop2_parse_alpha()
1849 vp = &vop2->vps[i]; in vop2_find_start_mixer_id_for_vp()
1850 used_layer += hweight32(vp->win_mask); in vop2_find_start_mixer_id_for_vp()
1869 bottom_win_pstate = main_win->base.state; in vop2_setup_cluster_alpha()
1871 dst_glb_alpha_val = main_win->base.state->alpha; in vop2_setup_cluster_alpha()
1873 if (!bottom_win_pstate->fb) in vop2_setup_cluster_alpha()
1886 switch (main_win->data->phys_id) { in vop2_setup_cluster_alpha()
1901 if (vop2->version <= VOP_VERSION_RK3588) { in vop2_setup_cluster_alpha()
1921 struct vop2 *vop2 = vp->vop2; in vop2_setup_alpha()
1934 if (vop2->version <= VOP_VERSION_RK3588) in vop2_setup_alpha()
1935 mixer_id = vop2_find_start_mixer_id_for_vp(vop2, vp->id); in vop2_setup_alpha()
1941 drm_atomic_crtc_for_each_plane(plane, &vp->crtc) { in vop2_setup_alpha()
1944 if (plane->state->normalized_zpos == 0 && in vop2_setup_alpha()
1945 !is_opaque(plane->state->alpha) && in vop2_setup_alpha()
1953 dst_global_alpha = plane->state->alpha; in vop2_setup_alpha()
1957 if (vop2->version <= VOP_VERSION_RK3588) { in vop2_setup_alpha()
1963 src_color_ctrl_reg = RK3576_OVL_MIX0_SRC_COLOR_CTRL(vp->id); in vop2_setup_alpha()
1964 dst_color_ctrl_reg = RK3576_OVL_MIX0_DST_COLOR_CTRL(vp->id); in vop2_setup_alpha()
1965 src_alpha_ctrl_reg = RK3576_OVL_MIX0_SRC_ALPHA_CTRL(vp->id); in vop2_setup_alpha()
1966 dst_alpha_ctrl_reg = RK3576_OVL_MIX0_DST_ALPHA_CTRL(vp->id); in vop2_setup_alpha()
1969 drm_atomic_crtc_for_each_plane(plane, &vp->crtc) { in vop2_setup_alpha()
1971 int zpos = plane->state->normalized_zpos; in vop2_setup_alpha()
1979 if (plane->state->pixel_blend_mode == DRM_MODE_BLEND_PREMULTI) in vop2_setup_alpha()
1984 plane = &win->base; in vop2_setup_alpha()
1985 fb = plane->state->fb; in vop2_setup_alpha()
1987 pixel_alpha_en = fb->format->has_alpha; in vop2_setup_alpha()
1993 /* Cd = Cs + (1 - As) * Cd * Agd */ in vop2_setup_alpha()
1996 alpha_config.src_glb_alpha_value = plane->state->alpha; in vop2_setup_alpha()
2005 /* Cd = Cs + (1 - As) * Cd */ in vop2_setup_alpha()
2008 alpha_config.src_glb_alpha_value = plane->state->alpha; in vop2_setup_alpha()
2014 offset = (mixer_id + zpos - 1) * 0x10; in vop2_setup_alpha()
2022 if (vp->id == 0) { in vop2_setup_alpha()
2023 if (vop2->version <= VOP_VERSION_RK3588) { in vop2_setup_alpha()
2029 src_color_ctrl_reg = RK3576_OVL_HDR_SRC_COLOR_CTRL(vp->id); in vop2_setup_alpha()
2030 dst_color_ctrl_reg = RK3576_OVL_HDR_DST_COLOR_CTRL(vp->id); in vop2_setup_alpha()
2031 src_alpha_ctrl_reg = RK3576_OVL_HDR_SRC_ALPHA_CTRL(vp->id); in vop2_setup_alpha()
2032 dst_alpha_ctrl_reg = RK3576_OVL_HDR_DST_ALPHA_CTRL(vp->id); in vop2_setup_alpha()
2057 struct vop2 *vop2 = vp->vop2; in rk3568_vop2_setup_layer_mixer()
2067 struct vop2_video_port *vp0 = &vop2->vps[0]; in rk3568_vop2_setup_layer_mixer()
2068 struct vop2_video_port *vp1 = &vop2->vps[1]; in rk3568_vop2_setup_layer_mixer()
2069 struct vop2_video_port *vp2 = &vop2->vps[2]; in rk3568_vop2_setup_layer_mixer()
2070 struct rockchip_crtc_state *vcstate = to_rockchip_crtc_state(vp->crtc.state); in rk3568_vop2_setup_layer_mixer()
2074 if (vcstate->yuv_overlay) in rk3568_vop2_setup_layer_mixer()
2075 ovl_ctrl |= RK3568_OVL_CTRL__YUV_MODE(vp->id); in rk3568_vop2_setup_layer_mixer()
2077 ovl_ctrl &= ~RK3568_OVL_CTRL__YUV_MODE(vp->id); in rk3568_vop2_setup_layer_mixer()
2084 if (vp0->nlayers) in rk3568_vop2_setup_layer_mixer()
2086 vp0->nlayers - 1); in rk3568_vop2_setup_layer_mixer()
2090 if (vp1->nlayers) in rk3568_vop2_setup_layer_mixer()
2092 (vp0->nlayers + vp1->nlayers - 1)); in rk3568_vop2_setup_layer_mixer()
2096 if (vp2->nlayers) in rk3568_vop2_setup_layer_mixer()
2098 (vp2->nlayers + vp1->nlayers + vp0->nlayers - 1)); in rk3568_vop2_setup_layer_mixer()
2105 for (i = 0; i < vp->id; i++) in rk3568_vop2_setup_layer_mixer()
2106 ofs += vop2->vps[i].nlayers; in rk3568_vop2_setup_layer_mixer()
2108 drm_atomic_crtc_for_each_plane(plane, &vp->crtc) { in rk3568_vop2_setup_layer_mixer()
2112 layer_id = (u8)(plane->state->normalized_zpos + ofs); in rk3568_vop2_setup_layer_mixer()
2116 for (old_layer_id = 0; old_layer_id < vop2->data->win_size; old_layer_id++) { in rk3568_vop2_setup_layer_mixer()
2118 if (layer_sel_id == win->data->layer_sel_id[vp->id]) in rk3568_vop2_setup_layer_mixer()
2125 for (i = 0; i < vop2->data->win_size; i++) { in rk3568_vop2_setup_layer_mixer()
2126 old_win = &vop2->win[i]; in rk3568_vop2_setup_layer_mixer()
2128 if (layer_sel_id == old_win->data->layer_sel_id[vp->id]) in rk3568_vop2_setup_layer_mixer()
2132 switch (win->data->phys_id) { in rk3568_vop2_setup_layer_mixer()
2135 port_sel |= FIELD_PREP(RK3568_OVL_PORT_SEL__CLUSTER0, vp->id); in rk3568_vop2_setup_layer_mixer()
2139 port_sel |= FIELD_PREP(RK3568_OVL_PORT_SEL__CLUSTER1, vp->id); in rk3568_vop2_setup_layer_mixer()
2143 port_sel |= FIELD_PREP(RK3588_OVL_PORT_SEL__CLUSTER2, vp->id); in rk3568_vop2_setup_layer_mixer()
2147 port_sel |= FIELD_PREP(RK3588_OVL_PORT_SEL__CLUSTER3, vp->id); in rk3568_vop2_setup_layer_mixer()
2151 port_sel |= FIELD_PREP(RK3568_OVL_PORT_SEL__ESMART0, vp->id); in rk3568_vop2_setup_layer_mixer()
2155 port_sel |= FIELD_PREP(RK3568_OVL_PORT_SEL__ESMART1, vp->id); in rk3568_vop2_setup_layer_mixer()
2159 port_sel |= FIELD_PREP(RK3588_OVL_PORT_SEL__ESMART2, vp->id); in rk3568_vop2_setup_layer_mixer()
2163 port_sel |= FIELD_PREP(RK3588_OVL_PORT_SEL__ESMART3, vp->id); in rk3568_vop2_setup_layer_mixer()
2167 port_sel |= FIELD_PREP(RK3568_OVL_PORT_SEL__SMART0, vp->id); in rk3568_vop2_setup_layer_mixer()
2171 port_sel |= FIELD_PREP(RK3568_OVL_PORT_SEL__SMART1, vp->id); in rk3568_vop2_setup_layer_mixer()
2176 layer_sel |= RK3568_OVL_LAYER_SEL__LAYER(layer_id, win->data->layer_sel_id[vp->id]); in rk3568_vop2_setup_layer_mixer()
2183 old_win->data->layer_sel_id[vp->id]); in rk3568_vop2_setup_layer_mixer()
2192 struct vop2 *vop2 = vp->vop2; in rk3568_vop2_setup_dly_for_windows()
2197 for (i = 0; i < vop2->data->win_size; i++) { in rk3568_vop2_setup_dly_for_windows()
2200 win = &vop2->win[i]; in rk3568_vop2_setup_dly_for_windows()
2201 dly = win->delay; in rk3568_vop2_setup_dly_for_windows()
2203 switch (win->data->phys_id) { in rk3568_vop2_setup_dly_for_windows()
2235 struct vop2 *vop2 = vp->vop2; in rk3568_vop2_setup_overlay()
2236 struct drm_crtc *crtc = &vp->crtc; in rk3568_vop2_setup_overlay()
2239 vp->win_mask = 0; in rk3568_vop2_setup_overlay()
2244 win->delay = win->data->dly[VOP2_DLY_MODE_DEFAULT]; in rk3568_vop2_setup_overlay()
2246 vp->win_mask |= BIT(win->data->phys_id); in rk3568_vop2_setup_overlay()
2252 if (!vp->win_mask) in rk3568_vop2_setup_overlay()
2262 struct rockchip_crtc_state *vcstate = to_rockchip_crtc_state(vp->crtc.state); in rk3576_vop2_setup_layer_mixer()
2263 struct vop2 *vop2 = vp->vop2; in rk3576_vop2_setup_layer_mixer()
2268 ovl_ctrl = vop2_readl(vop2, RK3576_OVL_CTRL(vp->id)); in rk3576_vop2_setup_layer_mixer()
2269 if (vcstate->yuv_overlay) in rk3576_vop2_setup_layer_mixer()
2274 vop2_writel(vop2, RK3576_OVL_CTRL(vp->id), ovl_ctrl); in rk3576_vop2_setup_layer_mixer()
2276 drm_atomic_crtc_for_each_plane(plane, &vp->crtc) { in rk3576_vop2_setup_layer_mixer()
2279 layer_sel &= ~RK3568_OVL_LAYER_SEL__LAYER(plane->state->normalized_zpos, in rk3576_vop2_setup_layer_mixer()
2281 layer_sel |= RK3568_OVL_LAYER_SEL__LAYER(plane->state->normalized_zpos, in rk3576_vop2_setup_layer_mixer()
2282 win->data->layer_sel_id[vp->id]); in rk3576_vop2_setup_layer_mixer()
2285 vop2_writel(vop2, RK3576_OVL_LAYER_SEL(vp->id), layer_sel); in rk3576_vop2_setup_layer_mixer()
2293 drm_atomic_crtc_for_each_plane(plane, &vp->crtc) { in rk3576_vop2_setup_dly_for_windows()
2301 struct vop2 *vop2 = vp->vop2; in rk3576_vop2_setup_overlay()
2302 struct drm_crtc *crtc = &vp->crtc; in rk3576_vop2_setup_overlay()
2305 vp->win_mask = 0; in rk3576_vop2_setup_overlay()
2310 win->delay = win->data->dly[VOP2_DLY_MODE_DEFAULT]; in rk3576_vop2_setup_overlay()
2311 vp->win_mask |= BIT(win->data->phys_id); in rk3576_vop2_setup_overlay()
2317 if (!vp->win_mask) in rk3576_vop2_setup_overlay()
2327 struct drm_crtc *crtc = &vp->crtc; in rk3568_vop2_setup_bg_dly()
2328 struct drm_display_mode *mode = &crtc->state->adjusted_mode; in rk3568_vop2_setup_bg_dly()
2329 u16 hdisplay = mode->crtc_hdisplay; in rk3568_vop2_setup_bg_dly()
2330 u16 hsync_len = mode->crtc_hsync_end - mode->crtc_hsync_start; in rk3568_vop2_setup_bg_dly()
2334 bg_dly = vp->data->pre_scan_max_dly[3]; in rk3568_vop2_setup_bg_dly()
2335 vop2_writel(vp->vop2, RK3568_VP_BG_MIX_CTRL(vp->id), in rk3568_vop2_setup_bg_dly()
2338 pre_scan_dly = ((bg_dly + (hdisplay >> 1) - 1) << 16) | hsync_len; in rk3568_vop2_setup_bg_dly()
2344 struct drm_crtc *crtc = &vp->crtc; in rk3576_vop2_setup_bg_dly()
2345 struct drm_display_mode *mode = &crtc->state->adjusted_mode; in rk3576_vop2_setup_bg_dly()
2346 u16 hdisplay = mode->crtc_hdisplay; in rk3576_vop2_setup_bg_dly()
2347 u16 hsync_len = mode->crtc_hsync_end - mode->crtc_hsync_start; in rk3576_vop2_setup_bg_dly()
2351 bg_dly = vp->data->pre_scan_max_dly[VOP2_DLY_WIN] + in rk3576_vop2_setup_bg_dly()
2352 vp->data->pre_scan_max_dly[VOP2_DLY_LAYER_MIX] + in rk3576_vop2_setup_bg_dly()
2353 vp->data->pre_scan_max_dly[VOP2_DLY_HDR_MIX]; in rk3576_vop2_setup_bg_dly()
2355 vop2_writel(vp->vop2, RK3576_OVL_BG_MIX_CTRL(vp->id), in rk3576_vop2_setup_bg_dly()
2358 pre_scan_dly = ((bg_dly + (hdisplay >> 1) - 1) << 16) | hsync_len; in rk3576_vop2_setup_bg_dly()
2459 .compatible = "rockchip,rk3566-vop",
2462 .compatible = "rockchip,rk3568-vop",
2465 .compatible = "rockchip,rk3576-vop",
2468 .compatible = "rockchip,rk3588-vop",
2477 struct device *dev = &pdev->dev; in vop2_probe()
2484 component_del(&pdev->dev, &vop2_component_ops); in vop2_remove()
2491 .name = "rockchip-vop2",