hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
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
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __REG3_INFO_H__
#define __REG3_INFO_H__
 
#include "rga_drv.h"
 
/* sys reg */
#define RGA3_SYS_CTRL                0x000
#define RGA3_CMD_CTRL                0x004
#define RGA3_CMD_ADDR                0x008
#define RGA3_MI_GROUP_CTRL            0x00c
#define RGA3_ARQOS_CTRL                0x010
#define RGA3_VERSION_NUM            0x018
#define RGA3_VERSION_TIM            0x01c
#define RGA3_INT_EN                0x020
#define RGA3_INT_RAW                0x024
#define RGA3_INT_MSK                0x028
#define RGA3_INT_CLR                0x02c
#define RGA3_RO_SRST                0x030
#define RGA3_STATUS0                0x034
#define RGA3_SCAN_CNT                0x038
#define RGA3_CMD_STATE                0x040
 
/* cmd reg */
#define RGA3_WIN0_RD_CTRL_OFFSET        0x000
#define RGA3_WIN0_Y_BASE_OFFSET            0x010
#define RGA3_WIN0_U_BASE_OFFSET            0x014
#define RGA3_WIN0_V_BASE_OFFSET            0x018
#define RGA3_WIN0_VIR_STRIDE_OFFSET        0x01c
#define RGA3_WIN0_FBC_OFF_OFFSET        0x020
#define RGA3_WIN0_SRC_SIZE_OFFSET        0x024
#define RGA3_WIN0_ACT_OFF_OFFSET        0x028
#define RGA3_WIN0_ACT_SIZE_OFFSET        0x02c
#define RGA3_WIN0_DST_SIZE_OFFSET        0x030
#define RGA3_WIN0_SCL_FAC_OFFSET        0x034
#define RGA3_WIN0_UV_VIR_STRIDE_OFFSET        0x038
#define RGA3_WIN1_RD_CTRL_OFFSET        0x040
#define RGA3_WIN1_Y_BASE_OFFSET            0x050
#define RGA3_WIN1_U_BASE_OFFSET            0x054
#define RGA3_WIN1_V_BASE_OFFSET            0x058
#define RGA3_WIN1_VIR_STRIDE_OFFSET        0x05c
#define RGA3_WIN1_FBC_OFF_OFFSET        0x060
#define RGA3_WIN1_SRC_SIZE_OFFSET        0x064
#define RGA3_WIN1_ACT_OFF_OFFSET        0x068
#define RGA3_WIN1_ACT_SIZE_OFFSET        0x06c
#define RGA3_WIN1_DST_SIZE_OFFSET        0x070
#define RGA3_WIN1_SCL_FAC_OFFSET        0x074
#define RGA3_WIN1_UV_VIR_STRIDE_OFFSET        0x078
#define RGA3_OVLP_CTRL_OFFSET            0x080
#define RGA3_OVLP_OFF_OFFSET            0x084
#define RGA3_OVLP_TOP_KEY_MIN_OFFSET        0x088
#define RGA3_OVLP_TOP_KEY_MAX_OFFSET        0x08c
#define RGA3_OVLP_TOP_CTRL_OFFSET        0x090
#define RGA3_OVLP_BOT_CTRL_OFFSET        0x094
#define RGA3_OVLP_TOP_ALPHA_OFFSET        0x098
#define RGA3_OVLP_BOT_ALPHA_OFFSET        0x09c
#define RGA3_WR_CTRL_OFFSET            0x0a0
#define RGA3_WR_FBCE_CTRL_OFFSET        0x0a4
#define RGA3_WR_VIR_STRIDE_OFFSET        0x0a8
#define RGA3_WR_PL_VIR_STRIDE_OFFSET        0x0ac
#define RGA3_WR_Y_BASE_OFFSET            0x0b0
#define RGA3_WR_U_BASE_OFFSET            0x0b4
#define RGA3_WR_V_BASE_OFFSET            0x0b8
 
/* RGA3_SYS_CTRL */
#define m_RGA3_SYS_CTRL_FRMEND_AUTO_RSTN_EN            (0x1 << 11)
#define m_RGA3_SYS_CTRL_RGA_BIC_MODE                (0x3 << 9)
#define m_RGA3_SYS_CTRL_RGA_RAM_CLK_ON                (0x1 << 8)
#define m_RGA3_SYS_CTRL_CCLK_SRESET                (0x1 << 4)
#define m_RGA3_SYS_CTRL_ACLK_SRESET                (0x1 << 3)
#define m_RGA3_SYS_CTRL_RGA_LGC_CLK_ON                (0x1 << 2)
#define m_RGA3_SYS_CTRL_CMD_MODE                (0x1 << 1)
#define m_RGA3_SYS_CTRL_RGA_SART                (0x1 << 0)
 
#define s_RGA3_SYS_CTRL_RGA_BIC_MODE(x)                ((x & 0x3) << 9)
#define s_RGA3_SYS_CTRL_CCLK_SRESET(x)                ((x & 0x1) << 4)
#define s_RGA3_SYS_CTRL_ACLK_SRESET(x)                ((x & 0x1) << 3)
#define s_RGA3_SYS_CTRL_CMD_MODE(x)                ((x & 0x1) << 1)
 
