drm/rockchip: vop: update crtc feature

1. add overscan feature to indicate rk3588 can't support overscan;
2. add more feature info for rk3588;
3. fix some feature character error;

Signed-off-by: Sandy Huang <hjc@rock-chips.com>
Change-Id: I708e506db87c36078453232530bfb4d78e779010
This commit is contained in:
Sandy Huang
2021-10-29 17:50:16 +08:00
committed by Tao Huang
parent 85c5befc71
commit 6711962e5f
5 changed files with 44 additions and 30 deletions

View File

@@ -3686,6 +3686,7 @@ static void vop_cfg_update(struct drm_crtc *crtc,
struct rockchip_crtc_state *s =
to_rockchip_crtc_state(crtc->state);
struct vop *vop = to_vop(crtc);
const struct vop_data *vop_data = vop->data;
spin_lock(&vop->reg_lock);
@@ -3713,7 +3714,8 @@ static void vop_cfg_update(struct drm_crtc *crtc,
VOP_CTRL_SET(vop, afbdc_en, s->afbdc_en);
VOP_CTRL_SET(vop, dsp_layer_sel, s->dsp_layer_sel);
vop_post_config(crtc);
if (vop_data->feature & VOP_FEATURE_OVERSCAN)
vop_post_config(crtc);
spin_unlock(&vop->reg_lock);
}
@@ -4409,9 +4411,9 @@ static int vop_crtc_create_feature_property(struct vop *vop, struct drm_crtc *cr
if (vop_data->feature & VOP_FEATURE_ALPHA_SCALE)
feature |= BIT(ROCKCHIP_DRM_CRTC_FEATURE_ALPHA_SCALE);
if (vop_data->feature & VOP_FEATURE_ALPHA_HDR10)
if (vop_data->feature & VOP_FEATURE_HDR10)
feature |= BIT(ROCKCHIP_DRM_CRTC_FEATURE_HDR10);
if (vop_data->feature & VOP_FEATURE_ALPHA_NEXT_HDR)
if (vop_data->feature & VOP_FEATURE_NEXT_HDR)
feature |= BIT(ROCKCHIP_DRM_CRTC_FEATURE_NEXT_HDR);
prop = drm_property_create_bitmask(vop->drm_dev,

View File

@@ -32,10 +32,11 @@
#define VOP_FEATURE_OUTPUT_RGB10 BIT(0)
#define VOP_FEATURE_INTERNAL_RGB BIT(1)
#define VOP_FEATURE_ALPHA_SCALE BIT(2)
#define VOP_FEATURE_ALPHA_HDR10 BIT(3)
#define VOP_FEATURE_ALPHA_NEXT_HDR BIT(4)
#define VOP_FEATURE_HDR10 BIT(3)
#define VOP_FEATURE_NEXT_HDR BIT(4)
/* a feature to splice two windows and two vps to support resolution > 4096 */
#define VOP_FEATURE_SPLICE BIT(5)
#define VOP_FEATURE_OVERSCAN BIT(6)
#define VOP_FEATURE_OUTPUT_10BIT VOP_FEATURE_OUTPUT_RGB10

View File

@@ -5476,7 +5476,8 @@ static void vop2_crtc_atomic_enable(struct drm_crtc *crtc, struct drm_crtc_state
else
clk_set_rate(vp->dclk, adjusted_mode->crtc_clock * 1000);
vop2_post_config(crtc);
if (vp_data->feature & VOP_FEATURE_OVERSCAN)
vop2_post_config(crtc);
if (vcstate->dsc_enable)
vop2_crtc_enable_dsc(crtc, old_state);
@@ -6357,6 +6358,8 @@ static void vop2_cfg_update(struct drm_crtc *crtc,
struct vop2_video_port *vp = to_vop2_video_port(crtc);
struct rockchip_crtc_state *vcstate = to_rockchip_crtc_state(crtc->state);
struct vop2 *vop2 = vp->vop2;
const struct vop2_data *vop2_data = vop2->data;
const struct vop2_video_port_data *vp_data = &vop2_data->vp[vp->id];
uint32_t val;
uint32_t r, g, b;
@@ -6386,7 +6389,8 @@ static void vop2_cfg_update(struct drm_crtc *crtc,
vop2_tv_config_update(crtc, old_crtc_state);
vop2_post_config(crtc);
if (vp_data->feature & VOP_FEATURE_OVERSCAN)
vop2_post_config(crtc);
spin_unlock(&vop2->reg_lock);
}
@@ -7259,9 +7263,9 @@ static int vop2_crtc_create_feature_property(struct vop2 *vop2, struct drm_crtc
if (vp_data->feature & VOP_FEATURE_ALPHA_SCALE)
feature |= BIT(ROCKCHIP_DRM_CRTC_FEATURE_ALPHA_SCALE);
if (vp_data->feature & VOP_FEATURE_ALPHA_HDR10)
if (vp_data->feature & VOP_FEATURE_HDR10)
feature |= BIT(ROCKCHIP_DRM_CRTC_FEATURE_HDR10);
if (vp_data->feature & VOP_FEATURE_ALPHA_NEXT_HDR)
if (vp_data->feature & VOP_FEATURE_NEXT_HDR)
feature |= BIT(ROCKCHIP_DRM_CRTC_FEATURE_NEXT_HDR);
prop = drm_property_create_bitmask(vop2->drm_dev,
@@ -7443,14 +7447,16 @@ static int vop2_create_crtc(struct vop2 *vop2)
drm_object_attach_property(&crtc->base, private->aclk_prop, 0);
drm_object_attach_property(&crtc->base, private->bg_prop, 0);
drm_object_attach_property(&crtc->base, private->line_flag_prop, 0);
drm_object_attach_property(&crtc->base,
drm_dev->mode_config.tv_left_margin_property, 100);
drm_object_attach_property(&crtc->base,
drm_dev->mode_config.tv_right_margin_property, 100);
drm_object_attach_property(&crtc->base,
drm_dev->mode_config.tv_top_margin_property, 100);
drm_object_attach_property(&crtc->base,
drm_dev->mode_config.tv_bottom_margin_property, 100);
if (vp_data->feature & VOP_FEATURE_OVERSCAN) {
drm_object_attach_property(&crtc->base,
drm_dev->mode_config.tv_left_margin_property, 100);
drm_object_attach_property(&crtc->base,
drm_dev->mode_config.tv_right_margin_property, 100);
drm_object_attach_property(&crtc->base,
drm_dev->mode_config.tv_top_margin_property, 100);
drm_object_attach_property(&crtc->base,
drm_dev->mode_config.tv_bottom_margin_property, 100);
}
vop2_crtc_create_plane_mask_property(vop2, crtc);
vop2_crtc_create_feature_property(vop2, crtc);
registered_num_crtcs++;

View File

@@ -806,7 +806,8 @@ static const struct vop2_video_port_data rk3568_vop_video_ports[] = {
{
.id = 0,
.soc_id = { 0x3568, 0x3566 },
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_ALPHA_HDR10,
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE |
VOP_FEATURE_HDR10 | VOP_FEATURE_OVERSCAN,
.gamma_lut_len = 1024,
.cubic_lut_len = 729, /* 9x9x9 */
.max_output = { 4096, 2304 },
@@ -818,7 +819,7 @@ static const struct vop2_video_port_data rk3568_vop_video_ports[] = {
{
.id = 1,
.soc_id = { 0x3568, 0x3566 },
.feature = VOP_FEATURE_ALPHA_SCALE,
.feature = VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN,
.gamma_lut_len = 1024,
.max_output = { 2048, 1536 },
.pre_scan_max_dly = { 40, 40, 40, 40 },
@@ -827,7 +828,7 @@ static const struct vop2_video_port_data rk3568_vop_video_ports[] = {
},
{
.id = 2,
.feature = VOP_FEATURE_ALPHA_SCALE,
.feature = VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN,
.soc_id = { 0x3568, 0x3566 },
.gamma_lut_len = 1024,
.max_output = { 1920, 1080 },
@@ -1099,7 +1100,8 @@ static const struct vop2_video_port_data rk3588_vop_video_ports[] = {
.id = 0,
.splice_vp_id = 1,
.soc_id = { 0x3588, 0x3588 },
.feature = VOP_FEATURE_OUTPUT_10BIT,
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE |
VOP_FEATURE_HDR10 | VOP_FEATURE_NEXT_HDR,
.gamma_lut_len = 1024,
.cubic_lut_len = 729, /* 9x9x9 */
.dclk_max = 600000000,
@@ -1113,6 +1115,7 @@ static const struct vop2_video_port_data rk3588_vop_video_ports[] = {
{
.id = 1,
.soc_id = { 0x3588, 0x3588 },
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_HDR10,
.gamma_lut_len = 1024,
.dclk_max = 600000000,
.max_output = { 4096, 2304 },
@@ -1125,6 +1128,7 @@ static const struct vop2_video_port_data rk3588_vop_video_ports[] = {
{
.id = 2,
.soc_id = { 0x3588, 0x3588 },
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE,
.gamma_lut_len = 1024,
.dclk_max = 600000000,
.max_output = { 4096, 2304 },
@@ -1135,6 +1139,7 @@ static const struct vop2_video_port_data rk3588_vop_video_ports[] = {
{
.id = 3,
.soc_id = { 0x3588, 0x3588 },
.feature = VOP_FEATURE_ALPHA_SCALE,
.gamma_lut_len = 1024,
.dclk_max = 200000000,
.max_output = { 2048, 1536 },
@@ -1142,7 +1147,6 @@ static const struct vop2_video_port_data rk3588_vop_video_ports[] = {
.intr = &rk3588_vp3_intr,
.regs = &rk3588_vop_vp3_regs,
},
};
/*

View File

@@ -398,7 +398,7 @@ static const struct vop_data rk3288_vop_big = {
.soc_id = 0x3288,
.vop_id = 0,
.version = VOP_VERSION(3, 0),
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE,
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN,
.max_input = {4096, 8192},
.max_output = {3840, 2160},
.intr = &rk3288_vop_intr,
@@ -412,7 +412,7 @@ static const struct vop_data rk3288_vop_lit = {
.soc_id = 0x3288,
.vop_id = 1,
.version = VOP_VERSION(3, 0),
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE,
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN,
.max_input = {4096, 8192},
.max_output = {2560, 1600},
.intr = &rk3288_vop_intr,
@@ -521,7 +521,7 @@ static const struct vop_data rk3368_vop = {
.soc_id = 0x3368,
.vop_id = 0,
.version = VOP_VERSION(3, 2),
.feature = VOP_FEATURE_ALPHA_SCALE,
.feature = VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN,
.max_input = {4096, 8192},
.max_output = {4096, 2160},
.intr = &rk3368_vop_intr,
@@ -548,7 +548,7 @@ static const struct vop_data rk3366_vop = {
.soc_id = 0x3366,
.vop_id = 0,
.version = VOP_VERSION(3, 4),
.feature = VOP_FEATURE_ALPHA_SCALE,
.feature = VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN,
.max_input = {4096, 8192},
.max_output = {4096, 2160},
.intr = &rk3366_vop_intr,
@@ -709,7 +709,7 @@ static const struct vop_data rk3399_vop_big = {
.vop_id = 0,
.version = VOP_VERSION(3, 5),
.csc_table = &rk3399_csc_table,
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE,
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN,
.max_input = {4096, 8192},
.max_output = {4096, 2160},
.intr = &rk3366_vop_intr,
@@ -738,7 +738,7 @@ static const struct vop_data rk3399_vop_lit = {
.soc_id = 0x3399,
.vop_id = 1,
.version = VOP_VERSION(3, 6),
.feature = VOP_FEATURE_ALPHA_SCALE,
.feature = VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN,
.csc_table = &rk3399_csc_table,
.max_input = {4096, 8192},
.max_output = {2560, 1600},
@@ -759,7 +759,7 @@ static const struct vop_data rk3228_vop = {
.soc_id = 0x3228,
.vop_id = 0,
.version = VOP_VERSION(3, 7),
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE,
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN,
.max_input = {4096, 8192},
.max_output = {4096, 2160},
.intr = &rk3366_vop_intr,
@@ -1152,7 +1152,8 @@ static const struct vop_data rk3328_vop = {
.soc_id = 0x3328,
.vop_id = 0,
.version = VOP_VERSION(3, 8),
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE,
.feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_HDR10 |
VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN,
.hdr_table = &rk3328_hdr_table,
.max_input = {4096, 8192},
.max_output = {4096, 2160},