aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/platform/meson/ge2d/ge2d-regs.h
blob: 2a76dd4c0ccb1f7d45fc50f90e0daba700a89d10 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 * Copyright (C) 2020 BayLibre, SAS
 * Author: Neil Armstrong <narmstrong@baylibre.com>
 * Copyright (C) 2017 Amlogic, Inc. All rights reserved.
 */

#ifndef __GE2D_REGS__
#define __GE2D_REGS__

/* Registers starts at (GE2D_REG(0x8a0 * 4) */
#define GE2D_REG(x) ((0x8a0 + (x)) * 4)

#define GE2D_GEN_CTRL0 GE2D_REG(0x00)

#define GE2D_DST_BYTEMASK_ONLY		BIT(31)
#define GE2D_DST_BITMASK_EN		BIT(30)
#define GE2D_SRC2_KEY_EN		BIT(29)
#define GE2D_SRC2_KEY_MODE		BIT(28)
#define GE2D_SRC1_KEY_EN		BIT(27)
#define GE2D_SRC1_KEY_MODE		BIT(26)
#define GE2D_DST1_8B_MODE_SEL		GENMASK(25, 24)
#define GE2D_DST_CLIP_MODE		BIT(23)
#define GE2D_SRC2_8B_MODE_SEL		GENMASK(16, 15)
#define GE2D_SRC2_FILL_MODE		BIT(14)
#define GE2D_SRC2_PIC_STRUCT		GENMASK(13, 12)
#define GE2D_SRC2_X_YC_RATIO		BIT(11)
#define GE2D_SRC1_8B_MODE_SEL		GENMASK(6, 5)
#define GE2D_SRC1_FILL_MODE		BIT(4)
#define GE2D_SRC1_LUT_EN		BIT(3)
#define GE2D_SRC1_PIC_STRUCT		GENMASK(2, 1)

#define GE2D_GEN_CTRL1 GE2D_REG(0x01)

#define GE2D_SOFT_RST			BIT(31)
#define GE2D_DST_WRITE_RESP_CNT_RST	BIT(30)
#define GE2D_DST_WRITE_RESP_CNT_ADD_DIS	BIT(29)
#define GE2D_COLOR_CONVERSION_MODE1	BIT(26)
#define GE2D_INTERRUPT_CTRL		GENMASK(25, 24)
#define GE2D_SRC2_BURST_SIZE_CTRL	GENMASK(23, 22)
#define GE2D_SRC1_BURST_SIZE_CTRL	GENMASK(21, 16)
#define GE2D_DST1_PIC_STRUCT		GENMASK(15, 14)
#define GE2D_SRC_RD_CTRL		GENMASK(13, 12)
#define GE2D_DST2_URGENT_EN		BIT(11)
#define GE2D_SRC1_URGENT_EN		BIT(10)
#define GE2D_SRC2_URGENT_EN		BIT(9)
#define GE2D_DST1_URGENT_EN		BIT(8)
#define GE2D_SRC1_GB_ALPHA		GENMASK(7, 0)

#define GE2D_GEN_CTRL2 GE2D_REG(0x02)

#define GE2D_ALPHA_CONVERSION_MODE0	BIT(31)
#define GE2D_COLOR_CONVERSION_MODE0	BIT(30)
#define GE2D_SRC1_GB_ALPHA_EN		BIT(29)
#define GE2D_DST1_COLOR_ROUND_MODE	BIT(28)
#define GE2D_SRC2_COLOR_EXPAND_MODE	BIT(27)
#define GE2D_SRC2_ALPHA_EXPAND_MODE	BIT(26)
#define GE2D_SRC1_COLOR_EXPAND_MODE	BIT(25)
#define GE2D_SRC1_ALPHA_EXPAND_MODE	BIT(24)
#define GE2D_DST_LITTLE_ENDIAN		BIT(23)
#define GE2D_DST1_COLOR_MAP		GENMASK(22, 19)
#define GE2D_ALU_MULT_MODE		BIT(18)
#define GE2D_DST1_FORMAT		GENMASK(17, 16)
#define GE2D_SRC2_LITTLE_ENDIAN		BIT(15)
#define GE2D_SRC2_COLOR_MAP		GENMASK(14, 11)
#define GE2D_ALPHA_CONVERSION_MODE1	BIT(10)
#define GE2D_SRC2_FORMAT		GENMASK(9, 8)
#define GE2D_SRC1_LITTLE_ENDIAN		BIT(7)
#define GE2D_SRC1_COLOR_MAP		GENMASK(6, 3)
#define GE2D_SRC1_DEEPCOLOR		BIT(2)
#define GE2D_SRC1_FORMAT		GENMASK(1, 0)