/* TODO: RGA3_INT_EN/RGA3_INT_RAW/RGA3_INT_MSK/RGA3_INT_CLR */
#define m_RGA3_INT_WIN1_VOR_FIFO_REN_ERR            (0x1 << 29)
#define m_RGA3_INT_WIN1_VOR_FIFO_WEN_ERR            (0x1 << 28)
#define m_RGA3_INT_WIN1_HOR_FIFO_REN_ERR            (0x1 << 27)
#define m_RGA3_INT_WIN1_HOR_FIFO_WEN_ERR            (0x1 << 26)
#define m_RGA3_INT_WIN1_IN_FIFO_REB_ERR                (0x1 << 25)
#define m_RGA3_INT_WIN1_IN_FIFO_WEN_ERR                (0x1 << 24)
#define m_RGA3_INT_WIN0_VOR_FIFO_REN_ERR            (0x1 << 21)
#define m_RGA3_INT_WIN0_VOR_FIFO_WEN_ERR            (0x1 << 20)
#define m_RGA3_INT_WIN0_HOR_FIFO_REN_ERR            (0x1 << 19)
#define m_RGA3_INT_WIN0_HOR_FIFO_WEN_ERR            (0x1 << 18)
#define m_RGA3_INT_WIN0_IN_FIFO_REB_ERR                (0x1 << 17)
#define m_RGA3_INT_WIN0_IN_FIFO_WEN_ERR                (0x1 << 16)
#define m_RGA3_INT_RGA_MI_WR_BUS_ERR                (0x1 << 15)
#define m_RGA3_INT_RGA_MI_WR_IN_HERR                (0x1 << 14)
//The signal is invalid, it will be pulled up every time, no need to care.
// #define m_RGA3_INT_RGA_MI_WR_IN_VERR                (0x1 << 13)
#define m_RGA3_INT_WIN1_V_ERR                    (0x1 << 11)
#define m_RGA3_INT_WIN1_H_ERR                    (0x1 << 10)
#define m_RGA3_INT_WIN1_FBCD_DEC_ERR                (0x1 << 9)
#define m_RGA3_INT_WIN1_RD_FRM_END                (0x1 << 8) //not error
#define m_RGA3_INT_WIN0_V_ERR                    (0x1 << 7)
#define m_RGA3_INT_WIN0_H_ERR                    (0x1 << 6)
#define m_RGA3_INT_WIN0_FBCD_DEC_ERR                (0x1 << 5)
#define m_RGA3_INT_WIN0_RD_FRM_END                (0x1 << 4) //not error
#define m_RGA3_INT_CMD_LINE_FINISH                (0x1 << 3) //not error
#define m_RGA3_INT_RAG_MI_RD_BUS_ERR                (0x1 << 2)
#define m_RGA3_INT_RGA_MMU_INTR                    (0x1 << 1)
#define m_RGA3_INT_FRM_DONE                    (0x1 << 0) //not error
 
#define m_RGA3_INT_ERROR_MASK \
   ( \
       m_RGA3_INT_RGA_MMU_INTR | \
       m_RGA3_INT_RAG_MI_RD_BUS_ERR | \
       m_RGA3_INT_WIN0_FBCD_DEC_ERR | \
       m_RGA3_INT_WIN0_H_ERR | \
       m_RGA3_INT_WIN0_V_ERR | \
       m_RGA3_INT_WIN1_FBCD_DEC_ERR | \
       m_RGA3_INT_WIN1_H_ERR | \
       m_RGA3_INT_WIN1_V_ERR | \
       m_RGA3_INT_RGA_MI_WR_IN_HERR | \
       m_RGA3_INT_RGA_MI_WR_BUS_ERR | \
       m_RGA3_INT_WIN0_IN_FIFO_WEN_ERR | \
       m_RGA3_INT_WIN0_IN_FIFO_REB_ERR | \
       m_RGA3_INT_WIN0_HOR_FIFO_WEN_ERR | \
       m_RGA3_INT_WIN0_HOR_FIFO_REN_ERR| \
       m_RGA3_INT_WIN0_VOR_FIFO_WEN_ERR | \
       m_RGA3_INT_WIN0_VOR_FIFO_REN_ERR | \
       m_RGA3_INT_WIN1_IN_FIFO_WEN_ERR | \
       m_RGA3_INT_WIN1_IN_FIFO_REB_ERR | \
       m_RGA3_INT_WIN1_HOR_FIFO_WEN_ERR | \
       m_RGA3_INT_WIN1_HOR_FIFO_REN_ERR| \
       m_RGA3_INT_WIN1_VOR_FIFO_WEN_ERR | \
       m_RGA3_INT_WIN1_VOR_FIFO_REN_ERR \
   )
 
