aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/platform/bcm2835/vc4-regs-unicam.h
blob: ae059a171d0fe04056d78606714dc8dfca2454b3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
/* SPDX-License-Identifier: GPL-2.0-only */

/*
 * Copyright (C) 2017-2020 Raspberry Pi Trading.
 * Dave Stevenson <dave.stevenson@raspberrypi.com>
 */

#ifndef VC4_REGS_UNICAM_H
#define VC4_REGS_UNICAM_H

/*
 * The following values are taken from files found within the code drop
 * made by Broadcom for the BCM21553 Graphics Driver, predominantly in
 * brcm_usrlib/dag/vmcsx/vcinclude/hardware_vc4.h.
 * They have been modified to be only the register offset.
 */
#define UNICAM_CTRL	0x000
#define UNICAM_STA	0x004
#define UNICAM_ANA	0x008
#define UNICAM_PRI	0x00c
#define UNICAM_CLK	0x010
#define UNICAM_CLT	0x014
#define UNICAM_DAT0	0x018
#define UNICAM_DAT1	0x01c
#define UNICAM_DAT2	0x020
#define UNICAM_DAT3	0x024
#define UNICAM_DLT	0x028
#define UNICAM_CMP0	0x02c
#define UNICAM_CMP1	0x030
#define UNICAM_CAP0	0x034
#define UNICAM_CAP1	0x038
#define UNICAM_ICTL	0x100
#define UNICAM_ISTA	0x104
#define UNICAM_IDI0	0x108
#define UNICAM_IPIPE	0x10c
#define UNICAM_IBSA0	0x110
#define UNICAM_IBEA0	0x114
#define UNICAM_IBLS	0x118
#define UNICAM_IBWP	0x11c
#define UNICAM_IHWIN	0x120
#define UNICAM_IHSTA	0x124
#define UNICAM_IVWIN	0x128
#define UNICAM_IVSTA	0x12c
#define UNICAM_ICC	0x130
#define UNICAM_ICS	0x134
#define UNICAM_IDC	0x138
#define UNICAM_IDPO	0x13c
#define UNICAM_IDCA	0x140
#define UNICAM_IDCD	0x144
#define UNICAM_IDS	0x148
#define UNICAM_DCS	0x200
#define UNICAM_DBSA0	0x204
#define UNICAM_DBEA0	0x208
#define UNICAM_DBWP	0x20c
#define UNICAM_DBCTL	0x300
#define UNICAM_IBSA1	0x304
#define UNICAM_IBEA1	0x308
#define UNICAM_IDI1	0x30c
#define UNICAM_DBSA1	0x310
#define UNICAM_DBEA1	0x314
#define UNICAM_MISC	0x400

/*
 * The following bitmasks are from the kernel released by Broadcom
 * for Android - https://android.googlesource.com/kernel/bcm/
 * The Rhea, Hawaii, and Java chips all contain the same VideoCore4
 * Unicam block as BCM2835, as defined in eg
 * arch/arm/mach-rhea/include/mach/rdb_A0/brcm_rdb_cam.h and similar.
 * Values reworked to use the kernel BIT and GENMASK macros.
 *
 * Some of the bit mnenomics have been amended to match the datasheet.
 */
/* UNICAM_CTRL Register */
#define UNICAM_CPE		BIT(0)
#define UNICAM_MEM		BIT(1)
#define UNICAM_CPR		BIT(2)
#define UNICAM_CPM_MASK		GENMASK(3, 3)
#define UNICAM_CPM_CSI2		0
#define UNICAM_CPM_CCP2		1
#define UNICAM_SOE		BIT(4)
#define UNICAM_DCM_MASK		GENMASK(5, 5)
#define UNICAM_DCM_STROBE	0
#define UNICAM_DCM_DATA		1
#define UNICAM_SLS		BIT(6)
#define UNICAM_PFT_MASK		GENMASK(11, 8)
#define UNICAM_OET_MASK		GENMASK(20, 12)

