HPM SDK
HPMicro Software Development Kit
hpm_lcdc_regs.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021-2025 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 
9 #ifndef HPM_LCDC_H
10 #define HPM_LCDC_H
11 
12 typedef struct {
13  __RW uint32_t CTRL; /* 0x0: Control Register */
14  __RW uint32_t BGND_CL; /* 0x4: Background Color Register */
15  __RW uint32_t DISP_WN_SIZE; /* 0x8: Display Window Size Register */
16  __RW uint32_t HSYNC_PARA; /* 0xC: HSYNC Config Register */
17  __RW uint32_t VSYNC_PARA; /* 0x10: VSYNC Config Register */
18  __W uint32_t DMA_ST; /* 0x14: DMA Status Register */
19  __RW uint32_t ST; /* 0x18: Status Register */
20  __RW uint32_t INT_EN; /* 0x1C: Interrupt Enable Register */
21  __RW uint32_t TXFIFO; /* 0x20: TX FIFO Register */
22  __RW uint32_t CTRL_BP_V_RANGE; /* 0x24: BP_V range for CAMSYNC mode */
23  __RW uint32_t CTRL_PW_V_RANGE; /* 0x28: PW_V range for CAMSYNC mode */
24  __RW uint32_t CTRL_FP_V_RANGE; /* 0x2C: FP_V range for CAMSYNC mode */
25  __RW uint32_t CAM_SYNC_HCNT_MIN; /* 0x30: min HCNT value for CAMSYNC mode */
26  __RW uint32_t CAM_SYNC_HCNT_BEST; /* 0x34: best HCNT value for CAMSYNC mode */
27  __RW uint32_t CAM_SYNC_HCNT_MAX; /* 0x38: max HCNT value for CAMSYNC mode */
28  __R uint32_t CAM_SYNC_HCNT_ST; /* 0x3C: current HCNT value for CAMSYNC mode */
29  __W uint32_t SHADOW_DONE_ST; /* 0x40: Shadow done status */
30  __RW uint32_t SHADOW_DONE_INT_EN; /* 0x44: Shadow done interrupt enable */
31  __R uint8_t RESERVED0[440]; /* 0x48 - 0x1FF: Reserved */
32  struct {
33  __RW uint32_t LAYCTRL; /* 0x200: Layer Control Register */
34  __RW uint32_t ALPHAS; /* 0x204: Layer Alpha Register */
35  __RW uint32_t LAYSIZE; /* 0x208: Layer Size Register */
36  __RW uint32_t LAYPOS; /* 0x20C: Layer Position Register */
37  __RW uint32_t START0; /* 0x210: Layer Buffer Pointer Register */
38  __R uint8_t RESERVED0[4]; /* 0x214 - 0x217: Reserved */
39  __RW uint32_t LINECFG; /* 0x218: Layer Bus Config Register */
40  __RW uint32_t BG_CL; /* 0x21C: Layer Background Color Register */
41  __RW uint32_t CSC_COEF0; /* 0x220: Layer Color Space Conversion Config Register 0 */
42  __RW uint32_t CSC_COEF1; /* 0x224: Layer Color Space Conversion Config Register 1 */
43  __RW uint32_t CSC_COEF2; /* 0x228: Layer Color Space Conversion Config Register 2 */
44  __R uint8_t RESERVED1[20]; /* 0x22C - 0x23F: Reserved */
45  } LAYER[8];
46 } LCDC_Type;
47 
48 
49 /* Bitfield definition for register: CTRL */
50 /*
51  * SW_RST (RW)
52  *
53  * Software reset, high active. When write 1 ,all internal logical will be reset.
54  * 0b - No action
55  * 1b - All LCDC internal registers are forced into their reset state. Interface registers are not affected.
56  */
57 #define LCDC_CTRL_SW_RST_MASK (0x80000000UL)
58 #define LCDC_CTRL_SW_RST_SHIFT (31U)
59 #define LCDC_CTRL_SW_RST_SET(x) (((uint32_t)(x) << LCDC_CTRL_SW_RST_SHIFT) & LCDC_CTRL_SW_RST_MASK)
60 #define LCDC_CTRL_SW_RST_GET(x) (((uint32_t)(x) & LCDC_CTRL_SW_RST_MASK) >> LCDC_CTRL_SW_RST_SHIFT)
61 
62 /*
63  * DISP_ON (RW)
64  *
65  * Display panel On/Off mode.
66  * 0b - Display Off.
67  * 1b - Display On.
68  * Display can be set off at any time, but it can only be set on after VS_BLANK status is asserted.
69  * So a good procedure to stop and turn on the display is:
70  * 1) clr VS_BLANK status
71  * 2) assert software reset
72  * 3) de-assert software reset
73  * 4) set display off
74  * 5) check VS_BLANK status until it is asserted,
75  * 6)reset the module, change settings
76  * 7) set display on
77  */
78 #define LCDC_CTRL_DISP_ON_MASK (0x40000000UL)
79 #define LCDC_CTRL_DISP_ON_SHIFT (30U)
80 #define LCDC_CTRL_DISP_ON_SET(x) (((uint32_t)(x) << LCDC_CTRL_DISP_ON_SHIFT) & LCDC_CTRL_DISP_ON_MASK)
81 #define LCDC_CTRL_DISP_ON_GET(x) (((uint32_t)(x) & LCDC_CTRL_DISP_ON_MASK) >> LCDC_CTRL_DISP_ON_SHIFT)
82 
83 /*
84  * LINE_PATTERN (RW)
85  *
86  * LCDIF line output order.
87  * 000b - RGB.
88  * 001b - RBG.
89  * 010b - GBR.
90  * 011b - GRB.
91  * 100b - BRG.
92  * 101b - BGR.
93  */
94 #define LCDC_CTRL_LINE_PATTERN_MASK (0x38000000UL)
95 #define LCDC_CTRL_LINE_PATTERN_SHIFT (27U)
96 #define LCDC_CTRL_LINE_PATTERN_SET(x) (((uint32_t)(x) << LCDC_CTRL_LINE_PATTERN_SHIFT) & LCDC_CTRL_LINE_PATTERN_MASK)
97 #define LCDC_CTRL_LINE_PATTERN_GET(x) (((uint32_t)(x) & LCDC_CTRL_LINE_PATTERN_MASK) >> LCDC_CTRL_LINE_PATTERN_SHIFT)
98 
99 /*
100  * DISP_MODE (RW)
101  *
102  * LCDIF operating mode.
103  * 00b - Normal mode. Panel content controlled by layer configuration.
104  * 01b - Test Mode1.(BGND Color Display)
105  * 10b - Test Mode2.(Column Color Bar)
106  * 11b - Test Mode3.(Row Color Bar)
107  */
108 #define LCDC_CTRL_DISP_MODE_MASK (0x6000000UL)
109 #define LCDC_CTRL_DISP_MODE_SHIFT (25U)
110 #define LCDC_CTRL_DISP_MODE_SET(x) (((uint32_t)(x) << LCDC_CTRL_DISP_MODE_SHIFT) & LCDC_CTRL_DISP_MODE_MASK)
111 #define LCDC_CTRL_DISP_MODE_GET(x) (((uint32_t)(x) & LCDC_CTRL_DISP_MODE_MASK) >> LCDC_CTRL_DISP_MODE_SHIFT)
112 
113 /*
114  * BGDCL4CLR (RW)
115  *
116  * background color for clear mode when the alpha channel is 0
117  */
118 #define LCDC_CTRL_BGDCL4CLR_MASK (0x1000000UL)
119 #define LCDC_CTRL_BGDCL4CLR_SHIFT (24U)
120 #define LCDC_CTRL_BGDCL4CLR_SET(x) (((uint32_t)(x) << LCDC_CTRL_BGDCL4CLR_SHIFT) & LCDC_CTRL_BGDCL4CLR_MASK)
121 #define LCDC_CTRL_BGDCL4CLR_GET(x) (((uint32_t)(x) & LCDC_CTRL_BGDCL4CLR_MASK) >> LCDC_CTRL_BGDCL4CLR_SHIFT)
122 
123 /*
124  * ARQOS (RW)
125  *
126  * ARQOS for bus fabric arbitration
127  */
128 #define LCDC_CTRL_ARQOS_MASK (0xF00000UL)
129 #define LCDC_CTRL_ARQOS_SHIFT (20U)
130 #define LCDC_CTRL_ARQOS_SET(x) (((uint32_t)(x) << LCDC_CTRL_ARQOS_SHIFT) & LCDC_CTRL_ARQOS_MASK)
131 #define LCDC_CTRL_ARQOS_GET(x) (((uint32_t)(x) & LCDC_CTRL_ARQOS_MASK) >> LCDC_CTRL_ARQOS_SHIFT)
132 
133 /*
134  * SHADOW_OP (RW)
135  *
136  * Shadow Option
137  * 1: Use physical VSYNC (ST[VS_BLANK]) as shadow time.
138  * 0: Use layer internal logic VSYNC as shadow time. In general, this type of shadow control will have longer memory read time, so less underflow risk.
139  */
140 #define LCDC_CTRL_SHADOW_OP_MASK (0x20000UL)
141 #define LCDC_CTRL_SHADOW_OP_SHIFT (17U)
142 #define LCDC_CTRL_SHADOW_OP_SET(x) (((uint32_t)(x) << LCDC_CTRL_SHADOW_OP_SHIFT) & LCDC_CTRL_SHADOW_OP_MASK)
143 #define LCDC_CTRL_SHADOW_OP_GET(x) (((uint32_t)(x) & LCDC_CTRL_SHADOW_OP_MASK) >> LCDC_CTRL_SHADOW_OP_SHIFT)
144 
145 /*
146  * B_LE_MODE (RW)
147  *
148  * Endianness mode for Blue Color Pads
149  * 1: Little endian. Pad 0 --> Color LSB 0
150  * 0: Big Endian. Pad 0--> Color MSB 7
151  */
152 #define LCDC_CTRL_B_LE_MODE_MASK (0x10000UL)
153 #define LCDC_CTRL_B_LE_MODE_SHIFT (16U)
154 #define LCDC_CTRL_B_LE_MODE_SET(x) (((uint32_t)(x) << LCDC_CTRL_B_LE_MODE_SHIFT) & LCDC_CTRL_B_LE_MODE_MASK)
155 #define LCDC_CTRL_B_LE_MODE_GET(x) (((uint32_t)(x) & LCDC_CTRL_B_LE_MODE_MASK) >> LCDC_CTRL_B_LE_MODE_SHIFT)
156 
157 /*
158  * G_LE_MODE (RW)
159  *
160  * Endianness mode for Green Color Pads
161  * 1: Little endian. Pad 0 --> Color LSB 0
162  * 0: Big Endian. Pad 0--> Color MSB 7
163  */
164 #define LCDC_CTRL_G_LE_MODE_MASK (0x8000U)
165 #define LCDC_CTRL_G_LE_MODE_SHIFT (15U)
166 #define LCDC_CTRL_G_LE_MODE_SET(x) (((uint32_t)(x) << LCDC_CTRL_G_LE_MODE_SHIFT) & LCDC_CTRL_G_LE_MODE_MASK)
167 #define LCDC_CTRL_G_LE_MODE_GET(x) (((uint32_t)(x) & LCDC_CTRL_G_LE_MODE_MASK) >> LCDC_CTRL_G_LE_MODE_SHIFT)
168 
169 /*
170  * R_LE_MODE (RW)
171  *
172  * Endianness mode for Red Color Pads
173  * 1: Little endian. Pad 0 --> Color LSB 0
174  * 0: Big Endian. Pad 0--> Color MSB 7
175  */
176 #define LCDC_CTRL_R_LE_MODE_MASK (0x4000U)
177 #define LCDC_CTRL_R_LE_MODE_SHIFT (14U)
178 #define LCDC_CTRL_R_LE_MODE_SET(x) (((uint32_t)(x) << LCDC_CTRL_R_LE_MODE_SHIFT) & LCDC_CTRL_R_LE_MODE_MASK)
179 #define LCDC_CTRL_R_LE_MODE_GET(x) (((uint32_t)(x) & LCDC_CTRL_R_LE_MODE_MASK) >> LCDC_CTRL_R_LE_MODE_SHIFT)
180 
181 /*
182  * CAM_SYNC_EN (RW)
183  *
184  * Enable the VSYNC synchronization of CAM and LCDC
185  */
186 #define LCDC_CTRL_CAM_SYNC_EN_MASK (0x2000U)
187 #define LCDC_CTRL_CAM_SYNC_EN_SHIFT (13U)
188 #define LCDC_CTRL_CAM_SYNC_EN_SET(x) (((uint32_t)(x) << LCDC_CTRL_CAM_SYNC_EN_SHIFT) & LCDC_CTRL_CAM_SYNC_EN_MASK)
189 #define LCDC_CTRL_CAM_SYNC_EN_GET(x) (((uint32_t)(x) & LCDC_CTRL_CAM_SYNC_EN_MASK) >> LCDC_CTRL_CAM_SYNC_EN_SHIFT)
190 
191 /*
192  * INV_PXDATA (RW)
193  *
194  * Indicates if value at the output (pixel data output) needs to be negated.
195  * 0b - Output is to remain same as the data inside memory
196  * 1b - Output to be negated from the data inside memory
197  */
198 #define LCDC_CTRL_INV_PXDATA_MASK (0x10U)
199 #define LCDC_CTRL_INV_PXDATA_SHIFT (4U)
200 #define LCDC_CTRL_INV_PXDATA_SET(x) (((uint32_t)(x) << LCDC_CTRL_INV_PXDATA_SHIFT) & LCDC_CTRL_INV_PXDATA_MASK)
201 #define LCDC_CTRL_INV_PXDATA_GET(x) (((uint32_t)(x) & LCDC_CTRL_INV_PXDATA_MASK) >> LCDC_CTRL_INV_PXDATA_SHIFT)
202 
203 /*
204  * INV_PXCLK (RW)
205  *
206  * Polarity change of Pixel Clock.
207  * 0b - LCDC outputs data on the rising edge, and Display samples data on the falling edge
208  * 1b - LCDC outputs data on the falling edge, Display samples data on the rising edge
209  */
210 #define LCDC_CTRL_INV_PXCLK_MASK (0x8U)
211 #define LCDC_CTRL_INV_PXCLK_SHIFT (3U)
212 #define LCDC_CTRL_INV_PXCLK_SET(x) (((uint32_t)(x) << LCDC_CTRL_INV_PXCLK_SHIFT) & LCDC_CTRL_INV_PXCLK_MASK)
213 #define LCDC_CTRL_INV_PXCLK_GET(x) (((uint32_t)(x) & LCDC_CTRL_INV_PXCLK_MASK) >> LCDC_CTRL_INV_PXCLK_SHIFT)
214 
215 /*
216  * INV_HREF (RW)
217  *
218  * Polarity of HREF
219  * 0b - HREF signal active HIGH, indicating active pixel data
220  * 1b - HREF signal active LOW
221  */
222 #define LCDC_CTRL_INV_HREF_MASK (0x4U)
223 #define LCDC_CTRL_INV_HREF_SHIFT (2U)
224 #define LCDC_CTRL_INV_HREF_SET(x) (((uint32_t)(x) << LCDC_CTRL_INV_HREF_SHIFT) & LCDC_CTRL_INV_HREF_MASK)
225 #define LCDC_CTRL_INV_HREF_GET(x) (((uint32_t)(x) & LCDC_CTRL_INV_HREF_MASK) >> LCDC_CTRL_INV_HREF_SHIFT)
226 
227 /*
228  * INV_VSYNC (RW)
229  *
230  * Polarity of VSYNC
231  * 0b - VSYNC signal active HIGH
232  * 1b - VSYNC signal active LOW
233  */
234 #define LCDC_CTRL_INV_VSYNC_MASK (0x2U)
235 #define LCDC_CTRL_INV_VSYNC_SHIFT (1U)
236 #define LCDC_CTRL_INV_VSYNC_SET(x) (((uint32_t)(x) << LCDC_CTRL_INV_VSYNC_SHIFT) & LCDC_CTRL_INV_VSYNC_MASK)
237 #define LCDC_CTRL_INV_VSYNC_GET(x) (((uint32_t)(x) & LCDC_CTRL_INV_VSYNC_MASK) >> LCDC_CTRL_INV_VSYNC_SHIFT)
238 
239 /*
240  * INV_HSYNC (RW)
241  *
242  * Polarity of HSYNC
243  * 0b - HSYNC signal active HIGH
244  * 1b - HSYNC signal active LOW
245  */
246 #define LCDC_CTRL_INV_HSYNC_MASK (0x1U)
247 #define LCDC_CTRL_INV_HSYNC_SHIFT (0U)
248 #define LCDC_CTRL_INV_HSYNC_SET(x) (((uint32_t)(x) << LCDC_CTRL_INV_HSYNC_SHIFT) & LCDC_CTRL_INV_HSYNC_MASK)
249 #define LCDC_CTRL_INV_HSYNC_GET(x) (((uint32_t)(x) & LCDC_CTRL_INV_HSYNC_MASK) >> LCDC_CTRL_INV_HSYNC_SHIFT)
250 
251 /* Bitfield definition for register: BGND_CL */
252 /*
253  * R (RW)
254  *
255  * Red component of the default color displayed in the sectors where no layer is active.
256  */
257 #define LCDC_BGND_CL_R_MASK (0xFF0000UL)
258 #define LCDC_BGND_CL_R_SHIFT (16U)
259 #define LCDC_BGND_CL_R_SET(x) (((uint32_t)(x) << LCDC_BGND_CL_R_SHIFT) & LCDC_BGND_CL_R_MASK)
260 #define LCDC_BGND_CL_R_GET(x) (((uint32_t)(x) & LCDC_BGND_CL_R_MASK) >> LCDC_BGND_CL_R_SHIFT)
261 
262 /*
263  * G (RW)
264  *
265  * Green component of the default color displayed in the sectors where no layer is active.
266  */
267 #define LCDC_BGND_CL_G_MASK (0xFF00U)
268 #define LCDC_BGND_CL_G_SHIFT (8U)
269 #define LCDC_BGND_CL_G_SET(x) (((uint32_t)(x) << LCDC_BGND_CL_G_SHIFT) & LCDC_BGND_CL_G_MASK)
270 #define LCDC_BGND_CL_G_GET(x) (((uint32_t)(x) & LCDC_BGND_CL_G_MASK) >> LCDC_BGND_CL_G_SHIFT)
271 
272 /*
273  * B (RW)
274  *
275  * Blue component of the default color displayed in the sectors where no layer is active.
276  */
277 #define LCDC_BGND_CL_B_MASK (0xFFU)
278 #define LCDC_BGND_CL_B_SHIFT (0U)
279 #define LCDC_BGND_CL_B_SET(x) (((uint32_t)(x) << LCDC_BGND_CL_B_SHIFT) & LCDC_BGND_CL_B_MASK)
280 #define LCDC_BGND_CL_B_GET(x) (((uint32_t)(x) & LCDC_BGND_CL_B_MASK) >> LCDC_BGND_CL_B_SHIFT)
281 
282 /* Bitfield definition for register: DISP_WN_SIZE */
283 /*
284  * Y (RW)
285  *
286  * Sets the display size vertical resolution in pixels.
287  */
288 #define LCDC_DISP_WN_SIZE_Y_MASK (0xFFF0000UL)
289 #define LCDC_DISP_WN_SIZE_Y_SHIFT (16U)
290 #define LCDC_DISP_WN_SIZE_Y_SET(x) (((uint32_t)(x) << LCDC_DISP_WN_SIZE_Y_SHIFT) & LCDC_DISP_WN_SIZE_Y_MASK)
291 #define LCDC_DISP_WN_SIZE_Y_GET(x) (((uint32_t)(x) & LCDC_DISP_WN_SIZE_Y_MASK) >> LCDC_DISP_WN_SIZE_Y_SHIFT)
292 
293 /*
294  * X (RW)
295  *
296  * Sets the display size horizontal resolution in pixels.
297  */
298 #define LCDC_DISP_WN_SIZE_X_MASK (0xFFFU)
299 #define LCDC_DISP_WN_SIZE_X_SHIFT (0U)
300 #define LCDC_DISP_WN_SIZE_X_SET(x) (((uint32_t)(x) << LCDC_DISP_WN_SIZE_X_SHIFT) & LCDC_DISP_WN_SIZE_X_MASK)
301 #define LCDC_DISP_WN_SIZE_X_GET(x) (((uint32_t)(x) & LCDC_DISP_WN_SIZE_X_MASK) >> LCDC_DISP_WN_SIZE_X_SHIFT)
302 
303 /* Bitfield definition for register: HSYNC_PARA */
304 /*
305  * FP (RW)
306  *
307  * HSYNC front-porch pulse width (in pixel clock cycles). If zero, indicates no front-porch for HSYNC
308  */
309 #define LCDC_HSYNC_PARA_FP_MASK (0x7FC00000UL)
310 #define LCDC_HSYNC_PARA_FP_SHIFT (22U)
311 #define LCDC_HSYNC_PARA_FP_SET(x) (((uint32_t)(x) << LCDC_HSYNC_PARA_FP_SHIFT) & LCDC_HSYNC_PARA_FP_MASK)
312 #define LCDC_HSYNC_PARA_FP_GET(x) (((uint32_t)(x) & LCDC_HSYNC_PARA_FP_MASK) >> LCDC_HSYNC_PARA_FP_SHIFT)
313 
314 /*
315  * BP (RW)
316  *
317  * HSYNC back-porch pulse width (in pixel clock cycles). If zero, indicates no back-porch for HSYNC
318  */
319 #define LCDC_HSYNC_PARA_BP_MASK (0xFF800UL)
320 #define LCDC_HSYNC_PARA_BP_SHIFT (11U)
321 #define LCDC_HSYNC_PARA_BP_SET(x) (((uint32_t)(x) << LCDC_HSYNC_PARA_BP_SHIFT) & LCDC_HSYNC_PARA_BP_MASK)
322 #define LCDC_HSYNC_PARA_BP_GET(x) (((uint32_t)(x) & LCDC_HSYNC_PARA_BP_MASK) >> LCDC_HSYNC_PARA_BP_SHIFT)
323 
324 /*
325  * PW (RW)
326  *
327  * HSYNC active pulse width (in pixel clock cycles). Pulse width has a minimum value of 1.
328  */
329 #define LCDC_HSYNC_PARA_PW_MASK (0x1FFU)
330 #define LCDC_HSYNC_PARA_PW_SHIFT (0U)
331 #define LCDC_HSYNC_PARA_PW_SET(x) (((uint32_t)(x) << LCDC_HSYNC_PARA_PW_SHIFT) & LCDC_HSYNC_PARA_PW_MASK)
332 #define LCDC_HSYNC_PARA_PW_GET(x) (((uint32_t)(x) & LCDC_HSYNC_PARA_PW_MASK) >> LCDC_HSYNC_PARA_PW_SHIFT)
333 
334 /* Bitfield definition for register: VSYNC_PARA */
335 /*
336  * FP (RW)
337  *
338  * VSYNC front-porch pulse width (in horizontal line cycles). If zero, means no front-porch for VSYNC
339  */
340 #define LCDC_VSYNC_PARA_FP_MASK (0x7FC00000UL)
341 #define LCDC_VSYNC_PARA_FP_SHIFT (22U)
342 #define LCDC_VSYNC_PARA_FP_SET(x) (((uint32_t)(x) << LCDC_VSYNC_PARA_FP_SHIFT) & LCDC_VSYNC_PARA_FP_MASK)
343 #define LCDC_VSYNC_PARA_FP_GET(x) (((uint32_t)(x) & LCDC_VSYNC_PARA_FP_MASK) >> LCDC_VSYNC_PARA_FP_SHIFT)
344 
345 /*
346  * BP (RW)
347  *
348  * VSYNC back-porch pulse width (in horizontal line cycles). If zero, means no back-porch for VSYNC
349  */
350 #define LCDC_VSYNC_PARA_BP_MASK (0xFF800UL)
351 #define LCDC_VSYNC_PARA_BP_SHIFT (11U)
352 #define LCDC_VSYNC_PARA_BP_SET(x) (((uint32_t)(x) << LCDC_VSYNC_PARA_BP_SHIFT) & LCDC_VSYNC_PARA_BP_MASK)
353 #define LCDC_VSYNC_PARA_BP_GET(x) (((uint32_t)(x) & LCDC_VSYNC_PARA_BP_MASK) >> LCDC_VSYNC_PARA_BP_SHIFT)
354 
355 /*
356  * PW (RW)
357  *
358  * VSYNC active pulse width (in horizontal line cycles). Pulse width has a minimum value of 1.
359  */
360 #define LCDC_VSYNC_PARA_PW_MASK (0x1FFU)
361 #define LCDC_VSYNC_PARA_PW_SHIFT (0U)
362 #define LCDC_VSYNC_PARA_PW_SET(x) (((uint32_t)(x) << LCDC_VSYNC_PARA_PW_SHIFT) & LCDC_VSYNC_PARA_PW_MASK)
363 #define LCDC_VSYNC_PARA_PW_GET(x) (((uint32_t)(x) & LCDC_VSYNC_PARA_PW_MASK) >> LCDC_VSYNC_PARA_PW_SHIFT)
364 
365 /* Bitfield definition for register: DMA_ST */
366 /*
367  * DMA_ERR (W1C)
368  *
369  * plane n axi error. W1C.
370  */
371 #define LCDC_DMA_ST_DMA_ERR_MASK (0xFF000000UL)
372 #define LCDC_DMA_ST_DMA_ERR_SHIFT (24U)
373 #define LCDC_DMA_ST_DMA_ERR_SET(x) (((uint32_t)(x) << LCDC_DMA_ST_DMA_ERR_SHIFT) & LCDC_DMA_ST_DMA_ERR_MASK)
374 #define LCDC_DMA_ST_DMA_ERR_GET(x) (((uint32_t)(x) & LCDC_DMA_ST_DMA_ERR_MASK) >> LCDC_DMA_ST_DMA_ERR_SHIFT)
375 
376 /*
377  * DMA1_DONE (W1C)
378  *
379  * Plane n frame 1 dma done. W1C.
380  */
381 #define LCDC_DMA_ST_DMA1_DONE_MASK (0xFF0000UL)
382 #define LCDC_DMA_ST_DMA1_DONE_SHIFT (16U)
383 #define LCDC_DMA_ST_DMA1_DONE_SET(x) (((uint32_t)(x) << LCDC_DMA_ST_DMA1_DONE_SHIFT) & LCDC_DMA_ST_DMA1_DONE_MASK)
384 #define LCDC_DMA_ST_DMA1_DONE_GET(x) (((uint32_t)(x) & LCDC_DMA_ST_DMA1_DONE_MASK) >> LCDC_DMA_ST_DMA1_DONE_SHIFT)
385 
386 /*
387  * DMA0_DONE (W1C)
388  *
389  * Plane n frame 0 dma done. W1C.
390  */
391 #define LCDC_DMA_ST_DMA0_DONE_MASK (0xFF00U)
392 #define LCDC_DMA_ST_DMA0_DONE_SHIFT (8U)
393 #define LCDC_DMA_ST_DMA0_DONE_SET(x) (((uint32_t)(x) << LCDC_DMA_ST_DMA0_DONE_SHIFT) & LCDC_DMA_ST_DMA0_DONE_MASK)
394 #define LCDC_DMA_ST_DMA0_DONE_GET(x) (((uint32_t)(x) & LCDC_DMA_ST_DMA0_DONE_MASK) >> LCDC_DMA_ST_DMA0_DONE_SHIFT)
395 
396 /* Bitfield definition for register: ST */
397 /*
398  * P1_HANDSHAKE_ABORT (W1C)
399  *
400  * Plane 1 handshake abort error. W1C
401  */
402 #define LCDC_ST_P1_HANDSHAKE_ABORT_MASK (0x100U)
403 #define LCDC_ST_P1_HANDSHAKE_ABORT_SHIFT (8U)
404 #define LCDC_ST_P1_HANDSHAKE_ABORT_SET(x) (((uint32_t)(x) << LCDC_ST_P1_HANDSHAKE_ABORT_SHIFT) & LCDC_ST_P1_HANDSHAKE_ABORT_MASK)
405 #define LCDC_ST_P1_HANDSHAKE_ABORT_GET(x) (((uint32_t)(x) & LCDC_ST_P1_HANDSHAKE_ABORT_MASK) >> LCDC_ST_P1_HANDSHAKE_ABORT_SHIFT)
406 
407 /*
408  * P0_HANDSHAKE_ABORT (W1C)
409  *
410  * Plane 0 handshake abort error. W1C
411  */
412 #define LCDC_ST_P0_HANDSHAKE_ABORT_MASK (0x80U)
413 #define LCDC_ST_P0_HANDSHAKE_ABORT_SHIFT (7U)
414 #define LCDC_ST_P0_HANDSHAKE_ABORT_SET(x) (((uint32_t)(x) << LCDC_ST_P0_HANDSHAKE_ABORT_SHIFT) & LCDC_ST_P0_HANDSHAKE_ABORT_MASK)
415 #define LCDC_ST_P0_HANDSHAKE_ABORT_GET(x) (((uint32_t)(x) & LCDC_ST_P0_HANDSHAKE_ABORT_MASK) >> LCDC_ST_P0_HANDSHAKE_ABORT_SHIFT)
416 
417 /*
418  * CAM_HCNT_FAIL (W1C)
419  *
420  * During cam_vsync mode, sync fail due to hcnt out of acceptable ranges. W1C
421  */
422 #define LCDC_ST_CAM_HCNT_FAIL_MASK (0x40U)
423 #define LCDC_ST_CAM_HCNT_FAIL_SHIFT (6U)
424 #define LCDC_ST_CAM_HCNT_FAIL_SET(x) (((uint32_t)(x) << LCDC_ST_CAM_HCNT_FAIL_SHIFT) & LCDC_ST_CAM_HCNT_FAIL_MASK)
425 #define LCDC_ST_CAM_HCNT_FAIL_GET(x) (((uint32_t)(x) & LCDC_ST_CAM_HCNT_FAIL_MASK) >> LCDC_ST_CAM_HCNT_FAIL_SHIFT)
426 
427 /*
428  * CAM_VSYNC_FAIL (W1C)
429  *
430  * During cam_vsync mode, sync fail due to out of vsync parameters. W1C
431  */
432 #define LCDC_ST_CAM_VSYNC_FAIL_MASK (0x20U)
433 #define LCDC_ST_CAM_VSYNC_FAIL_SHIFT (5U)
434 #define LCDC_ST_CAM_VSYNC_FAIL_SET(x) (((uint32_t)(x) << LCDC_ST_CAM_VSYNC_FAIL_SHIFT) & LCDC_ST_CAM_VSYNC_FAIL_MASK)
435 #define LCDC_ST_CAM_VSYNC_FAIL_GET(x) (((uint32_t)(x) & LCDC_ST_CAM_VSYNC_FAIL_MASK) >> LCDC_ST_CAM_VSYNC_FAIL_SHIFT)
436 
437 /*
438  * SHADOW_DONE (RO)
439  *
440  * Shadow done status. This is an OR-ed signals of all shadow_done signals of all planes, and it can only be cleared by writing 1 for all asserted bits in SHADOW_DONE_ST register.
441  */
442 #define LCDC_ST_SHADOW_DONE_MASK (0x10U)
443 #define LCDC_ST_SHADOW_DONE_SHIFT (4U)
444 #define LCDC_ST_SHADOW_DONE_GET(x) (((uint32_t)(x) & LCDC_ST_SHADOW_DONE_MASK) >> LCDC_ST_SHADOW_DONE_SHIFT)
445 
446 /*
447  * URGENT_UNDERRUN (W1C)
448  *
449  * Asserted when the output buffer urgent underrun condition encountered
450  */
451 #define LCDC_ST_URGENT_UNDERRUN_MASK (0x8U)
452 #define LCDC_ST_URGENT_UNDERRUN_SHIFT (3U)
453 #define LCDC_ST_URGENT_UNDERRUN_SET(x) (((uint32_t)(x) << LCDC_ST_URGENT_UNDERRUN_SHIFT) & LCDC_ST_URGENT_UNDERRUN_MASK)
454 #define LCDC_ST_URGENT_UNDERRUN_GET(x) (((uint32_t)(x) & LCDC_ST_URGENT_UNDERRUN_MASK) >> LCDC_ST_URGENT_UNDERRUN_SHIFT)
455 
456 /*
457  * VS_BLANK (W1C)
458  *
459  * Asserted when in vertical blanking period. At the start of VSYNC
460  */
461 #define LCDC_ST_VS_BLANK_MASK (0x4U)
462 #define LCDC_ST_VS_BLANK_SHIFT (2U)
463 #define LCDC_ST_VS_BLANK_SET(x) (((uint32_t)(x) << LCDC_ST_VS_BLANK_SHIFT) & LCDC_ST_VS_BLANK_MASK)
464 #define LCDC_ST_VS_BLANK_GET(x) (((uint32_t)(x) & LCDC_ST_VS_BLANK_MASK) >> LCDC_ST_VS_BLANK_SHIFT)
465 
466 /*
467  * UNDERRUN (W1C)
468  *
469  * Asserted when the output buffer underrun condition encountered
470  */
471 #define LCDC_ST_UNDERRUN_MASK (0x2U)
472 #define LCDC_ST_UNDERRUN_SHIFT (1U)
473 #define LCDC_ST_UNDERRUN_SET(x) (((uint32_t)(x) << LCDC_ST_UNDERRUN_SHIFT) & LCDC_ST_UNDERRUN_MASK)
474 #define LCDC_ST_UNDERRUN_GET(x) (((uint32_t)(x) & LCDC_ST_UNDERRUN_MASK) >> LCDC_ST_UNDERRUN_SHIFT)
475 
476 /*
477  * VSYNC (W1C)
478  *
479  * Asserted when in vertical blanking period. At the end of VSYNC
480  */
481 #define LCDC_ST_VSYNC_MASK (0x1U)
482 #define LCDC_ST_VSYNC_SHIFT (0U)
483 #define LCDC_ST_VSYNC_SET(x) (((uint32_t)(x) << LCDC_ST_VSYNC_SHIFT) & LCDC_ST_VSYNC_MASK)
484 #define LCDC_ST_VSYNC_GET(x) (((uint32_t)(x) & LCDC_ST_VSYNC_MASK) >> LCDC_ST_VSYNC_SHIFT)
485 
486 /* Bitfield definition for register: INT_EN */
487 /*
488  * DMA_ERR (RW)
489  *
490  * Interrupt enable for DMA error
491  */
492 #define LCDC_INT_EN_DMA_ERR_MASK (0xFF000000UL)
493 #define LCDC_INT_EN_DMA_ERR_SHIFT (24U)
494 #define LCDC_INT_EN_DMA_ERR_SET(x) (((uint32_t)(x) << LCDC_INT_EN_DMA_ERR_SHIFT) & LCDC_INT_EN_DMA_ERR_MASK)
495 #define LCDC_INT_EN_DMA_ERR_GET(x) (((uint32_t)(x) & LCDC_INT_EN_DMA_ERR_MASK) >> LCDC_INT_EN_DMA_ERR_SHIFT)
496 
497 /*
498  * DMA_DONE (RW)
499  *
500  * Interrupt enable for DMA done
501  */
502 #define LCDC_INT_EN_DMA_DONE_MASK (0xFF0000UL)
503 #define LCDC_INT_EN_DMA_DONE_SHIFT (16U)
504 #define LCDC_INT_EN_DMA_DONE_SET(x) (((uint32_t)(x) << LCDC_INT_EN_DMA_DONE_SHIFT) & LCDC_INT_EN_DMA_DONE_MASK)
505 #define LCDC_INT_EN_DMA_DONE_GET(x) (((uint32_t)(x) & LCDC_INT_EN_DMA_DONE_MASK) >> LCDC_INT_EN_DMA_DONE_SHIFT)
506 
507 /*
508  * HANDSHAKE_ABORT (RW)
509  *
510  * Handshake abort error int enable
511  */
512 #define LCDC_INT_EN_HANDSHAKE_ABORT_MASK (0x80U)
513 #define LCDC_INT_EN_HANDSHAKE_ABORT_SHIFT (7U)
514 #define LCDC_INT_EN_HANDSHAKE_ABORT_SET(x) (((uint32_t)(x) << LCDC_INT_EN_HANDSHAKE_ABORT_SHIFT) & LCDC_INT_EN_HANDSHAKE_ABORT_MASK)
515 #define LCDC_INT_EN_HANDSHAKE_ABORT_GET(x) (((uint32_t)(x) & LCDC_INT_EN_HANDSHAKE_ABORT_MASK) >> LCDC_INT_EN_HANDSHAKE_ABORT_SHIFT)
516 
517 /*
518  * CAM_HCNT_FAIL (RW)
519  *
520  * hcnt out of acceptable ranges interrupt enable
521  */
522 #define LCDC_INT_EN_CAM_HCNT_FAIL_MASK (0x40U)
523 #define LCDC_INT_EN_CAM_HCNT_FAIL_SHIFT (6U)
524 #define LCDC_INT_EN_CAM_HCNT_FAIL_SET(x) (((uint32_t)(x) << LCDC_INT_EN_CAM_HCNT_FAIL_SHIFT) & LCDC_INT_EN_CAM_HCNT_FAIL_MASK)
525 #define LCDC_INT_EN_CAM_HCNT_FAIL_GET(x) (((uint32_t)(x) & LCDC_INT_EN_CAM_HCNT_FAIL_MASK) >> LCDC_INT_EN_CAM_HCNT_FAIL_SHIFT)
526 
527 /*
528  * CAM_VSYNC_FAIL (RW)
529  *
530  * cam_vsync fail interrupt enable
531  */
532 #define LCDC_INT_EN_CAM_VSYNC_FAIL_MASK (0x20U)
533 #define LCDC_INT_EN_CAM_VSYNC_FAIL_SHIFT (5U)
534 #define LCDC_INT_EN_CAM_VSYNC_FAIL_SET(x) (((uint32_t)(x) << LCDC_INT_EN_CAM_VSYNC_FAIL_SHIFT) & LCDC_INT_EN_CAM_VSYNC_FAIL_MASK)
535 #define LCDC_INT_EN_CAM_VSYNC_FAIL_GET(x) (((uint32_t)(x) & LCDC_INT_EN_CAM_VSYNC_FAIL_MASK) >> LCDC_INT_EN_CAM_VSYNC_FAIL_SHIFT)
536 
537 /*
538  * SHADOW_DONE (RW)
539  *
540  * Shadow done interrupt enable
541  */
542 #define LCDC_INT_EN_SHADOW_DONE_MASK (0x10U)
543 #define LCDC_INT_EN_SHADOW_DONE_SHIFT (4U)
544 #define LCDC_INT_EN_SHADOW_DONE_SET(x) (((uint32_t)(x) << LCDC_INT_EN_SHADOW_DONE_SHIFT) & LCDC_INT_EN_SHADOW_DONE_MASK)
545 #define LCDC_INT_EN_SHADOW_DONE_GET(x) (((uint32_t)(x) & LCDC_INT_EN_SHADOW_DONE_MASK) >> LCDC_INT_EN_SHADOW_DONE_SHIFT)
546 
547 /*
548  * URGENT_UNDERRUN (RW)
549  *
550  * Asserted when the output buffer urgent underrun condition encountered
551  */
552 #define LCDC_INT_EN_URGENT_UNDERRUN_MASK (0x8U)
553 #define LCDC_INT_EN_URGENT_UNDERRUN_SHIFT (3U)
554 #define LCDC_INT_EN_URGENT_UNDERRUN_SET(x) (((uint32_t)(x) << LCDC_INT_EN_URGENT_UNDERRUN_SHIFT) & LCDC_INT_EN_URGENT_UNDERRUN_MASK)
555 #define LCDC_INT_EN_URGENT_UNDERRUN_GET(x) (((uint32_t)(x) & LCDC_INT_EN_URGENT_UNDERRUN_MASK) >> LCDC_INT_EN_URGENT_UNDERRUN_SHIFT)
556 
557 /*
558  * VS_BLANK (RW)
559  *
560  * Interrupt enable for start of sof
561  */
562 #define LCDC_INT_EN_VS_BLANK_MASK (0x4U)
563 #define LCDC_INT_EN_VS_BLANK_SHIFT (2U)
564 #define LCDC_INT_EN_VS_BLANK_SET(x) (((uint32_t)(x) << LCDC_INT_EN_VS_BLANK_SHIFT) & LCDC_INT_EN_VS_BLANK_MASK)
565 #define LCDC_INT_EN_VS_BLANK_GET(x) (((uint32_t)(x) & LCDC_INT_EN_VS_BLANK_MASK) >> LCDC_INT_EN_VS_BLANK_SHIFT)
566 
567 /*
568  * UNDERRUN (RW)
569  *
570  * Interrupt enable for underrun
571  */
572 #define LCDC_INT_EN_UNDERRUN_MASK (0x2U)
573 #define LCDC_INT_EN_UNDERRUN_SHIFT (1U)
574 #define LCDC_INT_EN_UNDERRUN_SET(x) (((uint32_t)(x) << LCDC_INT_EN_UNDERRUN_SHIFT) & LCDC_INT_EN_UNDERRUN_MASK)
575 #define LCDC_INT_EN_UNDERRUN_GET(x) (((uint32_t)(x) & LCDC_INT_EN_UNDERRUN_MASK) >> LCDC_INT_EN_UNDERRUN_SHIFT)
576 
577 /*
578  * VSYNC (RW)
579  *
580  * Interrupt enable for end of sof
581  */
582 #define LCDC_INT_EN_VSYNC_MASK (0x1U)
583 #define LCDC_INT_EN_VSYNC_SHIFT (0U)
584 #define LCDC_INT_EN_VSYNC_SET(x) (((uint32_t)(x) << LCDC_INT_EN_VSYNC_SHIFT) & LCDC_INT_EN_VSYNC_MASK)
585 #define LCDC_INT_EN_VSYNC_GET(x) (((uint32_t)(x) & LCDC_INT_EN_VSYNC_MASK) >> LCDC_INT_EN_VSYNC_SHIFT)
586 
587 /* Bitfield definition for register: TXFIFO */
588 /*
589  * THRSH (RW)
590  *
591  * Threshold to start the lcd raster (0--0x7F)
592  */
593 #define LCDC_TXFIFO_THRSH_MASK (0xFFU)
594 #define LCDC_TXFIFO_THRSH_SHIFT (0U)
595 #define LCDC_TXFIFO_THRSH_SET(x) (((uint32_t)(x) << LCDC_TXFIFO_THRSH_SHIFT) & LCDC_TXFIFO_THRSH_MASK)
596 #define LCDC_TXFIFO_THRSH_GET(x) (((uint32_t)(x) & LCDC_TXFIFO_THRSH_MASK) >> LCDC_TXFIFO_THRSH_SHIFT)
597 
598 /* Bitfield definition for register: CTRL_BP_V_RANGE */
599 /*
600  * MAX (RW)
601  *
602  * Maximal BP_V values
603  */
604 #define LCDC_CTRL_BP_V_RANGE_MAX_MASK (0x7FC0000UL)
605 #define LCDC_CTRL_BP_V_RANGE_MAX_SHIFT (18U)
606 #define LCDC_CTRL_BP_V_RANGE_MAX_SET(x) (((uint32_t)(x) << LCDC_CTRL_BP_V_RANGE_MAX_SHIFT) & LCDC_CTRL_BP_V_RANGE_MAX_MASK)
607 #define LCDC_CTRL_BP_V_RANGE_MAX_GET(x) (((uint32_t)(x) & LCDC_CTRL_BP_V_RANGE_MAX_MASK) >> LCDC_CTRL_BP_V_RANGE_MAX_SHIFT)
608 
609 /*
610  * BEST (RW)
611  *
612  * Best BP_V values
613  */
614 #define LCDC_CTRL_BP_V_RANGE_BEST_MASK (0x3FE00UL)
615 #define LCDC_CTRL_BP_V_RANGE_BEST_SHIFT (9U)
616 #define LCDC_CTRL_BP_V_RANGE_BEST_SET(x) (((uint32_t)(x) << LCDC_CTRL_BP_V_RANGE_BEST_SHIFT) & LCDC_CTRL_BP_V_RANGE_BEST_MASK)
617 #define LCDC_CTRL_BP_V_RANGE_BEST_GET(x) (((uint32_t)(x) & LCDC_CTRL_BP_V_RANGE_BEST_MASK) >> LCDC_CTRL_BP_V_RANGE_BEST_SHIFT)
618 
619 /*
620  * MIN (RW)
621  *
622  * Minimal BP_V values
623  */
624 #define LCDC_CTRL_BP_V_RANGE_MIN_MASK (0x1FFU)
625 #define LCDC_CTRL_BP_V_RANGE_MIN_SHIFT (0U)
626 #define LCDC_CTRL_BP_V_RANGE_MIN_SET(x) (((uint32_t)(x) << LCDC_CTRL_BP_V_RANGE_MIN_SHIFT) & LCDC_CTRL_BP_V_RANGE_MIN_MASK)
627 #define LCDC_CTRL_BP_V_RANGE_MIN_GET(x) (((uint32_t)(x) & LCDC_CTRL_BP_V_RANGE_MIN_MASK) >> LCDC_CTRL_BP_V_RANGE_MIN_SHIFT)
628 
629 /* Bitfield definition for register: CTRL_PW_V_RANGE */
630 /*
631  * MAX (RW)
632  *
633  * Maximal PW_V values
634  */
635 #define LCDC_CTRL_PW_V_RANGE_MAX_MASK (0x7FC0000UL)
636 #define LCDC_CTRL_PW_V_RANGE_MAX_SHIFT (18U)
637 #define LCDC_CTRL_PW_V_RANGE_MAX_SET(x) (((uint32_t)(x) << LCDC_CTRL_PW_V_RANGE_MAX_SHIFT) & LCDC_CTRL_PW_V_RANGE_MAX_MASK)
638 #define LCDC_CTRL_PW_V_RANGE_MAX_GET(x) (((uint32_t)(x) & LCDC_CTRL_PW_V_RANGE_MAX_MASK) >> LCDC_CTRL_PW_V_RANGE_MAX_SHIFT)
639 
640 /*
641  * BEST (RW)
642  *
643  * Best PW_V values
644  */
645 #define LCDC_CTRL_PW_V_RANGE_BEST_MASK (0x3FE00UL)
646 #define LCDC_CTRL_PW_V_RANGE_BEST_SHIFT (9U)
647 #define LCDC_CTRL_PW_V_RANGE_BEST_SET(x) (((uint32_t)(x) << LCDC_CTRL_PW_V_RANGE_BEST_SHIFT) & LCDC_CTRL_PW_V_RANGE_BEST_MASK)
648 #define LCDC_CTRL_PW_V_RANGE_BEST_GET(x) (((uint32_t)(x) & LCDC_CTRL_PW_V_RANGE_BEST_MASK) >> LCDC_CTRL_PW_V_RANGE_BEST_SHIFT)
649 
650 /*
651  * MIN (RW)
652  *
653  * Minimal PW_V values
654  */
655 #define LCDC_CTRL_PW_V_RANGE_MIN_MASK (0x1FFU)
656 #define LCDC_CTRL_PW_V_RANGE_MIN_SHIFT (0U)
657 #define LCDC_CTRL_PW_V_RANGE_MIN_SET(x) (((uint32_t)(x) << LCDC_CTRL_PW_V_RANGE_MIN_SHIFT) & LCDC_CTRL_PW_V_RANGE_MIN_MASK)
658 #define LCDC_CTRL_PW_V_RANGE_MIN_GET(x) (((uint32_t)(x) & LCDC_CTRL_PW_V_RANGE_MIN_MASK) >> LCDC_CTRL_PW_V_RANGE_MIN_SHIFT)
659 
660 /* Bitfield definition for register: CTRL_FP_V_RANGE */
661 /*
662  * MAX (RW)
663  *
664  * Maximal FP_V values
665  */
666 #define LCDC_CTRL_FP_V_RANGE_MAX_MASK (0x7FC0000UL)
667 #define LCDC_CTRL_FP_V_RANGE_MAX_SHIFT (18U)
668 #define LCDC_CTRL_FP_V_RANGE_MAX_SET(x) (((uint32_t)(x) << LCDC_CTRL_FP_V_RANGE_MAX_SHIFT) & LCDC_CTRL_FP_V_RANGE_MAX_MASK)
669 #define LCDC_CTRL_FP_V_RANGE_MAX_GET(x) (((uint32_t)(x) & LCDC_CTRL_FP_V_RANGE_MAX_MASK) >> LCDC_CTRL_FP_V_RANGE_MAX_SHIFT)
670 
671 /*
672  * BEST (RW)
673  *
674  * Best FP_V values
675  */
676 #define LCDC_CTRL_FP_V_RANGE_BEST_MASK (0x3FE00UL)
677 #define LCDC_CTRL_FP_V_RANGE_BEST_SHIFT (9U)
678 #define LCDC_CTRL_FP_V_RANGE_BEST_SET(x) (((uint32_t)(x) << LCDC_CTRL_FP_V_RANGE_BEST_SHIFT) & LCDC_CTRL_FP_V_RANGE_BEST_MASK)
679 #define LCDC_CTRL_FP_V_RANGE_BEST_GET(x) (((uint32_t)(x) & LCDC_CTRL_FP_V_RANGE_BEST_MASK) >> LCDC_CTRL_FP_V_RANGE_BEST_SHIFT)
680 
681 /*
682  * MIN (RW)
683  *
684  * Minimal FP_V values
685  */
686 #define LCDC_CTRL_FP_V_RANGE_MIN_MASK (0x1FFU)
687 #define LCDC_CTRL_FP_V_RANGE_MIN_SHIFT (0U)
688 #define LCDC_CTRL_FP_V_RANGE_MIN_SET(x) (((uint32_t)(x) << LCDC_CTRL_FP_V_RANGE_MIN_SHIFT) & LCDC_CTRL_FP_V_RANGE_MIN_MASK)
689 #define LCDC_CTRL_FP_V_RANGE_MIN_GET(x) (((uint32_t)(x) & LCDC_CTRL_FP_V_RANGE_MIN_MASK) >> LCDC_CTRL_FP_V_RANGE_MIN_SHIFT)
690 
691 /* Bitfield definition for register: CAM_SYNC_HCNT_MIN */
692 /*
693  * VAL (RW)
694  *
695  * minimal acceptable HCNT Value
696  */
697 #define LCDC_CAM_SYNC_HCNT_MIN_VAL_MASK (0xFFFFU)
698 #define LCDC_CAM_SYNC_HCNT_MIN_VAL_SHIFT (0U)
699 #define LCDC_CAM_SYNC_HCNT_MIN_VAL_SET(x) (((uint32_t)(x) << LCDC_CAM_SYNC_HCNT_MIN_VAL_SHIFT) & LCDC_CAM_SYNC_HCNT_MIN_VAL_MASK)
700 #define LCDC_CAM_SYNC_HCNT_MIN_VAL_GET(x) (((uint32_t)(x) & LCDC_CAM_SYNC_HCNT_MIN_VAL_MASK) >> LCDC_CAM_SYNC_HCNT_MIN_VAL_SHIFT)
701 
702 /* Bitfield definition for register: CAM_SYNC_HCNT_BEST */
703 /*
704  * HYST (RW)
705  *
706  * hysteresys of acceptable HCNT Value
707  */
708 #define LCDC_CAM_SYNC_HCNT_BEST_HYST_MASK (0xFF0000UL)
709 #define LCDC_CAM_SYNC_HCNT_BEST_HYST_SHIFT (16U)
710 #define LCDC_CAM_SYNC_HCNT_BEST_HYST_SET(x) (((uint32_t)(x) << LCDC_CAM_SYNC_HCNT_BEST_HYST_SHIFT) & LCDC_CAM_SYNC_HCNT_BEST_HYST_MASK)
711 #define LCDC_CAM_SYNC_HCNT_BEST_HYST_GET(x) (((uint32_t)(x) & LCDC_CAM_SYNC_HCNT_BEST_HYST_MASK) >> LCDC_CAM_SYNC_HCNT_BEST_HYST_SHIFT)
712 
713 /*
714  * VAL (RW)
715  *
716  * best acceptable HCNT Value
717  */
718 #define LCDC_CAM_SYNC_HCNT_BEST_VAL_MASK (0xFFFFU)
719 #define LCDC_CAM_SYNC_HCNT_BEST_VAL_SHIFT (0U)
720 #define LCDC_CAM_SYNC_HCNT_BEST_VAL_SET(x) (((uint32_t)(x) << LCDC_CAM_SYNC_HCNT_BEST_VAL_SHIFT) & LCDC_CAM_SYNC_HCNT_BEST_VAL_MASK)
721 #define LCDC_CAM_SYNC_HCNT_BEST_VAL_GET(x) (((uint32_t)(x) & LCDC_CAM_SYNC_HCNT_BEST_VAL_MASK) >> LCDC_CAM_SYNC_HCNT_BEST_VAL_SHIFT)
722 
723 /* Bitfield definition for register: CAM_SYNC_HCNT_MAX */
724 /*
725  * VAL (RW)
726  *
727  * maximal acceptable HCNT Value
728  */
729 #define LCDC_CAM_SYNC_HCNT_MAX_VAL_MASK (0xFFFFU)
730 #define LCDC_CAM_SYNC_HCNT_MAX_VAL_SHIFT (0U)
731 #define LCDC_CAM_SYNC_HCNT_MAX_VAL_SET(x) (((uint32_t)(x) << LCDC_CAM_SYNC_HCNT_MAX_VAL_SHIFT) & LCDC_CAM_SYNC_HCNT_MAX_VAL_MASK)
732 #define LCDC_CAM_SYNC_HCNT_MAX_VAL_GET(x) (((uint32_t)(x) & LCDC_CAM_SYNC_HCNT_MAX_VAL_MASK) >> LCDC_CAM_SYNC_HCNT_MAX_VAL_SHIFT)
733 
734 /* Bitfield definition for register: CAM_SYNC_HCNT_ST */
735 /*
736  * VAL (RO)
737  *
738  * current HCNT value
739  */
740 #define LCDC_CAM_SYNC_HCNT_ST_VAL_MASK (0xFFFFU)
741 #define LCDC_CAM_SYNC_HCNT_ST_VAL_SHIFT (0U)
742 #define LCDC_CAM_SYNC_HCNT_ST_VAL_GET(x) (((uint32_t)(x) & LCDC_CAM_SYNC_HCNT_ST_VAL_MASK) >> LCDC_CAM_SYNC_HCNT_ST_VAL_SHIFT)
743 
744 /* Bitfield definition for register: SHADOW_DONE_ST */
745 /*
746  * VAL (W1C)
747  *
748  * current shadow_done value for plane 7,...,0 respectively
749  */
750 #define LCDC_SHADOW_DONE_ST_VAL_MASK (0xFFU)
751 #define LCDC_SHADOW_DONE_ST_VAL_SHIFT (0U)
752 #define LCDC_SHADOW_DONE_ST_VAL_SET(x) (((uint32_t)(x) << LCDC_SHADOW_DONE_ST_VAL_SHIFT) & LCDC_SHADOW_DONE_ST_VAL_MASK)
753 #define LCDC_SHADOW_DONE_ST_VAL_GET(x) (((uint32_t)(x) & LCDC_SHADOW_DONE_ST_VAL_MASK) >> LCDC_SHADOW_DONE_ST_VAL_SHIFT)
754 
755 /* Bitfield definition for register: SHADOW_DONE_INT_EN */
756 /*
757  * VAL (RW)
758  *
759  * shadow_done interrupt enable for plane 7,...,0 respectively
760  */
761 #define LCDC_SHADOW_DONE_INT_EN_VAL_MASK (0xFFU)
762 #define LCDC_SHADOW_DONE_INT_EN_VAL_SHIFT (0U)
763 #define LCDC_SHADOW_DONE_INT_EN_VAL_SET(x) (((uint32_t)(x) << LCDC_SHADOW_DONE_INT_EN_VAL_SHIFT) & LCDC_SHADOW_DONE_INT_EN_VAL_MASK)
764 #define LCDC_SHADOW_DONE_INT_EN_VAL_GET(x) (((uint32_t)(x) & LCDC_SHADOW_DONE_INT_EN_VAL_MASK) >> LCDC_SHADOW_DONE_INT_EN_VAL_SHIFT)
765 
766 /* Bitfield definition for register of struct array LAYER: LAYCTRL */
767 /*
768  * RESAMPLE_VRATIO (RW)
769  *
770  * Resample the input data stream in the verticle direction
771  * 0: don't resample
772  * positive n: upsample-by-n+1 (2 to 8)
773  * negtive n: downsample-by-n+1 (2 to 8)
774  */
775 #define LCDC_LAYER_LAYCTRL_RESAMPLE_VRATIO_MASK (0xF0000000UL)
776 #define LCDC_LAYER_LAYCTRL_RESAMPLE_VRATIO_SHIFT (28U)
777 #define LCDC_LAYER_LAYCTRL_RESAMPLE_VRATIO_SET(x) (((uint32_t)(x) << LCDC_LAYER_LAYCTRL_RESAMPLE_VRATIO_SHIFT) & LCDC_LAYER_LAYCTRL_RESAMPLE_VRATIO_MASK)
778 #define LCDC_LAYER_LAYCTRL_RESAMPLE_VRATIO_GET(x) (((uint32_t)(x) & LCDC_LAYER_LAYCTRL_RESAMPLE_VRATIO_MASK) >> LCDC_LAYER_LAYCTRL_RESAMPLE_VRATIO_SHIFT)
779 
780 /*
781  * RESAMPLE_HRATIO (RW)
782  *
783  * Resample the input data stream in the horizontal direction
784  * 0: don't resample
785  * positive n: upsample-by-n+1 (2 to 8)
786  * negtive n: downsample-by-n+1 (2 to 8)
787  */
788 #define LCDC_LAYER_LAYCTRL_RESAMPLE_HRATIO_MASK (0xF000000UL)
789 #define LCDC_LAYER_LAYCTRL_RESAMPLE_HRATIO_SHIFT (24U)
790 #define LCDC_LAYER_LAYCTRL_RESAMPLE_HRATIO_SET(x) (((uint32_t)(x) << LCDC_LAYER_LAYCTRL_RESAMPLE_HRATIO_SHIFT) & LCDC_LAYER_LAYCTRL_RESAMPLE_HRATIO_MASK)
791 #define LCDC_LAYER_LAYCTRL_RESAMPLE_HRATIO_GET(x) (((uint32_t)(x) & LCDC_LAYER_LAYCTRL_RESAMPLE_HRATIO_MASK) >> LCDC_LAYER_LAYCTRL_RESAMPLE_HRATIO_SHIFT)
792 
793 /*
794  * NORMLZ_OUT (RW)
795  *
796  * Normalize the pixel out for the not-overlapped pixels
797  */
798 #define LCDC_LAYER_LAYCTRL_NORMLZ_OUT_MASK (0x800000UL)
799 #define LCDC_LAYER_LAYCTRL_NORMLZ_OUT_SHIFT (23U)
800 #define LCDC_LAYER_LAYCTRL_NORMLZ_OUT_SET(x) (((uint32_t)(x) << LCDC_LAYER_LAYCTRL_NORMLZ_OUT_SHIFT) & LCDC_LAYER_LAYCTRL_NORMLZ_OUT_MASK)
801 #define LCDC_LAYER_LAYCTRL_NORMLZ_OUT_GET(x) (((uint32_t)(x) & LCDC_LAYER_LAYCTRL_NORMLZ_OUT_MASK) >> LCDC_LAYER_LAYCTRL_NORMLZ_OUT_SHIFT)
802 
803 /*
804  * HANDSHAKE_ABORT_INT_EN (RW)
805  *
806  * 1: Enable the handshake abort error interrupt.
807  * 0: don't Enable the handshake abort error interrupt.
808  * Abort is generated when the LCDC is going to switch bank to a new bank, and the new bank data is not ready yet.
809  * Abort is only useful when communicating with the offline calculator (such as PDMA as the active pixel generator mode).
810  * PDMA as the active generator mode, means it is the first pixel generator with data sources from offline memory, and not from on-the-fly streaming data (such as camera captured data).
811  * While with on-the-fly streaming data, error condition is indicated by display buffer underflow.
812  */
813 #define LCDC_LAYER_LAYCTRL_HANDSHAKE_ABORT_INT_EN_MASK (0x400000UL)
814 #define LCDC_LAYER_LAYCTRL_HANDSHAKE_ABORT_INT_EN_SHIFT (22U)
815 #define LCDC_LAYER_LAYCTRL_HANDSHAKE_ABORT_INT_EN_SET(x) (((uint32_t)(x) << LCDC_LAYER_LAYCTRL_HANDSHAKE_ABORT_INT_EN_SHIFT) & LCDC_LAYER_LAYCTRL_HANDSHAKE_ABORT_INT_EN_MASK)
816 #define LCDC_LAYER_LAYCTRL_HANDSHAKE_ABORT_INT_EN_GET(x) (((uint32_t)(x) & LCDC_LAYER_LAYCTRL_HANDSHAKE_ABORT_INT_EN_MASK) >> LCDC_LAYER_LAYCTRL_HANDSHAKE_ABORT_INT_EN_SHIFT)
817 
818 /*
819  * HANDSHAKE_BUFSIZE (RW)
820  *
821  * 1: handshake buffer is 16 rows hight per ping or pang buf.
822  * 0: handshake buffer is 8 rows hight per ping or pang buf.
823  */
824 #define LCDC_LAYER_LAYCTRL_HANDSHAKE_BUFSIZE_MASK (0x200000UL)
825 #define LCDC_LAYER_LAYCTRL_HANDSHAKE_BUFSIZE_SHIFT (21U)
826 #define LCDC_LAYER_LAYCTRL_HANDSHAKE_BUFSIZE_SET(x) (((uint32_t)(x) << LCDC_LAYER_LAYCTRL_HANDSHAKE_BUFSIZE_SHIFT) & LCDC_LAYER_LAYCTRL_HANDSHAKE_BUFSIZE_MASK)
827 #define LCDC_LAYER_LAYCTRL_HANDSHAKE_BUFSIZE_GET(x) (((uint32_t)(x) & LCDC_LAYER_LAYCTRL_HANDSHAKE_BUFSIZE_MASK) >> LCDC_LAYER_LAYCTRL_HANDSHAKE_BUFSIZE_SHIFT)
828 
829 /*
830  * ENABLE_HANDSHAKE (RW)
831  *
832  * Enable handshake with input pixel controller. When this is set, the LCDC will not process an entire framebuffer,
833  * but will instead process rows of NxN blocks in a double-buffer handshake with the input pixel controlller. This enables
834  * the use of the onboard SRAM for a partial frame buffer. Only valid for Plane 0 & 1.
835  * 1: handshake enabled
836  * 0: handshake disabled
837  */
838 #define LCDC_LAYER_LAYCTRL_ENABLE_HANDSHAKE_MASK (0x100000UL)
839 #define LCDC_LAYER_LAYCTRL_ENABLE_HANDSHAKE_SHIFT (20U)
840 #define LCDC_LAYER_LAYCTRL_ENABLE_HANDSHAKE_SET(x) (((uint32_t)(x) << LCDC_LAYER_LAYCTRL_ENABLE_HANDSHAKE_SHIFT) & LCDC_LAYER_LAYCTRL_ENABLE_HANDSHAKE_MASK)
841 #define LCDC_LAYER_LAYCTRL_ENABLE_HANDSHAKE_GET(x) (((uint32_t)(x) & LCDC_LAYER_LAYCTRL_ENABLE_HANDSHAKE_MASK) >> LCDC_LAYER_LAYCTRL_ENABLE_HANDSHAKE_SHIFT)
842 
843 /*
844  * PACK_DIR (RW)
845  *
846  * The byte sequence of the 4 bytes in a 32-bit word.
847  * 1: {A0, A1, A2, A3} byte re-ordered.
848  * 0: {A3, A2, A1, A0} the normal case with no byte re-order
849  */
850 #define LCDC_LAYER_LAYCTRL_PACK_DIR_MASK (0x80000UL)
851 #define LCDC_LAYER_LAYCTRL_PACK_DIR_SHIFT (19U)
852 #define LCDC_LAYER_LAYCTRL_PACK_DIR_SET(x) (((uint32_t)(x) << LCDC_LAYER_LAYCTRL_PACK_DIR_SHIFT) & LCDC_LAYER_LAYCTRL_PACK_DIR_MASK)
853 #define LCDC_LAYER_LAYCTRL_PACK_DIR_GET(x) (((uint32_t)(x) & LCDC_LAYER_LAYCTRL_PACK_DIR_MASK) >> LCDC_LAYER_LAYCTRL_PACK_DIR_SHIFT)
854 
855 /*
856  * SHADOW_LOAD_EN (RW)
857  *
858  * Shadow Load Enable
859  * The SHADOW_LOAD_EN bit is written to 1 by software after all DMA control registers are written. If set to 1, shadowed control registers are updated to the active control registers on internal logical VSYNC of next frame. If set to 0, shadowed control registers are not loaded into the active control registers. The previous active control register settings will be used to process the next frame. Hardware will automatically clear this bit, when the shadow registers are loaded to the active control regsisters.
860  */
861 #define LCDC_LAYER_LAYCTRL_SHADOW_LOAD_EN_MASK (0x10000UL)
862 #define LCDC_LAYER_LAYCTRL_SHADOW_LOAD_EN_SHIFT (16U)
863 #define LCDC_LAYER_LAYCTRL_SHADOW_LOAD_EN_SET(x) (((uint32_t)(x) << LCDC_LAYER_LAYCTRL_SHADOW_LOAD_EN_SHIFT) & LCDC_LAYER_LAYCTRL_SHADOW_LOAD_EN_MASK)
864 #define LCDC_LAYER_LAYCTRL_SHADOW_LOAD_EN_GET(x) (((uint32_t)(x) & LCDC_LAYER_LAYCTRL_SHADOW_LOAD_EN_MASK) >> LCDC_LAYER_LAYCTRL_SHADOW_LOAD_EN_SHIFT)
865 
866 /*
867  * YUV_FORMAT (RW)
868  *
869  * The YUV422 input format selection.
870  * 00b - The YVYU422 8bit sequence is U1,Y1,V1,Y2
871  * 01b - The YVYU422 8bit sequence is V1,Y1,U1,Y2
872  * 10b - The YVYU422 8bit sequence is Y1,U1,Y2,V1
873  * 11b - The YVYU422 8bit sequence is Y1,V1,Y2,U1
874  * If not YUV422 mode,
875  * FORMAT[0]: asserted to exchange sequence inside the bytes. Org [15:8]-->New[8:15], Org [7:0]-->New[0:7]. (First exchange)
876  * FORMAT[1]: asserted to exchange the sequence of the odd and even 8 bits. Org Even [7:0]-->New[15:8], Org Odd [15:8]-->New[7:0]. (Second exchange)
877  */
878 #define LCDC_LAYER_LAYCTRL_YUV_FORMAT_MASK (0xC000U)
879 #define LCDC_LAYER_LAYCTRL_YUV_FORMAT_SHIFT (14U)
880 #define LCDC_LAYER_LAYCTRL_YUV_FORMAT_SET(x) (((uint32_t)(x) << LCDC_LAYER_LAYCTRL_YUV_FORMAT_SHIFT) & LCDC_LAYER_LAYCTRL_YUV_FORMAT_MASK)
881 #define LCDC_LAYER_LAYCTRL_YUV_FORMAT_GET(x) (((uint32_t)(x) & LCDC_LAYER_LAYCTRL_YUV_FORMAT_MASK) >> LCDC_LAYER_LAYCTRL_YUV_FORMAT_SHIFT)
882 
883 /*
884  * PIXFORMAT (RW)
885  *
886  * Layer encoding format (bit per pixel)
887  * 0000b - 1 bpp (pixel width must be multiples of 32), pixel sequence is from LSB to MSB in 32b word.
888  * 0001b - 2 bpp (pixel width must be multiples of 16), pixel sequence is from LSB to MSB in 32b word.
889  * 0010b - 4 bpp (pixel width must be multiples of 8), pixel sequence is from LSB to MSB in 32b word.
890  * 0011b - 8 bpp (pixel width must be multiples of 4), pixel sequence is from LSB to MSB in 32b word.
891  * 0100b - 16 bpp (RGB565), the low byte contains the full R component.
892  * 0111b - YCbCr422 (Only layer 0/1 can support this format), byte sequence determined by LAYCTRL[YUV_FORMAT]
893  * 1001b - 32 bpp (ARGB8888), byte sequence as B,G,R,A
894  * 1011b - Y8 (pixel width must be multiples of 4), byte sequence as Y1,Y2,Y3,Y4
895  */
896 #define LCDC_LAYER_LAYCTRL_PIXFORMAT_MASK (0x3C00U)
897 #define LCDC_LAYER_LAYCTRL_PIXFORMAT_SHIFT (10U)
898 #define LCDC_LAYER_LAYCTRL_PIXFORMAT_SET(x) (((uint32_t)(x) << LCDC_LAYER_LAYCTRL_PIXFORMAT_SHIFT) & LCDC_LAYER_LAYCTRL_PIXFORMAT_MASK)
899 #define LCDC_LAYER_LAYCTRL_PIXFORMAT_GET(x) (((uint32_t)(x) & LCDC_LAYER_LAYCTRL_PIXFORMAT_MASK) >> LCDC_LAYER_LAYCTRL_PIXFORMAT_SHIFT)
900 
901 /*
902  * LOCALPHA_OP (RW)
903  *
904  * The usage of the LOCALPHA[7:0]: (The system alpha value is not the data valid mask, the non-zero alpha value per pixel indicates a valid pixel. If no such per pixel alpha value, it means all the pixels are valid)
905  * 0: the LOCALPHA[7:0] is invalid, use the alpha value from the data stream
906  * 1: the LOCALPHA[7:0] is used to override the alpha value in the data stream (useful when the data stream has no alpha info)
907  * 2: the LOCALPHA[7:0] is used to scale the alpha value from the data stream
908  * Others: Reserved
909  */
910 #define LCDC_LAYER_LAYCTRL_LOCALPHA_OP_MASK (0x300U)
911 #define LCDC_LAYER_LAYCTRL_LOCALPHA_OP_SHIFT (8U)
912 #define LCDC_LAYER_LAYCTRL_LOCALPHA_OP_SET(x) (((uint32_t)(x) << LCDC_LAYER_LAYCTRL_LOCALPHA_OP_SHIFT) & LCDC_LAYER_LAYCTRL_LOCALPHA_OP_MASK)
913 #define LCDC_LAYER_LAYCTRL_LOCALPHA_OP_GET(x) (((uint32_t)(x) & LCDC_LAYER_LAYCTRL_LOCALPHA_OP_MASK) >> LCDC_LAYER_LAYCTRL_LOCALPHA_OP_SHIFT)
914 
915 /*
916  * INALPHA_OP (RW)
917  *
918  * The usage of the INALPHA[7:0]: (The system alpha value is not the data valid mask, the non-zero alpha value per pixel indicates a valid pixel. If no such per pixel alpha value, it means all the pixels are valid)
919  * 0: the INALPHA[7:0] is invalid, use the alpha value from previous pipeline
920  * 1: the INALPHA[7:0] is used to override the alpha value from previous pipeline. (useful when the corresponding data stream has no alpha info)
921  * 2: the INALPHA[7:0] is used to scale the alpha value from previous pipeline
922  * Others: Reserved
923  */
924 #define LCDC_LAYER_LAYCTRL_INALPHA_OP_MASK (0xC0U)
925 #define LCDC_LAYER_LAYCTRL_INALPHA_OP_SHIFT (6U)
926 #define LCDC_LAYER_LAYCTRL_INALPHA_OP_SET(x) (((uint32_t)(x) << LCDC_LAYER_LAYCTRL_INALPHA_OP_SHIFT) & LCDC_LAYER_LAYCTRL_INALPHA_OP_MASK)
927 #define LCDC_LAYER_LAYCTRL_INALPHA_OP_GET(x) (((uint32_t)(x) & LCDC_LAYER_LAYCTRL_INALPHA_OP_MASK) >> LCDC_LAYER_LAYCTRL_INALPHA_OP_SHIFT)
928 
929 /*
930  * AB_MODE (RW)
931  *
932  * Alpha Blending Mode
933  * 0: SKBlendMode_Clear;
934  * 3: SKBlendMode_SrcOver
935  * 14: SRC org
936  * 15: DST org
937  * Others: Reserved.
938  */
939 #define LCDC_LAYER_LAYCTRL_AB_MODE_MASK (0x3CU)
940 #define LCDC_LAYER_LAYCTRL_AB_MODE_SHIFT (2U)
941 #define LCDC_LAYER_LAYCTRL_AB_MODE_SET(x) (((uint32_t)(x) << LCDC_LAYER_LAYCTRL_AB_MODE_SHIFT) & LCDC_LAYER_LAYCTRL_AB_MODE_MASK)
942 #define LCDC_LAYER_LAYCTRL_AB_MODE_GET(x) (((uint32_t)(x) & LCDC_LAYER_LAYCTRL_AB_MODE_MASK) >> LCDC_LAYER_LAYCTRL_AB_MODE_SHIFT)
943 
944 /*
945  * EN (RW)
946  *
947  * Asserted when the layer is enabled. If this layer is not enabled, it means a bypassing plane.
948  */
949 #define LCDC_LAYER_LAYCTRL_EN_MASK (0x1U)
950 #define LCDC_LAYER_LAYCTRL_EN_SHIFT (0U)
951 #define LCDC_LAYER_LAYCTRL_EN_SET(x) (((uint32_t)(x) << LCDC_LAYER_LAYCTRL_EN_SHIFT) & LCDC_LAYER_LAYCTRL_EN_MASK)
952 #define LCDC_LAYER_LAYCTRL_EN_GET(x) (((uint32_t)(x) & LCDC_LAYER_LAYCTRL_EN_MASK) >> LCDC_LAYER_LAYCTRL_EN_SHIFT)
953 
954 /* Bitfield definition for register of struct array LAYER: ALPHAS */
955 /*
956  * LOCD (RW)
957  *
958  * The system alpha value for the data stream of current layer stream (SRC)
959  */
960 #define LCDC_LAYER_ALPHAS_LOCD_MASK (0xFF00U)
961 #define LCDC_LAYER_ALPHAS_LOCD_SHIFT (8U)
962 #define LCDC_LAYER_ALPHAS_LOCD_SET(x) (((uint32_t)(x) << LCDC_LAYER_ALPHAS_LOCD_SHIFT) & LCDC_LAYER_ALPHAS_LOCD_MASK)
963 #define LCDC_LAYER_ALPHAS_LOCD_GET(x) (((uint32_t)(x) & LCDC_LAYER_ALPHAS_LOCD_MASK) >> LCDC_LAYER_ALPHAS_LOCD_SHIFT)
964 
965 /*
966  * IND (RW)
967  *
968  * The system alpha value for the input stream from previous stage (DST)
969  */
970 #define LCDC_LAYER_ALPHAS_IND_MASK (0xFFU)
971 #define LCDC_LAYER_ALPHAS_IND_SHIFT (0U)
972 #define LCDC_LAYER_ALPHAS_IND_SET(x) (((uint32_t)(x) << LCDC_LAYER_ALPHAS_IND_SHIFT) & LCDC_LAYER_ALPHAS_IND_MASK)
973 #define LCDC_LAYER_ALPHAS_IND_GET(x) (((uint32_t)(x) & LCDC_LAYER_ALPHAS_IND_MASK) >> LCDC_LAYER_ALPHAS_IND_SHIFT)
974 
975 /* Bitfield definition for register of struct array LAYER: LAYSIZE */
976 /*
977  * HEIGHT (RW)
978  *
979  * Height of the layer in pixels
980  */
981 #define LCDC_LAYER_LAYSIZE_HEIGHT_MASK (0xFFF0000UL)
982 #define LCDC_LAYER_LAYSIZE_HEIGHT_SHIFT (16U)
983 #define LCDC_LAYER_LAYSIZE_HEIGHT_SET(x) (((uint32_t)(x) << LCDC_LAYER_LAYSIZE_HEIGHT_SHIFT) & LCDC_LAYER_LAYSIZE_HEIGHT_MASK)
984 #define LCDC_LAYER_LAYSIZE_HEIGHT_GET(x) (((uint32_t)(x) & LCDC_LAYER_LAYSIZE_HEIGHT_MASK) >> LCDC_LAYER_LAYSIZE_HEIGHT_SHIFT)
985 
986 /*
987  * WIDTH (RW)
988  *
989  * Width of the layer in pixels (Note: not actual width-1)
990  * The layer width must be in multiples of the number of pixels that can be stored in 32 bits, and therefore differs depending on color encoding. For example, if 2 bits per pixel format is used, then the layer width must be configured in multiples of 16.
991  */
992 #define LCDC_LAYER_LAYSIZE_WIDTH_MASK (0xFFFU)
993 #define LCDC_LAYER_LAYSIZE_WIDTH_SHIFT (0U)
994 #define LCDC_LAYER_LAYSIZE_WIDTH_SET(x) (((uint32_t)(x) << LCDC_LAYER_LAYSIZE_WIDTH_SHIFT) & LCDC_LAYER_LAYSIZE_WIDTH_MASK)
995 #define LCDC_LAYER_LAYSIZE_WIDTH_GET(x) (((uint32_t)(x) & LCDC_LAYER_LAYSIZE_WIDTH_MASK) >> LCDC_LAYER_LAYSIZE_WIDTH_SHIFT)
996 
997 /* Bitfield definition for register of struct array LAYER: LAYPOS */
998 /*
999  * Y (RW)
1000  *
1001  * The vertical position of top row of the layer, where 0 is the top row of the panel, positive values are below the top row of the panel.
1002  */
1003 #define LCDC_LAYER_LAYPOS_Y_MASK (0xFFFF0000UL)
1004 #define LCDC_LAYER_LAYPOS_Y_SHIFT (16U)
1005 #define LCDC_LAYER_LAYPOS_Y_SET(x) (((uint32_t)(x) << LCDC_LAYER_LAYPOS_Y_SHIFT) & LCDC_LAYER_LAYPOS_Y_MASK)
1006 #define LCDC_LAYER_LAYPOS_Y_GET(x) (((uint32_t)(x) & LCDC_LAYER_LAYPOS_Y_MASK) >> LCDC_LAYER_LAYPOS_Y_SHIFT)
1007 
1008 /*
1009  * X (RW)
1010  *
1011  * The horizontal position of left-hand column of the layer, where 0 is the left-hand column of the panel, positive values are to the right the left-hand column of the panel.
1012  */
1013 #define LCDC_LAYER_LAYPOS_X_MASK (0xFFFFU)
1014 #define LCDC_LAYER_LAYPOS_X_SHIFT (0U)
1015 #define LCDC_LAYER_LAYPOS_X_SET(x) (((uint32_t)(x) << LCDC_LAYER_LAYPOS_X_SHIFT) & LCDC_LAYER_LAYPOS_X_MASK)
1016 #define LCDC_LAYER_LAYPOS_X_GET(x) (((uint32_t)(x) & LCDC_LAYER_LAYPOS_X_MASK) >> LCDC_LAYER_LAYPOS_X_SHIFT)
1017 
1018 /* Bitfield definition for register of struct array LAYER: START0 */
1019 /*
1020  * ADDR0 (RW)
1021  *
1022  * Input buffer Start address 0
1023  */
1024 #define LCDC_LAYER_START0_ADDR0_MASK (0xFFFFFFFFUL)
1025 #define LCDC_LAYER_START0_ADDR0_SHIFT (0U)
1026 #define LCDC_LAYER_START0_ADDR0_SET(x) (((uint32_t)(x) << LCDC_LAYER_START0_ADDR0_SHIFT) & LCDC_LAYER_START0_ADDR0_MASK)
1027 #define LCDC_LAYER_START0_ADDR0_GET(x) (((uint32_t)(x) & LCDC_LAYER_START0_ADDR0_MASK) >> LCDC_LAYER_START0_ADDR0_SHIFT)
1028 
1029 /* Bitfield definition for register of struct array LAYER: LINECFG */
1030 /*
1031  * MPT_SIZE (RW)
1032  *
1033  * Maximal Per Transfer Data Size:
1034  * 0: 64 bytes
1035  * 1: 128 bytes
1036  * 2: 256 bytes
1037  * 3: 512 bytes
1038  * 4: 1024 bytes
1039  */
1040 #define LCDC_LAYER_LINECFG_MPT_SIZE_MASK (0xE0000000UL)
1041 #define LCDC_LAYER_LINECFG_MPT_SIZE_SHIFT (29U)
1042 #define LCDC_LAYER_LINECFG_MPT_SIZE_SET(x) (((uint32_t)(x) << LCDC_LAYER_LINECFG_MPT_SIZE_SHIFT) & LCDC_LAYER_LINECFG_MPT_SIZE_MASK)
1043 #define LCDC_LAYER_LINECFG_MPT_SIZE_GET(x) (((uint32_t)(x) & LCDC_LAYER_LINECFG_MPT_SIZE_MASK) >> LCDC_LAYER_LINECFG_MPT_SIZE_SHIFT)
1044 
1045 /*
1046  * MAX_OT (RW)
1047  *
1048  * the number of outstanding axi read transactions.
1049  * If zero, it means max 8.
1050  */
1051 #define LCDC_LAYER_LINECFG_MAX_OT_MASK (0xE00000UL)
1052 #define LCDC_LAYER_LINECFG_MAX_OT_SHIFT (21U)
1053 #define LCDC_LAYER_LINECFG_MAX_OT_SET(x) (((uint32_t)(x) << LCDC_LAYER_LINECFG_MAX_OT_SHIFT) & LCDC_LAYER_LINECFG_MAX_OT_MASK)
1054 #define LCDC_LAYER_LINECFG_MAX_OT_GET(x) (((uint32_t)(x) & LCDC_LAYER_LINECFG_MAX_OT_MASK) >> LCDC_LAYER_LINECFG_MAX_OT_SHIFT)
1055 
1056 /*
1057  * PITCH (RW)
1058  *
1059  * Number of bytes between 2 vertically adjacent pixels in system memory. Byte granularity is supported, but SW should align to 64B boundary.
1060  */
1061 #define LCDC_LAYER_LINECFG_PITCH_MASK (0xFFFFU)
1062 #define LCDC_LAYER_LINECFG_PITCH_SHIFT (0U)
1063 #define LCDC_LAYER_LINECFG_PITCH_SET(x) (((uint32_t)(x) << LCDC_LAYER_LINECFG_PITCH_SHIFT) & LCDC_LAYER_LINECFG_PITCH_MASK)
1064 #define LCDC_LAYER_LINECFG_PITCH_GET(x) (((uint32_t)(x) & LCDC_LAYER_LINECFG_PITCH_MASK) >> LCDC_LAYER_LINECFG_PITCH_SHIFT)
1065 
1066 /* Bitfield definition for register of struct array LAYER: BG_CL */
1067 /*
1068  * ARGB (RW)
1069  *
1070  * ARGB8888. It is only useful in the last active stage in the pipeline.
1071  */
1072 #define LCDC_LAYER_BG_CL_ARGB_MASK (0xFFFFFFFFUL)
1073 #define LCDC_LAYER_BG_CL_ARGB_SHIFT (0U)
1074 #define LCDC_LAYER_BG_CL_ARGB_SET(x) (((uint32_t)(x) << LCDC_LAYER_BG_CL_ARGB_SHIFT) & LCDC_LAYER_BG_CL_ARGB_MASK)
1075 #define LCDC_LAYER_BG_CL_ARGB_GET(x) (((uint32_t)(x) & LCDC_LAYER_BG_CL_ARGB_MASK) >> LCDC_LAYER_BG_CL_ARGB_SHIFT)
1076 
1077 /* Bitfield definition for register of struct array LAYER: CSC_COEF0 */
1078 /*
1079  * YCBCR_MODE (RW)
1080  *
1081  * This bit changes the behavior when performing U/V converting.
1082  * 0b - Converting YUV to RGB data
1083  * 1b - Converting YCbCr to RGB data
1084  */
1085 #define LCDC_LAYER_CSC_COEF0_YCBCR_MODE_MASK (0x80000000UL)
1086 #define LCDC_LAYER_CSC_COEF0_YCBCR_MODE_SHIFT (31U)
1087 #define LCDC_LAYER_CSC_COEF0_YCBCR_MODE_SET(x) (((uint32_t)(x) << LCDC_LAYER_CSC_COEF0_YCBCR_MODE_SHIFT) & LCDC_LAYER_CSC_COEF0_YCBCR_MODE_MASK)
1088 #define LCDC_LAYER_CSC_COEF0_YCBCR_MODE_GET(x) (((uint32_t)(x) & LCDC_LAYER_CSC_COEF0_YCBCR_MODE_MASK) >> LCDC_LAYER_CSC_COEF0_YCBCR_MODE_SHIFT)
1089 
1090 /*
1091  * ENABLE (RW)
1092  *
1093  * Enable the CSC unit in the LCDC plane data path.
1094  * 0b - The CSC is bypassed and the input pixels are RGB data already
1095  * 1b - The CSC is enabled and the pixels will be converted to RGB data
1096  * This bit will be shadowed.
1097  */
1098 #define LCDC_LAYER_CSC_COEF0_ENABLE_MASK (0x40000000UL)
1099 #define LCDC_LAYER_CSC_COEF0_ENABLE_SHIFT (30U)
1100 #define LCDC_LAYER_CSC_COEF0_ENABLE_SET(x) (((uint32_t)(x) << LCDC_LAYER_CSC_COEF0_ENABLE_SHIFT) & LCDC_LAYER_CSC_COEF0_ENABLE_MASK)
1101 #define LCDC_LAYER_CSC_COEF0_ENABLE_GET(x) (((uint32_t)(x) & LCDC_LAYER_CSC_COEF0_ENABLE_MASK) >> LCDC_LAYER_CSC_COEF0_ENABLE_SHIFT)
1102 
1103 /*
1104  * C0 (RW)
1105  *
1106  * Two's compliment Y multiplier coefficient C0. YUV=0x100 (1.000) YCbCr=0x12A (1.164)
1107  */
1108 #define LCDC_LAYER_CSC_COEF0_C0_MASK (0x1FFC0000UL)
1109 #define LCDC_LAYER_CSC_COEF0_C0_SHIFT (18U)
1110 #define LCDC_LAYER_CSC_COEF0_C0_SET(x) (((uint32_t)(x) << LCDC_LAYER_CSC_COEF0_C0_SHIFT) & LCDC_LAYER_CSC_COEF0_C0_MASK)
1111 #define LCDC_LAYER_CSC_COEF0_C0_GET(x) (((uint32_t)(x) & LCDC_LAYER_CSC_COEF0_C0_MASK) >> LCDC_LAYER_CSC_COEF0_C0_SHIFT)
1112 
1113 /*
1114  * UV_OFFSET (RW)
1115  *
1116  * Two's compliment phase offset implicit for CbCr data UV_OFFSET. Generally used for YCbCr to RGB conversion.
1117  * YCbCr=0x180, YUV=0x000 (typically -128 or 0x180 to indicate normalized -0.5 to 0.5 range).
1118  */
1119 #define LCDC_LAYER_CSC_COEF0_UV_OFFSET_MASK (0x3FE00UL)
1120 #define LCDC_LAYER_CSC_COEF0_UV_OFFSET_SHIFT (9U)
1121 #define LCDC_LAYER_CSC_COEF0_UV_OFFSET_SET(x) (((uint32_t)(x) << LCDC_LAYER_CSC_COEF0_UV_OFFSET_SHIFT) & LCDC_LAYER_CSC_COEF0_UV_OFFSET_MASK)
1122 #define LCDC_LAYER_CSC_COEF0_UV_OFFSET_GET(x) (((uint32_t)(x) & LCDC_LAYER_CSC_COEF0_UV_OFFSET_MASK) >> LCDC_LAYER_CSC_COEF0_UV_OFFSET_SHIFT)
1123 
1124 /*
1125  * Y_OFFSET (RW)
1126  *
1127  * Two's compliment amplitude offset implicit in the Y data Y_OFFSET. For YUV, this is typically 0 and for YCbCr, this is
1128  * typically -16 (0x1F0).
1129  */
1130 #define LCDC_LAYER_CSC_COEF0_Y_OFFSET_MASK (0x1FFU)
1131 #define LCDC_LAYER_CSC_COEF0_Y_OFFSET_SHIFT (0U)
1132 #define LCDC_LAYER_CSC_COEF0_Y_OFFSET_SET(x) (((uint32_t)(x) << LCDC_LAYER_CSC_COEF0_Y_OFFSET_SHIFT) & LCDC_LAYER_CSC_COEF0_Y_OFFSET_MASK)
1133 #define LCDC_LAYER_CSC_COEF0_Y_OFFSET_GET(x) (((uint32_t)(x) & LCDC_LAYER_CSC_COEF0_Y_OFFSET_MASK) >> LCDC_LAYER_CSC_COEF0_Y_OFFSET_SHIFT)
1134 
1135 /* Bitfield definition for register of struct array LAYER: CSC_COEF1 */
1136 /*
1137  * C1 (RW)
1138  *
1139  * Two's compliment Red V/Cr multiplier coefficient C1. YUV=0x123 (1.140) YCbCr=0x198 (1.596).
1140  */
1141 #define LCDC_LAYER_CSC_COEF1_C1_MASK (0x7FF0000UL)
1142 #define LCDC_LAYER_CSC_COEF1_C1_SHIFT (16U)
1143 #define LCDC_LAYER_CSC_COEF1_C1_SET(x) (((uint32_t)(x) << LCDC_LAYER_CSC_COEF1_C1_SHIFT) & LCDC_LAYER_CSC_COEF1_C1_MASK)
1144 #define LCDC_LAYER_CSC_COEF1_C1_GET(x) (((uint32_t)(x) & LCDC_LAYER_CSC_COEF1_C1_MASK) >> LCDC_LAYER_CSC_COEF1_C1_SHIFT)
1145 
1146 /*
1147  * C4 (RW)
1148  *
1149  * Two's compliment Blue U/Cb multiplier coefficient C4. YUV=0x208 (2.032) YCbCr=0x204 (2.017).
1150  */
1151 #define LCDC_LAYER_CSC_COEF1_C4_MASK (0x7FFU)
1152 #define LCDC_LAYER_CSC_COEF1_C4_SHIFT (0U)
1153 #define LCDC_LAYER_CSC_COEF1_C4_SET(x) (((uint32_t)(x) << LCDC_LAYER_CSC_COEF1_C4_SHIFT) & LCDC_LAYER_CSC_COEF1_C4_MASK)
1154 #define LCDC_LAYER_CSC_COEF1_C4_GET(x) (((uint32_t)(x) & LCDC_LAYER_CSC_COEF1_C4_MASK) >> LCDC_LAYER_CSC_COEF1_C4_SHIFT)
1155 
1156 /* Bitfield definition for register of struct array LAYER: CSC_COEF2 */
1157 /*
1158  * C2 (RW)
1159  *
1160  * Two's compliment Green V/Cr multiplier coefficient C2. YUV=0x76B (-0.581) YCbCr=0x730 (-0.813).
1161  */
1162 #define LCDC_LAYER_CSC_COEF2_C2_MASK (0x7FF0000UL)
1163 #define LCDC_LAYER_CSC_COEF2_C2_SHIFT (16U)
1164 #define LCDC_LAYER_CSC_COEF2_C2_SET(x) (((uint32_t)(x) << LCDC_LAYER_CSC_COEF2_C2_SHIFT) & LCDC_LAYER_CSC_COEF2_C2_MASK)
1165 #define LCDC_LAYER_CSC_COEF2_C2_GET(x) (((uint32_t)(x) & LCDC_LAYER_CSC_COEF2_C2_MASK) >> LCDC_LAYER_CSC_COEF2_C2_SHIFT)
1166 
1167 /*
1168  * C3 (RW)
1169  *
1170  * Two's compliment Green U/Cb multiplier coefficient C3. YUV=0x79C (-0.394) YCbCr=0x79C (-0.392).
1171  */
1172 #define LCDC_LAYER_CSC_COEF2_C3_MASK (0x7FFU)
1173 #define LCDC_LAYER_CSC_COEF2_C3_SHIFT (0U)
1174 #define LCDC_LAYER_CSC_COEF2_C3_SET(x) (((uint32_t)(x) << LCDC_LAYER_CSC_COEF2_C3_SHIFT) & LCDC_LAYER_CSC_COEF2_C3_MASK)
1175 #define LCDC_LAYER_CSC_COEF2_C3_GET(x) (((uint32_t)(x) & LCDC_LAYER_CSC_COEF2_C3_MASK) >> LCDC_LAYER_CSC_COEF2_C3_SHIFT)
1176 
1177 
1178 
1179 /* LAYER register group index macro definition */
1180 #define LCDC_LAYER_0 (0UL)
1181 #define LCDC_LAYER_1 (1UL)
1182 #define LCDC_LAYER_2 (2UL)
1183 #define LCDC_LAYER_3 (3UL)
1184 #define LCDC_LAYER_4 (4UL)
1185 #define LCDC_LAYER_5 (5UL)
1186 #define LCDC_LAYER_6 (6UL)
1187 #define LCDC_LAYER_7 (7UL)
1188 
1189 
1190 #endif /* HPM_LCDC_H */
Definition: hpm_lcdc_regs.h:12