#define GE2D_FORMAT_8BIT	0
#define GE2D_FORMAT_16BIT	1
#define GE2D_FORMAT_24BIT	2
#define GE2D_FORMAT_32BIT	3

/* 16 bit */
#define GE2D_COLOR_MAP_YUV422		0
#define GE2D_COLOR_MAP_RGB655		1
#define GE2D_COLOR_MAP_YUV655		1
#define GE2D_COLOR_MAP_RGB844		2
#define GE2D_COLOR_MAP_YUV844		2
#define GE2D_COLOR_MAP_RGBA6442		3
#define GE2D_COLOR_MAP_YUVA6442		3
#define GE2D_COLOR_MAP_RGBA4444		4
#define GE2D_COLOR_MAP_YUVA4444		4
#define GE2D_COLOR_MAP_RGB565		5
#define GE2D_COLOR_MAP_YUV565		5
#define GE2D_COLOR_MAP_ARGB4444		6
#define GE2D_COLOR_MAP_AYUV4444		6
#define GE2D_COLOR_MAP_ARGB1555		7
#define GE2D_COLOR_MAP_AYUV1555		7
#define GE2D_COLOR_MAP_RGBA4642		8
#define GE2D_COLOR_MAP_YUVA4642		8

/* 24 bit */
#define GE2D_COLOR_MAP_RGB888		0
#define GE2D_COLOR_MAP_YUV444		0
#define GE2D_COLOR_MAP_RGBA5658		1
#define GE2D_COLOR_MAP_YUVA5658		1
#define GE2D_COLOR_MAP_ARGB8565		2
#define GE2D_COLOR_MAP_AYUV8565		2
#define GE2D_COLOR_MAP_RGBA6666		3
#define GE2D_COLOR_MAP_YUVA6666		3
#define GE2D_COLOR_MAP_ARGB6666		4
#define GE2D_COLOR_MAP_AYUV6666		4
#define GE2D_COLOR_MAP_BGR888		5
#define GE2D_COLOR_MAP_VUY888		5

/* 32 bit */
#define GE2D_COLOR_MAP_RGBA8888		0
#define GE2D_COLOR_MAP_YUVA8888		0
#define GE2D_COLOR_MAP_ARGB8888		1
#define GE2D_COLOR_MAP_AYUV8888		1
#define GE2D_COLOR_MAP_ABGR8888		2
#define GE2D_COLOR_MAP_AVUY8888		2
#define GE2D_COLOR_MAP_BGRA8888		3
#define GE2D_COLOR_MAP_VUYA8888		3

#define GE2D_CMD_CTRL GE2D_REG(0x03)

#define GE2D_SRC2_FILL_COLOR_EN		BIT(9)
#define GE2D_SRC1_FILL_COLOR_EN		BIT(8)
#define GE2D_DST_XY_SWAP		BIT(7)
#define GE2D_DST_X_REV			BIT(6)
#define GE2D_DST_Y_REV			BIT(5)
#define GE2D_SRC2_X_REV			BIT(4)
#define GE2D_SRC2_Y_REV			BIT(3)
#define GE2D_SRC1_X_REV			BIT(2)
#define GE2D_SRC1_Y_REV			BIT(1)
#define GE2D_CBUS_CMD_WR		BIT(0)