/* RGA3_CMD_CTRL */
#define m_RGA3_CMD_CTRL_CMD_INCR_NUM                (0x3ff << 3)
#define m_RGA3_CMD_CTRL_CMD_STOP_MODE                (0x1 << 2)
#define m_RGA3_CMD_CTRL_CMD_INCR_VALID_P            (0x1 << 1)
#define m_RGA3_CMD_CTRL_CMD_LINE_ST_P                (0x1 << 0)
 
/* RGA3_RO_SRST */
#define m_RGA3_RO_SRST_RO_RST_DONE                (0x3f << 0)
 
/* RGA3_CMD_STATE */
#define m_RGA3_CMD_STATE_CMD_CNT_CUR                (0xfff << 16)
#define m_RGA3_CMD_STATE_CMD_WORKING                (0x1 << 0)
 
/* RGA3_WIN0_RD_CTRL */
#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_ENABLE            (0x1 << 0)
#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_RD_MODE            (0x3 << 1)
#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_PIC_FORMAT            (0xf << 4)
#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_RD_FORMAT            (0x3 << 8)
#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_YUV10B_COMPACT        (0x1 << 10)
#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_ENDIAN_MODE            (0x1 << 11)
#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_PIX_SWAP            (0x1 << 12)
#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_YC_SWAP            (0x1 << 13)
#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_ROT                (0x1 << 16)
#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_XMIRROR            (0x1 << 17)
#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_YMIRROR            (0x1 << 18)
#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_HOR_BY            (0x1 << 20)
#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_HOR_UP            (0x1 << 21)
#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_VER_BY            (0x1 << 22)
#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_VER_UP            (0x1 << 23)
#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_Y2R_EN            (0x1 << 24)
#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_R2Y_EN            (0x1 << 25)
#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_CSC_MODE            (0x3 << 26)
#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_PERF_OPT_DIS        (0x1 << 29)
#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_RD_ALIGN_DIS        (0x1 << 30)
 
#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_ENABLE(x)            ((x & 0x1) << 0)
#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_RD_MODE(x)            ((x & 0x3) << 1)
#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_PIC_FORMAT(x)        ((x & 0xf) << 4)
#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_RD_FORMAT(x)        ((x & 0x3) << 8)
#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_YUV10B_COMPACT(x)        ((x & 0x1) << 10)
#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_ENDIAN_MODE(x)        ((x & 0x1) << 11)
#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_PIX_SWAP(x)            ((x & 0x1) << 12)
#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_YC_SWAP(x)            ((x & 0x1) << 13)
#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_ROT(x)            ((x & 0x1) << 16)
#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_XMIRROR(x)            ((x & 0x1) << 17)
#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_YMIRROR(x)            ((x & 0x1) << 18)
#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_HOR_BY(x)            ((x & 0x1) << 20)
#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_HOR_UP(x)            ((x & 0x1) << 21)
#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_VER_BY(x)            ((x & 0x1) << 22)
#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_VER_UP(x)            ((x & 0x1) << 23)
#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_Y2R_EN(x)            ((x & 0x1) << 24)
#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_R2Y_EN(x)            ((x & 0x1) << 25)
#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_CSC_MODE(x)            ((x & 0x3) << 26)
#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_PERF_OPT_DIS(x)        ((x & 0x1) << 29)
#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_RD_ALIGN_DIS(x)        ((x & 0x1) << 30)
 
/* RGA3_WIN0_FBC_OFF */
#define m_RGA3_WIN0_FBC_OFF_SW_WIN0_FBC_XOFF            (0x1fff << 0)
#define m_RGA3_WIN0_FBC_OFF_SW_WIN0_FBC_YOFF            (0x1fff << 16)
 
#define s_RGA3_WIN0_FBC_OFF_SW_WIN0_FBC_XOFF(x)            ((x & 0x1fff) << 0)
#define s_RGA3_WIN0_FBC_OFF_SW_WIN0_FBC_YOFF(x)            ((x & 0x1fff) << 16)
 
/* RGA3_WIN0_SRC_SIZE */
#define m_RGA3_WIN0_SRC_SIZE_SW_WIN0_SRC_WIDTH            (0x1fff << 0)
#define m_RGA3_WIN0_SRC_SIZE_SW_WIN0_SRC_HEIGHT            (0x1fff << 16)
 
#define s_RGA3_WIN0_SRC_OFF_SW_WIN0_SRC_WIDTH(x)        ((x & 0x1fff) << 0)
#define s_RGA3_WIN0_SRC_OFF_SW_WIN0_SRC_HEIGHT(x)        ((x & 0x1fff) << 16)
 
/* RGA3_WIN0_ACT_OFF */
#define m_RGA3_WIN0_ACT_OFF_SW_WIN0_ACT_XOFF            (0x1fff << 0)
#define m_RGA3_WIN0_ACT_OFF_SW_WIN0_ACT_YOFF            (0x1fff << 16)
 
#define s_RGA3_WIN0_ACT_OFF_SW_WIN0_ACT_XOFF(x)            ((x & 0x1fff) << 0)
#define s_RGA3_WIN0_ACT_OFF_SW_WIN0_ACT_YOFF(x)            ((x & 0x1fff) << 16)
 
