xref: /openbmc/u-boot/arch/arm/include/asm/arch-rockchip/vop_rk3288.h (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
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