#define GE2D_STATUS0 GE2D_REG(0x04)

#define GE2D_DST_WRITE_RSP_CNT		GENMASK(28, 17)
#define GE2D_DP_STATUS			GENMASK(16, 7)
#define GE2D_R1CMD_RDY			BIT(6)
#define GE2D_R2CMD_RDY			BIT(5)
#define GE2D_PDPCMD_VALID		BIT(4)
#define GE2D_DPCMD_RDY			BIT(3)
#define GE2D_BUF_CMD_VALID		BIT(2)
#define GE2D_CURR_CMD_VALID		BIT(1)
#define GE2D_GE2D_BUSY			BIT(0)

#define GE2D_STATUS1 GE2D_REG(0x05)

#define GE2D_WR_DST1_STATUS		GENMASK(29, 16)
#define GE2D_RD_SRC2_FIFO_EMPTY		BIT(15)
#define GE2D_RD_SRC2_FIFO_OVERFLOW	BIT(14)
#define GE2D_RD_SRC2_STATE_Y		GENMASK(13, 12)
#define GE2D_RD_SRC2_WIN_ERR		BIT(11)
#define GE2D_RD_SRC2_CMD_BUSY		BIT(10)
#define GE2D_RD_SRC1_FIFO_EMPTY		BIT(9)
#define GE2D_RD_SRC1_FIFO_OVERFLOW	BIT(8)
#define GE2D_RD_SRC1_STATE_CR		GENMASK(7, 6)
#define GE2D_RD_SRC1_STATE_CB		GENMASK(5, 4)
#define GE2D_RD_SRC1_STATE_Y		GENMASK(3, 2)
#define GE2D_RD_SRC1_WIN_ERR		BIT(1)
#define GE2D_RD_SRC1_CMD_BUSY		BIT(0)

#define GE2D_SRC1_DEF_COLOR GE2D_REG(0x06)

#define GE2D_COLOR_R_Y			GENMASK(31, 24)
#define GE2D_COLOR_B_CB			GENMASK(23, 16)
#define GE2D_COLOR_B_CR			GENMASK(15, 8)
#define GE2D_COLOR_ALPHA		GENMASK(7, 0)

#define GE2D_SRC1_CLIPX_START_END GE2D_REG(0x07)

#define GE2D_START_EXTRA	BIT(31) /* For GE2D_SRC1_CLIPX/Y_START_END */
#define GE2D_START_EXTRA0	BIT(30)	/* For GE2D_SRC1_X/Y_START_END */
#define GE2D_START		GENMASK(28, 16)
#define GE2D_END_EXTRA		BIT(15) /* For GE2D_SRC1_CLIPX/Y_START_END */
#define GE2D_END_EXTRA0		BIT(14)	/* For GE2D_SRC1_X/Y_START_END */
#define GE2D_END		GENMASK(12, 0)

#define GE2D_SRC1_CLIPY_START_END GE2D_REG(0x08)
#define GE2D_SRC1_CANVAS GE2D_REG(0x09)

#define GE2D_SRC1_CANVAS_ADDR	GENMASK(31, 24)

#define GE2D_SRC1_X_START_END GE2D_REG(0x0a)
#define GE2D_SRC1_Y_START_END GE2D_REG(0x0b)
#define GE2D_SRC1_LUT_ADDR GE2D_REG(0x0c)

#define GE2D_LUT_READ		BIT(8)
#define GE2D_LUT_ADDR		GENMASK(7, 0)