/* UNICAM_STA Register */
#define UNICAM_SYN		BIT(0)
#define UNICAM_CS		BIT(1)
#define UNICAM_SBE		BIT(2)
#define UNICAM_PBE		BIT(3)
#define UNICAM_HOE		BIT(4)
#define UNICAM_PLE		BIT(5)
#define UNICAM_SSC		BIT(6)
#define UNICAM_CRCE		BIT(7)
#define UNICAM_OES		BIT(8)
#define UNICAM_IFO		BIT(9)
#define UNICAM_OFO		BIT(10)
#define UNICAM_BFO		BIT(11)
#define UNICAM_DL		BIT(12)
#define UNICAM_PS		BIT(13)
#define UNICAM_IS		BIT(14)
#define UNICAM_PI0		BIT(15)
#define UNICAM_PI1		BIT(16)
#define UNICAM_FSI_S		BIT(17)
#define UNICAM_FEI_S		BIT(18)
#define UNICAM_LCI_S		BIT(19)
#define UNICAM_BUF0_RDY		BIT(20)
#define UNICAM_BUF0_NO		BIT(21)
#define UNICAM_BUF1_RDY		BIT(22)
#define UNICAM_BUF1_NO		BIT(23)
#define UNICAM_DI		BIT(24)

#define UNICAM_STA_MASK_ALL \
		(UNICAM_DL + \
		UNICAM_SBE + \
		UNICAM_PBE + \
		UNICAM_HOE + \
		UNICAM_PLE + \
		UNICAM_SSC + \
		UNICAM_CRCE + \
		UNICAM_IFO + \
		UNICAM_OFO + \
		UNICAM_PS + \
		UNICAM_PI0 + \
		UNICAM_PI1)

/* UNICAM_ANA Register */
#define UNICAM_APD		BIT(0)
#define UNICAM_BPD		BIT(1)
#define UNICAM_AR		BIT(2)
#define UNICAM_DDL		BIT(3)
#define UNICAM_CTATADJ_MASK	GENMASK(7, 4)
#define UNICAM_PTATADJ_MASK	GENMASK(11, 8)

/* UNICAM_PRI Register */
#define UNICAM_PE		BIT(0)
#define UNICAM_PT_MASK		GENMASK(2, 1)
#define UNICAM_NP_MASK		GENMASK(7, 4)
#define UNICAM_PP_MASK		GENMASK(11, 8)
#define UNICAM_BS_MASK		GENMASK(15, 12)
#define UNICAM_BL_MASK		GENMASK(17, 16)

/* UNICAM_CLK Register */
#define UNICAM_CLE		BIT(0)
#define UNICAM_CLPD		BIT(1)
#define UNICAM_CLLPE		BIT(2)
#define UNICAM_CLHSE		BIT(3)
#define UNICAM_CLTRE		BIT(4)
#define UNICAM_CLAC_MASK	GENMASK(8, 5)
#define UNICAM_CLSTE		BIT(29)

/* UNICAM_CLT Register */
#define UNICAM_CLT1_MASK	GENMASK(7, 0)
#define UNICAM_CLT2_MASK	GENMASK(15, 8)

/* UNICAM_DATn Registers */
#define UNICAM_DLE		BIT(0)
#define UNICAM_DLPD		BIT(1)
#define UNICAM_DLLPE		BIT(2)
#define UNICAM_DLHSE		BIT(3)
#define UNICAM_DLTRE		BIT(4)
#define UNICAM_DLSM		BIT(5)
#define UNICAM_DLFO		BIT(28)
#define UNICAM_DLSTE		BIT(29)

#define UNICAM_DAT_MASK_ALL (UNICAM_DLSTE + UNICAM_DLFO)

/* UNICAM_DLT Register */
#define UNICAM_DLT1_MASK	GENMASK(7, 0)
#define UNICAM_DLT2_MASK	GENMASK(15, 8)
#define UNICAM_DLT3_MASK	GENMASK(23, 16)

