Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * Copyright © 2014-2015 Broadcom
4 */
5
6#ifndef VC4_REGS_H
7#define VC4_REGS_H
8
9#include <linux/bitfield.h>
10#include <linux/bitops.h>
11
12#define VC4_MASK(high, low) ((u32)GENMASK(high, low))
13/* Using the GNU statement expression extension */
14#define VC4_SET_FIELD(value, field) \
15 ({ \
16 WARN_ON(!FIELD_FIT(field##_MASK, value)); \
17 FIELD_PREP(field##_MASK, value); \
18 })
19
20#define VC4_GET_FIELD(word, field) FIELD_GET(field##_MASK, word)
21
22#define VC6_SET_FIELD(value, field) \
23 ({ \
24 WARN_ON(!FIELD_FIT(hvs->vc4->gen == VC4_GEN_6_C ? \
25 SCALER6_ ## field ## _MASK : \
26 SCALER6D_ ## field ## _MASK, value));\
27 FIELD_PREP(hvs->vc4->gen == VC4_GEN_6_C ? \
28 SCALER6_ ## field ## _MASK : \
29 SCALER6D_ ## field ## _MASK, value); \
30 })
31
32#define VC6_GET_FIELD(word, field) FIELD_GET(hvs->vc4->gen == VC4_GEN_6_C ? \
33 SCALER6_ ## field ## _MASK : \
34 SCALER6D_ ## field ## _MASK, word)
35
36#define V3D_IDENT0 0x00000
37# define V3D_EXPECTED_IDENT0 \
38 ((2 << 24) | \
39 ('V' << 0) | \
40 ('3' << 8) | \
41 ('D' << 16))
42
43#define V3D_IDENT1 0x00004
44/* Multiples of 1kb */
45# define V3D_IDENT1_VPM_SIZE_MASK VC4_MASK(31, 28)
46# define V3D_IDENT1_VPM_SIZE_SHIFT 28
47# define V3D_IDENT1_NSEM_MASK VC4_MASK(23, 16)
48# define V3D_IDENT1_NSEM_SHIFT 16
49# define V3D_IDENT1_TUPS_MASK VC4_MASK(15, 12)
50# define V3D_IDENT1_TUPS_SHIFT 12
51# define V3D_IDENT1_QUPS_MASK VC4_MASK(11, 8)
52# define V3D_IDENT1_QUPS_SHIFT 8
53# define V3D_IDENT1_NSLC_MASK VC4_MASK(7, 4)
54# define V3D_IDENT1_NSLC_SHIFT 4
55# define V3D_IDENT1_REV_MASK VC4_MASK(3, 0)
56# define V3D_IDENT1_REV_SHIFT 0
57
58#define V3D_IDENT2 0x00008
59#define V3D_SCRATCH 0x00010
60#define V3D_L2CACTL 0x00020
61# define V3D_L2CACTL_L2CCLR BIT(2)
62# define V3D_L2CACTL_L2CDIS BIT(1)
63# define V3D_L2CACTL_L2CENA BIT(0)
64
65#define V3D_SLCACTL 0x00024
66# define V3D_SLCACTL_T1CC_MASK VC4_MASK(27, 24)
67# define V3D_SLCACTL_T1CC_SHIFT 24
68# define V3D_SLCACTL_T0CC_MASK VC4_MASK(19, 16)
69# define V3D_SLCACTL_T0CC_SHIFT 16
70# define V3D_SLCACTL_UCC_MASK VC4_MASK(11, 8)
71# define V3D_SLCACTL_UCC_SHIFT 8
72# define V3D_SLCACTL_ICC_MASK VC4_MASK(3, 0)
73# define V3D_SLCACTL_ICC_SHIFT 0
74
75#define V3D_INTCTL 0x00030
76#define V3D_INTENA 0x00034
77#define V3D_INTDIS 0x00038
78# define V3D_INT_SPILLUSE BIT(3)
79# define V3D_INT_OUTOMEM BIT(2)
80# define V3D_INT_FLDONE BIT(1)
81# define V3D_INT_FRDONE BIT(0)
82
83#define V3D_CT0CS 0x00100
84#define V3D_CT1CS 0x00104
85#define V3D_CTNCS(n) (V3D_CT0CS + 4 * n)
86# define V3D_CTRSTA BIT(15)
87# define V3D_CTSEMA BIT(12)
88# define V3D_CTRTSD BIT(8)
89# define V3D_CTRUN BIT(5)
90# define V3D_CTSUBS BIT(4)
91# define V3D_CTERR BIT(3)
92# define V3D_CTMODE BIT(0)
93
94#define V3D_CT0EA 0x00108
95#define V3D_CT1EA 0x0010c
96#define V3D_CTNEA(n) (V3D_CT0EA + 4 * (n))
97#define V3D_CT0CA 0x00110
98#define V3D_CT1CA 0x00114
99#define V3D_CTNCA(n) (V3D_CT0CA + 4 * (n))
100#define V3D_CT00RA0 0x00118
101#define V3D_CT01RA0 0x0011c
102#define V3D_CTNRA0(n) (V3D_CT00RA0 + 4 * (n))
103#define V3D_CT0LC 0x00120
104#define V3D_CT1LC 0x00124
105#define V3D_CTNLC(n) (V3D_CT0LC + 4 * (n))
106#define V3D_CT0PC 0x00128
107#define V3D_CT1PC 0x0012c
108#define V3D_CTNPC(n) (V3D_CT0PC + 4 * (n))
109
110#define V3D_PCS 0x00130
111# define V3D_BMOOM BIT(8)
112# define V3D_RMBUSY BIT(3)
113# define V3D_RMACTIVE BIT(2)
114# define V3D_BMBUSY BIT(1)
115# define V3D_BMACTIVE BIT(0)
116
117#define V3D_BFC 0x00134
118#define V3D_RFC 0x00138
119#define V3D_BPCA 0x00300
120#define V3D_BPCS 0x00304
121#define V3D_BPOA 0x00308
122#define V3D_BPOS 0x0030c
123#define V3D_BXCF 0x00310
124#define V3D_SQRSV0 0x00410
125#define V3D_SQRSV1 0x00414
126#define V3D_SQCNTL 0x00418
127#define V3D_SRQPC 0x00430
128#define V3D_SRQUA 0x00434
129#define V3D_SRQUL 0x00438
130#define V3D_SRQCS 0x0043c
131#define V3D_VPACNTL 0x00500
132#define V3D_VPMBASE 0x00504
133#define V3D_PCTRC 0x00670
134#define V3D_PCTRE 0x00674
135# define V3D_PCTRE_EN BIT(31)
136#define V3D_PCTR(x) (0x00680 + ((x) * 8))
137#define V3D_PCTRS(x) (0x00684 + ((x) * 8))
138#define V3D_DBGE 0x00f00
139#define V3D_FDBGO 0x00f04
140#define V3D_FDBGB 0x00f08
141#define V3D_FDBGR 0x00f0c
142#define V3D_FDBGS 0x00f10
143#define V3D_ERRSTAT 0x00f20
144
145#define PV_CONTROL 0x00
146# define PV5_CONTROL_FIFO_LEVEL_HIGH_MASK VC4_MASK(26, 25)
147# define PV5_CONTROL_FIFO_LEVEL_HIGH_SHIFT 25
148# define PV_CONTROL_FORMAT_MASK VC4_MASK(23, 21)
149# define PV_CONTROL_FORMAT_SHIFT 21
150# define PV_CONTROL_FORMAT_24 0
151# define PV_CONTROL_FORMAT_DSIV_16 1
152# define PV_CONTROL_FORMAT_DSIC_16 2
153# define PV_CONTROL_FORMAT_DSIV_18 3
154# define PV_CONTROL_FORMAT_DSIV_24 4
155
156# define PV_CONTROL_FIFO_LEVEL_MASK VC4_MASK(20, 15)
157# define PV_CONTROL_FIFO_LEVEL_SHIFT 15
158# define PV_CONTROL_CLR_AT_START BIT(14)
159# define PV_CONTROL_TRIGGER_UNDERFLOW BIT(13)
160# define PV_CONTROL_WAIT_HSTART BIT(12)
161# define PV_CONTROL_PIXEL_REP_MASK VC4_MASK(5, 4)
162# define PV_CONTROL_PIXEL_REP_SHIFT 4
163# define PV_CONTROL_CLK_SELECT_DSI 0
164# define PV_CONTROL_CLK_SELECT_DPI_SMI_HDMI 1
165# define PV_CONTROL_CLK_SELECT_VEC 2
166# define PV_CONTROL_CLK_SELECT_MASK VC4_MASK(3, 2)
167# define PV_CONTROL_CLK_SELECT_SHIFT 2
168# define PV_CONTROL_FIFO_CLR BIT(1)
169# define PV_CONTROL_EN BIT(0)
170
171#define PV_V_CONTROL 0x04
172# define PV_VCONTROL_ODD_TIMING BIT(29)
173# define PV_VCONTROL_ODD_DELAY_MASK VC4_MASK(22, 6)
174# define PV_VCONTROL_ODD_DELAY_SHIFT 6
175# define PV_VCONTROL_ODD_FIRST BIT(5)
176# define PV_VCONTROL_INTERLACE BIT(4)
177# define PV_VCONTROL_DSI BIT(3)
178# define PV_VCONTROL_COMMAND BIT(2)
179# define PV_VCONTROL_CONTINUOUS BIT(1)
180# define PV_VCONTROL_VIDEN BIT(0)
181
182#define PV_VSYNCD_EVEN 0x08
183
184#define PV_HORZA 0x0c
185# define PV_HORZA_HBP_MASK VC4_MASK(31, 16)
186# define PV_HORZA_HBP_SHIFT 16
187# define PV_HORZA_HSYNC_MASK VC4_MASK(15, 0)
188# define PV_HORZA_HSYNC_SHIFT 0
189
190#define PV_HORZB 0x10
191# define PV_HORZB_HFP_MASK VC4_MASK(31, 16)
192# define PV_HORZB_HFP_SHIFT 16
193# define PV_HORZB_HACTIVE_MASK VC4_MASK(15, 0)
194# define PV_HORZB_HACTIVE_SHIFT 0
195
196#define PV_VERTA 0x14
197# define PV_VERTA_VBP_MASK VC4_MASK(31, 16)
198# define PV_VERTA_VBP_SHIFT 16
199# define PV_VERTA_VSYNC_MASK VC4_MASK(15, 0)
200# define PV_VERTA_VSYNC_SHIFT 0
201
202#define PV_VERTB 0x18
203# define PV_VERTB_VFP_MASK VC4_MASK(31, 16)
204# define PV_VERTB_VFP_SHIFT 16
205# define PV_VERTB_VACTIVE_MASK VC4_MASK(15, 0)
206# define PV_VERTB_VACTIVE_SHIFT 0
207
208#define PV_VERTA_EVEN 0x1c
209#define PV_VERTB_EVEN 0x20
210
211#define PV_INTEN 0x24
212#define PV_INTSTAT 0x28
213# define PV_INT_VID_IDLE BIT(9)
214# define PV_INT_VFP_END BIT(8)
215# define PV_INT_VFP_START BIT(7)
216# define PV_INT_VACT_START BIT(6)
217# define PV_INT_VBP_START BIT(5)
218# define PV_INT_VSYNC_START BIT(4)
219# define PV_INT_HFP_START BIT(3)
220# define PV_INT_HACT_START BIT(2)
221# define PV_INT_HBP_START BIT(1)
222# define PV_INT_HSYNC_START BIT(0)
223
224#define PV_STAT 0x2c
225
226#define PV_HACT_ACT 0x30
227
228#define PV_MUX_CFG 0x34
229# define PV_MUX_CFG_RGB_PIXEL_MUX_MODE_MASK VC4_MASK(5, 2)
230# define PV_MUX_CFG_RGB_PIXEL_MUX_MODE_SHIFT 2
231# define PV_MUX_CFG_RGB_PIXEL_MUX_MODE_NO_SWAP 8
232
233#define PV_PIPE_INIT_CTRL 0x94
234# define PV_PIPE_INIT_CTRL_PV_INIT_WIDTH_MASK VC4_MASK(11, 8)
235# define PV_PIPE_INIT_CTRL_PV_INIT_IDLE_MASK VC4_MASK(7, 4)
236# define PV_PIPE_INIT_CTRL_PV_INIT_EN BIT(0)
237
238#define SCALER_CHANNELS_COUNT 3
239
240#define SCALER_DISPCTRL 0x00000000
241/* Global register for clock gating the HVS */
242# define SCALER_DISPCTRL_ENABLE BIT(31)
243# define SCALER_DISPCTRL_PANIC0_MASK VC4_MASK(25, 24)
244# define SCALER_DISPCTRL_PANIC0_SHIFT 24
245# define SCALER_DISPCTRL_PANIC1_MASK VC4_MASK(27, 26)
246# define SCALER_DISPCTRL_PANIC1_SHIFT 26
247# define SCALER_DISPCTRL_PANIC2_MASK VC4_MASK(29, 28)
248# define SCALER_DISPCTRL_PANIC2_SHIFT 28
249# define SCALER_DISPCTRL_DSP3_MUX_MASK VC4_MASK(19, 18)
250# define SCALER_DISPCTRL_DSP3_MUX_SHIFT 18
251
252/* Enables Display 0 short line and underrun contribution to
253 * SCALER_DISPSTAT_IRQDISP0. Note that short frame contributions are
254 * always enabled.
255 */
256# define SCALER_DISPCTRL_DSPEISLUR(x) BIT(13 + (x))
257# define SCALER5_DISPCTRL_DSPEISLUR(x) BIT(9 + ((x) * 4))
258/* Enables Display 0 end-of-line-N contribution to
259 * SCALER_DISPSTAT_IRQDISP0
260 */
261# define SCALER_DISPCTRL_DSPEIEOLN(x) BIT(8 + ((x) * 2))
262# define SCALER5_DISPCTRL_DSPEIEOLN(x) BIT(8 + ((x) * 4))
263/* Enables Display 0 EOF contribution to SCALER_DISPSTAT_IRQDISP0 */
264# define SCALER_DISPCTRL_DSPEIEOF(x) BIT(7 + ((x) * 2))
265# define SCALER5_DISPCTRL_DSPEIEOF(x) BIT(7 + ((x) * 4))
266
267# define SCALER5_DISPCTRL_DSPEIVST(x) BIT(6 + ((x) * 4))
268
269# define SCALER_DISPCTRL_SLVRDEIRQ BIT(6) /* HVS4 only */
270# define SCALER_DISPCTRL_SLVWREIRQ BIT(5) /* HVS4 only */
271# define SCALER5_DISPCTRL_SLVEIRQ BIT(5)
272# define SCALER_DISPCTRL_DMAEIRQ BIT(4)
273/* Enables interrupt generation on the enabled EOF/EOLN/EISLUR
274 * bits and short frames..
275 */
276# define SCALER_DISPCTRL_DISPEIRQ(x) BIT(1 + (x))
277/* Enables interrupt generation on scaler profiler interrupt. */
278# define SCALER_DISPCTRL_SCLEIRQ BIT(0)
279
280#define SCALER_DISPSTAT 0x00000004
281# define SCALER_DISPSTAT_RESP_MASK VC4_MASK(15, 14)
282# define SCALER_DISPSTAT_RESP_SHIFT 14
283# define SCALER_DISPSTAT_RESP_OKAY 0
284# define SCALER_DISPSTAT_RESP_EXOKAY 1
285# define SCALER_DISPSTAT_RESP_SLVERR 2
286# define SCALER_DISPSTAT_RESP_DECERR 3
287
288# define SCALER_DISPSTAT_COBLOW(x) BIT(13 + ((x) * 8))
289/* Set when the DISPEOLN line is done compositing. */
290# define SCALER_DISPSTAT_EOLN(x) BIT(12 + ((x) * 8))
291/* Set when VSTART is seen but there are still pixels in the current
292 * output line.
293 */
294# define SCALER_DISPSTAT_ESFRAME(x) BIT(11 + ((x) * 8))
295/* Set when HSTART is seen but there are still pixels in the current
296 * output line.
297 */
298# define SCALER_DISPSTAT_ESLINE(x) BIT(10 + ((x) * 8))
299/* Set when the downstream tries to read from the display FIFO
300 * while it's empty.
301 */
302# define SCALER_DISPSTAT_EUFLOW(x) BIT(9 + ((x) * 8))
303/* Set when the display mode changes from RUN to EOF */
304# define SCALER_DISPSTAT_EOF(x) BIT(8 + ((x) * 8))
305
306# define SCALER_DISPSTAT_IRQMASK(x) VC4_MASK(13 + ((x) * 8), \
307 8 + ((x) * 8))
308
309/* Set on AXI invalid DMA ID error. */
310# define SCALER_DISPSTAT_DMA_ERROR BIT(7)
311/* Set on AXI slave read decode error */
312# define SCALER_DISPSTAT_IRQSLVRD BIT(6)
313/* Set on AXI slave write decode error */
314# define SCALER_DISPSTAT_IRQSLVWR BIT(5)
315/* Set when SCALER_DISPSTAT_DMA_ERROR is set, or
316 * SCALER_DISPSTAT_RESP_ERROR is not SCALER_DISPSTAT_RESP_OKAY.
317 */
318# define SCALER_DISPSTAT_IRQDMA BIT(4)
319/* Set when any of the EOF/EOLN/ESFRAME/ESLINE bits are set and their
320 * corresponding interrupt bit is enabled in DISPCTRL.
321 */
322# define SCALER_DISPSTAT_IRQDISP(x) BIT(1 + (x))
323/* On read, the profiler interrupt. On write, clear *all* interrupt bits. */
324# define SCALER_DISPSTAT_IRQSCL BIT(0)
325
326#define SCALER_DISPID 0x00000008
327#define SCALER_DISPECTRL 0x0000000c
328# define SCALER_DISPECTRL_DSP2_MUX_SHIFT 31
329# define SCALER_DISPECTRL_DSP2_MUX_MASK VC4_MASK(31, 31)
330
331#define SCALER_DISPPROF 0x00000010
332
333#define SCALER_DISPDITHER 0x00000014
334# define SCALER_DISPDITHER_DSP5_MUX_SHIFT 30
335# define SCALER_DISPDITHER_DSP5_MUX_MASK VC4_MASK(31, 30)
336
337#define SCALER_DISPEOLN 0x00000018
338# define SCALER_DISPEOLN_DSP4_MUX_SHIFT 30
339# define SCALER_DISPEOLN_DSP4_MUX_MASK VC4_MASK(31, 30)
340
341#define SCALER_DISPLIST0 0x00000020
342#define SCALER_DISPLIST1 0x00000024
343#define SCALER_DISPLIST2 0x00000028
344#define SCALER_DISPLSTAT 0x0000002c
345#define SCALER_DISPLISTX(x) (SCALER_DISPLIST0 + \
346 (x) * (SCALER_DISPLIST1 - \
347 SCALER_DISPLIST0))
348
349#define SCALER_DISPLACT0 0x00000030
350#define SCALER_DISPLACT1 0x00000034
351#define SCALER_DISPLACT2 0x00000038
352#define SCALER_DISPLACTX(x) (SCALER_DISPLACT0 + \
353 (x) * (SCALER_DISPLACT1 - \
354 SCALER_DISPLACT0))
355
356#define SCALER_DISPCTRL0 0x00000040
357# define SCALER_DISPCTRLX_ENABLE BIT(31)
358# define SCALER_DISPCTRLX_RESET BIT(30)
359/* Generates a single frame when VSTART is seen and stops at the last
360 * pixel read from the FIFO.
361 */
362# define SCALER_DISPCTRLX_ONESHOT BIT(29)
363/* Processes a single context in the dlist and then task switch,
364 * instead of an entire line.
365 */
366# define SCALER_DISPCTRLX_ONECTX BIT(28)
367/* Set to have DISPSLAVE return 2 16bpp pixels and no status data. */
368# define SCALER_DISPCTRLX_FIFO32 BIT(27)
369/* Turns on output to the DISPSLAVE register instead of the normal
370 * FIFO.
371 */
372# define SCALER_DISPCTRLX_FIFOREG BIT(26)
373
374# define SCALER_DISPCTRLX_WIDTH_MASK VC4_MASK(23, 12)
375# define SCALER_DISPCTRLX_WIDTH_SHIFT 12
376# define SCALER_DISPCTRLX_HEIGHT_MASK VC4_MASK(11, 0)
377# define SCALER_DISPCTRLX_HEIGHT_SHIFT 0
378
379# define SCALER5_DISPCTRLX_WIDTH_MASK VC4_MASK(28, 16)
380# define SCALER5_DISPCTRLX_WIDTH_SHIFT 16
381/* Generates a single frame when VSTART is seen and stops at the last
382 * pixel read from the FIFO.
383 */
384# define SCALER5_DISPCTRLX_ONESHOT BIT(15)
385/* Processes a single context in the dlist and then task switch,
386 * instead of an entire line.
387 */
388# define SCALER5_DISPCTRLX_ONECTX_MASK VC4_MASK(14, 13)
389# define SCALER5_DISPCTRLX_ONECTX_SHIFT 13
390# define SCALER5_DISPCTRLX_HEIGHT_MASK VC4_MASK(12, 0)
391# define SCALER5_DISPCTRLX_HEIGHT_SHIFT 0
392
393#define SCALER_DISPBKGND0 0x00000044
394# define SCALER_DISPBKGND_AUTOHS BIT(31)
395# define SCALER5_DISPBKGND_BCK2BCK BIT(31)
396# define SCALER_DISPBKGND_INTERLACE BIT(30)
397# define SCALER_DISPBKGND_GAMMA BIT(29)
398# define SCALER_DISPBKGND_TESTMODE_MASK VC4_MASK(28, 25)
399# define SCALER_DISPBKGND_TESTMODE_SHIFT 25
400/* Enables filling the scaler line with the RGB value in the low 24
401 * bits before compositing. Costs cycles, so should be skipped if
402 * opaque display planes will cover everything.
403 */
404# define SCALER_DISPBKGND_FILL BIT(24)
405
406#define SCALER_DISPSTAT0 0x00000048
407# define SCALER_DISPSTATX_MODE_MASK VC4_MASK(31, 30)
408# define SCALER_DISPSTATX_MODE_SHIFT 30
409# define SCALER_DISPSTATX_MODE_DISABLED 0
410# define SCALER_DISPSTATX_MODE_INIT 1
411# define SCALER_DISPSTATX_MODE_RUN 2
412# define SCALER_DISPSTATX_MODE_EOF 3
413# define SCALER_DISPSTATX_FULL BIT(29)
414# define SCALER_DISPSTATX_EMPTY BIT(28)
415# define SCALER_DISPSTATX_LINE_MASK VC4_MASK(11, 0)
416# define SCALER_DISPSTATX_LINE_SHIFT 0
417
418#define SCALER_DISPBASE0 0x0000004c
419/* Last pixel in the COB (display FIFO memory) allocated to this HVS
420 * channel. Must be 4-pixel aligned (and thus 4 pixels less than the
421 * next COB base).
422 */
423# define SCALER_DISPBASEX_TOP_MASK VC4_MASK(31, 16)
424# define SCALER_DISPBASEX_TOP_SHIFT 16
425/* First pixel in the COB (display FIFO memory) allocated to this HVS
426 * channel. Must be 4-pixel aligned.
427 */
428# define SCALER_DISPBASEX_BASE_MASK VC4_MASK(15, 0)
429# define SCALER_DISPBASEX_BASE_SHIFT 0
430
431#define SCALER_DISPCTRL1 0x00000050
432#define SCALER_DISPBKGND1 0x00000054
433#define SCALER_DISPBKGNDX(x) (SCALER_DISPBKGND0 + \
434 (x) * (SCALER_DISPBKGND1 - \
435 SCALER_DISPBKGND0))
436#define SCALER_DISPSTAT1 0x00000058
437# define SCALER_DISPSTAT1_FRCNT0_MASK VC4_MASK(23, 18)
438# define SCALER_DISPSTAT1_FRCNT0_SHIFT 18
439# define SCALER_DISPSTAT1_FRCNT1_MASK VC4_MASK(17, 12)
440# define SCALER_DISPSTAT1_FRCNT1_SHIFT 12
441# define SCALER5_DISPSTAT1_FRCNT0_MASK VC4_MASK(25, 20)
442# define SCALER5_DISPSTAT1_FRCNT0_SHIFT 20
443# define SCALER5_DISPSTAT1_FRCNT1_MASK VC4_MASK(19, 14)
444# define SCALER5_DISPSTAT1_FRCNT1_SHIFT 14
445
446#define SCALER_DISPSTATX(x) (SCALER_DISPSTAT0 + \
447 (x) * (SCALER_DISPSTAT1 - \
448 SCALER_DISPSTAT0))
449
450#define SCALER_DISPBASE1 0x0000005c
451#define SCALER_DISPBASEX(x) (SCALER_DISPBASE0 + \
452 (x) * (SCALER_DISPBASE1 - \
453 SCALER_DISPBASE0))
454#define SCALER_DISPCTRL2 0x00000060
455#define SCALER_DISPCTRLX(x) (SCALER_DISPCTRL0 + \
456 (x) * (SCALER_DISPCTRL1 - \
457 SCALER_DISPCTRL0))
458#define SCALER_DISPBKGND2 0x00000064
459
460#define SCALER_DISPSTAT2 0x00000068
461# define SCALER_DISPSTAT2_FRCNT2_MASK VC4_MASK(17, 12)
462# define SCALER_DISPSTAT2_FRCNT2_SHIFT 12
463# define SCALER5_DISPSTAT2_FRCNT2_MASK VC4_MASK(19, 14)
464# define SCALER5_DISPSTAT2_FRCNT2_SHIFT 14
465
466#define SCALER_DISPBASE2 0x0000006c
467#define SCALER_DISPALPHA2 0x00000070
468#define SCALER_GAMADDR 0x00000078
469# define SCALER_GAMADDR_AUTOINC BIT(31)
470/* Enables all gamma ramp SRAMs, not just those of CRTCs with gamma
471 * enabled.
472 */
473# define SCALER_GAMADDR_SRAMENB BIT(30)
474
475#define SCALER_OLEDOFFS 0x00000080
476/* Clamps R to [16,235] and G/B to [16,240]. */
477# define SCALER_OLEDOFFS_YUVCLAMP BIT(31)
478
479/* Chooses which display FIFO the matrix applies to. */
480# define SCALER_OLEDOFFS_DISPFIFO_MASK VC4_MASK(25, 24)
481# define SCALER_OLEDOFFS_DISPFIFO_SHIFT 24
482# define SCALER_OLEDOFFS_DISPFIFO_DISABLED 0
483# define SCALER_OLEDOFFS_DISPFIFO_0 1
484# define SCALER_OLEDOFFS_DISPFIFO_1 2
485# define SCALER_OLEDOFFS_DISPFIFO_2 3
486
487/* Offsets are 8-bit 2s-complement. */
488# define SCALER_OLEDOFFS_RED_MASK VC4_MASK(23, 16)
489# define SCALER_OLEDOFFS_RED_SHIFT 16
490# define SCALER_OLEDOFFS_GREEN_MASK VC4_MASK(15, 8)
491# define SCALER_OLEDOFFS_GREEN_SHIFT 8
492# define SCALER_OLEDOFFS_BLUE_MASK VC4_MASK(7, 0)
493# define SCALER_OLEDOFFS_BLUE_SHIFT 0
494
495/* The coefficients are S0.9 fractions. */
496#define SCALER_OLEDCOEF0 0x00000084
497# define SCALER_OLEDCOEF0_B_TO_R_MASK VC4_MASK(29, 20)
498# define SCALER_OLEDCOEF0_B_TO_R_SHIFT 20
499# define SCALER_OLEDCOEF0_B_TO_G_MASK VC4_MASK(19, 10)
500# define SCALER_OLEDCOEF0_B_TO_G_SHIFT 10
501# define SCALER_OLEDCOEF0_B_TO_B_MASK VC4_MASK(9, 0)
502# define SCALER_OLEDCOEF0_B_TO_B_SHIFT 0
503
504#define SCALER_OLEDCOEF1 0x00000088
505# define SCALER_OLEDCOEF1_G_TO_R_MASK VC4_MASK(29, 20)
506# define SCALER_OLEDCOEF1_G_TO_R_SHIFT 20
507# define SCALER_OLEDCOEF1_G_TO_G_MASK VC4_MASK(19, 10)
508# define SCALER_OLEDCOEF1_G_TO_G_SHIFT 10
509# define SCALER_OLEDCOEF1_G_TO_B_MASK VC4_MASK(9, 0)
510# define SCALER_OLEDCOEF1_G_TO_B_SHIFT 0
511
512#define SCALER_OLEDCOEF2 0x0000008c
513# define SCALER_OLEDCOEF2_R_TO_R_MASK VC4_MASK(29, 20)
514# define SCALER_OLEDCOEF2_R_TO_R_SHIFT 20
515# define SCALER_OLEDCOEF2_R_TO_G_MASK VC4_MASK(19, 10)
516# define SCALER_OLEDCOEF2_R_TO_G_SHIFT 10
517# define SCALER_OLEDCOEF2_R_TO_B_MASK VC4_MASK(9, 0)
518# define SCALER_OLEDCOEF2_R_TO_B_SHIFT 0
519
520/* Slave addresses for DMAing from HVS composition output to other
521 * devices. The top bits are valid only in !FIFO32 mode.
522 */
523#define SCALER_DISPSLAVE0 0x000000c0
524#define SCALER_DISPSLAVE1 0x000000c9
525#define SCALER_DISPSLAVE2 0x000000d0
526# define SCALER_DISPSLAVE_ISSUE_VSTART BIT(31)
527# define SCALER_DISPSLAVE_ISSUE_HSTART BIT(30)
528/* Set when the current line has been read and an HSTART is required. */
529# define SCALER_DISPSLAVE_EOL BIT(26)
530/* Set when the display FIFO is empty. */
531# define SCALER_DISPSLAVE_EMPTY BIT(25)
532/* Set when there is RGB data ready to read. */
533# define SCALER_DISPSLAVE_VALID BIT(24)
534# define SCALER_DISPSLAVE_RGB_MASK VC4_MASK(23, 0)
535# define SCALER_DISPSLAVE_RGB_SHIFT 0
536
537#define SCALER_GAMDATA 0x000000e0
538#define SCALER_DLIST_START 0x00002000
539#define SCALER_DLIST_SIZE 0x00004000
540
541#define SCALER5_DLIST_START 0x00004000
542
543#define SCALER6_VERSION 0x00000000
544# define SCALER6_VERSION_MASK VC4_MASK(7, 0)
545# define SCALER6_VERSION_C0 0x00000053
546# define SCALER6_VERSION_D0 0x00000054
547#define SCALER6_CXM_SIZE 0x00000004
548#define SCALER6_LBM_SIZE 0x00000008
549#define SCALER6_UBM_SIZE 0x0000000c
550#define SCALER6_COBA_SIZE 0x00000010
551#define SCALER6_COB_SIZE 0x00000014
552
553#define SCALER6_CONTROL 0x00000020
554# define SCALER6_CONTROL_HVS_EN BIT(31)
555# define SCALER6_CONTROL_PF_LINES_MASK VC4_MASK(22, 18)
556# define SCALER6_CONTROL_ABORT_ON_EMPTY BIT(16)
557# define SCALER6_CONTROL_DSP1_TARGET_MASK VC4_MASK(13, 12)
558# define SCALER6_CONTROL_MAX_REQS_MASK VC4_MASK(7, 4)
559
560#define SCALER6_FETCHER_STATUS 0x00000024
561#define SCALER6_FETCH_STATUS 0x00000028
562#define SCALER6_HANDLE_ERROR 0x0000002c
563
564#define SCALER6_DISP0_CTRL0 0x00000030
565#define SCALER6_DISPX_CTRL0(x) ((hvs->vc4->gen == VC4_GEN_6_C) ? \
566 (SCALER6_DISP0_CTRL0 + ((x) * (SCALER6_DISP1_CTRL0 - SCALER6_DISP0_CTRL0))) : \
567 (SCALER6D_DISP0_CTRL0 + ((x) * (SCALER6D_DISP1_CTRL0 - SCALER6D_DISP0_CTRL0))))
568# define SCALER6_DISPX_CTRL0_ENB BIT(31)
569# define SCALER6_DISPX_CTRL0_RESET BIT(30)
570# define SCALER6_DISPX_CTRL0_FWIDTH_MASK VC4_MASK(28, 16)
571# define SCALER6_DISPX_CTRL0_ONESHOT BIT(15)
572# define SCALER6_DISPX_CTRL0_ONECTX_MASK VC4_MASK(14, 13)
573# define SCALER6_DISPX_CTRL0_LINES_MASK VC4_MASK(12, 0)
574
575#define SCALER6_DISP0_CTRL1 0x00000034
576#define SCALER6_DISPX_CTRL1(x) ((hvs->vc4->gen == VC4_GEN_6_C) ? \
577 (SCALER6_DISP0_CTRL1 + ((x) * (SCALER6_DISP1_CTRL1 - SCALER6_DISP0_CTRL1))) : \
578 (SCALER6D_DISP0_CTRL1 + ((x) * (SCALER6D_DISP1_CTRL1 - SCALER6D_DISP0_CTRL1))))
579# define SCALER6_DISPX_CTRL1_BGENB BIT(8)
580# define SCALER6_DISPX_CTRL1_INTLACE BIT(0)
581
582#define SCALER6_DISP0_BGND 0x00000038
583#define SCALER6_DISPX_BGND(x) ((hvs->vc4->gen == VC4_GEN_6_C) ? \
584 (SCALER6_DISP0_BGND + ((x) * (SCALER6_DISP1_BGND - SCALER6_DISP0_BGND))) : \
585 (SCALER6D_DISP0_BGND + ((x) * (SCALER6D_DISP1_BGND - SCALER6D_DISP0_BGND))))
586
587#define SCALER6_DISP0_LPTRS 0x0000003c
588#define SCALER6_DISPX_LPTRS(x) ((hvs->vc4->gen == VC4_GEN_6_C) ? \
589 (SCALER6_DISP0_LPTRS + ((x) * (SCALER6_DISP1_LPTRS - SCALER6_DISP0_LPTRS))) : \
590 (SCALER6D_DISP0_LPTRS + ((x) * (SCALER6D_DISP1_LPTRS - SCALER6D_DISP0_LPTRS))))
591# define SCALER6_DISPX_LPTRS_HEADE_MASK VC4_MASK(11, 0)
592
593#define SCALER6_DISP0_COB 0x00000040
594#define SCALER6_DISPX_COB(x) ((hvs->vc4->gen == VC4_GEN_6_C) ? \
595 (SCALER6_DISP0_COB + ((x) * (SCALER6_DISP1_COB - SCALER6_DISP0_COB))) : \
596 (SCALER6D_DISP0_COB + ((x) * (SCALER6D_DISP1_COB - SCALER6D_DISP0_COB))))
597# define SCALER6_DISPX_COB_TOP_MASK VC4_MASK(31, 16)
598# define SCALER6_DISPX_COB_BASE_MASK VC4_MASK(15, 0)
599
600#define SCALER6_DISP0_STATUS 0x00000044
601#define SCALER6_DISPX_STATUS(x) ((hvs->vc4->gen == VC4_GEN_6_C) ? \
602 (SCALER6_DISP0_STATUS + ((x) * (SCALER6_DISP1_STATUS - SCALER6_DISP0_STATUS))) : \
603 (SCALER6D_DISP0_STATUS + ((x) * (SCALER6D_DISP1_STATUS - SCALER6D_DISP0_STATUS))))
604# define SCALER6_DISPX_STATUS_EMPTY BIT(22)
605# define SCALER6_DISPX_STATUS_FRCNT_MASK VC4_MASK(21, 16)
606# define SCALER6_DISPX_STATUS_OFIELD BIT(15)
607# define SCALER6_DISPX_STATUS_MODE_MASK VC4_MASK(14, 13)
608# define SCALER6_DISPX_STATUS_MODE_DISABLED 0
609# define SCALER6_DISPX_STATUS_MODE_INIT 1
610# define SCALER6_DISPX_STATUS_MODE_RUN 2
611# define SCALER6_DISPX_STATUS_MODE_EOF 3
612# define SCALER6_DISPX_STATUS_YLINE_MASK VC4_MASK(12, 0)
613
614#define SCALER6_DISP0_DL 0x00000048
615
616#define SCALER6_DISPX_DL(x) ((hvs->vc4->gen == VC4_GEN_6_C) ? \
617 (SCALER6_DISP0_DL + ((x) * (SCALER6_DISP1_DL - SCALER6_DISP0_DL))) : \
618 (SCALER6D_DISP0_DL + ((x) * (SCALER6D_DISP1_DL - SCALER6D_DISP0_DL))))
619# define SCALER6_DISPX_DL_LACT_MASK VC4_MASK(11, 0)
620
621#define SCALER6_DISP0_RUN 0x0000004c
622#define SCALER6_DISP1_CTRL0 0x00000050
623#define SCALER6_DISP1_CTRL1 0x00000054
624#define SCALER6_DISP1_BGND 0x00000058
625#define SCALER6_DISP1_LPTRS 0x0000005c
626#define SCALER6_DISP1_COB 0x00000060
627#define SCALER6_DISP1_STATUS 0x00000064
628#define SCALER6_DISP1_DL 0x00000068
629#define SCALER6_DISP1_RUN 0x0000006c
630#define SCALER6_DISP2_CTRL0 0x00000070
631#define SCALER6_DISP2_CTRL1 0x00000074
632#define SCALER6_DISP2_BGND 0x00000078
633#define SCALER6_DISP2_LPTRS 0x0000007c
634#define SCALER6_DISP2_COB 0x00000080
635#define SCALER6_DISP2_STATUS 0x00000084
636#define SCALER6_DISP2_DL 0x00000088
637#define SCALER6_DISP2_RUN 0x0000008c
638#define SCALER6_EOLN 0x00000090
639#define SCALER6_DL_STATUS 0x00000094
640#define SCALER6_BFG_MISC 0x0000009c
641#define SCALER6_QOS0 0x000000a0
642#define SCALER6_PROF0 0x000000a4
643#define SCALER6_QOS1 0x000000a8
644#define SCALER6_PROF1 0x000000ac
645#define SCALER6_QOS2 0x000000b0
646#define SCALER6_PROF2 0x000000b4
647#define SCALER6_PRI_MAP0 0x000000b8
648#define SCALER6_PRI_MAP1 0x000000bc
649#define SCALER6_HISTCTRL 0x000000c0
650#define SCALER6_HISTBIN0 0x000000c4
651#define SCALER6_HISTBIN1 0x000000c8
652#define SCALER6_HISTBIN2 0x000000cc
653#define SCALER6_HISTBIN3 0x000000d0
654#define SCALER6_HISTBIN4 0x000000d4
655#define SCALER6_HISTBIN5 0x000000d8
656#define SCALER6_HISTBIN6 0x000000dc
657#define SCALER6_HISTBIN7 0x000000e0
658#define SCALER6_HDR_CFG_REMAP 0x000000f4
659#define SCALER6_COL_SPACE 0x000000f8
660#define SCALER6_HVS_ID 0x000000fc
661#define SCALER6_CFC1 0x00000100
662#define SCALER6_DISP_UPM_ISO0 0x00000200
663#define SCALER6_DISP_UPM_ISO1 0x00000204
664#define SCALER6_DISP_UPM_ISO2 0x00000208
665#define SCALER6_DISP_LBM_ISO0 0x0000020c
666#define SCALER6_DISP_LBM_ISO1 0x00000210
667#define SCALER6_DISP_LBM_ISO2 0x00000214
668#define SCALER6_DISP_COB_ISO0 0x00000218
669#define SCALER6_DISP_COB_ISO1 0x0000021c
670#define SCALER6_DISP_COB_ISO2 0x00000220
671#define SCALER6_BAD_COB 0x00000224
672#define SCALER6_BAD_LBM 0x00000228
673#define SCALER6_BAD_UPM 0x0000022c
674#define SCALER6_BAD_AXI 0x00000230
675
676#define SCALER6D_VERSION 0x00000000
677#define SCALER6D_CXM_SIZE 0x00000004
678#define SCALER6D_LBM_SIZE 0x00000008
679#define SCALER6D_UBM_SIZE 0x0000000c
680#define SCALER6D_COBA_SIZE 0x00000010
681#define SCALER6D_COB_SIZE 0x00000014
682#define SCALER6D_CONTROL 0x00000020
683#define SCALER6D_FETCHER_STATUS 0x00000024
684#define SCALER6D_FETCH_STATUS 0x00000028
685#define SCALER6D_HANDLE_ERROR 0x0000002c
686#define SCALER6D_EOLN 0x00000030
687#define SCALER6D_DL_STATUS 0x00000034
688#define SCALER6D_PRI_MAP0 0x00000038
689#define SCALER6D_PRI_MAP1 0x0000003c
690#define SCALER6D_HISTCTRL 0x000000d0
691#define SCALER6D_HISTBIN0 0x000000d4
692#define SCALER6D_HISTBIN1 0x000000d8
693#define SCALER6D_HISTBIN2 0x000000dc
694#define SCALER6D_HISTBIN3 0x000000e0
695#define SCALER6D_HISTBIN4 0x000000e4
696#define SCALER6D_HISTBIN5 0x000000e8
697#define SCALER6D_HISTBIN6 0x000000ec
698#define SCALER6D_HISTBIN7 0x000000f0
699#define SCALER6D_HVS_ID 0x000000fc
700
701#define SCALER6D_DISP0_CTRL0 0x00000100
702#define SCALER6D_DISP0_CTRL1 0x00000104
703#define SCALER6D_DISP0_BGND 0x00000108
704#define SCALER6D_DISP0_LPTRS 0x00000110
705#define SCALER6D_DISP0_COB 0x00000114
706#define SCALER6D_DISP0_STATUS 0x00000118
707#define SCALER6D_DISP0_CTRL0 0x00000100
708#define SCALER6D_DISP0_CTRL1 0x00000104
709#define SCALER6D_DISP0_BGND0 0x00000108
710#define SCALER6D_DISP0_BGND1 0x0000010c
711#define SCALER6D_DISP0_LPTRS 0x00000110
712#define SCALER6D_DISP0_COB 0x00000114
713#define SCALER6D_DISP0_STATUS 0x00000118
714#define SCALER6D_DISP0_DL 0x0000011c
715#define SCALER6D_DISP0_RUN 0x00000120
716#define SCALER6D_QOS0 0x00000124
717#define SCALER6D_PROF0 0x00000128
718#define SCALER6D_DISP1_CTRL0 0x00000140
719#define SCALER6D_DISP1_CTRL1 0x00000144
720#define SCALER6D_DISP1_BGND0 0x00000148
721#define SCALER6D_DISP1_BGND1 0x0000014c
722#define SCALER6D_DISP1_LPTRS 0x00000150
723#define SCALER6D_DISP1_COB 0x00000154
724#define SCALER6D_DISP1_STATUS 0x00000158
725#define SCALER6D_DISP1_DL 0x0000015c
726#define SCALER6D_DISP1_RUN 0x00000160
727#define SCALER6D_QOS1 0x00000164
728#define SCALER6D_PROF1 0x00000168
729#define SCALER6D_DISP2_CTRL0 0x00000180
730#define SCALER6D_DISP2_CTRL1 0x00000184
731#define SCALER6D_DISP2_BGND0 0x00000188
732#define SCALER6D_DISP2_BGND1 0x0000018c
733#define SCALER6D_DISP2_LPTRS 0x00000190
734#define SCALER6D_DISP2_COB 0x00000194
735#define SCALER6D_DISP2_STATUS 0x00000198
736#define SCALER6D_DISP2_DL 0x0000019c
737#define SCALER6D_DISP2_RUN 0x000001a0
738#define SCALER6D_QOS2 0x000001a4
739#define SCALER6D_PROF2 0x000001a8
740
741#define SCALER6(x) ((hvs->vc4->gen == VC4_GEN_6_C) ? SCALER6_ ## x : SCALER6D_ ## x)
742
743# define VC4_HDMI_SW_RESET_FORMAT_DETECT BIT(1)
744# define VC4_HDMI_SW_RESET_HDMI BIT(0)
745
746# define VC4_HDMI_HOTPLUG_CONNECTED BIT(0)
747
748# define VC4_HDMI_MAI_CONFIG_FORMAT_REVERSE BIT(27)
749# define VC4_HDMI_MAI_CONFIG_BIT_REVERSE BIT(26)
750# define VC4_HDMI_MAI_CHANNEL_MASK_MASK VC4_MASK(15, 0)
751# define VC4_HDMI_MAI_CHANNEL_MASK_SHIFT 0
752
753# define VC4_HDMI_AUDIO_PACKET_ZERO_DATA_ON_SAMPLE_FLAT BIT(29)
754# define VC4_HDMI_AUDIO_PACKET_ZERO_DATA_ON_INACTIVE_CHANNELS BIT(24)
755# define VC4_HDMI_AUDIO_PACKET_FORCE_SAMPLE_PRESENT BIT(19)
756# define VC4_HDMI_AUDIO_PACKET_FORCE_B_FRAME BIT(18)
757# define VC4_HDMI_AUDIO_PACKET_B_FRAME_IDENTIFIER_MASK VC4_MASK(13, 10)
758# define VC4_HDMI_AUDIO_PACKET_B_FRAME_IDENTIFIER_SHIFT 10
759/* If set, then multichannel, otherwise 2 channel. */
760# define VC4_HDMI_AUDIO_PACKET_AUDIO_LAYOUT BIT(9)
761/* If set, then AUDIO_LAYOUT overrides audio_cea_mask */
762# define VC4_HDMI_AUDIO_PACKET_FORCE_AUDIO_LAYOUT BIT(8)
763# define VC4_HDMI_AUDIO_PACKET_CEA_MASK_MASK VC4_MASK(7, 0)
764# define VC4_HDMI_AUDIO_PACKET_CEA_MASK_SHIFT 0
765
766# define VC4_HDMI_MAI_FORMAT_AUDIO_FORMAT_MASK VC4_MASK(23, 16)
767# define VC4_HDMI_MAI_FORMAT_AUDIO_FORMAT_SHIFT 16
768
769enum {
770 VC4_HDMI_MAI_FORMAT_PCM = 2,
771 VC4_HDMI_MAI_FORMAT_HBR = 200,
772};
773
774# define VC4_HDMI_MAI_FORMAT_SAMPLE_RATE_MASK VC4_MASK(15, 8)
775# define VC4_HDMI_MAI_FORMAT_SAMPLE_RATE_SHIFT 8
776
777enum {
778 VC4_HDMI_MAI_SAMPLE_RATE_NOT_INDICATED = 0,
779 VC4_HDMI_MAI_SAMPLE_RATE_8000 = 1,
780 VC4_HDMI_MAI_SAMPLE_RATE_11025 = 2,
781 VC4_HDMI_MAI_SAMPLE_RATE_12000 = 3,
782 VC4_HDMI_MAI_SAMPLE_RATE_16000 = 4,
783 VC4_HDMI_MAI_SAMPLE_RATE_22050 = 5,
784 VC4_HDMI_MAI_SAMPLE_RATE_24000 = 6,
785 VC4_HDMI_MAI_SAMPLE_RATE_32000 = 7,
786 VC4_HDMI_MAI_SAMPLE_RATE_44100 = 8,
787 VC4_HDMI_MAI_SAMPLE_RATE_48000 = 9,
788 VC4_HDMI_MAI_SAMPLE_RATE_64000 = 10,
789 VC4_HDMI_MAI_SAMPLE_RATE_88200 = 11,
790 VC4_HDMI_MAI_SAMPLE_RATE_96000 = 12,
791 VC4_HDMI_MAI_SAMPLE_RATE_128000 = 13,
792 VC4_HDMI_MAI_SAMPLE_RATE_176400 = 14,
793 VC4_HDMI_MAI_SAMPLE_RATE_192000 = 15,
794};
795
796# define VC4_HDMI_RAM_PACKET_ENABLE BIT(16)
797
798/* When set, the CTS_PERIOD counts based on MAI bus sync pulse instead
799 * of pixel clock.
800 */
801# define VC4_HDMI_CRP_USE_MAI_BUS_SYNC_FOR_CTS BIT(26)
802/* When set, no CRP packets will be sent. */
803# define VC4_HDMI_CRP_CFG_DISABLE BIT(25)
804/* If set, generates CTS values based on N, audio clock, and video
805 * clock. N must be divisible by 128.
806 */
807# define VC4_HDMI_CRP_CFG_EXTERNAL_CTS_EN BIT(24)
808# define VC4_HDMI_CRP_CFG_N_MASK VC4_MASK(19, 0)
809# define VC4_HDMI_CRP_CFG_N_SHIFT 0
810
811# define VC4_HDMI_HORZA_VPOS BIT(14)
812# define VC4_HDMI_HORZA_HPOS BIT(13)
813/* Horizontal active pixels (hdisplay). */
814# define VC4_HDMI_HORZA_HAP_MASK VC4_MASK(12, 0)
815# define VC4_HDMI_HORZA_HAP_SHIFT 0
816
817/* Horizontal back porch (htotal - hsync_end). */
818# define VC4_HDMI_HORZB_HBP_MASK VC4_MASK(29, 20)
819# define VC4_HDMI_HORZB_HBP_SHIFT 20
820/* Horizontal sync pulse (hsync_end - hsync_start). */
821# define VC4_HDMI_HORZB_HSP_MASK VC4_MASK(19, 10)
822# define VC4_HDMI_HORZB_HSP_SHIFT 10
823/* Horizontal front porch (hsync_start - hdisplay). */
824# define VC4_HDMI_HORZB_HFP_MASK VC4_MASK(9, 0)
825# define VC4_HDMI_HORZB_HFP_SHIFT 0
826
827# define VC4_HDMI_FIFO_CTL_RECENTER_DONE BIT(14)
828# define VC4_HDMI_FIFO_CTL_USE_EMPTY BIT(13)
829# define VC4_HDMI_FIFO_CTL_ON_VB BIT(7)
830# define VC4_HDMI_FIFO_CTL_RECENTER BIT(6)
831# define VC4_HDMI_FIFO_CTL_FIFO_RESET BIT(5)
832# define VC4_HDMI_FIFO_CTL_USE_PLL_LOCK BIT(4)
833# define VC4_HDMI_FIFO_CTL_INV_CLK_XFR BIT(3)
834# define VC4_HDMI_FIFO_CTL_CAPTURE_PTR BIT(2)
835# define VC4_HDMI_FIFO_CTL_USE_FULL BIT(1)
836# define VC4_HDMI_FIFO_CTL_MASTER_SLAVE_N BIT(0)
837# define VC4_HDMI_FIFO_VALID_WRITE_MASK 0xefff
838
839# define VC4_HDMI_SCHEDULER_CONTROL_MANUAL_FORMAT BIT(15)
840# define VC4_HDMI_SCHEDULER_CONTROL_IGNORE_VSYNC_PREDICTS BIT(5)
841# define VC4_HDMI_SCHEDULER_CONTROL_VERT_ALWAYS_KEEPOUT BIT(3)
842# define VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE BIT(1)
843# define VC4_HDMI_SCHEDULER_CONTROL_MODE_HDMI BIT(0)
844
845/* Vertical sync pulse (vsync_end - vsync_start). */
846# define VC4_HDMI_VERTA_VSP_MASK VC4_MASK(24, 20)
847# define VC4_HDMI_VERTA_VSP_SHIFT 20
848/* Vertical front porch (vsync_start - vdisplay). */
849# define VC4_HDMI_VERTA_VFP_MASK VC4_MASK(19, 13)
850# define VC4_HDMI_VERTA_VFP_SHIFT 13
851/* Vertical active lines (vdisplay). */
852# define VC4_HDMI_VERTA_VAL_MASK VC4_MASK(12, 0)
853# define VC4_HDMI_VERTA_VAL_SHIFT 0
854
855/* Vertical sync pulse offset (for interlaced) */
856# define VC4_HDMI_VERTB_VSPO_MASK VC4_MASK(21, 9)
857# define VC4_HDMI_VERTB_VSPO_SHIFT 9
858/* Vertical pack porch (vtotal - vsync_end). */
859# define VC4_HDMI_VERTB_VBP_MASK VC4_MASK(8, 0)
860# define VC4_HDMI_VERTB_VBP_SHIFT 0
861
862/* Set when the transmission has ended. */
863# define VC4_HDMI_CEC_TX_EOM BIT(31)
864/* If set, transmission was acked on the 1st or 2nd attempt (only one
865 * retry is attempted). If in continuous mode, this means TX needs to
866 * be filled if !TX_EOM.
867 */
868# define VC4_HDMI_CEC_TX_STATUS_GOOD BIT(30)
869# define VC4_HDMI_CEC_RX_EOM BIT(29)
870# define VC4_HDMI_CEC_RX_STATUS_GOOD BIT(28)
871/* Number of bytes received for the message. */
872# define VC4_HDMI_CEC_REC_WRD_CNT_MASK VC4_MASK(27, 24)
873# define VC4_HDMI_CEC_REC_WRD_CNT_SHIFT 24
874/* Sets continuous receive mode. Generates interrupt after each 8
875 * bytes to signal that RX_DATA should be consumed, and at RX_EOM.
876 *
877 * If disabled, maximum 16 bytes will be received (including header),
878 * and interrupt at RX_EOM. Later bytes will be acked but not put
879 * into the RX_DATA.
880 */
881# define VC4_HDMI_CEC_RX_CONTINUE BIT(23)
882# define VC4_HDMI_CEC_TX_CONTINUE BIT(22)
883/* Set this after a CEC interrupt. */
884# define VC4_HDMI_CEC_CLEAR_RECEIVE_OFF BIT(21)
885/* Starts a TX. Will wait for appropriate idel time before CEC
886 * activity. Must be cleared in between transmits.
887 */
888# define VC4_HDMI_CEC_START_XMIT_BEGIN BIT(20)
889# define VC4_HDMI_CEC_MESSAGE_LENGTH_MASK VC4_MASK(19, 16)
890# define VC4_HDMI_CEC_MESSAGE_LENGTH_SHIFT 16
891/* Device's CEC address */
892# define VC4_HDMI_CEC_ADDR_MASK VC4_MASK(15, 12)
893# define VC4_HDMI_CEC_ADDR_SHIFT 12
894/* Divides off of HSM clock to generate CEC bit clock. */
895/* With the current defaults the CEC bit clock is 40 kHz = 25 usec */
896# define VC4_HDMI_CEC_DIV_CLK_CNT_MASK VC4_MASK(11, 0)
897# define VC4_HDMI_CEC_DIV_CLK_CNT_SHIFT 0
898
899/* Set these fields to how many bit clock cycles get to that many
900 * microseconds.
901 */
902# define VC4_HDMI_CEC_CNT_TO_1500_US_MASK VC4_MASK(30, 24)
903# define VC4_HDMI_CEC_CNT_TO_1500_US_SHIFT 24
904# define VC4_HDMI_CEC_CNT_TO_1300_US_MASK VC4_MASK(23, 17)
905# define VC4_HDMI_CEC_CNT_TO_1300_US_SHIFT 17
906# define VC4_HDMI_CEC_CNT_TO_800_US_MASK VC4_MASK(16, 11)
907# define VC4_HDMI_CEC_CNT_TO_800_US_SHIFT 11
908# define VC4_HDMI_CEC_CNT_TO_600_US_MASK VC4_MASK(10, 5)
909# define VC4_HDMI_CEC_CNT_TO_600_US_SHIFT 5
910# define VC4_HDMI_CEC_CNT_TO_400_US_MASK VC4_MASK(4, 0)
911# define VC4_HDMI_CEC_CNT_TO_400_US_SHIFT 0
912
913# define VC4_HDMI_CEC_CNT_TO_2750_US_MASK VC4_MASK(31, 24)
914# define VC4_HDMI_CEC_CNT_TO_2750_US_SHIFT 24
915# define VC4_HDMI_CEC_CNT_TO_2400_US_MASK VC4_MASK(23, 16)
916# define VC4_HDMI_CEC_CNT_TO_2400_US_SHIFT 16
917# define VC4_HDMI_CEC_CNT_TO_2050_US_MASK VC4_MASK(15, 8)
918# define VC4_HDMI_CEC_CNT_TO_2050_US_SHIFT 8
919# define VC4_HDMI_CEC_CNT_TO_1700_US_MASK VC4_MASK(7, 0)
920# define VC4_HDMI_CEC_CNT_TO_1700_US_SHIFT 0
921
922# define VC4_HDMI_CEC_CNT_TO_4300_US_MASK VC4_MASK(31, 24)
923# define VC4_HDMI_CEC_CNT_TO_4300_US_SHIFT 24
924# define VC4_HDMI_CEC_CNT_TO_3900_US_MASK VC4_MASK(23, 16)
925# define VC4_HDMI_CEC_CNT_TO_3900_US_SHIFT 16
926# define VC4_HDMI_CEC_CNT_TO_3600_US_MASK VC4_MASK(15, 8)
927# define VC4_HDMI_CEC_CNT_TO_3600_US_SHIFT 8
928# define VC4_HDMI_CEC_CNT_TO_3500_US_MASK VC4_MASK(7, 0)
929# define VC4_HDMI_CEC_CNT_TO_3500_US_SHIFT 0
930
931# define VC4_HDMI_CEC_TX_SW_RESET BIT(27)
932# define VC4_HDMI_CEC_RX_SW_RESET BIT(26)
933# define VC4_HDMI_CEC_PAD_SW_RESET BIT(25)
934# define VC4_HDMI_CEC_MUX_TP_OUT_CEC BIT(24)
935# define VC4_HDMI_CEC_RX_CEC_INT BIT(23)
936# define VC4_HDMI_CEC_CLK_PRELOAD_MASK VC4_MASK(22, 16)
937# define VC4_HDMI_CEC_CLK_PRELOAD_SHIFT 16
938# define VC4_HDMI_CEC_CNT_TO_4700_US_MASK VC4_MASK(15, 8)
939# define VC4_HDMI_CEC_CNT_TO_4700_US_SHIFT 8
940# define VC4_HDMI_CEC_CNT_TO_4500_US_MASK VC4_MASK(7, 0)
941# define VC4_HDMI_CEC_CNT_TO_4500_US_SHIFT 0
942
943# define VC4_HDMI_TX_PHY_RNG_PWRDN BIT(25)
944
945# define VC4_HDMI_CPU_CEC BIT(6)
946# define VC4_HDMI_CPU_HOTPLUG BIT(0)
947
948/* Debug: Current receive value on the CEC pad. */
949# define VC4_HD_CECRXD BIT(9)
950/* Debug: Override CEC output to 0. */
951# define VC4_HD_CECOVR BIT(8)
952# define VC4_HD_M_REGISTER_FILE_STANDBY (3 << 6)
953# define VC4_HD_M_RAM_STANDBY (3 << 4)
954# define VC4_HD_M_SW_RST BIT(2)
955# define VC4_HD_M_ENABLE BIT(0)
956
957/* Set when audio stream is received at a slower rate than the
958 * sampling period, so MAI fifo goes empty. Write 1 to clear.
959 */
960# define VC4_HD_MAI_CTL_DLATE BIT(15)
961# define VC4_HD_MAI_CTL_BUSY BIT(14)
962# define VC4_HD_MAI_CTL_CHALIGN BIT(13)
963# define VC4_HD_MAI_CTL_WHOLSMP BIT(12)
964# define VC4_HD_MAI_CTL_FULL BIT(11)
965# define VC4_HD_MAI_CTL_EMPTY BIT(10)
966# define VC4_HD_MAI_CTL_FLUSH BIT(9)
967/* If set, MAI bus generates SPDIF (bit 31) parity instead of passing
968 * through.
969 */
970# define VC4_HD_MAI_CTL_PAREN BIT(8)
971# define VC4_HD_MAI_CTL_CHNUM_MASK VC4_MASK(7, 4)
972# define VC4_HD_MAI_CTL_CHNUM_SHIFT 4
973# define VC4_HD_MAI_CTL_ENABLE BIT(3)
974/* Underflow error status bit, write 1 to clear. */
975# define VC4_HD_MAI_CTL_ERRORE BIT(2)
976/* Overflow error status bit, write 1 to clear. */
977# define VC4_HD_MAI_CTL_ERRORF BIT(1)
978/* Single-shot reset bit. Read value is undefined. */
979# define VC4_HD_MAI_CTL_RESET BIT(0)
980
981# define VC4_HD_MAI_THR_PANICHIGH_MASK VC4_MASK(29, 24)
982# define VC4_HD_MAI_THR_PANICHIGH_SHIFT 24
983# define VC4_HD_MAI_THR_PANICLOW_MASK VC4_MASK(21, 16)
984# define VC4_HD_MAI_THR_PANICLOW_SHIFT 16
985# define VC4_HD_MAI_THR_DREQHIGH_MASK VC4_MASK(13, 8)
986# define VC4_HD_MAI_THR_DREQHIGH_SHIFT 8
987# define VC4_HD_MAI_THR_DREQLOW_MASK VC4_MASK(5, 0)
988# define VC4_HD_MAI_THR_DREQLOW_SHIFT 0
989
990# define VC6_D_HD_MAI_THR_PANICHIGH_MASK VC4_MASK(29, 23)
991# define VC6_D_HD_MAI_THR_PANICHIGH_SHIFT 23
992# define VC6_D_HD_MAI_THR_PANICLOW_MASK VC4_MASK(21, 15)
993# define VC6_D_HD_MAI_THR_PANICLOW_SHIFT 15
994# define VC6_D_HD_MAI_THR_DREQHIGH_MASK VC4_MASK(13, 7)
995# define VC6_D_HD_MAI_THR_DREQHIGH_SHIFT 7
996# define VC6_D_HD_MAI_THR_DREQLOW_MASK VC4_MASK(6, 0)
997# define VC6_D_HD_MAI_THR_DREQLOW_SHIFT 0
998
999/* Divider from HDMI HSM clock to MAI serial clock. Sampling period
1000 * converges to N / (M + 1) cycles.
1001 */
1002# define VC4_HD_MAI_SMP_N_MASK VC4_MASK(31, 8)
1003# define VC4_HD_MAI_SMP_N_SHIFT 8
1004# define VC4_HD_MAI_SMP_M_MASK VC4_MASK(7, 0)
1005# define VC4_HD_MAI_SMP_M_SHIFT 0
1006
1007# define VC4_HD_VID_CTL_ENABLE BIT(31)
1008# define VC4_HD_VID_CTL_UNDERFLOW_ENABLE BIT(30)
1009# define VC4_HD_VID_CTL_FRAME_COUNTER_RESET BIT(29)
1010# define VC4_HD_VID_CTL_VSYNC_LOW BIT(28)
1011# define VC4_HD_VID_CTL_HSYNC_LOW BIT(27)
1012# define VC4_HD_VID_CTL_CLRSYNC BIT(24)
1013# define VC4_HD_VID_CTL_CLRRGB BIT(23)
1014# define VC4_HD_VID_CTL_BLANKPIX BIT(18)
1015# define VC4_HD_VID_CTL_BLANK_INSERT_EN BIT(16)
1016
1017# define VC4_HD_CSC_CTL_ORDER_MASK VC4_MASK(7, 5)
1018# define VC4_HD_CSC_CTL_ORDER_SHIFT 5
1019# define VC4_HD_CSC_CTL_ORDER_RGB 0
1020# define VC4_HD_CSC_CTL_ORDER_BGR 1
1021# define VC4_HD_CSC_CTL_ORDER_BRG 2
1022# define VC4_HD_CSC_CTL_ORDER_GRB 3
1023# define VC4_HD_CSC_CTL_ORDER_GBR 4
1024# define VC4_HD_CSC_CTL_ORDER_RBG 5
1025# define VC4_HD_CSC_CTL_PADMSB BIT(4)
1026# define VC4_HD_CSC_CTL_MODE_MASK VC4_MASK(3, 2)
1027# define VC4_HD_CSC_CTL_MODE_SHIFT 2
1028# define VC4_HD_CSC_CTL_MODE_RGB_TO_SD_YPRPB 0
1029# define VC4_HD_CSC_CTL_MODE_RGB_TO_HD_YPRPB 1
1030# define VC4_HD_CSC_CTL_MODE_CUSTOM 3
1031# define VC4_HD_CSC_CTL_RGB2YCC BIT(1)
1032# define VC4_HD_CSC_CTL_ENABLE BIT(0)
1033
1034# define VC5_MT_CP_CSC_CTL_USE_444_TO_422 BIT(6)
1035# define VC5_MT_CP_CSC_CTL_FILTER_MODE_444_TO_422_MASK \
1036 VC4_MASK(5, 4)
1037# define VC5_MT_CP_CSC_CTL_FILTER_MODE_444_TO_422_STANDARD \
1038 3
1039# define VC5_MT_CP_CSC_CTL_USE_RNG_SUPPRESSION BIT(3)
1040# define VC5_MT_CP_CSC_CTL_ENABLE BIT(2)
1041# define VC5_MT_CP_CSC_CTL_MODE_MASK VC4_MASK(1, 0)
1042
1043# define VC5_MT_CP_CHANNEL_CTL_OUTPUT_REMAP_MASK \
1044 VC4_MASK(7, 6)
1045# define VC5_MT_CP_CHANNEL_CTL_OUTPUT_REMAP_LEGACY_STYLE \
1046 2
1047
1048# define VC4_DVP_HT_CLOCK_STOP_PIXEL BIT(1)
1049
1050# define VC5_DVP_HT_VEC_INTERFACE_CFG_SEL_422_MASK \
1051 VC4_MASK(3, 2)
1052# define VC5_DVP_HT_VEC_INTERFACE_CFG_SEL_422_FORMAT_422_LEGACY \
1053 2
1054
1055/* HVS display list information. */
1056#define HVS_BOOTLOADER_DLIST_END 32
1057
1058enum hvs_pixel_format {
1059 /* 8bpp */
1060 HVS_PIXEL_FORMAT_RGB332 = 0,
1061 /* 16bpp */
1062 HVS_PIXEL_FORMAT_RGBA4444 = 1,
1063 HVS_PIXEL_FORMAT_RGB555 = 2,
1064 HVS_PIXEL_FORMAT_RGBA5551 = 3,
1065 HVS_PIXEL_FORMAT_RGB565 = 4,
1066 /* 24bpp */
1067 HVS_PIXEL_FORMAT_RGB888 = 5,
1068 HVS_PIXEL_FORMAT_RGBA6666 = 6,
1069 /* 32bpp */
1070 HVS_PIXEL_FORMAT_RGBA8888 = 7,
1071
1072 HVS_PIXEL_FORMAT_YCBCR_YUV420_3PLANE = 8,
1073 HVS_PIXEL_FORMAT_YCBCR_YUV420_2PLANE = 9,
1074 HVS_PIXEL_FORMAT_YCBCR_YUV422_3PLANE = 10,
1075 HVS_PIXEL_FORMAT_YCBCR_YUV422_2PLANE = 11,
1076 HVS_PIXEL_FORMAT_H264 = 12,
1077 HVS_PIXEL_FORMAT_PALETTE = 13,
1078 HVS_PIXEL_FORMAT_YUV444_RGB = 14,
1079 HVS_PIXEL_FORMAT_AYUV444_RGB = 15,
1080 HVS_PIXEL_FORMAT_RGBA1010102 = 16,
1081 HVS_PIXEL_FORMAT_YCBCR_10BIT = 17,
1082};
1083
1084/* Note: the LSB is the rightmost character shown. Only valid for
1085 * HVS_PIXEL_FORMAT_RGB8888, not RGB888.
1086 */
1087/* For modes 332, 4444, 555, 5551, 6666, 8888, 10:10:10:2 */
1088#define HVS_PIXEL_ORDER_RGBA 0
1089#define HVS_PIXEL_ORDER_BGRA 1
1090#define HVS_PIXEL_ORDER_ARGB 2
1091#define HVS_PIXEL_ORDER_ABGR 3
1092
1093/* For modes 666 and 888 (4 & 5) */
1094#define HVS_PIXEL_ORDER_XBRG 0
1095#define HVS_PIXEL_ORDER_XRBG 1
1096#define HVS_PIXEL_ORDER_XRGB 2
1097#define HVS_PIXEL_ORDER_XBGR 3
1098
1099/* For YCbCr modes (8-12, and 17) */
1100#define HVS_PIXEL_ORDER_XYCBCR 0
1101#define HVS_PIXEL_ORDER_XYCRCB 1
1102#define HVS_PIXEL_ORDER_YXCBCR 2
1103#define HVS_PIXEL_ORDER_YXCRCB 3
1104
1105#define SCALER_CTL0_END BIT(31)
1106#define SCALER_CTL0_VALID BIT(30)
1107
1108#define SCALER_CTL0_SIZE_MASK VC4_MASK(29, 24)
1109#define SCALER_CTL0_SIZE_SHIFT 24
1110
1111#define SCALER_CTL0_TILING_MASK VC4_MASK(21, 20)
1112#define SCALER_CTL0_TILING_SHIFT 20
1113#define SCALER_CTL0_TILING_LINEAR 0
1114#define SCALER_CTL0_TILING_64B 1
1115#define SCALER_CTL0_TILING_128B 2
1116#define SCALER_CTL0_TILING_256B_OR_T 3
1117
1118#define SCALER_CTL0_ALPHA_MASK BIT(19)
1119#define SCALER_CTL0_HFLIP BIT(16)
1120#define SCALER_CTL0_VFLIP BIT(15)
1121
1122#define SCALER_CTL0_KEY_MODE_MASK VC4_MASK(18, 17)
1123#define SCALER_CTL0_KEY_MODE_SHIFT 17
1124#define SCALER_CTL0_KEY_DISABLED 0
1125#define SCALER_CTL0_KEY_LUMA_OR_COMMON_RGB 1
1126#define SCALER_CTL0_KEY_MATCH 2 /* turn transparent */
1127#define SCALER_CTL0_KEY_REPLACE 3 /* replace with value from key mask word 2 */
1128
1129#define SCALER_CTL0_ORDER_MASK VC4_MASK(14, 13)
1130#define SCALER_CTL0_ORDER_SHIFT 13
1131
1132#define SCALER_CTL0_RGBA_EXPAND_MASK VC4_MASK(12, 11)
1133#define SCALER_CTL0_RGBA_EXPAND_SHIFT 11
1134#define SCALER_CTL0_RGBA_EXPAND_ZERO 0
1135#define SCALER_CTL0_RGBA_EXPAND_LSB 1
1136#define SCALER_CTL0_RGBA_EXPAND_MSB 2
1137#define SCALER_CTL0_RGBA_EXPAND_ROUND 3
1138
1139#define SCALER5_CTL0_ALPHA_EXPAND BIT(12)
1140
1141#define SCALER5_CTL0_RGB_EXPAND BIT(11)
1142
1143#define SCALER_CTL0_SCL1_MASK VC4_MASK(10, 8)
1144#define SCALER_CTL0_SCL1_SHIFT 8
1145
1146#define SCALER_CTL0_SCL0_MASK VC4_MASK(7, 5)
1147#define SCALER_CTL0_SCL0_SHIFT 5
1148
1149#define SCALER_CTL0_SCL_H_PPF_V_PPF 0
1150#define SCALER_CTL0_SCL_H_TPZ_V_PPF 1
1151#define SCALER_CTL0_SCL_H_PPF_V_TPZ 2
1152#define SCALER_CTL0_SCL_H_TPZ_V_TPZ 3
1153#define SCALER_CTL0_SCL_H_PPF_V_NONE 4
1154#define SCALER_CTL0_SCL_H_NONE_V_PPF 5
1155#define SCALER_CTL0_SCL_H_NONE_V_TPZ 6
1156#define SCALER_CTL0_SCL_H_TPZ_V_NONE 7
1157
1158/* Set to indicate no scaling. */
1159#define SCALER_CTL0_UNITY BIT(4)
1160#define SCALER5_CTL0_UNITY BIT(15)
1161
1162#define SCALER_CTL0_PIXEL_FORMAT_MASK VC4_MASK(3, 0)
1163#define SCALER_CTL0_PIXEL_FORMAT_SHIFT 0
1164
1165#define SCALER5_CTL0_PIXEL_FORMAT_MASK VC4_MASK(4, 0)
1166
1167#define SCALER_POS0_FIXED_ALPHA_MASK VC4_MASK(31, 24)
1168#define SCALER_POS0_FIXED_ALPHA_SHIFT 24
1169
1170#define SCALER_POS0_START_Y_MASK VC4_MASK(23, 12)
1171#define SCALER_POS0_START_Y_SHIFT 12
1172
1173#define SCALER_POS0_START_X_MASK VC4_MASK(11, 0)
1174#define SCALER_POS0_START_X_SHIFT 0
1175
1176#define SCALER5_POS0_START_Y_MASK VC4_MASK(27, 16)
1177#define SCALER5_POS0_START_Y_SHIFT 16
1178
1179#define SCALER5_POS0_START_X_MASK VC4_MASK(13, 0)
1180#define SCALER5_POS0_START_X_SHIFT 0
1181
1182#define SCALER5_POS0_VFLIP BIT(31)
1183#define SCALER5_POS0_HFLIP BIT(15)
1184
1185#define SCALER5_CTL2_ALPHA_MODE_MASK VC4_MASK(31, 30)
1186#define SCALER5_CTL2_ALPHA_MODE_SHIFT 30
1187#define SCALER5_CTL2_ALPHA_MODE_PIPELINE 0
1188#define SCALER5_CTL2_ALPHA_MODE_FIXED 1
1189#define SCALER5_CTL2_ALPHA_MODE_FIXED_NONZERO 2
1190#define SCALER5_CTL2_ALPHA_MODE_FIXED_OVER_0x07 3
1191
1192#define SCALER5_CTL2_ALPHA_PREMULT BIT(29)
1193
1194#define SCALER5_CTL2_ALPHA_MIX BIT(28)
1195
1196#define SCALER5_CTL2_ALPHA_LOC BIT(25)
1197
1198#define SCALER5_CTL2_MAP_SEL_MASK VC4_MASK(18, 17)
1199#define SCALER5_CTL2_MAP_SEL_SHIFT 17
1200
1201#define SCALER5_CTL2_GAMMA BIT(16)
1202
1203#define SCALER5_CTL2_ALPHA_MASK VC4_MASK(15, 4)
1204#define SCALER5_CTL2_ALPHA_SHIFT 4
1205
1206#define SCALER6D_CTL2_CSC_ENABLE BIT(19)
1207#define SCALER6D_CTL2_BRCM_CFC_CONTROL_MASK VC4_MASK(22, 20)
1208
1209#define SCALER_POS1_SCL_HEIGHT_MASK VC4_MASK(27, 16)
1210#define SCALER_POS1_SCL_HEIGHT_SHIFT 16
1211
1212#define SCALER_POS1_SCL_WIDTH_MASK VC4_MASK(11, 0)
1213#define SCALER_POS1_SCL_WIDTH_SHIFT 0
1214
1215#define SCALER5_POS1_SCL_HEIGHT_MASK VC4_MASK(28, 16)
1216#define SCALER5_POS1_SCL_HEIGHT_SHIFT 16
1217
1218#define SCALER5_POS1_SCL_WIDTH_MASK VC4_MASK(12, 0)
1219#define SCALER5_POS1_SCL_WIDTH_SHIFT 0
1220
1221#define SCALER_POS2_ALPHA_MODE_MASK VC4_MASK(31, 30)
1222#define SCALER_POS2_ALPHA_MODE_SHIFT 30
1223#define SCALER_POS2_ALPHA_MODE_PIPELINE 0
1224#define SCALER_POS2_ALPHA_MODE_FIXED 1
1225#define SCALER_POS2_ALPHA_MODE_FIXED_NONZERO 2
1226#define SCALER_POS2_ALPHA_MODE_FIXED_OVER_0x07 3
1227#define SCALER_POS2_ALPHA_PREMULT BIT(29)
1228#define SCALER_POS2_ALPHA_MIX BIT(28)
1229
1230#define SCALER_POS2_HEIGHT_MASK VC4_MASK(27, 16)
1231#define SCALER_POS2_HEIGHT_SHIFT 16
1232
1233#define SCALER_POS2_WIDTH_MASK VC4_MASK(11, 0)
1234#define SCALER_POS2_WIDTH_SHIFT 0
1235
1236#define SCALER5_POS2_HEIGHT_MASK VC4_MASK(28, 16)
1237#define SCALER5_POS2_HEIGHT_SHIFT 16
1238
1239#define SCALER5_POS2_WIDTH_MASK VC4_MASK(12, 0)
1240#define SCALER5_POS2_WIDTH_SHIFT 0
1241
1242/* Color Space Conversion words. Some values are S2.8 signed
1243 * integers, except that the 2 integer bits map as {0x0: 0, 0x1: 1,
1244 * 0x2: 2, 0x3: -1}
1245 */
1246/* bottom 8 bits of S2.8 contribution of Cr to Blue */
1247#define SCALER_CSC0_COEF_CR_BLU_MASK VC4_MASK(31, 24)
1248#define SCALER_CSC0_COEF_CR_BLU_SHIFT 24
1249/* Signed offset to apply to Y before CSC. (Y' = Y + YY_OFS) */
1250#define SCALER_CSC0_COEF_YY_OFS_MASK VC4_MASK(23, 16)
1251#define SCALER_CSC0_COEF_YY_OFS_SHIFT 16
1252/* Signed offset to apply to CB before CSC (Cb' = Cb - 128 + CB_OFS). */
1253#define SCALER_CSC0_COEF_CB_OFS_MASK VC4_MASK(15, 8)
1254#define SCALER_CSC0_COEF_CB_OFS_SHIFT 8
1255/* Signed offset to apply to CB before CSC (Cr' = Cr - 128 + CR_OFS). */
1256#define SCALER_CSC0_COEF_CR_OFS_MASK VC4_MASK(7, 0)
1257#define SCALER_CSC0_COEF_CR_OFS_SHIFT 0
1258#define SCALER_CSC0_ITR_R_601_5 0x00f00000
1259#define SCALER_CSC0_ITR_R_709_3 0x00f00000
1260#define SCALER_CSC0_ITR_R_2020 0x00f00000
1261#define SCALER_CSC0_JPEG_JFIF 0x00000000
1262#define SCALER_CSC0_ITR_R_709_3_FR 0x00000000
1263#define SCALER_CSC0_ITR_R_2020_FR 0x00000000
1264
1265/* S2.8 contribution of Cb to Green */
1266#define SCALER_CSC1_COEF_CB_GRN_MASK VC4_MASK(31, 22)
1267#define SCALER_CSC1_COEF_CB_GRN_SHIFT 22
1268/* S2.8 contribution of Cr to Green */
1269#define SCALER_CSC1_COEF_CR_GRN_MASK VC4_MASK(21, 12)
1270#define SCALER_CSC1_COEF_CR_GRN_SHIFT 12
1271/* S2.8 contribution of Y to all of RGB */
1272#define SCALER_CSC1_COEF_YY_ALL_MASK VC4_MASK(11, 2)
1273#define SCALER_CSC1_COEF_YY_ALL_SHIFT 2
1274/* top 2 bits of S2.8 contribution of Cr to Blue */
1275#define SCALER_CSC1_COEF_CR_BLU_MASK VC4_MASK(1, 0)
1276#define SCALER_CSC1_COEF_CR_BLU_SHIFT 0
1277#define SCALER_CSC1_ITR_R_601_5 0xe73304a8
1278#define SCALER_CSC1_ITR_R_709_3 0xf27784a8
1279#define SCALER_CSC1_ITR_R_2020 0xf43594a8
1280#define SCALER_CSC1_JPEG_JFIF 0xea349400
1281#define SCALER_CSC1_ITR_R_709_3_FR 0xf4388400
1282#define SCALER_CSC1_ITR_R_2020_FR 0xf5b6d400
1283
1284/* S2.8 contribution of Cb to Red */
1285#define SCALER_CSC2_COEF_CB_RED_MASK VC4_MASK(29, 20)
1286#define SCALER_CSC2_COEF_CB_RED_SHIFT 20
1287/* S2.8 contribution of Cr to Red */
1288#define SCALER_CSC2_COEF_CR_RED_MASK VC4_MASK(19, 10)
1289#define SCALER_CSC2_COEF_CR_RED_SHIFT 10
1290/* S2.8 contribution of Cb to Blue */
1291#define SCALER_CSC2_COEF_CB_BLU_MASK VC4_MASK(19, 10)
1292#define SCALER_CSC2_COEF_CB_BLU_SHIFT 10
1293#define SCALER_CSC2_ITR_R_601_5 0x00066604
1294#define SCALER_CSC2_ITR_R_709_3 0x00072e1d
1295#define SCALER_CSC2_ITR_R_2020 0x0006b624
1296#define SCALER_CSC2_JPEG_JFIF 0x00059dc6
1297#define SCALER_CSC2_ITR_R_709_3_FR 0x00064ddb
1298#define SCALER_CSC2_ITR_R_2020_FR 0x0005e5e2
1299
1300#define SCALER_TPZ0_VERT_RECALC BIT(31)
1301#define SCALER_TPZ0_SCALE_MASK VC4_MASK(28, 8)
1302#define SCALER_TPZ0_SCALE_SHIFT 8
1303#define SCALER_TPZ0_IPHASE_MASK VC4_MASK(7, 0)
1304#define SCALER_TPZ0_IPHASE_SHIFT 0
1305#define SCALER_TPZ1_RECIP_MASK VC4_MASK(15, 0)
1306#define SCALER_TPZ1_RECIP_SHIFT 0
1307
1308/* Skips interpolating coefficients to 64 phases, so just 8 are used.
1309 * Required for nearest neighbor.
1310 */
1311#define SCALER_PPF_NOINTERP BIT(31)
1312/* Replaes the highest valued coefficient with one that makes all 4
1313 * sum to unity.
1314 */
1315#define SCALER_PPF_AGC BIT(30)
1316#define SCALER_PPF_SCALE_MASK VC4_MASK(24, 8)
1317#define SCALER_PPF_SCALE_SHIFT 8
1318#define SCALER_PPF_IPHASE_MASK VC4_MASK(6, 0)
1319#define SCALER_PPF_IPHASE_SHIFT 0
1320
1321#define SCALER_PPF_KERNEL_OFFSET_MASK VC4_MASK(13, 0)
1322#define SCALER_PPF_KERNEL_OFFSET_SHIFT 0
1323#define SCALER_PPF_KERNEL_UNCACHED BIT(31)
1324
1325/* PITCH0/1/2 fields for raster. */
1326#define SCALER_SRC_PITCH_MASK VC4_MASK(15, 0)
1327#define SCALER_SRC_PITCH_SHIFT 0
1328
1329/* PITCH0/1/2 fields for tiled (SAND). */
1330#define SCALER_TILE_SKIP_0_MASK VC4_MASK(18, 16)
1331#define SCALER_TILE_SKIP_0_SHIFT 16
1332#define SCALER_TILE_HEIGHT_MASK VC4_MASK(15, 0)
1333#define SCALER_TILE_HEIGHT_SHIFT 0
1334
1335/* Common PITCH0 fields */
1336#define SCALER_PITCH0_SINK_PIX_MASK VC4_MASK(31, 26)
1337#define SCALER_PITCH0_SINK_PIX_SHIFT 26
1338
1339/* PITCH0 fields for T-tiled. */
1340#define SCALER_PITCH0_TILE_WIDTH_L_MASK VC4_MASK(22, 16)
1341#define SCALER_PITCH0_TILE_WIDTH_L_SHIFT 16
1342#define SCALER_PITCH0_TILE_LINE_DIR BIT(15)
1343#define SCALER_PITCH0_TILE_INITIAL_LINE_DIR BIT(14)
1344/* Y offset within a tile. */
1345#define SCALER_PITCH0_TILE_Y_OFFSET_MASK VC4_MASK(13, 8)
1346#define SCALER_PITCH0_TILE_Y_OFFSET_SHIFT 8
1347#define SCALER_PITCH0_TILE_WIDTH_R_MASK VC4_MASK(6, 0)
1348#define SCALER_PITCH0_TILE_WIDTH_R_SHIFT 0
1349
1350#define SCALER6_CTL0_END BIT(31)
1351#define SCALER6_CTL0_VALID BIT(30)
1352#define SCALER6_CTL0_NEXT_MASK VC4_MASK(29, 24)
1353#define SCALER6_CTL0_RGB_TRANS BIT(23)
1354#define SCALER6_CTL0_ADDR_MODE_MASK VC4_MASK(22, 20)
1355#define SCALER6_CTL0_ADDR_MODE_LINEAR 0
1356#define SCALER6_CTL0_ADDR_MODE_128B 1
1357#define SCALER6_CTL0_ADDR_MODE_256B 2
1358#define SCALER6_CTL0_ADDR_MODE_MAP8 3
1359#define SCALER6_CTL0_ADDR_MODE_UIF 4
1360
1361#define SCALER6_CTL0_ALPHA_MASK_MASK VC4_MASK(19, 18)
1362#define SCALER6_CTL0_ALPHA_MASK_NONE 0
1363#define SCALER6D_CTL0_ALPHA_MASK_FIXED 3
1364#define SCALER6_CTL0_UNITY BIT(15)
1365#define SCALER6_CTL0_ORDERRGBA_MASK VC4_MASK(14, 13)
1366#define SCALER6_CTL0_SCL1_MODE_MASK VC4_MASK(10, 8)
1367#define SCALER6_CTL0_SCL0_MODE_MASK VC4_MASK(7, 5)
1368#define SCALER6_CTL0_PIXEL_FORMAT_MASK VC4_MASK(4, 0)
1369
1370#define SCALER6_POS0_START_Y_MASK VC4_MASK(28, 16)
1371#define SCALER6_POS0_HFLIP BIT(15)
1372#define SCALER6_POS0_START_X_MASK VC4_MASK(12, 0)
1373
1374#define SCALER6_CTL2_ALPHA_MODE_MASK VC4_MASK(31, 30)
1375#define SCALER6_CTL2_ALPHA_PREMULT BIT(29)
1376#define SCALER6_CTL2_ALPHA_MIX BIT(28)
1377#define SCALER6_CTL2_BFG BIT(26)
1378#define SCALER6C_CTL2_CSC_ENABLE BIT(25)
1379#define SCALER6C_CTL2_BRCM_CFC_CONTROL_MASK VC4_MASK(18, 16)
1380#define SCALER6_CTL2_ALPHA_MASK VC4_MASK(15, 4)
1381
1382#define SCALER6_POS1_SCL_LINES_MASK VC4_MASK(28, 16)
1383#define SCALER6_POS1_SCL_WIDTH_MASK VC4_MASK(12, 0)
1384
1385#define SCALER6_POS2_SRC_LINES_MASK VC4_MASK(28, 16)
1386#define SCALER6_POS2_SRC_WIDTH_MASK VC4_MASK(12, 0)
1387
1388#define SCALER6_PTR0_VFLIP BIT(31)
1389#define SCALER6_PTR0_UPM_BASE_MASK VC4_MASK(28, 16)
1390#define SCALER6_PTR0_UPM_HANDLE_MASK VC4_MASK(14, 10)
1391#define SCALER6_PTR0_UPM_BUFF_SIZE_MASK VC4_MASK(9, 8)
1392#define SCALER6_PTR0_UPM_BUFF_SIZE_16_LINES 3
1393#define SCALER6_PTR0_UPM_BUFF_SIZE_8_LINES 2
1394#define SCALER6_PTR0_UPM_BUFF_SIZE_4_LINES 1
1395#define SCALER6_PTR0_UPM_BUFF_SIZE_2_LINES 0
1396#define SCALER6_PTR0_UPPER_ADDR_MASK VC4_MASK(7, 0)
1397
1398#define SCALER6_PTR2_ALPHA_BPP_MASK VC4_MASK(31, 31)
1399#define SCALER6_PTR2_ALPHA_BPP_1BPP 1
1400#define SCALER6_PTR2_ALPHA_BPP_8BPP 0
1401#define SCALER6_PTR2_ALPHA_ORDER_MASK VC4_MASK(30, 30)
1402#define SCALER6_PTR2_ALPHA_ORDER_MSB_TO_LSB 1
1403#define SCALER6_PTR2_ALPHA_ORDER_LSB_TO_MSB 0
1404#define SCALER6_PTR2_ALPHA_OFFS_MASK VC4_MASK(29, 27)
1405#define SCALER6_PTR2_LSKIP_MASK VC4_MASK(26, 24)
1406#define SCALER6_PTR2_PITCH_MASK VC4_MASK(16, 0)
1407#define SCALER6_PTR2_FETCH_COUNT_MASK VC4_MASK(26, 16)
1408
1409#endif /* VC4_REGS_H */