Home | History | Annotate | Download | only in arch-rockchip
      1 /* SPDX-License-Identifier: GPL-2.0+ */
      2 /*
      3  * Copyright (c) 2015 Google, Inc
      4  * Copyright 2014 Rockchip Inc.
      5  */
      6 
      7 #ifndef _ASM_ARCH_VOP_RK3288_H
      8 #define _ASM_ARCH_VOP_RK3288_H
      9 
     10 struct rk3288_vop {
     11 	u32 reg_cfg_done;
     12 	u32 version_info;
     13 	u32 sys_ctrl;
     14 	u32 sys_ctrl1;
     15 	u32 dsp_ctrl0;
     16 	u32 dsp_ctrl1;
     17 	u32 dsp_bg;
     18 	u32 mcu_ctrl;
     19 	u32 intr_ctrl0;
     20 	u32 intr_ctrl1;
     21 	u32 intr_reserved0;
     22 	u32 intr_reserved1;
     23 
     24 	u32 win0_ctrl0;
     25 	u32 win0_ctrl1;
     26 	u32 win0_color_key;
     27 	u32 win0_vir;
     28 	u32 win0_yrgb_mst;
     29 	u32 win0_cbr_mst;
     30 	u32 win0_act_info;
     31 	u32 win0_dsp_info;
     32 	u32 win0_dsp_st;
     33 	u32 win0_scl_factor_yrgb;
     34 	u32 win0_scl_factor_cbr;
     35 	u32 win0_scl_offset;
     36 	u32 win0_src_alpha_ctrl;
     37 	u32 win0_dst_alpha_ctrl;
     38 	u32 win0_fading_ctrl;
     39 	u32 win0_reserved0;
     40 
     41 	u32 win1_ctrl0;
     42 	u32 win1_ctrl1;
     43 	u32 win1_color_key;
     44 	u32 win1_vir;
     45 	u32 win1_yrgb_mst;
     46 	u32 win1_cbr_mst;
     47 	u32 win1_act_info;
     48 	u32 win1_dsp_info;
     49 	u32 win1_dsp_st;
     50 	u32 win1_scl_factor_yrgb;
     51 	u32 win1_scl_factor_cbr;
     52 	u32 win1_scl_offset;
     53 	u32 win1_src_alpha_ctrl;
     54 	u32 win1_dst_alpha_ctrl;
     55 	u32 win1_fading_ctrl;
     56 	u32 win1_reservd0;
     57 	u32 reserved2[48];
     58 	u32 post_dsp_hact_info;
     59 	u32 post_dsp_vact_info;
     60 	u32 post_scl_factor_yrgb;
     61 	u32 post_reserved;
     62 	u32 post_scl_ctrl;
     63 	u32 post_dsp_vact_info_f1;
     64 	u32 dsp_htotal_hs_end;
     65 	u32 dsp_hact_st_end;
     66 	u32 dsp_vtotal_vs_end;
     67 	u32 dsp_vact_st_end;
     68 	u32 dsp_vs_st_end_f1;
     69 	u32 dsp_vact_st_end_f1;
     70 };
     71 check_member(rk3288_vop, dsp_vact_st_end_f1, 0x19c);
     72 
     73 enum rockchip_fb_data_format_t {
     74 	ARGB8888 = 0,
     75 	RGB888 = 1,
     76 	RGB565 = 2,
     77 };
     78 
     79 enum {
     80 	LB_YUV_3840X5 = 0x0,
     81 	LB_YUV_2560X8 = 0x1,
     82 	LB_RGB_3840X2 = 0x2,
     83 	LB_RGB_2560X4 = 0x3,
     84 	LB_RGB_1920X5 = 0x4,
     85 	LB_RGB_1280X8 = 0x5
     86 };
     87 
     88 enum vop_modes {
     89 	VOP_MODE_EDP = 0,
     90 	VOP_MODE_HDMI,
     91 	VOP_MODE_LVDS,
     92 	VOP_MODE_MIPI,
     93 	VOP_MODE_NONE,
     94 	VOP_MODE_AUTO_DETECT,
     95 	VOP_MODE_UNKNOWN,
     96 };
     97 
     98 /* VOP_VERSION_INFO */
     99 #define M_FPGA_VERSION (0xffff << 16)
    100 #define M_RTL_VERSION  (0xffff)
    101 
    102 /* VOP_SYS_CTRL */
    103 #define M_AUTO_GATING_EN (1 << 23)
    104 #define M_STANDBY_EN     (1 << 22)
    105 #define M_DMA_STOP       (1 << 21)
    106 #define M_MMU_EN         (1 << 20)
    107 #define M_DAM_BURST_LENGTH (0x3 << 18)
    108 #define M_MIPI_OUT_EN	   (1 << 15)
    109 #define M_EDP_OUT_EN       (1 << 14)
    110 #define M_HDMI_OUT_EN      (1 << 13)
    111 #define M_RGB_OUT_EN       (1 << 12)
    112 #define M_ALL_OUT_EN		\
    113 		(M_MIPI_OUT_EN | M_EDP_OUT_EN | M_HDMI_OUT_EN | M_RGB_OUT_EN)
    114 #define M_EDPI_WMS_FS      (1 << 10)
    115 #define M_EDPI_WMS_MODE    (1 << 9)
    116 #define M_EDPI_HALT_EN     (1 << 8)
    117 #define M_DOUB_CH_OVERLAP_NUM (0xf << 4)
    118 #define M_DOUB_CHANNEL_EN     (1 << 3)
    119 #define M_DIRECT_PATH_LAYER_SEL (0x3 << 1)
    120 #define M_DIRECT_PATH_EN       (1)
    121 
    122 #define V_AUTO_GATING_EN(x) (((x) & 1) << 23)
    123 #define V_STANDBY_EN(x)     (((x) & 1) << 22)
    124 #define V_DMA_STOP(x)       (((x) & 1) << 21)
    125 #define V_MMU_EN(x)         (((x) & 1) << 20)
    126 #define V_DMA_BURST_LENGTH(x) (((x) & 3) << 18)
    127 #define V_MIPI_OUT_EN(x)      (((x) & 1) << 15)
    128 #define V_EDP_OUT_EN(x)       (((x) & 1) << 14)
    129 #define V_HDMI_OUT_EN(x)      (((x) & 1) << 13)
    130 #define V_RGB_OUT_EN(x)       (((x) & 1) << 12)
    131 #define V_EDPI_WMS_FS(x)      (((x) & 1) << 10)
    132 #define V_EDPI_WMS_MODE(x)    (((x) & 1) << 9)
    133 #define V_EDPI_HALT_EN(x)     (((x)&1)<<8)
    134 #define V_DOUB_CH_OVERLAP_NUM(x) (((x) & 0xf) << 4)
    135 #define V_DOUB_CHANNEL_EN(x)     (((x) & 1) << 3)
    136 #define V_DIRECT_PATH_LAYER_SEL(x) (((x) & 3) << 1)
    137 #define V_DIRECT_PATH_EN(x)       ((x) & 1)
    138 
    139 /* VOP_SYS_CTRL1 */
    140 #define M_AXI_OUTSTANDING_MAX_NUM (0x1f << 13)
    141 #define M_AXI_MAX_OUTSTANDING_EN  (1 << 12)
    142 #define M_NOC_WIN_QOS             (3 << 10)
    143 #define M_NOC_QOS_EN              (1 << 9)
    144 #define M_NOC_HURRY_THRESHOLD     (0x3f << 3)
    145 #define M_NOC_HURRY_VALUE         (0x3 << 1)
    146 #define M_NOC_HURRY_EN            (1)
    147 
    148 #define V_AXI_OUTSTANDING_MAX_NUM(x) (((x) & 0x1f) << 13)
    149 #define V_AXI_MAX_OUTSTANDING_EN(x)  (((x) & 1) << 12)
    150 #define V_NOC_WIN_QOS(x)             (((x) & 3) << 10)
    151 #define V_NOC_QOS_EN(x)              (((x) & 1) << 9)
    152 #define V_NOC_HURRY_THRESHOLD(x)     (((x) & 0x3f) << 3)
    153 #define V_NOC_HURRY_VALUE(x)         (((x) & 3) << 1)
    154 #define V_NOC_HURRY_EN(x)            ((x) & 1)
    155 
    156 /* VOP_DSP_CTRL0 */
    157 #define M_DSP_Y_MIR_EN              (1 << 23)
    158 #define M_DSP_X_MIR_EN              (1 << 22)
    159 #define M_DSP_YUV_CLIP              (1 << 21)
    160 #define M_DSP_CCIR656_AVG           (1 << 20)
    161 #define M_DSP_BLACK_EN              (1 << 19)
    162 #define M_DSP_BLANK_EN              (1 << 18)
    163 #define M_DSP_OUT_ZERO              (1 << 17)
    164 #define M_DSP_DUMMY_SWAP            (1 << 16)
    165 #define M_DSP_DELTA_SWAP            (1 << 15)
    166 #define M_DSP_RG_SWAP               (1 << 14)
    167 #define M_DSP_RB_SWAP               (1 << 13)
    168 #define M_DSP_BG_SWAP               (1 << 12)
    169 #define M_DSP_FIELD_POL             (1 << 11)
    170 #define M_DSP_INTERLACE             (1 << 10)
    171 #define M_DSP_DDR_PHASE             (1 << 9)
    172 #define M_DSP_DCLK_DDR              (1 << 8)
    173 #define M_DSP_DCLK_POL              (1 << 7)
    174 #define M_DSP_DEN_POL               (1 << 6)
    175 #define M_DSP_VSYNC_POL             (1 << 5)
    176 #define M_DSP_HSYNC_POL             (1 << 4)
    177 #define M_DSP_OUT_MODE              (0xf)
    178 
    179 #define V_DSP_Y_MIR_EN(x)              (((x) & 1) << 23)
    180 #define V_DSP_X_MIR_EN(x)              (((x) & 1) << 22)
    181 #define V_DSP_YUV_CLIP(x)              (((x) & 1) << 21)
    182 #define V_DSP_CCIR656_AVG(x)           (((x) & 1) << 20)
    183 #define V_DSP_BLACK_EN(x)              (((x) & 1) << 19)
    184 #define V_DSP_BLANK_EN(x)              (((x) & 1) << 18)
    185 #define V_DSP_OUT_ZERO(x)              (((x) & 1) << 17)
    186 #define V_DSP_DUMMY_SWAP(x)            (((x) & 1) << 16)
    187 #define V_DSP_DELTA_SWAP(x)            (((x) & 1) << 15)
    188 #define V_DSP_RG_SWAP(x)               (((x) & 1) << 14)
    189 #define V_DSP_RB_SWAP(x)               (((x) & 1) << 13)
    190 #define V_DSP_BG_SWAP(x)               (((x) & 1) << 12)
    191 #define V_DSP_FIELD_POL(x)             (((x) & 1) << 11)
    192 #define V_DSP_INTERLACE(x)             (((x) & 1) << 10)
    193 #define V_DSP_DDR_PHASE(x)             (((x) & 1) << 9)
    194 #define V_DSP_DCLK_DDR(x)              (((x) & 1) << 8)
    195 #define V_DSP_DCLK_POL(x)              (((x) & 1) << 7)
    196 #define V_DSP_DEN_POL(x)               (((x) & 1) << 6)
    197 #define V_DSP_VSYNC_POL(x)             (((x) & 1) << 5)
    198 #define V_DSP_HSYNC_POL(x)             (((x) & 1) << 4)
    199 #define V_DSP_PIN_POL(x)               (((x) & 0xf) << 4)
    200 #define V_DSP_OUT_MODE(x)              ((x) & 0xf)
    201 
    202 /* VOP_DSP_CTRL1 */
    203 #define V_RK3399_DSP_MIPI_POL(x)       ((x) << 28)
    204 #define V_RK3399_DSP_EDP_POL(x)        ((x) << 24)
    205 #define V_RK3399_DSP_HDMI_POL(x)       ((x) << 20)
    206 #define V_RK3399_DSP_LVDS_POL(x)       ((x) << 16)
    207 
    208 #define M_RK3399_DSP_MIPI_POL          (V_RK3399_DSP_MIPI_POL(0xf))
    209 #define M_RK3399_DSP_EDP_POL           (V_RK3399_DSP_EDP_POL(0xf))
    210 #define M_RK3399_DSP_HDMI_POL          (V_RK3399_DSP_HDMI_POL(0xf))
    211 #define M_RK3399_DSP_LVDS_POL          (V_RK3399_DSP_LVDS_POL(0xf))
    212 
    213 #define M_DSP_LAYER3_SEL               (3 << 14)
    214 #define M_DSP_LAYER2_SEL               (3 << 12)
    215 #define M_DSP_LAYER1_SEL               (3 << 10)
    216 #define M_DSP_LAYER0_SEL               (3 << 8)
    217 #define M_DITHER_UP_EN                 (1 << 6)
    218 #define M_DITHER_DOWN_SEL              (1 << 4)
    219 #define M_DITHER_DOWN_MODE             (1 << 3)
    220 #define M_DITHER_DOWN_EN               (1 << 2)
    221 #define M_PRE_DITHER_DOWN_EN           (1 << 1)
    222 #define M_DSP_LUT_EN                   (1)
    223 
    224 #define V_DSP_LAYER3_SEL(x)                (((x) & 3) << 14)
    225 #define V_DSP_LAYER2_SEL(x)                (((x) & 3) << 12)
    226 #define V_DSP_LAYER1_SEL(x)                (((x) & 3) << 10)
    227 #define V_DSP_LAYER0_SEL(x)                (((x) & 3) << 8)
    228 #define V_DITHER_UP_EN(x)                  (((x) & 1) << 6)
    229 #define V_DITHER_DOWN_SEL(x)               (((x) & 1) << 4)
    230 #define V_DITHER_DOWN_MODE(x)              (((x) & 1) << 3)
    231 #define V_DITHER_DOWN_EN(x)                (((x) & 1) << 2)
    232 #define V_PRE_DITHER_DOWN_EN(x)            (((x) & 1) << 1)
    233 #define V_DSP_LUT_EN(x)                    ((x)&1)
    234 
    235 /* VOP_DSP_BG */
    236 #define M_DSP_BG_RED     (0x3f << 20)
    237 #define M_DSP_BG_GREEN   (0x3f << 10)
    238 #define M_DSP_BG_BLUE    (0x3f << 0)
    239 
    240 #define V_DSP_BG_RED(x)     (((x) & 0x3f) << 20)
    241 #define V_DSP_BG_GREEN(x)   (((x) & 0x3f) << 10)
    242 #define V_DSP_BG_BLUE(x)    (((x) & 0x3f) << 0)
    243 
    244 /* VOP_WIN0_CTRL0 */
    245 #define M_WIN0_YUV_CLIP     (1 << 20)
    246 #define M_WIN0_CBR_DEFLICK  (1 << 19)
    247 #define M_WIN0_YRGB_DEFLICK  (1 << 18)
    248 #define M_WIN0_PPAS_ZERO_EN  (1 << 16)
    249 #define M_WIN0_UV_SWAP       (1 << 15)
    250 #define M_WIN0_MID_SWAP      (1 << 14)
    251 #define M_WIN0_ALPHA_SWAP    (1 << 13)
    252 #define M_WIN0_RB_SWAP       (1 << 12)
    253 #define M_WIN0_CSC_MODE      (3 << 10)
    254 #define M_WIN0_NO_OUTSTANDING (1 << 9)
    255 #define M_WIN0_INTERLACE_READ  (1 << 8)
    256 #define M_WIN0_LB_MODE         (7 << 5)
    257 #define M_WIN0_FMT_10          (1 << 4)
    258 #define M_WIN0_DATA_FMT        (7 << 1)
    259 #define M_WIN0_EN              (1 << 0)
    260 
    261 #define V_WIN0_YUV_CLIP(x)       (((x) & 1) << 20)
    262 #define V_WIN0_CBR_DEFLICK(x)    (((x) & 1) << 19)
    263 #define V_WIN0_YRGB_DEFLICK(x)   (((x) & 1) << 18)
    264 #define V_WIN0_PPAS_ZERO_EN(x)   (((x) & 1) << 16)
    265 #define V_WIN0_UV_SWAP(x)        (((x) & 1) << 15)
    266 #define V_WIN0_MID_SWAP(x)       (((x) & 1) << 14)
    267 #define V_WIN0_ALPHA_SWAP(x)     (((x) & 1) << 13)
    268 #define V_WIN0_RB_SWAP(x)        (((x) & 1) << 12)
    269 #define V_WIN0_CSC_MODE(x)       (((x) & 3) << 10)
    270 #define V_WIN0_NO_OUTSTANDING(x) (((x) & 1) << 9)
    271 #define V_WIN0_INTERLACE_READ(x)  (((x) & 1) << 8)
    272 #define V_WIN0_LB_MODE(x)         (((x) & 7) << 5)
    273 #define V_WIN0_FMT_10(x)          (((x) & 1) << 4)
    274 #define V_WIN0_DATA_FMT(x)        (((x) & 7) << 1)
    275 #define V_WIN0_EN(x)              ((x) & 1)
    276 
    277 /* VOP_WIN0_CTRL1 */
    278 #define M_WIN0_CBR_VSD_MODE        (1 << 31)
    279 #define M_WIN0_CBR_VSU_MODE        (1 << 30)
    280 #define M_WIN0_CBR_HSD_MODE        (3 << 28)
    281 #define M_WIN0_CBR_VER_SCL_MODE    (3 << 26)
    282 #define M_WIN0_CBR_HOR_SCL_MODE    (3 << 24)
    283 #define M_WIN0_YRGB_VSD_MODE       (1 << 23)
    284 #define M_WIN0_YRGB_VSU_MODE       (1 << 22)
    285 #define M_WIN0_YRGB_HSD_MODE       (3 << 20)
    286 #define M_WIN0_YRGB_VER_SCL_MODE   (3 << 18)
    287 #define M_WIN0_YRGB_HOR_SCL_MODE   (3 << 16)
    288 #define M_WIN0_LINE_LOAD_MODE      (1 << 15)
    289 #define M_WIN0_CBR_AXI_GATHER_NUM  (7 << 12)
    290 #define M_WIN0_YRGB_AXI_GATHER_NUM (0xf << 8)
    291 #define M_WIN0_VSD_CBR_GT2         (1 << 7)
    292 #define M_WIN0_VSD_CBR_GT4         (1 << 6)
    293 #define M_WIN0_VSD_YRGB_GT2        (1 << 5)
    294 #define M_WIN0_VSD_YRGB_GT4        (1 << 4)
    295 #define M_WIN0_BIC_COE_SEL         (3 << 2)
    296 #define M_WIN0_CBR_AXI_GATHER_EN   (1 << 1)
    297 #define M_WIN0_YRGB_AXI_GATHER_EN  (1)
    298 
    299 #define V_WIN0_CBR_VSD_MODE(x)        (((x) & 1) << 31)
    300 #define V_WIN0_CBR_VSU_MODE(x)        (((x) & 1) << 30)
    301 #define V_WIN0_CBR_HSD_MODE(x)        (((x) & 3) << 28)
    302 #define V_WIN0_CBR_VER_SCL_MODE(x)    (((x) & 3) << 26)
    303 #define V_WIN0_CBR_HOR_SCL_MODE(x)    (((x) & 3) << 24)
    304 #define V_WIN0_YRGB_VSD_MODE(x)       (((x) & 1) << 23)
    305 #define V_WIN0_YRGB_VSU_MODE(x)       (((x) & 1) << 22)
    306 #define V_WIN0_YRGB_HSD_MODE(x)       (((x) & 3) << 20)
    307 #define V_WIN0_YRGB_VER_SCL_MODE(x)   (((x) & 3) << 18)
    308 #define V_WIN0_YRGB_HOR_SCL_MODE(x)   (((x) & 3) << 16)
    309 #define V_WIN0_LINE_LOAD_MODE(x)      (((x) & 1) << 15)
    310 #define V_WIN0_CBR_AXI_GATHER_NUM(x)  (((x) & 7) << 12)
    311 #define V_WIN0_YRGB_AXI_GATHER_NUM(x) (((x) & 0xf) << 8)
    312 #define V_WIN0_VSD_CBR_GT2(x)         (((x) & 1) << 7)
    313 #define V_WIN0_VSD_CBR_GT4(x)         (((x) & 1) << 6)
    314 #define V_WIN0_VSD_YRGB_GT2(x)        (((x) & 1) << 5)
    315 #define V_WIN0_VSD_YRGB_GT4(x)        (((x) & 1) << 4)
    316 #define V_WIN0_BIC_COE_SEL(x)         (((x) & 3) << 2)
    317 #define V_WIN0_CBR_AXI_GATHER_EN(x)   (((x) & 1) << 1)
    318 #define V_WIN0_YRGB_AXI_GATHER_EN(x)  ((x) & 1)
    319 
    320 /*VOP_WIN0_COLOR_KEY*/
    321 #define M_WIN0_KEY_EN                 (1 << 31)
    322 #define M_WIN0_KEY_COLOR              (0x3fffffff)
    323 
    324 #define V_WIN0_KEY_EN(x)              (((x) & 1) << 31)
    325 #define V_WIN0_KEY_COLOR(x)           ((x) & 0x3fffffff)
    326 
    327 /* VOP_WIN0_VIR */
    328 #define V_ARGB888_VIRWIDTH(x)	(((x) & 0x3fff) << 0)
    329 #define V_RGB888_VIRWIDTH(x)	(((((x * 3) >> 2)+((x) % 3)) & 0x3fff) << 0)
    330 #define V_RGB565_VIRWIDTH(x)	(((x / 2) & 0x3fff) << 0)
    331 #define YUV_VIRWIDTH(x)		(((x / 4) & 0x3fff) << 0)
    332 
    333 /* VOP_WIN0_ACT_INFO */
    334 #define V_ACT_HEIGHT(x)         (((x) & 0x1fff) << 16)
    335 #define V_ACT_WIDTH(x)          ((x) & 0x1fff)
    336 
    337 /* VOP_WIN0_DSP_INFO */
    338 #define V_DSP_HEIGHT(x)         (((x) & 0xfff) << 16)
    339 #define V_DSP_WIDTH(x)          ((x) & 0xfff)
    340 
    341 /* VOP_WIN0_DSP_ST */
    342 #define V_DSP_YST(x)            (((x) & 0x1fff) << 16)
    343 #define V_DSP_XST(x)            ((x) & 0x1fff)
    344 
    345 /* VOP_WIN0_SCL_OFFSET */
    346 #define V_WIN0_VS_OFFSET_CBR(x)     (((x) & 0xff) << 24)
    347 #define V_WIN0_VS_OFFSET_YRGB(x)    (((x) & 0xff) << 16)
    348 #define V_WIN0_HS_OFFSET_CBR(x)     (((x) & 0xff) << 8)
    349 #define V_WIN0_HS_OFFSET_YRGB(x)    ((x) & 0xff)
    350 
    351 #define V_HSYNC(x)		(((x)&0x1fff)<<0)   /* hsync pulse width */
    352 #define V_HORPRD(x)		(((x)&0x1fff)<<16)   /* horizontal period */
    353 #define V_VSYNC(x)		(((x)&0x1fff)<<0)
    354 #define V_VERPRD(x)		(((x)&0x1fff)<<16)
    355 
    356 #define V_HEAP(x)		(((x)&0x1fff)<<0)/* horizontal active end */
    357 #define V_HASP(x)		(((x)&0x1fff)<<16)/* horizontal active start */
    358 #define V_VAEP(x)		(((x)&0x1fff)<<0)
    359 #define V_VASP(x)		(((x)&0x1fff)<<16)
    360 
    361 #endif
    362