#define GE2D_SRC1_LUT_DAT GE2D_REG(0x0d)
#define GE2D_SRC1_FMT_CTRL GE2D_REG(0x0e)
#define GE2D_SRC2_DEF_COLOR GE2D_REG(0x0f)
#define GE2D_SRC2_CLIPX_START_END GE2D_REG(0x10)
#define GE2D_SRC2_CLIPY_START_END GE2D_REG(0x11)
#define GE2D_SRC2_X_START_END GE2D_REG(0x12)
#define GE2D_SRC2_Y_START_END GE2D_REG(0x13)
#define GE2D_DST_CLIPX_START_END GE2D_REG(0x14)
#define GE2D_DST_CLIPY_START_END GE2D_REG(0x15)
#define GE2D_DST_X_START_END GE2D_REG(0x16)
#define GE2D_DST_Y_START_END GE2D_REG(0x17)
#define GE2D_SRC2_DST_CANVAS GE2D_REG(0x18)

#define GE2D_DST2_CANVAS_ADDR	GENMASK(23, 16)
#define GE2D_SRC2_CANVAS_ADDR	GENMASK(15, 8)
#define GE2D_DST1_CANVAS_ADDR	GENMASK(7, 0)

#define GE2D_VSC_START_PHASE_STEP GE2D_REG(0x19)
#define GE2D_VSC_PHASE_SLOPE GE2D_REG(0x1a)
#define GE2D_VSC_INI_CTRL GE2D_REG(0x1b)
#define GE2D_HSC_START_PHASE_STEP GE2D_REG(0x1c)
#define GE2D_HSC_PHASE_SLOPE GE2D_REG(0x1d)
#define GE2D_HSC_INI_CTRL GE2D_REG(0x1e)
#define GE2D_HSC_ADV_CTRL GE2D_REG(0x1f)
#define GE2D_SC_MISC_CTRL GE2D_REG(0x20)
#define GE2D_VSC_NRND_POINT GE2D_REG(0x21)
#define GE2D_VSC_NRND_PHASE GE2D_REG(0x22)
#define GE2D_HSC_NRND_POINT GE2D_REG(0x23)
#define GE2D_HSC_NRND_PHASE GE2D_REG(0x24)
#define GE2D_MATRIX_PRE_OFFSET GE2D_REG(0x25)
#define GE2D_MATRIX_COEF00_01 GE2D_REG(0x26)
#define GE2D_MATRIX_COEF02_10 GE2D_REG(0x27)
#define GE2D_MATRIX_COEF11_12 GE2D_REG(0x28)
#define GE2D_MATRIX_COEF20_21 GE2D_REG(0x29)
#define GE2D_MATRIX_COEF22_CTRL GE2D_REG(0x2a)
#define GE2D_MATRIX_OFFSET GE2D_REG(0x2b)
#define GE2D_ALU_OP_CTRL GE2D_REG(0x2c)

#define GE2D_SRC1_COLOR_MULT_ALPHA_SEL	GENMASK(26, 25)
#define GE2D_SRC2_COLOR_MULT_ALPHA_SEL	BIT(24)
#define GE2D_ALU_BLEND_MODE		GENMASK(22, 20)

#define OPERATION_ADD           0    /* Cd = Cs*Fs+Cd*Fd */
#define OPERATION_SUB           1    /* Cd = Cs*Fs-Cd*Fd */
#define OPERATION_REVERSE_SUB   2    /* Cd = Cd*Fd-Cs*Fs */
#define OPERATION_MIN           3    /* Cd = Min(Cd*Fd,Cs*Fs) */
#define OPERATION_MAX           4    /* Cd = Max(Cd*Fd,Cs*Fs) */
#define OPERATION_LOGIC         5

#define GE2D_ALU_SRC_COLOR_BLEND_FACTOR	GENMASK(19, 16)
#define GE2D_ALU_DST_COLOR_BLEND_FACTOR	GENMASK(15, 12)