/* RGA3_WIN0_ACT_SIZE */
#define m_RGA3_WIN0_ACT_SIZE_SW_WIN0_ACT_WIDTH            (0x1fff << 0)
#define m_RGA3_WIN0_ACT_SIZE_SW_WIN0_ACT_HEIGHT            (0x1fff << 16)
 
#define s_RGA3_WIN0_ACT_SIZE_SW_WIN0_ACT_WIDTH(x)        ((x & 0x1fff) << 0)
#define s_RGA3_WIN0_ACT_SIZE_SW_WIN0_ACT_HEIGHT(x)        ((x & 0x1fff) << 16)
 
/* RGA3_WIN0_DST_SIZE */
#define m_RGA3_WIN0_DST_SIZE_SW_WIN0_DST_WIDTH            (0x1fff << 0)
#define m_RGA3_WIN0_DST_SIZE_SW_WIN0_DST_HEIGHT            (0x1fff << 16)
 
#define s_RGA3_WIN0_DST_SIZE_SW_WIN0_DST_WIDTH(x)        ((x & 0x1fff) << 0)
#define s_RGA3_WIN0_DST_SIZE_SW_WIN0_DST_HEIGHT(x)        ((x & 0x1fff) << 16)
 
/* RGA3_WIN0_SCL_FAC */
#define m_RGA3_WIN0_SCL_FAC_SW_WIN0_VER_FAC            (0xffff << 0)
#define m_RGA3_WIN0_SCL_FAC_SW_WIN0_HOR_FAC            (0xffff << 16)
 
#define s_RGA3_WIN0_SCL_FAC_SW_WIN0_VER_FAC(x)            ((x & 0xffff) << 0)
#define s_RGA3_WIN0_SCL_FAC_SW_WIN0_HOR_FAC(x)            ((x & 0xffff) << 16)
 
/* RGA3_WIN1_RD_CTRL */
#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_ENABLE            (0x1 << 0)
#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_RD_MODE            (0x3 << 1)
#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_PIC_FORMAT            (0xf << 4)
#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_RD_FORMAT            (0x3 << 8)
#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_YUV10B_COMPACT        (0x1 << 10)
#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_ENDIAN_MODE            (0x1 << 11)
#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_PIX_SWAP            (0x1 << 12)
#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_YC_SWAP            (0x1 << 13)
#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_ROT                (0x1 << 16)
#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_XMIRROR            (0x1 << 17)
#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_YMIRROR            (0x1 << 18)
#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_HOR_BY            (0x1 << 20)
#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_HOR_UP            (0x1 << 21)
#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_VER_BY            (0x1 << 22)
#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_VER_UP            (0x1 << 23)
#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_Y2R_EN            (0x1 << 24)
#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_R2Y_EN            (0x1 << 25)
#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_CSC_MODE            (0x3 << 26)
#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_PERF_OPT_DIS        (0x1 << 29)
#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_RD_ALIGN_DIS        (0x1 << 30)
 
#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_ENABLE(x)            ((x & 0x1) << 0)
#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_RD_MODE(x)            ((x & 0x3) << 1)
#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_PIC_FORMAT(x)        ((x & 0xf) << 4)
#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_RD_FORMAT(x)        ((x & 0x3) << 8)
#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_YUV10B_COMPACT(x)        ((x & 0x1) << 10)
#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_ENDIAN_MODE(x)        ((x & 0x1) << 11)
#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_PIX_SWAP(x)            ((x & 0x1) << 12)
#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_YC_SWAP(x)            ((x & 0x1) << 13)
#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_ROT(x)            ((x & 0x1) << 16)
#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_XMIRROR(x)            ((x & 0x1) << 17)
#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_YMIRROR(x)            ((x & 0x1) << 18)
#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_HOR_BY(x)            ((x & 0x1) << 20)
#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_HOR_UP(x)            ((x & 0x1) << 21)
#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_VER_BY(x)            ((x & 0x1) << 22)
#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_VER_UP(x)            ((x & 0x1) << 23)
#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_Y2R_EN(x)            ((x & 0x1) << 24)
#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_R2Y_EN(x)            ((x & 0x1) << 25)
#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_CSC_MODE(x)            ((x & 0x3) << 26)
#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_PERF_OPT_DIS(x)        ((x & 0x1) << 29)
#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_RD_ALIGN_DIS(x)        ((x & 0x1) << 30)
 
/* RGA3_WIN1_FBC_OFF */
#define m_RGA3_WIN1_FBC_OFF_SW_WIN1_FBC_XOFF            (0x1fff << 0)
#define m_RGA3_WIN1_FBC_OFF_SW_WIN1_FBC_YOFF            (0x1fff << 16)
 
#define s_RGA3_WIN1_FBC_OFF_SW_WIN1_FBC_XOFF(x)            ((x & 0x1fff) << 0)
#define s_RGA3_WIN1_FBC_OFF_SW_WIN1_FBC_YOFF(x)            ((x & 0x1fff) << 16)
 
