From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753884AbcDTGTl (ORCPT ); Wed, 20 Apr 2016 02:19:41 -0400 Received: from regular1.263xmail.com ([211.150.99.133]:42705 "EHLO regular1.263xmail.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753475AbcDTGTg (ORCPT ); Wed, 20 Apr 2016 02:19:36 -0400 X-263anti-spam: KSV:0; X-MAIL-GRAY: 0 X-MAIL-DELIVERY: 1 X-ABS-CHECKED: 4 X-ADDR-CHECKED: 0 X-KSVirus-check: 0 X-RL-SENDER: mark.yao@rock-chips.com X-SENDER-IP: 58.22.7.114 X-LOGIN-NAME: mark.yao@rock-chips.com X-UNIQUE-TAG: <0846b298183dddbaa932af03b1c21a68> X-ATTACHMENT-NUM: 0 X-DNS-TYPE: 0 From: Mark Yao To: David Airlie , Heiko Stuebner , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Mark Yao Subject: [PATCH v2 4/5] drm/rockchip: vop: add rk3399 vop support Date: Wed, 20 Apr 2016 14:18:16 +0800 Message-Id: <1461133097-1478-5-git-send-email-mark.yao@rock-chips.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1461133097-1478-1-git-send-email-mark.yao@rock-chips.com> References: <1461133097-1478-1-git-send-email-mark.yao@rock-chips.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org There are two VOP in rk3399 chip, respectively VOP_BIG and VOP_LIT. most registers layout of this two vop is same, their framework are both VOP_FULL, the Major differences of this two is that: VOP_BIG max output resolution is 4096x2160. VOP_LIT max output resolution is 2560x1600 VOP_BIG support four windows. VOP_LIT only support two windows. RK3399 vop register layout is similar with rk3288, so some feature can reuse with rk3288. Signed-off-by: Mark Yao --- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 15 ++- drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 4 + drivers/gpu/drm/rockchip/rockchip_vop_reg.c | 91 +++++++++++++ drivers/gpu/drm/rockchip/rockchip_vop_reg.h | 193 +++++++++++++++++++++++++++ 4 files changed, 298 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index 59f24cd..5c9ff8e 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -912,7 +912,7 @@ static void vop_crtc_enable(struct drm_crtc *crtc) u16 vsync_len = adjusted_mode->vsync_end - adjusted_mode->vsync_start; u16 vact_st = adjusted_mode->vtotal - adjusted_mode->vsync_start; u16 vact_end = vact_st + vdisplay; - uint32_t val; + uint32_t pin_pol, val; vop_enable(crtc); /* @@ -951,21 +951,26 @@ static void vop_crtc_enable(struct drm_crtc *crtc) vop_dsp_hold_valid_irq_disable(vop); } - val = 0x8; - val |= (adjusted_mode->flags & DRM_MODE_FLAG_NHSYNC) ? 0 : 1; - val |= (adjusted_mode->flags & DRM_MODE_FLAG_NVSYNC) ? 0 : (1 << 1); - VOP_CTRL_SET(vop, pin_pol, val); + pin_pol = 0x8; + pin_pol |= (adjusted_mode->flags & DRM_MODE_FLAG_NHSYNC) ? 0 : 1; + pin_pol |= (adjusted_mode->flags & DRM_MODE_FLAG_NVSYNC) ? 0 : (1 << 1); + VOP_CTRL_SET(vop, pin_pol, pin_pol); + switch (s->output_type) { case DRM_MODE_CONNECTOR_LVDS: VOP_CTRL_SET(vop, rgb_en, 1); + VOP_CTRL_SET(vop, rgb_pin_pol, pin_pol); break; case DRM_MODE_CONNECTOR_eDP: + VOP_CTRL_SET(vop, edp_pin_pol, pin_pol); VOP_CTRL_SET(vop, edp_en, 1); break; case DRM_MODE_CONNECTOR_HDMIA: + VOP_CTRL_SET(vop, hdmi_pin_pol, pin_pol); VOP_CTRL_SET(vop, hdmi_en, 1); break; case DRM_MODE_CONNECTOR_DSI: + VOP_CTRL_SET(vop, mipi_pin_pol, pin_pol); VOP_CTRL_SET(vop, mipi_en, 1); break; default: diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h index 28dafb6..ff4f52e 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h @@ -49,6 +49,10 @@ struct vop_ctrl { struct vop_reg dither_down; struct vop_reg dither_up; struct vop_reg pin_pol; + struct vop_reg rgb_pin_pol; + struct vop_reg hdmi_pin_pol; + struct vop_reg edp_pin_pol; + struct vop_reg mipi_pin_pol; struct vop_reg htotal_pw; struct vop_reg hact_st_end; diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c index 6846868..6f42e56 100644 --- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c +++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c @@ -278,11 +278,102 @@ static const struct vop_data rk3288_vop = { .win_size = ARRAY_SIZE(rk3288_vop_win_data), }; +static const struct vop_ctrl rk3399_ctrl_data = { + .standby = VOP_REG(RK3399_SYS_CTRL, 0x1, 22), + .gate_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 23), + .rgb_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 12), + .hdmi_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 13), + .edp_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 14), + .mipi_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 15), + .dither_down = VOP_REG(RK3399_DSP_CTRL1, 0xf, 1), + .dither_up = VOP_REG(RK3399_DSP_CTRL1, 0x1, 6), + .data_blank = VOP_REG(RK3399_DSP_CTRL0, 0x1, 19), + .out_mode = VOP_REG(RK3399_DSP_CTRL0, 0xf, 0), + .rgb_pin_pol = VOP_REG(RK3399_DSP_CTRL1, 0xf, 16), + .hdmi_pin_pol = VOP_REG(RK3399_DSP_CTRL1, 0xf, 20), + .edp_pin_pol = VOP_REG(RK3399_DSP_CTRL1, 0xf, 24), + .mipi_pin_pol = VOP_REG(RK3399_DSP_CTRL1, 0xf, 28), + .htotal_pw = VOP_REG(RK3399_DSP_HTOTAL_HS_END, 0x1fff1fff, 0), + .hact_st_end = VOP_REG(RK3399_DSP_HACT_ST_END, 0x1fff1fff, 0), + .vtotal_pw = VOP_REG(RK3399_DSP_VTOTAL_VS_END, 0x1fff1fff, 0), + .vact_st_end = VOP_REG(RK3399_DSP_VACT_ST_END, 0x1fff1fff, 0), + .hpost_st_end = VOP_REG(RK3399_POST_DSP_HACT_INFO, 0x1fff1fff, 0), + .vpost_st_end = VOP_REG(RK3399_POST_DSP_VACT_INFO, 0x1fff1fff, 0), + .cfg_done = VOP_REG_MASK(RK3399_REG_CFG_DONE, 0x1, 0), +}; + +static const int rk3399_vop_intrs[] = { + FS_INTR, + 0, 0, + LINE_FLAG_INTR, + 0, + BUS_ERROR_INTR, + 0, 0, 0, 0, 0, 0, 0, + DSP_HOLD_VALID_INTR, +}; + +static const struct vop_intr rk3399_vop_intr = { + .intrs = rk3399_vop_intrs, + .nintrs = ARRAY_SIZE(rk3399_vop_intrs), + .status = VOP_REG_MASK(RK3399_INTR_STATUS0, 0xffff, 0), + .enable = VOP_REG_MASK(RK3399_INTR_EN0, 0xffff, 0), + .clear = VOP_REG_MASK(RK3399_INTR_CLEAR0, 0xffff, 0), +}; + +static const struct vop_reg_data rk3399_init_reg_table[] = { + {RK3399_SYS_CTRL, 0x2000f800}, + {RK3399_DSP_CTRL0, 0x00000000}, + {RK3399_WIN0_CTRL0, 0x00000080}, + {RK3399_WIN1_CTRL0, 0x00000080}, + /* TODO: Win2/3 support multiple area function, but we haven't found + * a suitable way to use it yet, so let's just use them as other windows + * with only area 0 enabled. + */ + {RK3399_WIN2_CTRL0, 0x00000010}, + {RK3399_WIN3_CTRL0, 0x00000010}, +}; + +static const struct vop_data rk3399_vop_big = { + .init_table = rk3399_init_reg_table, + .table_size = ARRAY_SIZE(rk3399_init_reg_table), + .intr = &rk3399_vop_intr, + .ctrl = &rk3399_ctrl_data, + /* + * rk3399 vop big windows register layout is same as rk3288. + */ + .win = rk3288_vop_win_data, + .win_size = ARRAY_SIZE(rk3288_vop_win_data), +}; + +static const struct vop_win_data rk3399_vop_lit_win_data[] = { + { .base = 0x00, .phy = &rk3288_win01_data, + .type = DRM_PLANE_TYPE_PRIMARY }, + { .base = 0x00, .phy = &rk3288_win23_data, + .type = DRM_PLANE_TYPE_CURSOR}, +}; + +static const struct vop_data rk3399_vop_lit = { + .init_table = rk3399_init_reg_table, + .table_size = ARRAY_SIZE(rk3399_init_reg_table), + .intr = &rk3399_vop_intr, + .ctrl = &rk3399_ctrl_data, + /* + * rk3399 vop lit windows register layout is same as rk3288, + * but cut off the win1 and win3 windows. + */ + .win = rk3399_vop_lit_win_data, + .win_size = ARRAY_SIZE(rk3399_vop_lit_win_data), +}; + static const struct of_device_id vop_driver_dt_match[] = { { .compatible = "rockchip,rk3036-vop", .data = &rk3036_vop }, { .compatible = "rockchip,rk3288-vop", .data = &rk3288_vop }, + { .compatible = "rockchip,rk3399-vop-big", + .data = &rk3399_vop_big }, + { .compatible = "rockchip,rk3399-vop-lit", + .data = &rk3399_vop_lit }, {}, }; MODULE_DEVICE_TABLE(of, vop_driver_dt_match); diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.h b/drivers/gpu/drm/rockchip/rockchip_vop_reg.h index 43903e0..2cae529 100644 --- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.h +++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.h @@ -166,4 +166,197 @@ #define RK3288_DSP_VACT_ST_END_F1 0x019c /* register definition end */ +/* rk3399 register definition */ +#define RK3399_REG_CFG_DONE 0x00000 +#define RK3399_VERSION_INFO 0x00004 +#define RK3399_SYS_CTRL 0x00008 +#define RK3399_SYS_CTRL1 0x0000c +#define RK3399_DSP_CTRL0 0x00010 +#define RK3399_DSP_CTRL1 0x00014 +#define RK3399_DSP_BG 0x00018 +#define RK3399_MCU_CTRL 0x0001c +#define RK3399_WB_CTRL0 0x00020 +#define RK3399_WB_CTRL1 0x00024 +#define RK3399_WB_YRGB_MST 0x00028 +#define RK3399_WB_CBR_MST 0x0002c +#define RK3399_WIN0_CTRL0 0x00030 +#define RK3399_WIN0_CTRL1 0x00034 +#define RK3399_WIN0_COLOR_KEY 0x00038 +#define RK3399_WIN0_VIR 0x0003c +#define RK3399_WIN0_YRGB_MST 0x00040 +#define RK3399_WIN0_CBR_MST 0x00044 +#define RK3399_WIN0_ACT_INFO 0x00048 +#define RK3399_WIN0_DSP_INFO 0x0004c +#define RK3399_WIN0_DSP_ST 0x00050 +#define RK3399_WIN0_SCL_FACTOR_YRGB 0x00054 +#define RK3399_WIN0_SCL_FACTOR_CBR 0x00058 +#define RK3399_WIN0_SCL_OFFSET 0x0005c +#define RK3399_WIN0_SRC_ALPHA_CTRL 0x00060 +#define RK3399_WIN0_DST_ALPHA_CTRL 0x00064 +#define RK3399_WIN0_FADING_CTRL 0x00068 +#define RK3399_WIN0_CTRL2 0x0006c +#define RK3399_WIN1_CTRL0 0x00070 +#define RK3399_WIN1_CTRL1 0x00074 +#define RK3399_WIN1_COLOR_KEY 0x00078 +#define RK3399_WIN1_VIR 0x0007c +#define RK3399_WIN1_YRGB_MST 0x00080 +#define RK3399_WIN1_CBR_MST 0x00084 +#define RK3399_WIN1_ACT_INFO 0x00088 +#define RK3399_WIN1_DSP_INFO 0x0008c +#define RK3399_WIN1_DSP_ST 0x00090 +#define RK3399_WIN1_SCL_FACTOR_YRGB 0x00094 +#define RK3399_WIN1_SCL_FACTOR_CBR 0x00098 +#define RK3399_WIN1_SCL_OFFSET 0x0009c +#define RK3399_WIN1_SRC_ALPHA_CTRL 0x000a0 +#define RK3399_WIN1_DST_ALPHA_CTRL 0x000a4 +#define RK3399_WIN1_FADING_CTRL 0x000a8 +#define RK3399_WIN1_CTRL2 0x000ac +#define RK3399_WIN2_CTRL0 0x000b0 +#define RK3399_WIN2_CTRL1 0x000b4 +#define RK3399_WIN2_VIR0_1 0x000b8 +#define RK3399_WIN2_VIR2_3 0x000bc +#define RK3399_WIN2_MST0 0x000c0 +#define RK3399_WIN2_DSP_INFO0 0x000c4 +#define RK3399_WIN2_DSP_ST0 0x000c8 +#define RK3399_WIN2_COLOR_KEY 0x000cc +#define RK3399_WIN2_MST1 0x000d0 +#define RK3399_WIN2_DSP_INFO1 0x000d4 +#define RK3399_WIN2_DSP_ST1 0x000d8 +#define RK3399_WIN2_SRC_ALPHA_CTRL 0x000dc +#define RK3399_WIN2_MST2 0x000e0 +#define RK3399_WIN2_DSP_INFO2 0x000e4 +#define RK3399_WIN2_DSP_ST2 0x000e8 +#define RK3399_WIN2_DST_ALPHA_CTRL 0x000ec +#define RK3399_WIN2_MST3 0x000f0 +#define RK3399_WIN2_DSP_INFO3 0x000f4 +#define RK3399_WIN2_DSP_ST3 0x000f8 +#define RK3399_WIN2_FADING_CTRL 0x000fc +#define RK3399_WIN3_CTRL0 0x00100 +#define RK3399_WIN3_CTRL1 0x00104 +#define RK3399_WIN3_VIR0_1 0x00108 +#define RK3399_WIN3_VIR2_3 0x0010c +#define RK3399_WIN3_MST0 0x00110 +#define RK3399_WIN3_DSP_INFO0 0x00114 +#define RK3399_WIN3_DSP_ST0 0x00118 +#define RK3399_WIN3_COLOR_KEY 0x0011c +#define RK3399_WIN3_MST1 0x00120 +#define RK3399_WIN3_DSP_INFO1 0x00124 +#define RK3399_WIN3_DSP_ST1 0x00128 +#define RK3399_WIN3_SRC_ALPHA_CTRL 0x0012c +#define RK3399_WIN3_MST2 0x00130 +#define RK3399_WIN3_DSP_INFO2 0x00134 +#define RK3399_WIN3_DSP_ST2 0x00138 +#define RK3399_WIN3_DST_ALPHA_CTRL 0x0013c +#define RK3399_WIN3_MST3 0x00140 +#define RK3399_WIN3_DSP_INFO3 0x00144 +#define RK3399_WIN3_DSP_ST3 0x00148 +#define RK3399_WIN3_FADING_CTRL 0x0014c +#define RK3399_HWC_CTRL0 0x00150 +#define RK3399_HWC_CTRL1 0x00154 +#define RK3399_HWC_MST 0x00158 +#define RK3399_HWC_DSP_ST 0x0015c +#define RK3399_HWC_SRC_ALPHA_CTRL 0x00160 +#define RK3399_HWC_DST_ALPHA_CTRL 0x00164 +#define RK3399_HWC_FADING_CTRL 0x00168 +#define RK3399_HWC_RESERVED1 0x0016c +#define RK3399_POST_DSP_HACT_INFO 0x00170 +#define RK3399_POST_DSP_VACT_INFO 0x00174 +#define RK3399_POST_SCL_FACTOR_YRGB 0x00178 +#define RK3399_POST_RESERVED 0x0017c +#define RK3399_POST_SCL_CTRL 0x00180 +#define RK3399_POST_DSP_VACT_INFO_F1 0x00184 +#define RK3399_DSP_HTOTAL_HS_END 0x00188 +#define RK3399_DSP_HACT_ST_END 0x0018c +#define RK3399_DSP_VTOTAL_VS_END 0x00190 +#define RK3399_DSP_VACT_ST_END 0x00194 +#define RK3399_DSP_VS_ST_END_F1 0x00198 +#define RK3399_DSP_VACT_ST_END_F1 0x0019c +#define RK3399_PWM_CTRL 0x001a0 +#define RK3399_PWM_PERIOD_HPR 0x001a4 +#define RK3399_PWM_DUTY_LPR 0x001a8 +#define RK3399_PWM_CNT 0x001ac +#define RK3399_BCSH_COLOR_BAR 0x001b0 +#define RK3399_BCSH_BCS 0x001b4 +#define RK3399_BCSH_H 0x001b8 +#define RK3399_BCSH_CTRL 0x001bc +#define RK3399_CABC_CTRL0 0x001c0 +#define RK3399_CABC_CTRL1 0x001c4 +#define RK3399_CABC_CTRL2 0x001c8 +#define RK3399_CABC_CTRL3 0x001cc +#define RK3399_CABC_GAUSS_LINE0_0 0x001d0 +#define RK3399_CABC_GAUSS_LINE0_1 0x001d4 +#define RK3399_CABC_GAUSS_LINE1_0 0x001d8 +#define RK3399_CABC_GAUSS_LINE1_1 0x001dc +#define RK3399_CABC_GAUSS_LINE2_0 0x001e0 +#define RK3399_CABC_GAUSS_LINE2_1 0x001e4 +#define RK3399_FRC_LOWER01_0 0x001e8 +#define RK3399_FRC_LOWER01_1 0x001ec +#define RK3399_FRC_LOWER10_0 0x001f0 +#define RK3399_FRC_LOWER10_1 0x001f4 +#define RK3399_FRC_LOWER11_0 0x001f8 +#define RK3399_FRC_LOWER11_1 0x001fc +#define RK3399_AFBCD0_CTRL 0x00200 +#define RK3399_AFBCD0_HDR_PTR 0x00204 +#define RK3399_AFBCD0_PIC_SIZE 0x00208 +#define RK3399_AFBCD0_STATUS 0x0020c +#define RK3399_AFBCD1_CTRL 0x00220 +#define RK3399_AFBCD1_HDR_PTR 0x00224 +#define RK3399_AFBCD1_PIC_SIZE 0x00228 +#define RK3399_AFBCD1_STATUS 0x0022c +#define RK3399_AFBCD2_CTRL 0x00240 +#define RK3399_AFBCD2_HDR_PTR 0x00244 +#define RK3399_AFBCD2_PIC_SIZE 0x00248 +#define RK3399_AFBCD2_STATUS 0x0024c +#define RK3399_AFBCD3_CTRL 0x00260 +#define RK3399_AFBCD3_HDR_PTR 0x00264 +#define RK3399_AFBCD3_PIC_SIZE 0x00268 +#define RK3399_AFBCD3_STATUS 0x0026c +#define RK3399_INTR_EN0 0x00280 +#define RK3399_INTR_CLEAR0 0x00284 +#define RK3399_INTR_STATUS0 0x00288 +#define RK3399_INTR_RAW_STATUS0 0x0028c +#define RK3399_INTR_EN1 0x00290 +#define RK3399_INTR_CLEAR1 0x00294 +#define RK3399_INTR_STATUS1 0x00298 +#define RK3399_INTR_RAW_STATUS1 0x0029c +#define RK3399_LINE_FLAG 0x002a0 +#define RK3399_VOP_STATUS 0x002a4 +#define RK3399_BLANKING_VALUE 0x002a8 +#define RK3399_MCU_BYPASS_PORT 0x002ac +#define RK3399_WIN0_DSP_BG 0x002b0 +#define RK3399_WIN1_DSP_BG 0x002b4 +#define RK3399_WIN2_DSP_BG 0x002b8 +#define RK3399_WIN3_DSP_BG 0x002bc +#define RK3399_YUV2YUV_WIN 0x002c0 +#define RK3399_YUV2YUV_POST 0x002c4 +#define RK3399_AUTO_GATING_EN 0x002cc +#define RK3399_WIN0_CSC_COE 0x003a0 +#define RK3399_WIN1_CSC_COE 0x003c0 +#define RK3399_WIN2_CSC_COE 0x003e0 +#define RK3399_WIN3_CSC_COE 0x00400 +#define RK3399_HWC_CSC_COE 0x00420 +#define RK3399_BCSH_R2Y_CSC_COE 0x00440 +#define RK3399_BCSH_Y2R_CSC_COE 0x00460 +#define RK3399_POST_YUV2YUV_Y2R_COE 0x00480 +#define RK3399_POST_YUV2YUV_3X3_COE 0x004a0 +#define RK3399_POST_YUV2YUV_R2Y_COE 0x004c0 +#define RK3399_WIN0_YUV2YUV_Y2R 0x004e0 +#define RK3399_WIN0_YUV2YUV_3X3 0x00500 +#define RK3399_WIN0_YUV2YUV_R2Y 0x00520 +#define RK3399_WIN1_YUV2YUV_Y2R 0x00540 +#define RK3399_WIN1_YUV2YUV_3X3 0x00560 +#define RK3399_WIN1_YUV2YUV_R2Y 0x00580 +#define RK3399_WIN2_YUV2YUV_Y2R 0x005a0 +#define RK3399_WIN2_YUV2YUV_3X3 0x005c0 +#define RK3399_WIN2_YUV2YUV_R2Y 0x005e0 +#define RK3399_WIN3_YUV2YUV_Y2R 0x00600 +#define RK3399_WIN3_YUV2YUV_3X3 0x00620 +#define RK3399_WIN3_YUV2YUV_R2Y 0x00640 +#define RK3399_WIN2_LUT_ADDR 0x01000 +#define RK3399_WIN3_LUT_ADDR 0x01400 +#define RK3399_HWC_LUT_ADDR 0x01800 +#define RK3399_CABC_GAMMA_LUT_ADDR 0x01c00 +#define RK3399_GAMMA_LUT_ADDR 0x02000 +/* rk3399 register definition end */ + #endif /* _ROCKCHIP_VOP_REG_H */ -- 1.7.9.5 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark Yao Subject: [PATCH v2 4/5] drm/rockchip: vop: add rk3399 vop support Date: Wed, 20 Apr 2016 14:18:16 +0800 Message-ID: <1461133097-1478-5-git-send-email-mark.yao@rock-chips.com> References: <1461133097-1478-1-git-send-email-mark.yao@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1461133097-1478-1-git-send-email-mark.yao@rock-chips.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: David Airlie , Heiko Stuebner , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org List-Id: linux-rockchip.vger.kernel.org VGhlcmUgYXJlIHR3byBWT1AgaW4gcmszMzk5IGNoaXAsIHJlc3BlY3RpdmVseSBWT1BfQklHIGFu ZCBWT1BfTElULgptb3N0IHJlZ2lzdGVycyBsYXlvdXQgb2YgdGhpcyB0d28gdm9wIGlzIHNhbWUs IHRoZWlyIGZyYW1ld29yayBhcmUgYm90aApWT1BfRlVMTCwgdGhlIE1ham9yIGRpZmZlcmVuY2Vz IG9mIHRoaXMgdHdvIGlzIHRoYXQ6CgpWT1BfQklHIG1heCBvdXRwdXQgcmVzb2x1dGlvbiBpcyA0 MDk2eDIxNjAuClZPUF9MSVQgbWF4IG91dHB1dCByZXNvbHV0aW9uIGlzIDI1NjB4MTYwMAoKVk9Q X0JJRyBzdXBwb3J0IGZvdXIgd2luZG93cy4KVk9QX0xJVCBvbmx5IHN1cHBvcnQgdHdvIHdpbmRv d3MuCgpSSzMzOTkgdm9wIHJlZ2lzdGVyIGxheW91dCBpcyBzaW1pbGFyIHdpdGggcmszMjg4LCBz byBzb21lIGZlYXR1cmUKY2FuIHJldXNlIHdpdGggcmszMjg4LgoKU2lnbmVkLW9mZi1ieTogTWFy ayBZYW8gPG1hcmsueWFvQHJvY2stY2hpcHMuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9yb2Nr Y2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMgfCAgIDE1ICsrLQogZHJpdmVycy9ncHUvZHJtL3JvY2tj aGlwL3JvY2tjaGlwX2RybV92b3AuaCB8ICAgIDQgKwogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L3JvY2tjaGlwX3ZvcF9yZWcuYyB8ICAgOTEgKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJt L3JvY2tjaGlwL3JvY2tjaGlwX3ZvcF9yZWcuaCB8ICAxOTMgKysrKysrKysrKysrKysrKysrKysr KysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDI5OCBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9w LmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jCmluZGV4IDU5 ZjI0Y2QuLjVjOWZmOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2Nr Y2hpcF9kcm1fdm9wLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2Ry bV92b3AuYwpAQCAtOTEyLDcgKzkxMiw3IEBAIHN0YXRpYyB2b2lkIHZvcF9jcnRjX2VuYWJsZShz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJdTE2IHZzeW5jX2xlbiA9IGFkanVzdGVkX21vZGUtPnZz eW5jX2VuZCAtIGFkanVzdGVkX21vZGUtPnZzeW5jX3N0YXJ0OwogCXUxNiB2YWN0X3N0ID0gYWRq dXN0ZWRfbW9kZS0+dnRvdGFsIC0gYWRqdXN0ZWRfbW9kZS0+dnN5bmNfc3RhcnQ7CiAJdTE2IHZh Y3RfZW5kID0gdmFjdF9zdCArIHZkaXNwbGF5OwotCXVpbnQzMl90IHZhbDsKKwl1aW50MzJfdCBw aW5fcG9sLCB2YWw7CiAKIAl2b3BfZW5hYmxlKGNydGMpOwogCS8qCkBAIC05NTEsMjEgKzk1MSwy NiBAQCBzdGF0aWMgdm9pZCB2b3BfY3J0Y19lbmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQog CQl2b3BfZHNwX2hvbGRfdmFsaWRfaXJxX2Rpc2FibGUodm9wKTsKIAl9CiAKLQl2YWwgPSAweDg7 Ci0JdmFsIHw9IChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTkhTWU5DKSA/ IDAgOiAxOwotCXZhbCB8PSAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05W U1lOQykgPyAwIDogKDEgPDwgMSk7Ci0JVk9QX0NUUkxfU0VUKHZvcCwgcGluX3BvbCwgdmFsKTsK KwlwaW5fcG9sID0gMHg4OworCXBpbl9wb2wgfD0gKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJN X01PREVfRkxBR19OSFNZTkMpID8gMCA6IDE7CisJcGluX3BvbCB8PSAoYWRqdXN0ZWRfbW9kZS0+ ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05WU1lOQykgPyAwIDogKDEgPDwgMSk7CisJVk9QX0NUUkxf U0VUKHZvcCwgcGluX3BvbCwgcGluX3BvbCk7CisKIAlzd2l0Y2ggKHMtPm91dHB1dF90eXBlKSB7 CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUzoKIAkJVk9QX0NUUkxfU0VUKHZvcCwgcmdi X2VuLCAxKTsKKwkJVk9QX0NUUkxfU0VUKHZvcCwgcmdiX3Bpbl9wb2wsIHBpbl9wb2wpOwogCQli cmVhazsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9lRFA6CisJCVZPUF9DVFJMX1NFVCh2b3As IGVkcF9waW5fcG9sLCBwaW5fcG9sKTsKIAkJVk9QX0NUUkxfU0VUKHZvcCwgZWRwX2VuLCAxKTsK IAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUE6CisJCVZPUF9DVFJMX1NF VCh2b3AsIGhkbWlfcGluX3BvbCwgcGluX3BvbCk7CiAJCVZPUF9DVFJMX1NFVCh2b3AsIGhkbWlf ZW4sIDEpOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EU0k6CisJCVZPUF9D VFJMX1NFVCh2b3AsIG1pcGlfcGluX3BvbCwgcGluX3BvbCk7CiAJCVZPUF9DVFJMX1NFVCh2b3As IG1pcGlfZW4sIDEpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuaCBiL2RyaXZlcnMvZ3B1L2RybS9yb2Nr Y2hpcC9yb2NrY2hpcF9kcm1fdm9wLmgKaW5kZXggMjhkYWZiNi4uZmY0ZjUyZSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuaAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5oCkBAIC00OSw2ICs0OSwxMCBA QCBzdHJ1Y3Qgdm9wX2N0cmwgewogCXN0cnVjdCB2b3BfcmVnIGRpdGhlcl9kb3duOwogCXN0cnVj dCB2b3BfcmVnIGRpdGhlcl91cDsKIAlzdHJ1Y3Qgdm9wX3JlZyBwaW5fcG9sOworCXN0cnVjdCB2 b3BfcmVnIHJnYl9waW5fcG9sOworCXN0cnVjdCB2b3BfcmVnIGhkbWlfcGluX3BvbDsKKwlzdHJ1 Y3Qgdm9wX3JlZyBlZHBfcGluX3BvbDsKKwlzdHJ1Y3Qgdm9wX3JlZyBtaXBpX3Bpbl9wb2w7CiAK IAlzdHJ1Y3Qgdm9wX3JlZyBodG90YWxfcHc7CiAJc3RydWN0IHZvcF9yZWcgaGFjdF9zdF9lbmQ7 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfdm9wX3JlZy5j IGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX3ZvcF9yZWcuYwppbmRleCA2ODQ2 ODY4Li42ZjQyZTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2No aXBfdm9wX3JlZy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF92b3Bf cmVnLmMKQEAgLTI3OCwxMSArMjc4LDEwMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHZvcF9kYXRh IHJrMzI4OF92b3AgPSB7CiAJLndpbl9zaXplID0gQVJSQVlfU0laRShyazMyODhfdm9wX3dpbl9k YXRhKSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm9wX2N0cmwgcmszMzk5X2N0cmxfZGF0 YSA9IHsKKwkuc3RhbmRieSA9IFZPUF9SRUcoUkszMzk5X1NZU19DVFJMLCAweDEsIDIyKSwKKwku Z2F0ZV9lbiA9IFZPUF9SRUcoUkszMzk5X1NZU19DVFJMLCAweDEsIDIzKSwKKwkucmdiX2VuID0g Vk9QX1JFRyhSSzMzOTlfU1lTX0NUUkwsIDB4MSwgMTIpLAorCS5oZG1pX2VuID0gVk9QX1JFRyhS SzMzOTlfU1lTX0NUUkwsIDB4MSwgMTMpLAorCS5lZHBfZW4gPSBWT1BfUkVHKFJLMzM5OV9TWVNf Q1RSTCwgMHgxLCAxNCksCisJLm1pcGlfZW4gPSBWT1BfUkVHKFJLMzM5OV9TWVNfQ1RSTCwgMHgx LCAxNSksCisJLmRpdGhlcl9kb3duID0gVk9QX1JFRyhSSzMzOTlfRFNQX0NUUkwxLCAweGYsIDEp LAorCS5kaXRoZXJfdXAgPSBWT1BfUkVHKFJLMzM5OV9EU1BfQ1RSTDEsIDB4MSwgNiksCisJLmRh dGFfYmxhbmsgPSBWT1BfUkVHKFJLMzM5OV9EU1BfQ1RSTDAsIDB4MSwgMTkpLAorCS5vdXRfbW9k ZSA9IFZPUF9SRUcoUkszMzk5X0RTUF9DVFJMMCwgMHhmLCAwKSwKKwkucmdiX3Bpbl9wb2wgPSBW T1BfUkVHKFJLMzM5OV9EU1BfQ1RSTDEsIDB4ZiwgMTYpLAorCS5oZG1pX3Bpbl9wb2wgPSBWT1Bf UkVHKFJLMzM5OV9EU1BfQ1RSTDEsIDB4ZiwgMjApLAorCS5lZHBfcGluX3BvbCA9IFZPUF9SRUco UkszMzk5X0RTUF9DVFJMMSwgMHhmLCAyNCksCisJLm1pcGlfcGluX3BvbCA9IFZPUF9SRUcoUksz Mzk5X0RTUF9DVFJMMSwgMHhmLCAyOCksCisJLmh0b3RhbF9wdyA9IFZPUF9SRUcoUkszMzk5X0RT UF9IVE9UQUxfSFNfRU5ELCAweDFmZmYxZmZmLCAwKSwKKwkuaGFjdF9zdF9lbmQgPSBWT1BfUkVH KFJLMzM5OV9EU1BfSEFDVF9TVF9FTkQsIDB4MWZmZjFmZmYsIDApLAorCS52dG90YWxfcHcgPSBW T1BfUkVHKFJLMzM5OV9EU1BfVlRPVEFMX1ZTX0VORCwgMHgxZmZmMWZmZiwgMCksCisJLnZhY3Rf c3RfZW5kID0gVk9QX1JFRyhSSzMzOTlfRFNQX1ZBQ1RfU1RfRU5ELCAweDFmZmYxZmZmLCAwKSwK KwkuaHBvc3Rfc3RfZW5kID0gVk9QX1JFRyhSSzMzOTlfUE9TVF9EU1BfSEFDVF9JTkZPLCAweDFm ZmYxZmZmLCAwKSwKKwkudnBvc3Rfc3RfZW5kID0gVk9QX1JFRyhSSzMzOTlfUE9TVF9EU1BfVkFD VF9JTkZPLCAweDFmZmYxZmZmLCAwKSwKKwkuY2ZnX2RvbmUgPSBWT1BfUkVHX01BU0soUkszMzk5 X1JFR19DRkdfRE9ORSwgMHgxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgcmszMzk5X3Zv cF9pbnRyc1tdID0geworCUZTX0lOVFIsCisJMCwgMCwKKwlMSU5FX0ZMQUdfSU5UUiwKKwkwLAor CUJVU19FUlJPUl9JTlRSLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsCisJRFNQX0hPTERfVkFMSURf SU5UUiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm9wX2ludHIgcmszMzk5X3ZvcF9pbnRy ID0geworCS5pbnRycyA9IHJrMzM5OV92b3BfaW50cnMsCisJLm5pbnRycyA9IEFSUkFZX1NJWkUo cmszMzk5X3ZvcF9pbnRycyksCisJLnN0YXR1cyA9IFZPUF9SRUdfTUFTSyhSSzMzOTlfSU5UUl9T VEFUVVMwLCAweGZmZmYsIDApLAorCS5lbmFibGUgPSBWT1BfUkVHX01BU0soUkszMzk5X0lOVFJf RU4wLCAweGZmZmYsIDApLAorCS5jbGVhciA9IFZPUF9SRUdfTUFTSyhSSzMzOTlfSU5UUl9DTEVB UjAsIDB4ZmZmZiwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHZvcF9yZWdfZGF0YSBy azMzOTlfaW5pdF9yZWdfdGFibGVbXSA9IHsKKwl7UkszMzk5X1NZU19DVFJMLCAweDIwMDBmODAw fSwKKwl7UkszMzk5X0RTUF9DVFJMMCwgMHgwMDAwMDAwMH0sCisJe1JLMzM5OV9XSU4wX0NUUkww LCAweDAwMDAwMDgwfSwKKwl7UkszMzk5X1dJTjFfQ1RSTDAsIDB4MDAwMDAwODB9LAorCS8qIFRP RE86IFdpbjIvMyBzdXBwb3J0IG11bHRpcGxlIGFyZWEgZnVuY3Rpb24sIGJ1dCB3ZSBoYXZlbid0 IGZvdW5kCisJICogYSBzdWl0YWJsZSB3YXkgdG8gdXNlIGl0IHlldCwgc28gbGV0J3MganVzdCB1 c2UgdGhlbSBhcyBvdGhlciB3aW5kb3dzCisJICogd2l0aCBvbmx5IGFyZWEgMCBlbmFibGVkLgor CSAqLworCXtSSzMzOTlfV0lOMl9DVFJMMCwgMHgwMDAwMDAxMH0sCisJe1JLMzM5OV9XSU4zX0NU UkwwLCAweDAwMDAwMDEwfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm9wX2RhdGEgcmsz Mzk5X3ZvcF9iaWcgPSB7CisJLmluaXRfdGFibGUgPSByazMzOTlfaW5pdF9yZWdfdGFibGUsCisJ LnRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKHJrMzM5OV9pbml0X3JlZ190YWJsZSksCisJLmludHIg PSAmcmszMzk5X3ZvcF9pbnRyLAorCS5jdHJsID0gJnJrMzM5OV9jdHJsX2RhdGEsCisJLyoKKwkg KiByazMzOTkgdm9wIGJpZyB3aW5kb3dzIHJlZ2lzdGVyIGxheW91dCBpcyBzYW1lIGFzIHJrMzI4 OC4KKwkgKi8KKwkud2luID0gcmszMjg4X3ZvcF93aW5fZGF0YSwKKwkud2luX3NpemUgPSBBUlJB WV9TSVpFKHJrMzI4OF92b3Bfd2luX2RhdGEpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2 b3Bfd2luX2RhdGEgcmszMzk5X3ZvcF9saXRfd2luX2RhdGFbXSA9IHsKKwl7IC5iYXNlID0gMHgw MCwgLnBoeSA9ICZyazMyODhfd2luMDFfZGF0YSwKKwkgIC50eXBlID0gRFJNX1BMQU5FX1RZUEVf UFJJTUFSWSB9LAorCXsgLmJhc2UgPSAweDAwLCAucGh5ID0gJnJrMzI4OF93aW4yM19kYXRhLAor CSAgLnR5cGUgPSBEUk1fUExBTkVfVFlQRV9DVVJTT1J9LAorfTsKKworc3RhdGljIGNvbnN0IHN0 cnVjdCB2b3BfZGF0YSByazMzOTlfdm9wX2xpdCA9IHsKKwkuaW5pdF90YWJsZSA9IHJrMzM5OV9p bml0X3JlZ190YWJsZSwKKwkudGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUocmszMzk5X2luaXRfcmVn X3RhYmxlKSwKKwkuaW50ciA9ICZyazMzOTlfdm9wX2ludHIsCisJLmN0cmwgPSAmcmszMzk5X2N0 cmxfZGF0YSwKKwkvKgorCSAqIHJrMzM5OSB2b3AgbGl0IHdpbmRvd3MgcmVnaXN0ZXIgbGF5b3V0 IGlzIHNhbWUgYXMgcmszMjg4LAorCSAqIGJ1dCBjdXQgb2ZmIHRoZSB3aW4xIGFuZCB3aW4zIHdp bmRvd3MuCisJICovCisJLndpbiA9IHJrMzM5OV92b3BfbGl0X3dpbl9kYXRhLAorCS53aW5fc2l6 ZSA9IEFSUkFZX1NJWkUocmszMzk5X3ZvcF9saXRfd2luX2RhdGEpLAorfTsKKwogc3RhdGljIGNv bnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdm9wX2RyaXZlcl9kdF9tYXRjaFtdID0gewogCXsgLmNv bXBhdGlibGUgPSAicm9ja2NoaXAscmszMDM2LXZvcCIsCiAJICAuZGF0YSA9ICZyazMwMzZfdm9w IH0sCiAJeyAuY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMyODgtdm9wIiwKIAkgIC5kYXRhID0g JnJrMzI4OF92b3AgfSwKKwl7IC5jb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzM5OS12b3AtYmln IiwKKwkgIC5kYXRhID0gJnJrMzM5OV92b3BfYmlnIH0sCisJeyAuY29tcGF0aWJsZSA9ICJyb2Nr Y2hpcCxyazMzOTktdm9wLWxpdCIsCisJICAuZGF0YSA9ICZyazMzOTlfdm9wX2xpdCB9LAogCXt9 LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHZvcF9kcml2ZXJfZHRfbWF0Y2gpOwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX3ZvcF9yZWcuaCBiL2Ry aXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF92b3BfcmVnLmgKaW5kZXggNDM5MDNlMC4u MmNhZTUyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX3Zv cF9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfdm9wX3JlZy5o CkBAIC0xNjYsNCArMTY2LDE5NyBAQAogI2RlZmluZSBSSzMyODhfRFNQX1ZBQ1RfU1RfRU5EX0Yx CQkweDAxOWMKIC8qIHJlZ2lzdGVyIGRlZmluaXRpb24gZW5kICovCiAKKy8qIHJrMzM5OSByZWdp c3RlciBkZWZpbml0aW9uICovCisjZGVmaW5lIFJLMzM5OV9SRUdfQ0ZHX0RPTkUJCTB4MDAwMDAK KyNkZWZpbmUgUkszMzk5X1ZFUlNJT05fSU5GTwkJMHgwMDAwNAorI2RlZmluZSBSSzMzOTlfU1lT X0NUUkwJCQkweDAwMDA4CisjZGVmaW5lIFJLMzM5OV9TWVNfQ1RSTDEJCTB4MDAwMGMKKyNkZWZp bmUgUkszMzk5X0RTUF9DVFJMMAkJMHgwMDAxMAorI2RlZmluZSBSSzMzOTlfRFNQX0NUUkwxCQkw eDAwMDE0CisjZGVmaW5lIFJLMzM5OV9EU1BfQkcJCQkweDAwMDE4CisjZGVmaW5lIFJLMzM5OV9N Q1VfQ1RSTAkJCTB4MDAwMWMKKyNkZWZpbmUgUkszMzk5X1dCX0NUUkwwCQkJMHgwMDAyMAorI2Rl ZmluZSBSSzMzOTlfV0JfQ1RSTDEJCQkweDAwMDI0CisjZGVmaW5lIFJLMzM5OV9XQl9ZUkdCX01T VAkJMHgwMDAyOAorI2RlZmluZSBSSzMzOTlfV0JfQ0JSX01TVAkJMHgwMDAyYworI2RlZmluZSBS SzMzOTlfV0lOMF9DVFJMMAkJMHgwMDAzMAorI2RlZmluZSBSSzMzOTlfV0lOMF9DVFJMMQkJMHgw MDAzNAorI2RlZmluZSBSSzMzOTlfV0lOMF9DT0xPUl9LRVkJCTB4MDAwMzgKKyNkZWZpbmUgUksz Mzk5X1dJTjBfVklSCQkJMHgwMDAzYworI2RlZmluZSBSSzMzOTlfV0lOMF9ZUkdCX01TVAkJMHgw MDA0MAorI2RlZmluZSBSSzMzOTlfV0lOMF9DQlJfTVNUCQkweDAwMDQ0CisjZGVmaW5lIFJLMzM5 OV9XSU4wX0FDVF9JTkZPCQkweDAwMDQ4CisjZGVmaW5lIFJLMzM5OV9XSU4wX0RTUF9JTkZPCQkw eDAwMDRjCisjZGVmaW5lIFJLMzM5OV9XSU4wX0RTUF9TVAkJMHgwMDA1MAorI2RlZmluZSBSSzMz OTlfV0lOMF9TQ0xfRkFDVE9SX1lSR0IJMHgwMDA1NAorI2RlZmluZSBSSzMzOTlfV0lOMF9TQ0xf RkFDVE9SX0NCUgkweDAwMDU4CisjZGVmaW5lIFJLMzM5OV9XSU4wX1NDTF9PRkZTRVQJCTB4MDAw NWMKKyNkZWZpbmUgUkszMzk5X1dJTjBfU1JDX0FMUEhBX0NUUkwJMHgwMDA2MAorI2RlZmluZSBS SzMzOTlfV0lOMF9EU1RfQUxQSEFfQ1RSTAkweDAwMDY0CisjZGVmaW5lIFJLMzM5OV9XSU4wX0ZB RElOR19DVFJMCQkweDAwMDY4CisjZGVmaW5lIFJLMzM5OV9XSU4wX0NUUkwyCQkweDAwMDZjCisj ZGVmaW5lIFJLMzM5OV9XSU4xX0NUUkwwCQkweDAwMDcwCisjZGVmaW5lIFJLMzM5OV9XSU4xX0NU UkwxCQkweDAwMDc0CisjZGVmaW5lIFJLMzM5OV9XSU4xX0NPTE9SX0tFWQkJMHgwMDA3OAorI2Rl ZmluZSBSSzMzOTlfV0lOMV9WSVIJCQkweDAwMDdjCisjZGVmaW5lIFJLMzM5OV9XSU4xX1lSR0Jf TVNUCQkweDAwMDgwCisjZGVmaW5lIFJLMzM5OV9XSU4xX0NCUl9NU1QJCTB4MDAwODQKKyNkZWZp bmUgUkszMzk5X1dJTjFfQUNUX0lORk8JCTB4MDAwODgKKyNkZWZpbmUgUkszMzk5X1dJTjFfRFNQ X0lORk8JCTB4MDAwOGMKKyNkZWZpbmUgUkszMzk5X1dJTjFfRFNQX1NUCQkweDAwMDkwCisjZGVm aW5lIFJLMzM5OV9XSU4xX1NDTF9GQUNUT1JfWVJHQgkweDAwMDk0CisjZGVmaW5lIFJLMzM5OV9X SU4xX1NDTF9GQUNUT1JfQ0JSCTB4MDAwOTgKKyNkZWZpbmUgUkszMzk5X1dJTjFfU0NMX09GRlNF VAkJMHgwMDA5YworI2RlZmluZSBSSzMzOTlfV0lOMV9TUkNfQUxQSEFfQ1RSTAkweDAwMGEwCisj ZGVmaW5lIFJLMzM5OV9XSU4xX0RTVF9BTFBIQV9DVFJMCTB4MDAwYTQKKyNkZWZpbmUgUkszMzk5 X1dJTjFfRkFESU5HX0NUUkwJCTB4MDAwYTgKKyNkZWZpbmUgUkszMzk5X1dJTjFfQ1RSTDIJCTB4 MDAwYWMKKyNkZWZpbmUgUkszMzk5X1dJTjJfQ1RSTDAJCTB4MDAwYjAKKyNkZWZpbmUgUkszMzk5 X1dJTjJfQ1RSTDEJCTB4MDAwYjQKKyNkZWZpbmUgUkszMzk5X1dJTjJfVklSMF8xCQkweDAwMGI4 CisjZGVmaW5lIFJLMzM5OV9XSU4yX1ZJUjJfMwkJMHgwMDBiYworI2RlZmluZSBSSzMzOTlfV0lO Ml9NU1QwCQkweDAwMGMwCisjZGVmaW5lIFJLMzM5OV9XSU4yX0RTUF9JTkZPMAkJMHgwMDBjNAor I2RlZmluZSBSSzMzOTlfV0lOMl9EU1BfU1QwCQkweDAwMGM4CisjZGVmaW5lIFJLMzM5OV9XSU4y X0NPTE9SX0tFWQkJMHgwMDBjYworI2RlZmluZSBSSzMzOTlfV0lOMl9NU1QxCQkweDAwMGQwCisj ZGVmaW5lIFJLMzM5OV9XSU4yX0RTUF9JTkZPMQkJMHgwMDBkNAorI2RlZmluZSBSSzMzOTlfV0lO Ml9EU1BfU1QxCQkweDAwMGQ4CisjZGVmaW5lIFJLMzM5OV9XSU4yX1NSQ19BTFBIQV9DVFJMCTB4 MDAwZGMKKyNkZWZpbmUgUkszMzk5X1dJTjJfTVNUMgkJMHgwMDBlMAorI2RlZmluZSBSSzMzOTlf V0lOMl9EU1BfSU5GTzIJCTB4MDAwZTQKKyNkZWZpbmUgUkszMzk5X1dJTjJfRFNQX1NUMgkJMHgw MDBlOAorI2RlZmluZSBSSzMzOTlfV0lOMl9EU1RfQUxQSEFfQ1RSTAkweDAwMGVjCisjZGVmaW5l IFJLMzM5OV9XSU4yX01TVDMJCTB4MDAwZjAKKyNkZWZpbmUgUkszMzk5X1dJTjJfRFNQX0lORk8z CQkweDAwMGY0CisjZGVmaW5lIFJLMzM5OV9XSU4yX0RTUF9TVDMJCTB4MDAwZjgKKyNkZWZpbmUg UkszMzk5X1dJTjJfRkFESU5HX0NUUkwJCTB4MDAwZmMKKyNkZWZpbmUgUkszMzk5X1dJTjNfQ1RS TDAJCTB4MDAxMDAKKyNkZWZpbmUgUkszMzk5X1dJTjNfQ1RSTDEJCTB4MDAxMDQKKyNkZWZpbmUg UkszMzk5X1dJTjNfVklSMF8xCQkweDAwMTA4CisjZGVmaW5lIFJLMzM5OV9XSU4zX1ZJUjJfMwkJ MHgwMDEwYworI2RlZmluZSBSSzMzOTlfV0lOM19NU1QwCQkweDAwMTEwCisjZGVmaW5lIFJLMzM5 OV9XSU4zX0RTUF9JTkZPMAkJMHgwMDExNAorI2RlZmluZSBSSzMzOTlfV0lOM19EU1BfU1QwCQkw eDAwMTE4CisjZGVmaW5lIFJLMzM5OV9XSU4zX0NPTE9SX0tFWQkJMHgwMDExYworI2RlZmluZSBS SzMzOTlfV0lOM19NU1QxCQkweDAwMTIwCisjZGVmaW5lIFJLMzM5OV9XSU4zX0RTUF9JTkZPMQkJ MHgwMDEyNAorI2RlZmluZSBSSzMzOTlfV0lOM19EU1BfU1QxCQkweDAwMTI4CisjZGVmaW5lIFJL MzM5OV9XSU4zX1NSQ19BTFBIQV9DVFJMCTB4MDAxMmMKKyNkZWZpbmUgUkszMzk5X1dJTjNfTVNU MgkJMHgwMDEzMAorI2RlZmluZSBSSzMzOTlfV0lOM19EU1BfSU5GTzIJCTB4MDAxMzQKKyNkZWZp bmUgUkszMzk5X1dJTjNfRFNQX1NUMgkJMHgwMDEzOAorI2RlZmluZSBSSzMzOTlfV0lOM19EU1Rf QUxQSEFfQ1RSTAkweDAwMTNjCisjZGVmaW5lIFJLMzM5OV9XSU4zX01TVDMJCTB4MDAxNDAKKyNk ZWZpbmUgUkszMzk5X1dJTjNfRFNQX0lORk8zCQkweDAwMTQ0CisjZGVmaW5lIFJLMzM5OV9XSU4z X0RTUF9TVDMJCTB4MDAxNDgKKyNkZWZpbmUgUkszMzk5X1dJTjNfRkFESU5HX0NUUkwJCTB4MDAx NGMKKyNkZWZpbmUgUkszMzk5X0hXQ19DVFJMMAkJMHgwMDE1MAorI2RlZmluZSBSSzMzOTlfSFdD X0NUUkwxCQkweDAwMTU0CisjZGVmaW5lIFJLMzM5OV9IV0NfTVNUCQkJMHgwMDE1OAorI2RlZmlu ZSBSSzMzOTlfSFdDX0RTUF9TVAkJMHgwMDE1YworI2RlZmluZSBSSzMzOTlfSFdDX1NSQ19BTFBI QV9DVFJMCTB4MDAxNjAKKyNkZWZpbmUgUkszMzk5X0hXQ19EU1RfQUxQSEFfQ1RSTAkweDAwMTY0 CisjZGVmaW5lIFJLMzM5OV9IV0NfRkFESU5HX0NUUkwJCTB4MDAxNjgKKyNkZWZpbmUgUkszMzk5 X0hXQ19SRVNFUlZFRDEJCTB4MDAxNmMKKyNkZWZpbmUgUkszMzk5X1BPU1RfRFNQX0hBQ1RfSU5G TwkweDAwMTcwCisjZGVmaW5lIFJLMzM5OV9QT1NUX0RTUF9WQUNUX0lORk8JMHgwMDE3NAorI2Rl ZmluZSBSSzMzOTlfUE9TVF9TQ0xfRkFDVE9SX1lSR0IJMHgwMDE3OAorI2RlZmluZSBSSzMzOTlf UE9TVF9SRVNFUlZFRAkJMHgwMDE3YworI2RlZmluZSBSSzMzOTlfUE9TVF9TQ0xfQ1RSTAkJMHgw MDE4MAorI2RlZmluZSBSSzMzOTlfUE9TVF9EU1BfVkFDVF9JTkZPX0YxCTB4MDAxODQKKyNkZWZp bmUgUkszMzk5X0RTUF9IVE9UQUxfSFNfRU5ECTB4MDAxODgKKyNkZWZpbmUgUkszMzk5X0RTUF9I QUNUX1NUX0VORAkJMHgwMDE4YworI2RlZmluZSBSSzMzOTlfRFNQX1ZUT1RBTF9WU19FTkQJMHgw MDE5MAorI2RlZmluZSBSSzMzOTlfRFNQX1ZBQ1RfU1RfRU5ECQkweDAwMTk0CisjZGVmaW5lIFJL MzM5OV9EU1BfVlNfU1RfRU5EX0YxCQkweDAwMTk4CisjZGVmaW5lIFJLMzM5OV9EU1BfVkFDVF9T VF9FTkRfRjEJMHgwMDE5YworI2RlZmluZSBSSzMzOTlfUFdNX0NUUkwJCQkweDAwMWEwCisjZGVm aW5lIFJLMzM5OV9QV01fUEVSSU9EX0hQUgkJMHgwMDFhNAorI2RlZmluZSBSSzMzOTlfUFdNX0RV VFlfTFBSCQkweDAwMWE4CisjZGVmaW5lIFJLMzM5OV9QV01fQ05UCQkJMHgwMDFhYworI2RlZmlu ZSBSSzMzOTlfQkNTSF9DT0xPUl9CQVIJCTB4MDAxYjAKKyNkZWZpbmUgUkszMzk5X0JDU0hfQkNT CQkJMHgwMDFiNAorI2RlZmluZSBSSzMzOTlfQkNTSF9ICQkJMHgwMDFiOAorI2RlZmluZSBSSzMz OTlfQkNTSF9DVFJMCQkweDAwMWJjCisjZGVmaW5lIFJLMzM5OV9DQUJDX0NUUkwwCQkweDAwMWMw CisjZGVmaW5lIFJLMzM5OV9DQUJDX0NUUkwxCQkweDAwMWM0CisjZGVmaW5lIFJLMzM5OV9DQUJD X0NUUkwyCQkweDAwMWM4CisjZGVmaW5lIFJLMzM5OV9DQUJDX0NUUkwzCQkweDAwMWNjCisjZGVm aW5lIFJLMzM5OV9DQUJDX0dBVVNTX0xJTkUwXzAJMHgwMDFkMAorI2RlZmluZSBSSzMzOTlfQ0FC Q19HQVVTU19MSU5FMF8xCTB4MDAxZDQKKyNkZWZpbmUgUkszMzk5X0NBQkNfR0FVU1NfTElORTFf MAkweDAwMWQ4CisjZGVmaW5lIFJLMzM5OV9DQUJDX0dBVVNTX0xJTkUxXzEJMHgwMDFkYworI2Rl ZmluZSBSSzMzOTlfQ0FCQ19HQVVTU19MSU5FMl8wCTB4MDAxZTAKKyNkZWZpbmUgUkszMzk5X0NB QkNfR0FVU1NfTElORTJfMQkweDAwMWU0CisjZGVmaW5lIFJLMzM5OV9GUkNfTE9XRVIwMV8wCQkw eDAwMWU4CisjZGVmaW5lIFJLMzM5OV9GUkNfTE9XRVIwMV8xCQkweDAwMWVjCisjZGVmaW5lIFJL MzM5OV9GUkNfTE9XRVIxMF8wCQkweDAwMWYwCisjZGVmaW5lIFJLMzM5OV9GUkNfTE9XRVIxMF8x CQkweDAwMWY0CisjZGVmaW5lIFJLMzM5OV9GUkNfTE9XRVIxMV8wCQkweDAwMWY4CisjZGVmaW5l IFJLMzM5OV9GUkNfTE9XRVIxMV8xCQkweDAwMWZjCisjZGVmaW5lIFJLMzM5OV9BRkJDRDBfQ1RS TAkJMHgwMDIwMAorI2RlZmluZSBSSzMzOTlfQUZCQ0QwX0hEUl9QVFIJCTB4MDAyMDQKKyNkZWZp bmUgUkszMzk5X0FGQkNEMF9QSUNfU0laRQkJMHgwMDIwOAorI2RlZmluZSBSSzMzOTlfQUZCQ0Qw X1NUQVRVUwkJMHgwMDIwYworI2RlZmluZSBSSzMzOTlfQUZCQ0QxX0NUUkwJCTB4MDAyMjAKKyNk ZWZpbmUgUkszMzk5X0FGQkNEMV9IRFJfUFRSCQkweDAwMjI0CisjZGVmaW5lIFJLMzM5OV9BRkJD RDFfUElDX1NJWkUJCTB4MDAyMjgKKyNkZWZpbmUgUkszMzk5X0FGQkNEMV9TVEFUVVMJCTB4MDAy MmMKKyNkZWZpbmUgUkszMzk5X0FGQkNEMl9DVFJMCQkweDAwMjQwCisjZGVmaW5lIFJLMzM5OV9B RkJDRDJfSERSX1BUUgkJMHgwMDI0NAorI2RlZmluZSBSSzMzOTlfQUZCQ0QyX1BJQ19TSVpFCQkw eDAwMjQ4CisjZGVmaW5lIFJLMzM5OV9BRkJDRDJfU1RBVFVTCQkweDAwMjRjCisjZGVmaW5lIFJL MzM5OV9BRkJDRDNfQ1RSTAkJMHgwMDI2MAorI2RlZmluZSBSSzMzOTlfQUZCQ0QzX0hEUl9QVFIJ CTB4MDAyNjQKKyNkZWZpbmUgUkszMzk5X0FGQkNEM19QSUNfU0laRQkJMHgwMDI2OAorI2RlZmlu ZSBSSzMzOTlfQUZCQ0QzX1NUQVRVUwkJMHgwMDI2YworI2RlZmluZSBSSzMzOTlfSU5UUl9FTjAJ CQkweDAwMjgwCisjZGVmaW5lIFJLMzM5OV9JTlRSX0NMRUFSMAkJMHgwMDI4NAorI2RlZmluZSBS SzMzOTlfSU5UUl9TVEFUVVMwCQkweDAwMjg4CisjZGVmaW5lIFJLMzM5OV9JTlRSX1JBV19TVEFU VVMwCQkweDAwMjhjCisjZGVmaW5lIFJLMzM5OV9JTlRSX0VOMQkJCTB4MDAyOTAKKyNkZWZpbmUg UkszMzk5X0lOVFJfQ0xFQVIxCQkweDAwMjk0CisjZGVmaW5lIFJLMzM5OV9JTlRSX1NUQVRVUzEJ CTB4MDAyOTgKKyNkZWZpbmUgUkszMzk5X0lOVFJfUkFXX1NUQVRVUzEJCTB4MDAyOWMKKyNkZWZp bmUgUkszMzk5X0xJTkVfRkxBRwkJMHgwMDJhMAorI2RlZmluZSBSSzMzOTlfVk9QX1NUQVRVUwkJ MHgwMDJhNAorI2RlZmluZSBSSzMzOTlfQkxBTktJTkdfVkFMVUUJCTB4MDAyYTgKKyNkZWZpbmUg UkszMzk5X01DVV9CWVBBU1NfUE9SVAkJMHgwMDJhYworI2RlZmluZSBSSzMzOTlfV0lOMF9EU1Bf QkcJCTB4MDAyYjAKKyNkZWZpbmUgUkszMzk5X1dJTjFfRFNQX0JHCQkweDAwMmI0CisjZGVmaW5l IFJLMzM5OV9XSU4yX0RTUF9CRwkJMHgwMDJiOAorI2RlZmluZSBSSzMzOTlfV0lOM19EU1BfQkcJ CTB4MDAyYmMKKyNkZWZpbmUgUkszMzk5X1lVVjJZVVZfV0lOCQkweDAwMmMwCisjZGVmaW5lIFJL MzM5OV9ZVVYyWVVWX1BPU1QJCTB4MDAyYzQKKyNkZWZpbmUgUkszMzk5X0FVVE9fR0FUSU5HX0VO CQkweDAwMmNjCisjZGVmaW5lIFJLMzM5OV9XSU4wX0NTQ19DT0UJCTB4MDAzYTAKKyNkZWZpbmUg UkszMzk5X1dJTjFfQ1NDX0NPRQkJMHgwMDNjMAorI2RlZmluZSBSSzMzOTlfV0lOMl9DU0NfQ09F CQkweDAwM2UwCisjZGVmaW5lIFJLMzM5OV9XSU4zX0NTQ19DT0UJCTB4MDA0MDAKKyNkZWZpbmUg UkszMzk5X0hXQ19DU0NfQ09FCQkweDAwNDIwCisjZGVmaW5lIFJLMzM5OV9CQ1NIX1IyWV9DU0Nf Q09FCQkweDAwNDQwCisjZGVmaW5lIFJLMzM5OV9CQ1NIX1kyUl9DU0NfQ09FCQkweDAwNDYwCisj ZGVmaW5lIFJLMzM5OV9QT1NUX1lVVjJZVVZfWTJSX0NPRQkweDAwNDgwCisjZGVmaW5lIFJLMzM5 OV9QT1NUX1lVVjJZVVZfM1gzX0NPRQkweDAwNGEwCisjZGVmaW5lIFJLMzM5OV9QT1NUX1lVVjJZ VVZfUjJZX0NPRQkweDAwNGMwCisjZGVmaW5lIFJLMzM5OV9XSU4wX1lVVjJZVVZfWTJSCQkweDAw NGUwCisjZGVmaW5lIFJLMzM5OV9XSU4wX1lVVjJZVVZfM1gzCQkweDAwNTAwCisjZGVmaW5lIFJL MzM5OV9XSU4wX1lVVjJZVVZfUjJZCQkweDAwNTIwCisjZGVmaW5lIFJLMzM5OV9XSU4xX1lVVjJZ VVZfWTJSCQkweDAwNTQwCisjZGVmaW5lIFJLMzM5OV9XSU4xX1lVVjJZVVZfM1gzCQkweDAwNTYw CisjZGVmaW5lIFJLMzM5OV9XSU4xX1lVVjJZVVZfUjJZCQkweDAwNTgwCisjZGVmaW5lIFJLMzM5 OV9XSU4yX1lVVjJZVVZfWTJSCQkweDAwNWEwCisjZGVmaW5lIFJLMzM5OV9XSU4yX1lVVjJZVVZf M1gzCQkweDAwNWMwCisjZGVmaW5lIFJLMzM5OV9XSU4yX1lVVjJZVVZfUjJZCQkweDAwNWUwCisj ZGVmaW5lIFJLMzM5OV9XSU4zX1lVVjJZVVZfWTJSCQkweDAwNjAwCisjZGVmaW5lIFJLMzM5OV9X SU4zX1lVVjJZVVZfM1gzCQkweDAwNjIwCisjZGVmaW5lIFJLMzM5OV9XSU4zX1lVVjJZVVZfUjJZ CQkweDAwNjQwCisjZGVmaW5lIFJLMzM5OV9XSU4yX0xVVF9BRERSCQkweDAxMDAwCisjZGVmaW5l IFJLMzM5OV9XSU4zX0xVVF9BRERSCQkweDAxNDAwCisjZGVmaW5lIFJLMzM5OV9IV0NfTFVUX0FE RFIJCTB4MDE4MDAKKyNkZWZpbmUgUkszMzk5X0NBQkNfR0FNTUFfTFVUX0FERFIJMHgwMWMwMAor I2RlZmluZSBSSzMzOTlfR0FNTUFfTFVUX0FERFIJCTB4MDIwMDAKKy8qIHJrMzM5OSByZWdpc3Rl ciBkZWZpbml0aW9uIGVuZCAqLworCiAjZW5kaWYgLyogX1JPQ0tDSElQX1ZPUF9SRUdfSCAqLwot LSAKMS43LjkuNQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZl bAo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: mark.yao@rock-chips.com (Mark Yao) Date: Wed, 20 Apr 2016 14:18:16 +0800 Subject: [PATCH v2 4/5] drm/rockchip: vop: add rk3399 vop support In-Reply-To: <1461133097-1478-1-git-send-email-mark.yao@rock-chips.com> References: <1461133097-1478-1-git-send-email-mark.yao@rock-chips.com> Message-ID: <1461133097-1478-5-git-send-email-mark.yao@rock-chips.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org There are two VOP in rk3399 chip, respectively VOP_BIG and VOP_LIT. most registers layout of this two vop is same, their framework are both VOP_FULL, the Major differences of this two is that: VOP_BIG max output resolution is 4096x2160. VOP_LIT max output resolution is 2560x1600 VOP_BIG support four windows. VOP_LIT only support two windows. RK3399 vop register layout is similar with rk3288, so some feature can reuse with rk3288. Signed-off-by: Mark Yao --- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 15 ++- drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 4 + drivers/gpu/drm/rockchip/rockchip_vop_reg.c | 91 +++++++++++++ drivers/gpu/drm/rockchip/rockchip_vop_reg.h | 193 +++++++++++++++++++++++++++ 4 files changed, 298 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index 59f24cd..5c9ff8e 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -912,7 +912,7 @@ static void vop_crtc_enable(struct drm_crtc *crtc) u16 vsync_len = adjusted_mode->vsync_end - adjusted_mode->vsync_start; u16 vact_st = adjusted_mode->vtotal - adjusted_mode->vsync_start; u16 vact_end = vact_st + vdisplay; - uint32_t val; + uint32_t pin_pol, val; vop_enable(crtc); /* @@ -951,21 +951,26 @@ static void vop_crtc_enable(struct drm_crtc *crtc) vop_dsp_hold_valid_irq_disable(vop); } - val = 0x8; - val |= (adjusted_mode->flags & DRM_MODE_FLAG_NHSYNC) ? 0 : 1; - val |= (adjusted_mode->flags & DRM_MODE_FLAG_NVSYNC) ? 0 : (1 << 1); - VOP_CTRL_SET(vop, pin_pol, val); + pin_pol = 0x8; + pin_pol |= (adjusted_mode->flags & DRM_MODE_FLAG_NHSYNC) ? 0 : 1; + pin_pol |= (adjusted_mode->flags & DRM_MODE_FLAG_NVSYNC) ? 0 : (1 << 1); + VOP_CTRL_SET(vop, pin_pol, pin_pol); + switch (s->output_type) { case DRM_MODE_CONNECTOR_LVDS: VOP_CTRL_SET(vop, rgb_en, 1); + VOP_CTRL_SET(vop, rgb_pin_pol, pin_pol); break; case DRM_MODE_CONNECTOR_eDP: + VOP_CTRL_SET(vop, edp_pin_pol, pin_pol); VOP_CTRL_SET(vop, edp_en, 1); break; case DRM_MODE_CONNECTOR_HDMIA: + VOP_CTRL_SET(vop, hdmi_pin_pol, pin_pol); VOP_CTRL_SET(vop, hdmi_en, 1); break; case DRM_MODE_CONNECTOR_DSI: + VOP_CTRL_SET(vop, mipi_pin_pol, pin_pol); VOP_CTRL_SET(vop, mipi_en, 1); break; default: diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h index 28dafb6..ff4f52e 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h @@ -49,6 +49,10 @@ struct vop_ctrl { struct vop_reg dither_down; struct vop_reg dither_up; struct vop_reg pin_pol; + struct vop_reg rgb_pin_pol; + struct vop_reg hdmi_pin_pol; + struct vop_reg edp_pin_pol; + struct vop_reg mipi_pin_pol; struct vop_reg htotal_pw; struct vop_reg hact_st_end; diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c index 6846868..6f42e56 100644 --- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c +++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c @@ -278,11 +278,102 @@ static const struct vop_data rk3288_vop = { .win_size = ARRAY_SIZE(rk3288_vop_win_data), }; +static const struct vop_ctrl rk3399_ctrl_data = { + .standby = VOP_REG(RK3399_SYS_CTRL, 0x1, 22), + .gate_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 23), + .rgb_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 12), + .hdmi_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 13), + .edp_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 14), + .mipi_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 15), + .dither_down = VOP_REG(RK3399_DSP_CTRL1, 0xf, 1), + .dither_up = VOP_REG(RK3399_DSP_CTRL1, 0x1, 6), + .data_blank = VOP_REG(RK3399_DSP_CTRL0, 0x1, 19), + .out_mode = VOP_REG(RK3399_DSP_CTRL0, 0xf, 0), + .rgb_pin_pol = VOP_REG(RK3399_DSP_CTRL1, 0xf, 16), + .hdmi_pin_pol = VOP_REG(RK3399_DSP_CTRL1, 0xf, 20), + .edp_pin_pol = VOP_REG(RK3399_DSP_CTRL1, 0xf, 24), + .mipi_pin_pol = VOP_REG(RK3399_DSP_CTRL1, 0xf, 28), + .htotal_pw = VOP_REG(RK3399_DSP_HTOTAL_HS_END, 0x1fff1fff, 0), + .hact_st_end = VOP_REG(RK3399_DSP_HACT_ST_END, 0x1fff1fff, 0), + .vtotal_pw = VOP_REG(RK3399_DSP_VTOTAL_VS_END, 0x1fff1fff, 0), + .vact_st_end = VOP_REG(RK3399_DSP_VACT_ST_END, 0x1fff1fff, 0), + .hpost_st_end = VOP_REG(RK3399_POST_DSP_HACT_INFO, 0x1fff1fff, 0), + .vpost_st_end = VOP_REG(RK3399_POST_DSP_VACT_INFO, 0x1fff1fff, 0), + .cfg_done = VOP_REG_MASK(RK3399_REG_CFG_DONE, 0x1, 0), +}; + +static const int rk3399_vop_intrs[] = { + FS_INTR, + 0, 0, + LINE_FLAG_INTR, + 0, + BUS_ERROR_INTR, + 0, 0, 0, 0, 0, 0, 0, + DSP_HOLD_VALID_INTR, +}; + +static const struct vop_intr rk3399_vop_intr = { + .intrs = rk3399_vop_intrs, + .nintrs = ARRAY_SIZE(rk3399_vop_intrs), + .status = VOP_REG_MASK(RK3399_INTR_STATUS0, 0xffff, 0), + .enable = VOP_REG_MASK(RK3399_INTR_EN0, 0xffff, 0), + .clear = VOP_REG_MASK(RK3399_INTR_CLEAR0, 0xffff, 0), +}; + +static const struct vop_reg_data rk3399_init_reg_table[] = { + {RK3399_SYS_CTRL, 0x2000f800}, + {RK3399_DSP_CTRL0, 0x00000000}, + {RK3399_WIN0_CTRL0, 0x00000080}, + {RK3399_WIN1_CTRL0, 0x00000080}, + /* TODO: Win2/3 support multiple area function, but we haven't found + * a suitable way to use it yet, so let's just use them as other windows + * with only area 0 enabled. + */ + {RK3399_WIN2_CTRL0, 0x00000010}, + {RK3399_WIN3_CTRL0, 0x00000010}, +}; + +static const struct vop_data rk3399_vop_big = { + .init_table = rk3399_init_reg_table, + .table_size = ARRAY_SIZE(rk3399_init_reg_table), + .intr = &rk3399_vop_intr, + .ctrl = &rk3399_ctrl_data, + /* + * rk3399 vop big windows register layout is same as rk3288. + */ + .win = rk3288_vop_win_data, + .win_size = ARRAY_SIZE(rk3288_vop_win_data), +}; + +static const struct vop_win_data rk3399_vop_lit_win_data[] = { + { .base = 0x00, .phy = &rk3288_win01_data, + .type = DRM_PLANE_TYPE_PRIMARY }, + { .base = 0x00, .phy = &rk3288_win23_data, + .type = DRM_PLANE_TYPE_CURSOR}, +}; + +static const struct vop_data rk3399_vop_lit = { + .init_table = rk3399_init_reg_table, + .table_size = ARRAY_SIZE(rk3399_init_reg_table), + .intr = &rk3399_vop_intr, + .ctrl = &rk3399_ctrl_data, + /* + * rk3399 vop lit windows register layout is same as rk3288, + * but cut off the win1 and win3 windows. + */ + .win = rk3399_vop_lit_win_data, + .win_size = ARRAY_SIZE(rk3399_vop_lit_win_data), +}; + static const struct of_device_id vop_driver_dt_match[] = { { .compatible = "rockchip,rk3036-vop", .data = &rk3036_vop }, { .compatible = "rockchip,rk3288-vop", .data = &rk3288_vop }, + { .compatible = "rockchip,rk3399-vop-big", + .data = &rk3399_vop_big }, + { .compatible = "rockchip,rk3399-vop-lit", + .data = &rk3399_vop_lit }, {}, }; MODULE_DEVICE_TABLE(of, vop_driver_dt_match); diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.h b/drivers/gpu/drm/rockchip/rockchip_vop_reg.h index 43903e0..2cae529 100644 --- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.h +++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.h @@ -166,4 +166,197 @@ #define RK3288_DSP_VACT_ST_END_F1 0x019c /* register definition end */ +/* rk3399 register definition */ +#define RK3399_REG_CFG_DONE 0x00000 +#define RK3399_VERSION_INFO 0x00004 +#define RK3399_SYS_CTRL 0x00008 +#define RK3399_SYS_CTRL1 0x0000c +#define RK3399_DSP_CTRL0 0x00010 +#define RK3399_DSP_CTRL1 0x00014 +#define RK3399_DSP_BG 0x00018 +#define RK3399_MCU_CTRL 0x0001c +#define RK3399_WB_CTRL0 0x00020 +#define RK3399_WB_CTRL1 0x00024 +#define RK3399_WB_YRGB_MST 0x00028 +#define RK3399_WB_CBR_MST 0x0002c +#define RK3399_WIN0_CTRL0 0x00030 +#define RK3399_WIN0_CTRL1 0x00034 +#define RK3399_WIN0_COLOR_KEY 0x00038 +#define RK3399_WIN0_VIR 0x0003c +#define RK3399_WIN0_YRGB_MST 0x00040 +#define RK3399_WIN0_CBR_MST 0x00044 +#define RK3399_WIN0_ACT_INFO 0x00048 +#define RK3399_WIN0_DSP_INFO 0x0004c +#define RK3399_WIN0_DSP_ST 0x00050 +#define RK3399_WIN0_SCL_FACTOR_YRGB 0x00054 +#define RK3399_WIN0_SCL_FACTOR_CBR 0x00058 +#define RK3399_WIN0_SCL_OFFSET 0x0005c +#define RK3399_WIN0_SRC_ALPHA_CTRL 0x00060 +#define RK3399_WIN0_DST_ALPHA_CTRL 0x00064 +#define RK3399_WIN0_FADING_CTRL 0x00068 +#define RK3399_WIN0_CTRL2 0x0006c +#define RK3399_WIN1_CTRL0 0x00070 +#define RK3399_WIN1_CTRL1 0x00074 +#define RK3399_WIN1_COLOR_KEY 0x00078 +#define RK3399_WIN1_VIR 0x0007c +#define RK3399_WIN1_YRGB_MST 0x00080 +#define RK3399_WIN1_CBR_MST 0x00084 +#define RK3399_WIN1_ACT_INFO 0x00088 +#define RK3399_WIN1_DSP_INFO 0x0008c +#define RK3399_WIN1_DSP_ST 0x00090 +#define RK3399_WIN1_SCL_FACTOR_YRGB 0x00094 +#define RK3399_WIN1_SCL_FACTOR_CBR 0x00098 +#define RK3399_WIN1_SCL_OFFSET 0x0009c +#define RK3399_WIN1_SRC_ALPHA_CTRL 0x000a0 +#define RK3399_WIN1_DST_ALPHA_CTRL 0x000a4 +#define RK3399_WIN1_FADING_CTRL 0x000a8 +#define RK3399_WIN1_CTRL2 0x000ac +#define RK3399_WIN2_CTRL0 0x000b0 +#define RK3399_WIN2_CTRL1 0x000b4 +#define RK3399_WIN2_VIR0_1 0x000b8 +#define RK3399_WIN2_VIR2_3 0x000bc +#define RK3399_WIN2_MST0 0x000c0 +#define RK3399_WIN2_DSP_INFO0 0x000c4 +#define RK3399_WIN2_DSP_ST0 0x000c8 +#define RK3399_WIN2_COLOR_KEY 0x000cc +#define RK3399_WIN2_MST1 0x000d0 +#define RK3399_WIN2_DSP_INFO1 0x000d4 +#define RK3399_WIN2_DSP_ST1 0x000d8 +#define RK3399_WIN2_SRC_ALPHA_CTRL 0x000dc +#define RK3399_WIN2_MST2 0x000e0 +#define RK3399_WIN2_DSP_INFO2 0x000e4 +#define RK3399_WIN2_DSP_ST2 0x000e8 +#define RK3399_WIN2_DST_ALPHA_CTRL 0x000ec +#define RK3399_WIN2_MST3 0x000f0 +#define RK3399_WIN2_DSP_INFO3 0x000f4 +#define RK3399_WIN2_DSP_ST3 0x000f8 +#define RK3399_WIN2_FADING_CTRL 0x000fc +#define RK3399_WIN3_CTRL0 0x00100 +#define RK3399_WIN3_CTRL1 0x00104 +#define RK3399_WIN3_VIR0_1 0x00108 +#define RK3399_WIN3_VIR2_3 0x0010c +#define RK3399_WIN3_MST0 0x00110 +#define RK3399_WIN3_DSP_INFO0 0x00114 +#define RK3399_WIN3_DSP_ST0 0x00118 +#define RK3399_WIN3_COLOR_KEY 0x0011c +#define RK3399_WIN3_MST1 0x00120 +#define RK3399_WIN3_DSP_INFO1 0x00124 +#define RK3399_WIN3_DSP_ST1 0x00128 +#define RK3399_WIN3_SRC_ALPHA_CTRL 0x0012c +#define RK3399_WIN3_MST2 0x00130 +#define RK3399_WIN3_DSP_INFO2 0x00134 +#define RK3399_WIN3_DSP_ST2 0x00138 +#define RK3399_WIN3_DST_ALPHA_CTRL 0x0013c +#define RK3399_WIN3_MST3 0x00140 +#define RK3399_WIN3_DSP_INFO3 0x00144 +#define RK3399_WIN3_DSP_ST3 0x00148 +#define RK3399_WIN3_FADING_CTRL 0x0014c +#define RK3399_HWC_CTRL0 0x00150 +#define RK3399_HWC_CTRL1 0x00154 +#define RK3399_HWC_MST 0x00158 +#define RK3399_HWC_DSP_ST 0x0015c +#define RK3399_HWC_SRC_ALPHA_CTRL 0x00160 +#define RK3399_HWC_DST_ALPHA_CTRL 0x00164 +#define RK3399_HWC_FADING_CTRL 0x00168 +#define RK3399_HWC_RESERVED1 0x0016c +#define RK3399_POST_DSP_HACT_INFO 0x00170 +#define RK3399_POST_DSP_VACT_INFO 0x00174 +#define RK3399_POST_SCL_FACTOR_YRGB 0x00178 +#define RK3399_POST_RESERVED 0x0017c +#define RK3399_POST_SCL_CTRL 0x00180 +#define RK3399_POST_DSP_VACT_INFO_F1 0x00184 +#define RK3399_DSP_HTOTAL_HS_END 0x00188 +#define RK3399_DSP_HACT_ST_END 0x0018c +#define RK3399_DSP_VTOTAL_VS_END 0x00190 +#define RK3399_DSP_VACT_ST_END 0x00194 +#define RK3399_DSP_VS_ST_END_F1 0x00198 +#define RK3399_DSP_VACT_ST_END_F1 0x0019c +#define RK3399_PWM_CTRL 0x001a0 +#define RK3399_PWM_PERIOD_HPR 0x001a4 +#define RK3399_PWM_DUTY_LPR 0x001a8 +#define RK3399_PWM_CNT 0x001ac +#define RK3399_BCSH_COLOR_BAR 0x001b0 +#define RK3399_BCSH_BCS 0x001b4 +#define RK3399_BCSH_H 0x001b8 +#define RK3399_BCSH_CTRL 0x001bc +#define RK3399_CABC_CTRL0 0x001c0 +#define RK3399_CABC_CTRL1 0x001c4 +#define RK3399_CABC_CTRL2 0x001c8 +#define RK3399_CABC_CTRL3 0x001cc +#define RK3399_CABC_GAUSS_LINE0_0 0x001d0 +#define RK3399_CABC_GAUSS_LINE0_1 0x001d4 +#define RK3399_CABC_GAUSS_LINE1_0 0x001d8 +#define RK3399_CABC_GAUSS_LINE1_1 0x001dc +#define RK3399_CABC_GAUSS_LINE2_0 0x001e0 +#define RK3399_CABC_GAUSS_LINE2_1 0x001e4 +#define RK3399_FRC_LOWER01_0 0x001e8 +#define RK3399_FRC_LOWER01_1 0x001ec +#define RK3399_FRC_LOWER10_0 0x001f0 +#define RK3399_FRC_LOWER10_1 0x001f4 +#define RK3399_FRC_LOWER11_0 0x001f8 +#define RK3399_FRC_LOWER11_1 0x001fc +#define RK3399_AFBCD0_CTRL 0x00200 +#define RK3399_AFBCD0_HDR_PTR 0x00204 +#define RK3399_AFBCD0_PIC_SIZE 0x00208 +#define RK3399_AFBCD0_STATUS 0x0020c +#define RK3399_AFBCD1_CTRL 0x00220 +#define RK3399_AFBCD1_HDR_PTR 0x00224 +#define RK3399_AFBCD1_PIC_SIZE 0x00228 +#define RK3399_AFBCD1_STATUS 0x0022c +#define RK3399_AFBCD2_CTRL 0x00240 +#define RK3399_AFBCD2_HDR_PTR 0x00244 +#define RK3399_AFBCD2_PIC_SIZE 0x00248 +#define RK3399_AFBCD2_STATUS 0x0024c +#define RK3399_AFBCD3_CTRL 0x00260 +#define RK3399_AFBCD3_HDR_PTR 0x00264 +#define RK3399_AFBCD3_PIC_SIZE 0x00268 +#define RK3399_AFBCD3_STATUS 0x0026c +#define RK3399_INTR_EN0 0x00280 +#define RK3399_INTR_CLEAR0 0x00284 +#define RK3399_INTR_STATUS0 0x00288 +#define RK3399_INTR_RAW_STATUS0 0x0028c +#define RK3399_INTR_EN1 0x00290 +#define RK3399_INTR_CLEAR1 0x00294 +#define RK3399_INTR_STATUS1 0x00298 +#define RK3399_INTR_RAW_STATUS1 0x0029c +#define RK3399_LINE_FLAG 0x002a0 +#define RK3399_VOP_STATUS 0x002a4 +#define RK3399_BLANKING_VALUE 0x002a8 +#define RK3399_MCU_BYPASS_PORT 0x002ac +#define RK3399_WIN0_DSP_BG 0x002b0 +#define RK3399_WIN1_DSP_BG 0x002b4 +#define RK3399_WIN2_DSP_BG 0x002b8 +#define RK3399_WIN3_DSP_BG 0x002bc +#define RK3399_YUV2YUV_WIN 0x002c0 +#define RK3399_YUV2YUV_POST 0x002c4 +#define RK3399_AUTO_GATING_EN 0x002cc +#define RK3399_WIN0_CSC_COE 0x003a0 +#define RK3399_WIN1_CSC_COE 0x003c0 +#define RK3399_WIN2_CSC_COE 0x003e0 +#define RK3399_WIN3_CSC_COE 0x00400 +#define RK3399_HWC_CSC_COE 0x00420 +#define RK3399_BCSH_R2Y_CSC_COE 0x00440 +#define RK3399_BCSH_Y2R_CSC_COE 0x00460 +#define RK3399_POST_YUV2YUV_Y2R_COE 0x00480 +#define RK3399_POST_YUV2YUV_3X3_COE 0x004a0 +#define RK3399_POST_YUV2YUV_R2Y_COE 0x004c0 +#define RK3399_WIN0_YUV2YUV_Y2R 0x004e0 +#define RK3399_WIN0_YUV2YUV_3X3 0x00500 +#define RK3399_WIN0_YUV2YUV_R2Y 0x00520 +#define RK3399_WIN1_YUV2YUV_Y2R 0x00540 +#define RK3399_WIN1_YUV2YUV_3X3 0x00560 +#define RK3399_WIN1_YUV2YUV_R2Y 0x00580 +#define RK3399_WIN2_YUV2YUV_Y2R 0x005a0 +#define RK3399_WIN2_YUV2YUV_3X3 0x005c0 +#define RK3399_WIN2_YUV2YUV_R2Y 0x005e0 +#define RK3399_WIN3_YUV2YUV_Y2R 0x00600 +#define RK3399_WIN3_YUV2YUV_3X3 0x00620 +#define RK3399_WIN3_YUV2YUV_R2Y 0x00640 +#define RK3399_WIN2_LUT_ADDR 0x01000 +#define RK3399_WIN3_LUT_ADDR 0x01400 +#define RK3399_HWC_LUT_ADDR 0x01800 +#define RK3399_CABC_GAMMA_LUT_ADDR 0x01c00 +#define RK3399_GAMMA_LUT_ADDR 0x02000 +/* rk3399 register definition end */ + #endif /* _ROCKCHIP_VOP_REG_H */ -- 1.7.9.5