#define COLOR_FACTOR_ZERO                     0
#define COLOR_FACTOR_ONE                      1
#define COLOR_FACTOR_SRC_COLOR                2
#define COLOR_FACTOR_ONE_MINUS_SRC_COLOR      3
#define COLOR_FACTOR_DST_COLOR                4
#define COLOR_FACTOR_ONE_MINUS_DST_COLOR      5
#define COLOR_FACTOR_SRC_ALPHA                6
#define COLOR_FACTOR_ONE_MINUS_SRC_ALPHA      7
#define COLOR_FACTOR_DST_ALPHA                8
#define COLOR_FACTOR_ONE_MINUS_DST_ALPHA      9
#define COLOR_FACTOR_CONST_COLOR              10
#define COLOR_FACTOR_ONE_MINUS_CONST_COLOR    11
#define COLOR_FACTOR_CONST_ALPHA              12
#define COLOR_FACTOR_ONE_MINUS_CONST_ALPHA    13
#define COLOR_FACTOR_SRC_ALPHA_SATURATE       14

#define GE2D_ALU_OPERATION_LOGIC	GENMASK(15, 12)

#define LOGIC_OPERATION_CLEAR       0
#define LOGIC_OPERATION_COPY        1
#define LOGIC_OPERATION_NOOP        2
#define LOGIC_OPERATION_SET         3
#define LOGIC_OPERATION_COPY_INVERT 4
#define LOGIC_OPERATION_INVERT      5
#define LOGIC_OPERATION_AND_REVERSE 6
#define LOGIC_OPERATION_OR_REVERSE  7
#define LOGIC_OPERATION_AND         8
#define LOGIC_OPERATION_OR          9
#define LOGIC_OPERATION_NAND        10
#define LOGIC_OPERATION_NOR         11
#define LOGIC_OPERATION_XOR         12
#define LOGIC_OPERATION_EQUIV       13
#define LOGIC_OPERATION_AND_INVERT  14
#define LOGIC_OPERATION_OR_INVERT   15

#define GE2D_ALU_ALPHA_BLEND_MODE	GENMASK(10, 8)
#define GE2D_ALU_SRC_ALPHA_BLEND_FACTOR	GENMASK(7, 4)
#define GE2D_ALU_DST_ALPHA_BLEND_FACTOR	GENMASK(3, 0)

#define ALPHA_FACTOR_ZERO                     0
#define ALPHA_FACTOR_ONE                      1
#define ALPHA_FACTOR_SRC_ALPHA                2
#define ALPHA_FACTOR_ONE_MINUS_SRC_ALPHA      3
#define ALPHA_FACTOR_DST_ALPHA                4
#define ALPHA_FACTOR_ONE_MINUS_DST_ALPHA      5
#define ALPHA_FACTOR_CONST_ALPHA              6
#define ALPHA_FACTOR_ONE_MINUS_CONST_ALPHA    7

#define GE2D_ALU_ALPHA_OPERATION_LOGIC	GENMASK(3, 0)

#define GE2D_ALU_COLOR_OP(__op, __src_factor, __dst_factor) \
	(FIELD_PREP(GE2D_ALU_BLEND_MODE, __op) | \
	 FIELD_PREP(GE2D_ALU_SRC_COLOR_BLEND_FACTOR, __src_factor) | \
	 FIELD_PREP(GE2D_ALU_DST_COLOR_BLEND_FACTOR, __dst_factor))

#define GE2D_ALU_DO_COLOR_OPERATION_LOGIC(__op, __src_factor) \
	GE2D_ALU_COLOR_OP(OPERATION_LOGIC, __src_factor, __op)

#define GE2D_ALU_ALPHA_OP(__op, __src_factor, __dst_factor) \
	(FIELD_PREP(GE2D_ALU_ALPHA_BLEND_MODE, __op) | \
	 FIELD_PREP(GE2D_ALU_SRC_ALPHA_BLEND_FACTOR, __src_factor) | \
	 FIELD_PREP(GE2D_ALU_DST_ALPHA_BLEND_FACTOR, __dst_factor))

#define GE2D_ALU_DO_ALPHA_OPERATION_LOGIC(__op, __src_factor) \
	GE2D_ALU_ALPHA_OP(OPERATION_LOGIC, __src_factor, __op)