/* RGA3_WIN1_SRC_SIZE */
#define m_RGA3_WIN1_SRC_SIZE_SW_WIN1_SRC_WIDTH            (0x1fff << 0)
#define m_RGA3_WIN1_SRC_SIZE_SW_WIN1_SRC_HEIGHT            (0x1fff << 16)
 
#define s_RGA3_WIN1_SRC_OFF_SW_WIN1_SRC_WIDTH(x)        ((x & 0x1fff) << 0)
#define s_RGA3_WIN1_SRC_OFF_SW_WIN1_SRC_HEIGHT(x)        ((x & 0x1fff) << 16)
 
/* RGA3_WIN1_ACT_OFF */
#define m_RGA3_WIN1_ACT_OFF_SW_WIN1_ACT_XOFF            (0x1fff << 0)
#define m_RGA3_WIN1_ACT_OFF_SW_WIN1_ACT_YOFF            (0x1fff << 16)
 
#define s_RGA3_WIN1_ACT_OFF_SW_WIN1_ACT_XOFF(x)            ((x & 0x1fff) << 0)
#define s_RGA3_WIN1_ACT_OFF_SW_WIN1_ACT_YOFF(x)            ((x & 0x1fff) << 16)
 
/* RGA3_WIN1_ACT_SIZE */
#define m_RGA3_WIN1_ACT_SIZE_SW_WIN1_ACT_WIDTH            (0x1fff << 0)
#define m_RGA3_WIN1_ACT_SIZE_SW_WIN1_ACT_HEIGHT            (0x1fff << 16)
 
#define s_RGA3_WIN1_ACT_SIZE_SW_WIN1_ACT_WIDTH(x)        ((x & 0x1fff) << 0)
#define s_RGA3_WIN1_ACT_SIZE_SW_WIN1_ACT_HEIGHT(x)        ((x & 0x1fff) << 16)
 
/* RGA3_WIN1_DST_SIZE */
#define m_RGA3_WIN1_DST_SIZE_SW_WIN1_DST_WIDTH            (0x1fff << 0)
#define m_RGA3_WIN1_DST_SIZE_SW_WIN1_DST_HEIGHT            (0x1fff << 16)
 
#define s_RGA3_WIN1_DST_SIZE_SW_WIN1_DST_WIDTH(x)        ((x & 0x1fff) << 0)
#define s_RGA3_WIN1_DST_SIZE_SW_WIN1_DST_HEIGHT(x)        ((x & 0x1fff) << 16)
 
/* RGA3_WIN1_SCL_FAC */
#define m_RGA3_WIN1_SCL_FAC_SW_WIN1_VER_FAC            (0xffff << 0)
#define m_RGA3_WIN1_SCL_FAC_SW_WIN1_HOR_FAC            (0xffff << 16)
 
#define s_RGA3_WIN1_SCL_FAC_SW_WIN1_VER_FAC(x)            ((x & 0xffff) << 0)
#define s_RGA3_WIN1_SCL_FAC_SW_WIN1_HOR_FAC(x)            ((x & 0xffff) << 16)
 
/* RGA3_OVLP_CTRL */
#define m_RGA3_OVLP_CTRL_SW_OVLP_MODE                (0x3 << 0)
#define m_RGA3_OVLP_CTRL_SW_OVLP_FIELD                (0x1 << 2)
#define m_RGA3_OVLP_CTRL_SW_TOP_SWAP                (0x1 << 3)
#define m_RGA3_OVLP_CTRL_SW_TOP_ALPHA_EN            (0x1 << 4)
#define m_RGA3_OVLP_CTRL_SW_TOP_KEY_EN                (0x7FFF << 5)
#define m_RGA3_OVLP_CTRL_SW_OVLP_Y2R_EN                (0x1 << 20)
#define m_RGA3_OVLP_CTRL_SW_OVLP_R2Y_EN                (0x1 << 21)
#define m_RGA3_OVLP_CTRL_SW_OVLP_CSC_MODE            (0x3 << 22)
 
#define s_RGA3_OVLP_CTRL_SW_OVLP_MODE(x)            ((x & 0x3) << 0)
#define s_RGA3_OVLP_CTRL_SW_OVLP_FIELD(x)            ((x & 0x1) << 2)
#define s_RGA3_OVLP_CTRL_SW_TOP_SWAP(x)                ((x & 0x1) << 3)
#define s_RGA3_OVLP_CTRL_SW_TOP_ALPHA_EN(x)            ((x & 0x1) << 4)
#define s_RGA3_OVLP_CTRL_SW_TOP_KEY_EN(x)            ((x & 0x7FFF) << 5)
#define s_RGA3_OVLP_CTRL_SW_OVLP_Y2R_EN(x)            ((x & 0x1) << 20)
#define s_RGA3_OVLP_CTRL_SW_OVLP_R2Y_EN(x)            ((x & 0x1) << 21)
#define s_RGA3_OVLP_CTRL_SW_OVLP_CSC_MODE(x)            ((x & 0x3) << 22)
 
