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_MIPI,
91 	VOP_MODE_HDMI,
92 	VOP_MODE_LVDS,
93 	VOP_MODE_DP,
94 };
95 
96 /* VOP_VERSION_INFO */
97 #define M_FPGA_VERSION (0xffff << 16)
98 #define M_RTL_VERSION  (0xffff)
99 
100 /* VOP_SYS_CTRL */
101 #define M_AUTO_GATING_EN (1 << 23)
102 #define M_STANDBY_EN     (1 << 22)
103 #define M_DMA_STOP       (1 << 21)
104 #define M_MMU_EN         (1 << 20)
105 #define M_DAM_BURST_LENGTH (0x3 << 18)
106 #define M_MIPI_OUT_EN	   (1 << 15)
107 #define M_EDP_OUT_EN       (1 << 14)
108 #define M_HDMI_OUT_EN      (1 << 13)
109 #define M_RGB_OUT_EN       (1 << 12)
110 #define M_ALL_OUT_EN		\
111 		(M_MIPI_OUT_EN | M_EDP_OUT_EN | M_HDMI_OUT_EN | M_RGB_OUT_EN)
112 #define M_EDPI_WMS_FS      (1 << 10)
113 #define M_EDPI_WMS_MODE    (1 << 9)
114 #define M_EDPI_HALT_EN     (1 << 8)
115 #define M_DOUB_CH_OVERLAP_NUM (0xf << 4)
116 #define M_DOUB_CHANNEL_EN     (1 << 3)
117 #define M_DIRECT_PATH_LAYER_SEL (0x3 << 1)
118 #define M_DIRECT_PATH_EN       (1)
119 
120 #define V_AUTO_GATING_EN(x) (((x) & 1) << 23)
121 #define V_STANDBY_EN(x)     (((x) & 1) << 22)
122 #define V_DMA_STOP(x)       (((x) & 1) << 21)
123 #define V_MMU_EN(x)         (((x) & 1) << 20)
124 #define V_DMA_BURST_LENGTH(x) (((x) & 3) << 18)
125 #define V_MIPI_OUT_EN(x)      (((x) & 1) << 15)
126 #define V_EDP_OUT_EN(x)       (((x) & 1) << 14)
127 #define V_HDMI_OUT_EN(x)      (((x) & 1) << 13)
128 #define V_RGB_OUT_EN(x)       (((x) & 1) << 12)
129 #define V_EDPI_WMS_FS(x)      (((x) & 1) << 10)
130 #define V_EDPI_WMS_MODE(x)    (((x) & 1) << 9)
131 #define V_EDPI_HALT_EN(x)     (((x)&1)<<8)
132 #define V_DOUB_CH_OVERLAP_NUM(x) (((x) & 0xf) << 4)
133 #define V_DOUB_CHANNEL_EN(x)     (((x) & 1) << 3)
134 #define V_DIRECT_PATH_LAYER_SEL(x) (((x) & 3) << 1)
135 #define V_DIRECT_PATH_EN(x)       ((x) & 1)
136 
137 /* VOP_SYS_CTRL1 */
138 #define M_AXI_OUTSTANDING_MAX_NUM (0x1f << 13)
139 #define M_AXI_MAX_OUTSTANDING_EN  (1 << 12)
140 #define M_NOC_WIN_QOS             (3 << 10)
141 #define M_NOC_QOS_EN              (1 << 9)
142 #define M_NOC_HURRY_THRESHOLD     (0x3f << 3)
143 #define M_NOC_HURRY_VALUE         (0x3 << 1)
144 #define M_NOC_HURRY_EN            (1)
145 
146 #define V_AXI_OUTSTANDING_MAX_NUM(x) (((x) & 0x1f) << 13)
147 #define V_AXI_MAX_OUTSTANDING_EN(x)  (((x) & 1) << 12)
148 #define V_NOC_WIN_QOS(x)             (((x) & 3) << 10)
149 #define V_NOC_QOS_EN(x)              (((x) & 1) << 9)
150 #define V_NOC_HURRY_THRESHOLD(x)     (((x) & 0x3f) << 3)
151 #define V_NOC_HURRY_VALUE(x)         (((x) & 3) << 1)
152 #define V_NOC_HURRY_EN(x)            ((x) & 1)
153 
154 /* VOP_DSP_CTRL0 */
155 #define M_DSP_Y_MIR_EN              (1 << 23)
156 #define M_DSP_X_MIR_EN              (1 << 22)
157 #define M_DSP_YUV_CLIP              (1 << 21)
158 #define M_DSP_CCIR656_AVG           (1 << 20)
159 #define M_DSP_BLACK_EN              (1 << 19)
160 #define M_DSP_BLANK_EN              (1 << 18)
161 #define M_DSP_OUT_ZERO              (1 << 17)
162 #define M_DSP_DUMMY_SWAP            (1 << 16)
163 #define M_DSP_DELTA_SWAP            (1 << 15)
164 #define M_DSP_RG_SWAP               (1 << 14)
165 #define M_DSP_RB_SWAP               (1 << 13)
166 #define M_DSP_BG_SWAP               (1 << 12)
167 #define M_DSP_FIELD_POL             (1 << 11)
168 #define M_DSP_INTERLACE             (1 << 10)
169 #define M_DSP_DDR_PHASE             (1 << 9)
170 #define M_DSP_DCLK_DDR              (1 << 8)
171 #define M_DSP_DCLK_POL              (1 << 7)
172 #define M_DSP_DEN_POL               (1 << 6)
173 #define M_DSP_VSYNC_POL             (1 << 5)
174 #define M_DSP_HSYNC_POL             (1 << 4)
175 #define M_DSP_OUT_MODE              (0xf)
176 
177 #define V_DSP_Y_MIR_EN(x)              (((x) & 1) << 23)
178 #define V_DSP_X_MIR_EN(x)              (((x) & 1) << 22)
179 #define V_DSP_YUV_CLIP(x)              (((x) & 1) << 21)
180 #define V_DSP_CCIR656_AVG(x)           (((x) & 1) << 20)
181 #define V_DSP_BLACK_EN(x)              (((x) & 1) << 19)
182 #define V_DSP_BLANK_EN(x)              (((x) & 1) << 18)
183 #define V_DSP_OUT_ZERO(x)              (((x) & 1) << 17)
184 #define V_DSP_DUMMY_SWAP(x)            (((x) & 1) << 16)
185 #define V_DSP_DELTA_SWAP(x)            (((x) & 1) << 15)
186 #define V_DSP_RG_SWAP(x)               (((x) & 1) << 14)
187 #define V_DSP_RB_SWAP(x)               (((x) & 1) << 13)
188 #define V_DSP_BG_SWAP(x)               (((x) & 1) << 12)
189 #define V_DSP_FIELD_POL(x)             (((x) & 1) << 11)
190 #define V_DSP_INTERLACE(x)             (((x) & 1) << 10)
191 #define V_DSP_DDR_PHASE(x)             (((x) & 1) << 9)
192 #define V_DSP_DCLK_DDR(x)              (((x) & 1) << 8)
193 #define V_DSP_DCLK_POL(x)              (((x) & 1) << 7)
194 #define V_DSP_DEN_POL(x)               (((x) & 1) << 6)
195 #define V_DSP_VSYNC_POL(x)             (((x) & 1) << 5)
196 #define V_DSP_HSYNC_POL(x)             (((x) & 1) << 4)
197 #define V_DSP_PIN_POL(x)               (((x) & 0xf) << 4)
198 #define V_DSP_OUT_MODE(x)              ((x) & 0xf)
199 
200 /* VOP_DSP_CTRL1 */
201 #define V_RK3399_DSP_MIPI_POL(x)       ((x) << 28)
202 #define V_RK3399_DSP_EDP_POL(x)        ((x) << 24)
203 #define V_RK3399_DSP_HDMI_POL(x)       ((x) << 20)
204 #define V_RK3399_DSP_LVDS_POL(x)       ((x) << 16)
205 
206 #define M_RK3399_DSP_MIPI_POL          (V_RK3399_DSP_MIPI_POL(0xf))
207 #define M_RK3399_DSP_EDP_POL           (V_RK3399_DSP_EDP_POL(0xf))
208 #define M_RK3399_DSP_HDMI_POL          (V_RK3399_DSP_HDMI_POL(0xf))
209 #define M_RK3399_DSP_LVDS_POL          (V_RK3399_DSP_LVDS_POL(0xf))
210 
211 #define M_DSP_LAYER3_SEL               (3 << 14)
212 #define M_DSP_LAYER2_SEL               (3 << 12)
213 #define M_DSP_LAYER1_SEL               (3 << 10)
214 #define M_DSP_LAYER0_SEL               (3 << 8)
215 #define M_DITHER_UP_EN                 (1 << 6)
216 #define M_DITHER_DOWN_SEL              (1 << 4)
217 #define M_DITHER_DOWN_MODE             (1 << 3)
218 #define M_DITHER_DOWN_EN               (1 << 2)
219 #define M_PRE_DITHER_DOWN_EN           (1 << 1)
220 #define M_DSP_LUT_EN                   (1)
221 
222 #define V_DSP_LAYER3_SEL(x)                (((x) & 3) << 14)
223 #define V_DSP_LAYER2_SEL(x)                (((x) & 3) << 12)
224 #define V_DSP_LAYER1_SEL(x)                (((x) & 3) << 10)
225 #define V_DSP_LAYER0_SEL(x)                (((x) & 3) << 8)
226 #define V_DITHER_UP_EN(x)                  (((x) & 1) << 6)
227 #define V_DITHER_DOWN_SEL(x)               (((x) & 1) << 4)
228 #define V_DITHER_DOWN_MODE(x)              (((x) & 1) << 3)
229 #define V_DITHER_DOWN_EN(x)                (((x) & 1) << 2)
230 #define V_PRE_DITHER_DOWN_EN(x)            (((x) & 1) << 1)
231 #define V_DSP_LUT_EN(x)                    ((x)&1)
232 
233 /* VOP_DSP_BG */
234 #define M_DSP_BG_RED     (0x3f << 20)
235 #define M_DSP_BG_GREEN   (0x3f << 10)
236 #define M_DSP_BG_BLUE    (0x3f << 0)
237 
238 #define V_DSP_BG_RED(x)     (((x) & 0x3f) << 20)
239 #define V_DSP_BG_GREEN(x)   (((x) & 0x3f) << 10)
240 #define V_DSP_BG_BLUE(x)    (((x) & 0x3f) << 0)
241 
242 /* VOP_WIN0_CTRL0 */
243 #define M_WIN0_YUV_CLIP     (1 << 20)
244 #define M_WIN0_CBR_DEFLICK  (1 << 19)
245 #define M_WIN0_YRGB_DEFLICK  (1 << 18)
246 #define M_WIN0_PPAS_ZERO_EN  (1 << 16)
247 #define M_WIN0_UV_SWAP       (1 << 15)
248 #define M_WIN0_MID_SWAP      (1 << 14)
249 #define M_WIN0_ALPHA_SWAP    (1 << 13)
250 #define M_WIN0_RB_SWAP       (1 << 12)
251 #define M_WIN0_CSC_MODE      (3 << 10)
252 #define M_WIN0_NO_OUTSTANDING (1 << 9)
253 #define M_WIN0_INTERLACE_READ  (1 << 8)
254 #define M_WIN0_LB_MODE         (7 << 5)
255 #define M_WIN0_FMT_10          (1 << 4)
256 #define M_WIN0_DATA_FMT        (7 << 1)
257 #define M_WIN0_EN              (1 << 0)
258 
259 #define V_WIN0_YUV_CLIP(x)       (((x) & 1) << 20)
260 #define V_WIN0_CBR_DEFLICK(x)    (((x) & 1) << 19)
261 #define V_WIN0_YRGB_DEFLICK(x)   (((x) & 1) << 18)
262 #define V_WIN0_PPAS_ZERO_EN(x)   (((x) & 1) << 16)
263 #define V_WIN0_UV_SWAP(x)        (((x) & 1) << 15)
264 #define V_WIN0_MID_SWAP(x)       (((x) & 1) << 14)
265 #define V_WIN0_ALPHA_SWAP(x)     (((x) & 1) << 13)
266 #define V_WIN0_RB_SWAP(x)        (((x) & 1) << 12)
267 #define V_WIN0_CSC_MODE(x)       (((x) & 3) << 10)
268 #define V_WIN0_NO_OUTSTANDING(x) (((x) & 1) << 9)
269 #define V_WIN0_INTERLACE_READ(x)  (((x) & 1) << 8)
270 #define V_WIN0_LB_MODE(x)         (((x) & 7) << 5)
271 #define V_WIN0_FMT_10(x)          (((x) & 1) << 4)
272 #define V_WIN0_DATA_FMT(x)        (((x) & 7) << 1)
273 #define V_WIN0_EN(x)              ((x) & 1)
274 
275 /* VOP_WIN0_CTRL1 */
276 #define M_WIN0_CBR_VSD_MODE        (1 << 31)
277 #define M_WIN0_CBR_VSU_MODE        (1 << 30)
278 #define M_WIN0_CBR_HSD_MODE        (3 << 28)
279 #define M_WIN0_CBR_VER_SCL_MODE    (3 << 26)
280 #define M_WIN0_CBR_HOR_SCL_MODE    (3 << 24)
281 #define M_WIN0_YRGB_VSD_MODE       (1 << 23)
282 #define M_WIN0_YRGB_VSU_MODE       (1 << 22)
283 #define M_WIN0_YRGB_HSD_MODE       (3 << 20)
284 #define M_WIN0_YRGB_VER_SCL_MODE   (3 << 18)
285 #define M_WIN0_YRGB_HOR_SCL_MODE   (3 << 16)
286 #define M_WIN0_LINE_LOAD_MODE      (1 << 15)
287 #define M_WIN0_CBR_AXI_GATHER_NUM  (7 << 12)
288 #define M_WIN0_YRGB_AXI_GATHER_NUM (0xf << 8)
289 #define M_WIN0_VSD_CBR_GT2         (1 << 7)
290 #define M_WIN0_VSD_CBR_GT4         (1 << 6)
291 #define M_WIN0_VSD_YRGB_GT2        (1 << 5)
292 #define M_WIN0_VSD_YRGB_GT4        (1 << 4)
293 #define M_WIN0_BIC_COE_SEL         (3 << 2)
294 #define M_WIN0_CBR_AXI_GATHER_EN   (1 << 1)
295 #define M_WIN0_YRGB_AXI_GATHER_EN  (1)
296 
297 #define V_WIN0_CBR_VSD_MODE(x)        (((x) & 1) << 31)
298 #define V_WIN0_CBR_VSU_MODE(x)        (((x) & 1) << 30)
299 #define V_WIN0_CBR_HSD_MODE(x)        (((x) & 3) << 28)
300 #define V_WIN0_CBR_VER_SCL_MODE(x)    (((x) & 3) << 26)
301 #define V_WIN0_CBR_HOR_SCL_MODE(x)    (((x) & 3) << 24)
302 #define V_WIN0_YRGB_VSD_MODE(x)       (((x) & 1) << 23)
303 #define V_WIN0_YRGB_VSU_MODE(x)       (((x) & 1) << 22)
304 #define V_WIN0_YRGB_HSD_MODE(x)       (((x) & 3) << 20)
305 #define V_WIN0_YRGB_VER_SCL_MODE(x)   (((x) & 3) << 18)
306 #define V_WIN0_YRGB_HOR_SCL_MODE(x)   (((x) & 3) << 16)
307 #define V_WIN0_LINE_LOAD_MODE(x)      (((x) & 1) << 15)
308 #define V_WIN0_CBR_AXI_GATHER_NUM(x)  (((x) & 7) << 12)
309 #define V_WIN0_YRGB_AXI_GATHER_NUM(x) (((x) & 0xf) << 8)
310 #define V_WIN0_VSD_CBR_GT2(x)         (((x) & 1) << 7)
311 #define V_WIN0_VSD_CBR_GT4(x)         (((x) & 1) << 6)
312 #define V_WIN0_VSD_YRGB_GT2(x)        (((x) & 1) << 5)
313 #define V_WIN0_VSD_YRGB_GT4(x)        (((x) & 1) << 4)
314 #define V_WIN0_BIC_COE_SEL(x)         (((x) & 3) << 2)
315 #define V_WIN0_CBR_AXI_GATHER_EN(x)   (((x) & 1) << 1)
316 #define V_WIN0_YRGB_AXI_GATHER_EN(x)  ((x) & 1)
317 
318 /*VOP_WIN0_COLOR_KEY*/
319 #define M_WIN0_KEY_EN                 (1 << 31)
320 #define M_WIN0_KEY_COLOR              (0x3fffffff)
321 
322 #define V_WIN0_KEY_EN(x)              (((x) & 1) << 31)
323 #define V_WIN0_KEY_COLOR(x)           ((x) & 0x3fffffff)
324 
325 /* VOP_WIN0_VIR */
326 #define V_ARGB888_VIRWIDTH(x)	(((x) & 0x3fff) << 0)
327 #define V_RGB888_VIRWIDTH(x)	(((((x * 3) >> 2)+((x) % 3)) & 0x3fff) << 0)
328 #define V_RGB565_VIRWIDTH(x)	(((x / 2) & 0x3fff) << 0)
329 #define YUV_VIRWIDTH(x)		(((x / 4) & 0x3fff) << 0)
330 
331 /* VOP_WIN0_ACT_INFO */
332 #define V_ACT_HEIGHT(x)         (((x) & 0x1fff) << 16)
333 #define V_ACT_WIDTH(x)          ((x) & 0x1fff)
334 
335 /* VOP_WIN0_DSP_INFO */
336 #define V_DSP_HEIGHT(x)         (((x) & 0xfff) << 16)
337 #define V_DSP_WIDTH(x)          ((x) & 0xfff)
338 
339 /* VOP_WIN0_DSP_ST */
340 #define V_DSP_YST(x)            (((x) & 0x1fff) << 16)
341 #define V_DSP_XST(x)            ((x) & 0x1fff)
342 
343 /* VOP_WIN0_SCL_OFFSET */
344 #define V_WIN0_VS_OFFSET_CBR(x)     (((x) & 0xff) << 24)
345 #define V_WIN0_VS_OFFSET_YRGB(x)    (((x) & 0xff) << 16)
346 #define V_WIN0_HS_OFFSET_CBR(x)     (((x) & 0xff) << 8)
347 #define V_WIN0_HS_OFFSET_YRGB(x)    ((x) & 0xff)
348 
349 #define V_HSYNC(x)		(((x)&0x1fff)<<0)   /* hsync pulse width */
350 #define V_HORPRD(x)		(((x)&0x1fff)<<16)   /* horizontal period */
351 #define V_VSYNC(x)		(((x)&0x1fff)<<0)
352 #define V_VERPRD(x)		(((x)&0x1fff)<<16)
353 
354 #define V_HEAP(x)		(((x)&0x1fff)<<0)/* horizontal active end */
355 #define V_HASP(x)		(((x)&0x1fff)<<16)/* horizontal active start */
356 #define V_VAEP(x)		(((x)&0x1fff)<<0)
357 #define V_VASP(x)		(((x)&0x1fff)<<16)
358 
359 #endif
360