drm/rockchip: vop: make vop version code more readable

Change-Id: I0d95ba93c1fa2d837a867a69ff8646b8143d36f2
Signed-off-by: Chaoyi Chen <chaoyi.chen@rock-chips.com>
This commit is contained in:
Chaoyi Chen
2024-08-26 14:32:00 +08:00
parent c1483412f9
commit 99d9bea0a0
2 changed files with 48 additions and 23 deletions

View File

@@ -868,7 +868,8 @@ static void scl_vop_cal_scl_fac(struct vop *vop, const struct vop_win *win,
if (!win->phy->scl)
return;
if ((adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) && vop->version == VOP_VERSION(2, 2)) {
if ((adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) &&
vop->version == VOP_VERSION_RK3036) {
VOP_SCL_SET(vop, win, scale_yrgb_x, ((src_w << 12) / dst_w));
VOP_SCL_SET(vop, win, scale_yrgb_y, ((src_h << 12) / dst_h));
if (is_yuv) {
@@ -1683,7 +1684,7 @@ static void vop_initial(struct drm_crtc *crtc)
VOP_CTRL_SET(vop, afbdc_en, 0);
vop_enable_debug_irq(crtc);
if (vop->version == VOP_VERSION(2, 0xd)) {
if (vop->version == VOP_VERSION_RK3576_LITE) {
VOP_GRF_SET(vop, grf, grf_vopl_sel, 1);
VOP_CTRL_SET(vop, enable, 1);
}
@@ -1990,8 +1991,7 @@ static void vop_plane_atomic_disable(struct drm_plane *plane,
* vop will access the freed memory lead to iommu pagefault.
* so we add this reset to workaround.
*/
if (VOP_MAJOR(vop->version) == 2 && VOP_MINOR(vop->version) == 5 &&
win->win_id == 2)
if (vop->version == VOP_VERSION_PX30_LITE && win->win_id == 2)
VOP_WIN_SET(vop, win, yrgb_mst, 0);
spin_unlock(&vop->reg_lock);
@@ -2121,7 +2121,9 @@ static void vop_plane_atomic_update(struct drm_plane *plane,
dsp_h = 4;
actual_h = dsp_h * actual_h / drm_rect_height(dest);
}
if ((vop->version == VOP_VERSION(2, 2) || vop->version >= VOP_VERSION(2, 0xd)) &&
if ((vop->version == VOP_VERSION_RK3036 ||
vop->version == VOP_VERSION_RK3506 ||
vop->version == VOP_VERSION_RK3576_LITE) &&
(adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE))
dsp_h = dsp_h / 2;
@@ -2136,7 +2138,9 @@ static void vop_plane_atomic_update(struct drm_plane *plane,
dsp_stx = dest->x1 + mode->crtc_htotal - mode->crtc_hsync_start;
dsp_sty = dest->y1 + mode->crtc_vtotal - mode->crtc_vsync_start;
if ((vop->version == VOP_VERSION(2, 2) || vop->version >= VOP_VERSION(2, 0xd)) &&
if ((vop->version == VOP_VERSION_RK3036 ||
vop->version == VOP_VERSION_RK3506 ||
vop->version == VOP_VERSION_RK3576_LITE) &&
(adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE))
dsp_sty = dest->y1 / 2 + mode->crtc_vtotal - mode->crtc_vsync_start;
dsp_st = dsp_sty << 16 | (dsp_stx & 0xffff);
@@ -2596,7 +2600,7 @@ static int vop_crtc_enable_vblank(struct drm_crtc *crtc)
spin_lock_irqsave(&vop->irq_lock, flags);
if (VOP_MAJOR(vop->version) == 3 && VOP_MINOR(vop->version) >= 7) {
if (vop->version == VOP_VERSION_RK3228 || vop->version == VOP_VERSION_RK3328) {
VOP_INTR_SET_TYPE(vop, clear, FS_FIELD_INTR, 1);
VOP_INTR_SET_TYPE(vop, enable, FS_FIELD_INTR, 1);
} else {
@@ -2619,7 +2623,7 @@ static void vop_crtc_disable_vblank(struct drm_crtc *crtc)
spin_lock_irqsave(&vop->irq_lock, flags);
if (VOP_MAJOR(vop->version) == 3 && VOP_MINOR(vop->version) >= 7)
if (vop->version == VOP_VERSION_RK3228 || vop->version == VOP_VERSION_RK3328)
VOP_INTR_SET_TYPE(vop, enable, FS_FIELD_INTR, 0);
else
VOP_INTR_SET_TYPE(vop, enable, FS_INTR, 0);
@@ -2928,12 +2932,13 @@ vop_crtc_mode_valid(struct drm_crtc *crtc, const struct drm_display_mode *mode)
return MODE_BAD_HVALUE;
if ((mode->flags & DRM_MODE_FLAG_INTERLACE) &&
VOP_MAJOR(vop->version) == 3 &&
VOP_MINOR(vop->version) <= 2)
(vop->version == VOP_VERSION_RK3288 || vop->version == VOP_VERSION_RK3288W ||
vop->version == VOP_VERSION_RK3368))
return MODE_BAD;
/*
* Dclk need to be double if BT656 interface and vop version >= 2.12.
* That is RV1126/RV1106/RK3576_LITE/RK3506
*/
if (mode->flags & DRM_MODE_FLAG_DBLCLK ||
(VOP_MAJOR(vop->version) == 2 && VOP_MINOR(vop->version) >= 12 &&
@@ -3322,6 +3327,7 @@ static bool vop_crtc_mode_fixup(struct drm_crtc *crtc,
/*
* Dclk need to be double if BT656 interface and vop version >= 2.12.
* That is RV1126/RV1106/RK3576_LITE/RK3506
*/
if (mode->flags & DRM_MODE_FLAG_DBLCLK ||
(VOP_MAJOR(vop->version) == 2 && VOP_MINOR(vop->version) >= 12 &&
@@ -3427,6 +3433,9 @@ static void vop_update_csc(struct drm_crtc *crtc)
struct vop *vop = to_vop(crtc);
u32 val;
/*
* When using BT656, set RV1126/RV1106/RK3576_LITE/RK3506 to P8888 mode.
*/
if ((s->output_mode == ROCKCHIP_OUT_MODE_AAAA &&
!(vop->data->feature & VOP_FEATURE_OUTPUT_10BIT)) ||
(VOP_MAJOR(vop->version) == 2 && VOP_MINOR(vop->version) >= 12 &&
@@ -3443,8 +3452,7 @@ static void vop_update_csc(struct drm_crtc *crtc)
* For RK3576 vopl, rg_swap and rb_swap need to be enabled in
* YUV444 bus_format.
*/
if ((VOP_MAJOR(vop->version) == 2 && VOP_MINOR(vop->version) == 0xd) &&
s->bus_format == MEDIA_BUS_FMT_YUV8_1X24)
if (vop->version == VOP_VERSION_RK3576_LITE && s->bus_format == MEDIA_BUS_FMT_YUV8_1X24)
VOP_CTRL_SET(vop, dsp_data_swap, DSP_RG_SWAP | DSP_RB_SWAP);
VOP_CTRL_SET(vop, out_mode, s->output_mode);
@@ -3460,13 +3468,13 @@ static void vop_update_csc(struct drm_crtc *crtc)
/*
* Background color is 10bit depth if vop version >= 3.5
* That is RK3399/RK3228/RK3328
*/
if (!is_yuv_output(s->bus_format))
val = 0;
else if (vop->version == VOP_VERSION(2, 0xd))
else if (vop->version == VOP_VERSION_RK3576_LITE)
val = 0;
else if (VOP_MAJOR(vop->version) == 3 && VOP_MINOR(vop->version) == 8 &&
s->hdr.pre_overlay)
else if (vop->version == VOP_VERSION_RK3328 && s->hdr.pre_overlay)
val = 0;
else if (VOP_MAJOR(vop->version) == 3 && VOP_MINOR(vop->version) >= 5)
val = 0x20010200;
@@ -3566,7 +3574,8 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
vop_crtc_load_lut(crtc);
if (vop->mcu_timing.mcu_pix_total) {
if (vop->version >= VOP_VERSION(2, 0xd))
if (vop->version == VOP_VERSION_RK3576_LITE ||
vop->version == VOP_VERSION_RK3506)
vop_set_out_mode(vop, s->output_mode);
else
vop_set_out_mode(vop, ROCKCHIP_OUT_MODE_P888);
@@ -3575,7 +3584,7 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
dclk_inv = (s->bus_flags & DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE) ? 1 : 0;
/* For improving signal quality, dclk need to be inverted by default on rv1106. */
if ((VOP_MAJOR(vop->version) == 2 && VOP_MINOR(vop->version) == 12))
if (vop->version == VOP_VERSION_RV1106)
dclk_inv = !dclk_inv;
VOP_CTRL_SET(vop, dclk_pol, dclk_inv);
@@ -3635,7 +3644,7 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
* RK3576 DSI CTRL hsync/vsync polarity is positive and can't update,
* so set VOP hsync/vsync polarity as positive by default.
*/
if (vop->version == VOP_VERSION(2, 0xd))
if (vop->version == VOP_VERSION_RK3576_LITE)
val = BIT(HSYNC_POSITIVE) | BIT(VSYNC_POSITIVE);
VOP_CTRL_SET(vop, mipi_en, 1);
VOP_CTRL_SET(vop, mipi_pin_pol, val);
@@ -3706,8 +3715,7 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
act_end = vact_end;
}
if (VOP_MAJOR(vop->version) == 3 &&
(VOP_MINOR(vop->version) == 2 || VOP_MINOR(vop->version) == 8))
if (vop->version == VOP_VERSION_RK3368 || vop->version == VOP_VERSION_RK3328)
for_ddr_freq = 1000;
VOP_INTR_SET(vop, line_flag_num[0], act_end);
VOP_INTR_SET(vop, line_flag_num[1],
@@ -4201,7 +4209,7 @@ static void vop_tv_config_update(struct drm_crtc *crtc,
VOP_CTRL_SET(vop, bcsh_sin_hue, sin_hue);
VOP_CTRL_SET(vop, bcsh_cos_hue, cos_hue);
VOP_CTRL_SET(vop, bcsh_out_mode, BCSH_OUT_MODE_NORMAL_VIDEO);
if (VOP_MAJOR(vop->version) == 3 && VOP_MINOR(vop->version) == 0)
if (vop->version == VOP_VERSION_RK3288)
VOP_CTRL_SET(vop, auto_gate_en, 0);
VOP_CTRL_SET(vop, bcsh_en, s->bcsh_en);
}
@@ -4248,7 +4256,7 @@ static void vop_cfg_update(struct drm_crtc *crtc,
static bool vop_fs_irq_is_pending(struct vop *vop)
{
if (VOP_MAJOR(vop->version) == 3 && VOP_MINOR(vop->version) >= 7)
if (vop->version == VOP_VERSION_RK3228 || vop->version == VOP_VERSION_RK3328)
return VOP_INTR_GET_TYPE(vop, status, FS_FIELD_INTR);
else
return VOP_INTR_GET_TYPE(vop, status, FS_INTR);

View File

@@ -21,7 +21,24 @@
#define VOP_MAJOR(version) ((version) >> 8)
#define VOP_MINOR(version) ((version) & 0xff)
#define VOP_VERSION_RK3576_LITE VOP_VERSION(0x2, 0xd)
#define VOP_VERSION_RK3066 VOP_VERSION(2, 1)
#define VOP_VERSION_RK3036 VOP_VERSION(2, 2)
#define VOP_VERSION_RK3126 VOP_VERSION(2, 4)
#define VOP_VERSION_PX30_LITE VOP_VERSION(2, 5)
#define VOP_VERSION_PX30_BIG VOP_VERSION(2, 6)
#define VOP_VERSION_RK3308 VOP_VERSION(2, 7)
#define VOP_VERSION_RV1126 VOP_VERSION(2, 0xb)
#define VOP_VERSION_RV1106 VOP_VERSION(2, 0xc)
#define VOP_VERSION_RK3576_LITE VOP_VERSION(2, 0xd)
#define VOP_VERSION_RK3506 VOP_VERSION(2, 0xe)
#define VOP_VERSION_RK3288 VOP_VERSION(3, 0)
#define VOP_VERSION_RK3288W VOP_VERSION(3, 1)
#define VOP_VERSION_RK3368 VOP_VERSION(3, 2)
#define VOP_VERSION_RK3366 VOP_VERSION(3, 4)
#define VOP_VERSION_RK3399_BIG VOP_VERSION(3, 5)
#define VOP_VERSION_RK3399_LITE VOP_VERSION(3, 6)
#define VOP_VERSION_RK3228 VOP_VERSION(3, 7)
#define VOP_VERSION_RK3328 VOP_VERSION(3, 8)
#define VOP2_VERSION(major, minor, build) ((major) << 24 | (minor) << 16 | (build))
#define VOP2_MAJOR(version) (((version) >> 24) & 0xff)