/* RGA3_OVLP_OFF */
#define m_RGA3_OVLP_OFF_SW_OVLP_XOFF                (0x1fff << 0)
#define m_RGA3_OVLP_OFF_SW_OVLP_YOFF                (0x1fff << 16)
 
#define s_RGA3_OVLP_OFF_SW_OVLP_XOFF(x)                ((x & 0x1fff) << 0)
#define s_RGA3_OVLP_OFF_SW_OVLP_YOFF(x)                ((x & 0x1fff) << 16)
 
/* RGA3_OVLP_TOP_KEY_MIN */
#define m_RGA3_OVLP_TOP_KEY_MIN_SW_TOP_KEY_YG_MIN        (0x3ff << 0)
#define m_RGA3_OVLP_TOP_KEY_MIN_SW_TOP_KEY_UB_MIN        (0x3ff << 10)
#define m_RGA3_OVLP_TOP_KEY_MIN_SW_TOP_KEY_VR_MIN        (0x3ff << 20)
 
#define s_RGA3_OVLP_TOP_KEY_MIN_SW_TOP_KEY_YG_MIN(x)        ((x & 0x3f)f << 0)
#define s_RGA3_OVLP_TOP_KEY_MIN_SW_TOP_KEY_UB_MIN(x)        ((x & 0x3ff) << 10)
#define s_RGA3_OVLP_TOP_KEY_MIN_SW_TOP_KEY_VR_MIN(x)        ((x & 0x3ff) << 20)
 
/* RGA3_OVLP_TOP_KEY_MAX */
#define m_RGA3_OVLP_TOP_KEY_MAX_SW_TOP_KEY_YG_MAX        (0x3ff << 0)
#define m_RGA3_OVLP_TOP_KEY_MAX_SW_TOP_KEY_UB_MAX        (0x3ff << 10)
#define m_RGA3_OVLP_TOP_KEY_MAX_SW_TOP_KEY_VR_MAX        (0x3ff << 20)
 
#define s_RGA3_OVLP_TOP_KEY_MAX_SW_TOP_KEY_YG_MAX(x)        ((x & 0x3ff) << 0)
#define s_RGA3_OVLP_TOP_KEY_MAX_SW_TOP_KEY_UB_MAX(x)        ((x & 0x3ff) << 10)
#define s_RGA3_OVLP_TOP_KEY_MAX_SW_TOP_KEY_VR_MAX(x)        ((x & 0x3ff) << 20)
 
/* RGA3_OVLP_TOP_CTRL */
#define m_RGA3_OVLP_TOP_CTRL_SW_TOP_COLOR_M0            (0x1 << 0)
#define m_RGA3_OVLP_TOP_CTRL_SW_TOP_ALPHA_M0            (0x1 << 1)
#define m_RGA3_OVLP_TOP_CTRL_SW_TOP_BLEND_M0            (0x3 << 2)
#define m_RGA3_OVLP_TOP_CTRL_SW_TOP_ALPHA_CAL_M0        (0x1 << 4)
#define m_RGA3_OVLP_TOP_CTRL_SW_TOP_FACTOR_M0            (0x7 << 5)
#define m_RGA3_OVLP_TOP_CTRL_SW_TOP_GLOBAL_ALPHA        (0xff << 16)
 
#define s_RGA3_OVLP_TOP_CTRL_SW_TOP_COLOR_M0(x)            ((x & 0x1) << 0)
#define s_RGA3_OVLP_TOP_CTRL_SW_TOP_ALPHA_M0(x)            ((x & 0x1) << 1)
#define s_RGA3_OVLP_TOP_CTRL_SW_TOP_BLEND_M0(x)            ((x & 0x3) << 2)
#define s_RGA3_OVLP_TOP_CTRL_SW_TOP_ALPHA_CAL_M0(x)        ((x & 0x1) << 4)
#define s_RGA3_OVLP_TOP_CTRL_SW_TOP_FACTOR_M0(x)        ((x & 0x7) << 5)
#define s_RGA3_OVLP_TOP_CTRL_SW_TOP_GLOBAL_ALPHA(x)        ((x & 0xff) << 16)
 
/* RGA3_OVLP_BOT_CTRL */
#define m_RGA3_OVLP_BOT_CTRL_SW_BOT_COLOR_M0            (0x1 << 0)
#define m_RGA3_OVLP_BOT_CTRL_SW_BOT_ALPHA_M0            (0x1 << 1)
#define m_RGA3_OVLP_BOT_CTRL_SW_BOT_BLEND_M0            (0x3 << 2)
#define m_RGA3_OVLP_BOT_CTRL_SW_BOT_ALPHA_CAL_M0        (0x1 << 4)
#define m_RGA3_OVLP_BOT_CTRL_SW_BOT_FACTOR_M0            (0x7 << 5)
#define m_RGA3_OVLP_BOT_CTRL_SW_BOT_GLOBAL_ALPHA        (0xff << 16)
 