#define GE2D_ALU_CONST_COLOR GE2D_REG(0x2d)
#define GE2D_SRC1_KEY GE2D_REG(0x2e)
#define GE2D_SRC1_KEY_MASK GE2D_REG(0x2f)
#define GE2D_SRC2_KEY GE2D_REG(0x30)
#define GE2D_SRC2_KEY_MASK GE2D_REG(0x31)
#define GE2D_DST_BITMASK GE2D_REG(0x32)
#define GE2D_DP_ONOFF_CTRL GE2D_REG(0x33)
#define GE2D_SCALE_COEF_IDX GE2D_REG(0x34)
#define GE2D_SCALE_COEF GE2D_REG(0x35)
#define GE2D_SRC_OUTSIDE_ALPHA GE2D_REG(0x36)
#define GE2D_ANTIFLICK_CTRL0 GE2D_REG(0x38)
#define GE2D_ANTIFLICK_CTRL1 GE2D_REG(0x39)
#define GE2D_ANTIFLICK_COLOR_FILT0 GE2D_REG(0x3a)
#define GE2D_ANTIFLICK_COLOR_FILT1 GE2D_REG(0x3b)
#define GE2D_ANTIFLICK_COLOR_FILT2 GE2D_REG(0x3c)
#define GE2D_ANTIFLICK_COLOR_FILT3 GE2D_REG(0x3d)
#define GE2D_ANTIFLICK_ALPHA_FILT0 GE2D_REG(0x3e)
#define GE2D_ANTIFLICK_ALPHA_FILT1 GE2D_REG(0x3f)
#define GE2D_ANTIFLICK_ALPHA_FILT2 GE2D_REG(0x40)
#define GE2D_ANTIFLICK_ALPHA_FILT3 GE2D_REG(0x41)
#define GE2D_SRC1_RANGE_MAP_Y_CTRL GE2D_REG(0x43)
#define GE2D_SRC1_RANGE_MAP_CB_CTRL GE2D_REG(0x44)
#define GE2D_SRC1_RANGE_MAP_CR_CTRL GE2D_REG(0x45)
#define GE2D_ARB_BURST_NUM GE2D_REG(0x46)
#define GE2D_TID_TOKEN GE2D_REG(0x47)
#define GE2D_GEN_CTRL3 GE2D_REG(0x48)

#define GE2D_DST2_BYTEMASK_VAL		GENMASK(31, 28)
#define GE2D_DST2_PIC_STRUCT		GENMASK(27, 26)
#define GE2D_DST2_8B_MODE_SEL		GENMASK(25, 24)
#define GE2D_DST2_COLOR_MAP		GENMASK(22, 19)
#define GE2D_DST2_FORMAT		GENMASK(17, 16)
#define GE2D_DST2_COLOR_ROUND_MODE	BIT(14)
#define GE2D_DST2_X_DISCARD_MODE	GENMASK(13, 12)
#define GE2D_DST2_Y_DISCARD_MODE	GENMASK(11, 10)
#define GE2D_DST2_ENABLE		BIT(8)
#define GE2D_DST1_X_DISCARD_MODE	GENMASK(5, 4)
#define GE2D_DST1_Y_DISCARD_MODE	GENMASK(3, 2)
#define GE2D_DST1_ENABLE		BIT(0)

#define GE2D_STATUS2 GE2D_REG(0x49)
#define GE2D_GEN_CTRL4 GE2D_REG(0x4a)
#define GE2D_DST1_BADDR_CTRL  GE2D_REG(0x51)
#define GE2D_DST1_STRIDE_CTRL GE2D_REG(0x52)

#define GE2D_STRIDE_SIZE	GENMASK(19, 0)

#define GE2D_SRC1_BADDR_CTRL  GE2D_REG(0x53)
#define GE2D_SRC1_STRIDE_CTRL GE2D_REG(0x54)
#define GE2D_SRC2_BADDR_CTRL  GE2D_REG(0x55)
#define GE2D_SRC2_STRIDE_CTRL GE2D_REG(0x56)

#endif /* __GE2D_REGS__ */