/* UNICAM_ICTL Register */
#define UNICAM_FSIE		BIT(0)
#define UNICAM_FEIE		BIT(1)
#define UNICAM_IBOB		BIT(2)
#define UNICAM_FCM		BIT(3)
#define UNICAM_TFC		BIT(4)
#define UNICAM_LIP_MASK		GENMASK(6, 5)
#define UNICAM_LCIE_MASK	GENMASK(28, 16)

/* UNICAM_IDI0/1 Register */
#define UNICAM_ID0_MASK		GENMASK(7, 0)
#define UNICAM_ID1_MASK		GENMASK(15, 8)
#define UNICAM_ID2_MASK		GENMASK(23, 16)
#define UNICAM_ID3_MASK		GENMASK(31, 24)

/* UNICAM_ISTA Register */
#define UNICAM_FSI		BIT(0)
#define UNICAM_FEI		BIT(1)
#define UNICAM_LCI		BIT(2)

#define UNICAM_ISTA_MASK_ALL (UNICAM_FSI + UNICAM_FEI + UNICAM_LCI)

/* UNICAM_IPIPE Register */
#define UNICAM_PUM_MASK		GENMASK(2, 0)
		/* Unpacking modes */
		#define UNICAM_PUM_NONE		0
		#define UNICAM_PUM_UNPACK6	1
		#define UNICAM_PUM_UNPACK7	2
		#define UNICAM_PUM_UNPACK8	3
		#define UNICAM_PUM_UNPACK10	4
		#define UNICAM_PUM_UNPACK12	5
		#define UNICAM_PUM_UNPACK14	6
		#define UNICAM_PUM_UNPACK16	7
#define UNICAM_DDM_MASK		GENMASK(6, 3)
#define UNICAM_PPM_MASK		GENMASK(9, 7)
		/* Packing modes */
		#define UNICAM_PPM_NONE		0
		#define UNICAM_PPM_PACK8	1
		#define UNICAM_PPM_PACK10	2
		#define UNICAM_PPM_PACK12	3
		#define UNICAM_PPM_PACK14	4
		#define UNICAM_PPM_PACK16	5
#define UNICAM_DEM_MASK		GENMASK(11, 10)
#define UNICAM_DEBL_MASK	GENMASK(14, 12)
#define UNICAM_ICM_MASK		GENMASK(16, 15)
#define UNICAM_IDM_MASK		GENMASK(17, 17)

/* UNICAM_ICC Register */
#define UNICAM_ICFL_MASK	GENMASK(4, 0)
#define UNICAM_ICFH_MASK	GENMASK(9, 5)
#define UNICAM_ICST_MASK	GENMASK(12, 10)
#define UNICAM_ICLT_MASK	GENMASK(15, 13)
#define UNICAM_ICLL_MASK	GENMASK(31, 16)

/* UNICAM_DCS Register */
#define UNICAM_DIE		BIT(0)
#define UNICAM_DIM		BIT(1)
#define UNICAM_DBOB		BIT(3)
#define UNICAM_FDE		BIT(4)
#define UNICAM_LDP		BIT(5)
#define UNICAM_EDL_MASK		GENMASK(15, 8)

/* UNICAM_DBCTL Register */
#define UNICAM_DBEN		BIT(0)
#define UNICAM_BUF0_IE		BIT(1)
#define UNICAM_BUF1_IE		BIT(2)

/* UNICAM_CMP[0,1] register */
#define UNICAM_PCE		BIT(31)
#define UNICAM_GI		BIT(9)
#define UNICAM_CPH		BIT(8)
#define UNICAM_PCVC_MASK	GENMASK(7, 6)
#define UNICAM_PCDT_MASK	GENMASK(5, 0)

/* UNICAM_MISC register */
#define UNICAM_FL0		BIT(6)
#define UNICAM_FL1		BIT(9)

#endif