#define s_RGA3_OVLP_BOT_CTRL_SW_BOT_COLOR_M0(x)            ((x & 0x1) << 0)
#define s_RGA3_OVLP_BOT_CTRL_SW_BOT_ALPHA_M0(x)            ((x & 0x1) << 1)
#define s_RGA3_OVLP_BOT_CTRL_SW_BOT_BLEND_M0(x)            ((x & 0x3) << 2)
#define s_RGA3_OVLP_BOT_CTRL_SW_BOT_ALPHA_CAL_M0(x)        ((x & 0x1) << 4)
#define s_RGA3_OVLP_BOT_CTRL_SW_BOT_FACTOR_M0(x)        ((x & 0x7) << 5)
#define s_RGA3_OVLP_BOT_CTRL_SW_BOT_GLOBAL_ALPHA(x)        ((x & 0xff) << 16)
 
/* RGA3_OVLP_TOP_ALPHA */
#define m_RGA3_OVLP_TOP_ALPHA_SW_TOP_ALPHA_M1            (0x1 << 1)
#define m_RGA3_OVLP_TOP_ALPHA_SW_TOP_BLEND_M1            (0x3 << 2)
#define m_RGA3_OVLP_TOP_ALPHA_SW_TOP_ALPHA_CAL_M1        (0x1 << 4)
#define m_RGA3_OVLP_TOP_ALPHA_SW_TOP_FACTOR_M1            (0x7 << 5)
 
#define s_RGA3_OVLP_TOP_ALPHA_SW_TOP_ALPHA_M1(x)        ((x & 0x1) << 1)
#define s_RGA3_OVLP_TOP_ALPHA_SW_TOP_BLEND_M1(x)        ((x & 0x3) << 2)
#define s_RGA3_OVLP_TOP_ALPHA_SW_TOP_ALPHA_CAL_M1(x)        ((x & 0x1) << 4)
#define s_RGA3_OVLP_TOP_ALPHA_SW_TOP_FACTOR_M1(x)        ((x & 0x7) << 5)
 
/* RGA3_OVLP_BOT_ALPHA */
#define m_RGA3_OVLP_BOT_ALPHA_SW_BOT_ALPHA_M1            (0x1 << 1)
#define m_RGA3_OVLP_BOT_ALPHA_SW_BOT_BLEND_M1            (0x3 << 2)
#define m_RGA3_OVLP_BOT_ALPHA_SW_BOT_ALPHA_CAL_M1        (0x1 << 4)
#define m_RGA3_OVLP_BOT_ALPHA_SW_BOT_FACTOR_M1            (0x7 << 5)
 
#define s_RGA3_OVLP_BOT_ALPHA_SW_BOT_ALPHA_M1(x)        ((x & 0x1) << 1)
#define s_RGA3_OVLP_BOT_ALPHA_SW_BOT_BLEND_M1(x)        ((x & 0x3) << 2)
#define s_RGA3_OVLP_BOT_ALPHA_SW_BOT_ALPHA_CAL_M1(x)        ((x & 0x1) << 4)
#define s_RGA3_OVLP_BOT_ALPHA_SW_BOT_FACTOR_M1(x)        ((x & 0x7) << 5)
 
/* RGA3_WR_CTRL */
#define m_RGA3_WR_CTRL_SW_WR_MODE                (0x3 << 0)
#define m_RGA3_WR_CTRL_SW_WR_FBCE_SPARSE_EN            (0x1 << 2)
#define m_RGA3_WR_CTRL_SW_WR_PIC_FORMAT                (0xf << 4)
#define m_RGA3_WR_CTRL_SW_WR_FORMAT                (0x3 << 8)
#define m_RGA3_WR_CTRL_SW_WR_YUV10B_COMPACT            (0x1 << 10)
#define m_RGA3_WR_CTRL_SW_WR_ENDIAN_MODE            (0x1 << 11)
#define m_RGA3_WR_CTRL_SW_WR_PIX_SWAP                (0x1 << 12)
#define m_RGA3_WR_CTRL_SW_OUTSTANDING_MAX            (0x3f << 13)
#define m_RGA3_WR_CTRL_SW_WR_YC_SWAP                (0x1 << 20)
 
#define s_RGA3_WR_CTRL_SW_WR_MODE(x)                ((x & 0x3) << 0)
#define s_RGA3_WR_CTRL_SW_WR_FBCE_SPARSE_EN(x)            ((x & 0x1) << 2)
#define s_RGA3_WR_CTRL_SW_WR_PIC_FORMAT(x)            ((x & 0xf) << 4)
#define s_RGA3_WR_CTRL_SW_WR_FORMAT(x)                ((x & 0x3) << 8)
#define s_RGA3_WR_CTRL_SW_WR_YUV10B_COMPACT(x)            ((x & 0x1) << 10)
#define s_RGA3_WR_CTRL_SW_WR_ENDIAN_MODE(x)            ((x & 0x1) << 11)
#define s_RGA3_WR_CTRL_SW_WR_PIX_SWAP(x)            ((x & 0x1) << 12)
#define s_RGA3_WR_CTRL_SW_OUTSTANDING_MAX(x)            ((x & 0x3f) << 13)
#define s_RGA3_WR_CTRL_SW_WR_YC_SWAP(x)                ((x & 0x1) << 20)
 
/* RGA3_WR_FBCE_CTRL */
#define m_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_BLKBD_OPT_DIS        (0x1 << 0)
#define m_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_HOFF_DISS        (0x1 << 1)
#define m_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_PL_FIFO0_WATERMARK    (0x3f << 2)
#define m_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_PL_FIFO1_WATERMARK    (0x3f << 8)
#define m_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_SIZE_ALIGN_DIS        (0x1 << 31)
 
#define s_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_BLKBD_OPT_DIS(x)        ((x & 0x1) << 0)
#define s_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_HOFF_DISS(x)        ((x & 0x1) << 1)
#define s_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_PL_FIFO0_WATERMARK(x)    ((x & 0x3f) << 2)
#define s_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_PL_FIFO1_WATERMARK(x)    ((x & 0x3f) << 8)
#define s_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_SIZE_ALIGN_DIS(x)    ((x & 0x1) << 31)
 
/* RGA3_MMU_STATUS read_only */
#define m_RGA3_MMU_STATUS_PAGING_ENABLED            (0x1 << 0)
#define m_RGA3_MMU_STATUS_PAGE_FAULT_ACTIVE            (0x1 << 1)
#define m_RGA3_MMU_STATUS_STAIL_ACTIVE                (0x1 << 2)
#define m_RGA3_MMU_STATUS_MMU_IDLE                (0x1 << 3)
#define m_RGA3_MMU_STATUS_REPLAY_BUFFER_EMPTY            (0x1 << 4)
#define m_RGA3_MMU_STATUS_PAGE_FAULT_IS_WRITE            (0x1 << 5)
#define m_RGA3_MMU_STATUS_PAGE_FAULT_BUS_ID            (0x1f << 6)
 
/* RGA3_MMU_INT_RAWSTAT read_only */
#define m_RGA3_MMU_INT_RAWSTAT_READ_BUS_ERROR            (0x1 << 0)
#define m_RGA3_MMU_INT_RAWSTAT_PAGE_FAULT            (0x1 << 1)
 
/* RGA3_MMU_INT_CLEAR write_only */
#define m_RGA3_MMU_INT_CLEAR_READ_BUS_ERROR            (0x1 << 0)
#define m_RGA3_MMU_INT_CLEAR_PAGE_FAULT                (0x1 << 1)
 
#define s_RGA3_MMU_INT_CLEAR_READ_BUS_ERROR(x)            ((x & 0x1) << 0)
#define s_RGA3_MMU_INT_CLEAR_PAGE_FAULT(x)            ((x & 0x1) << 1)
 
/* RGA3_MMU_INT_MASK */
#define m_RGA3_MMU_INT_MASK_READ_BUS_ERROR            (0x1 << 0)
#define m_RGA3_MMU_INT_MASK_PAGE_FAULT                (0x1 << 1)
 
#define s_RGA3_MMU_INT_MASK_READ_BUS_ERROR(x)            ((x & 0x1) << 0)
#define s_RGA3_MMU_INT_MASK_PAGE_FAULT(x)            ((x & 0x1) << 1)
 
/* RGA3_MMU_INT_STATUS read_only */
#define m_RGA3_MMU_INT_STATUS_READ_BUS_ERROR            (0x1 << 0)
#define m_RGA3_MMU_INT_STATUS_PAGE_FAULT            (0x1 << 1)
 
/* RGA3_MMU_AUTO_GATING */
#define m_RGA3_MMU_AUTO_GATING_MMU_AUTO_GATING            (0x1 << 1)
#define m_RGA3_MMU_AUTO_GATING_MMU_CFG_MODE            (0x1 << 1)
#define m_RGA3_MMU_AUTO_GATING_MMU_BUG_FIXED_DISABLE        (0x1 << 31)
 
#define s_RGA3_MMU_AUTO_GATING_MMU_AUTO_GATING(x)        ((x & 0x1) << 1)
#define s_RGA3_MMU_AUTO_GATING_MMU_BUG_FIXED_DISABLE(x)        ((x & 0x1) << 31)
 
#define RGA3_ROT_BIT_ROT_90            BIT(0)
#define RGA3_ROT_BIT_X_MIRROR            BIT(1)
#define RGA3_ROT_BIT_Y_MIRROR            BIT(2)
 
union rga3_color_ctrl {
   uint32_t value;
   struct {
       uint32_t color_mode:1;
       uint32_t alpha_mode:1;
       uint32_t blend_mode:2;
       uint32_t alpha_cal_mode:1;
       uint32_t factor_mode:3;
 
       uint32_t reserved:8;
 
       uint32_t global_alpha:8;
   } bits;
};
 
union rga3_alpha_ctrl {
   uint32_t value;
   struct {
       uint32_t reserved:1;
       uint32_t alpha_mode:1;
       uint32_t blend_mode:2;
       uint32_t alpha_cal_mode:1;
       uint32_t factor_mode:3;
   } bits;
};
 
extern const struct rga_backend_ops rga3_ops;
 
#endif