xref: /OK3568_Linux_fs/kernel/drivers/misc/rk628/rk628_gvi.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (c) 2020 Rockchip Electronics Co. Ltd.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Author: Guochun Huang <hero.huang@rock-chips.com>
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #ifndef RK628_GVI_H
9*4882a593Smuzhiyun #define RK628_GVI_H
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #include "rk628.h"
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #define GVI_BASE					0x80000
14*4882a593Smuzhiyun #define HOSTREG(x)					((x) + GVI_BASE)
15*4882a593Smuzhiyun #define GVI_SYS_CTRL0					HOSTREG(0x0000)
16*4882a593Smuzhiyun #define GVI_SYS_CTRL1					HOSTREG(0x0004)
17*4882a593Smuzhiyun #define GVI_SYS_CTRL2					HOSTREG(0x0008)
18*4882a593Smuzhiyun #define GVI_SYS_CTRL3					HOSTREG(0x000c)
19*4882a593Smuzhiyun #define GVI_VERSION					HOSTREG(0x0010)
20*4882a593Smuzhiyun #define GVI_SYS_RST					HOSTREG(0x0014)
21*4882a593Smuzhiyun #define GVI_LINE_FLAG					HOSTREG(0x0018)
22*4882a593Smuzhiyun #define GVI_STATUS					HOSTREG(0x001c)
23*4882a593Smuzhiyun #define GVI_PLL_LOCK_TIMEOUT				HOSTREG(0x0030)
24*4882a593Smuzhiyun #define GVI_HTPDN_TIMEOUT				HOSTREG(0x0034)
25*4882a593Smuzhiyun #define GVI_LOCKN_TIMEOUT				HOSTREG(0x0038)
26*4882a593Smuzhiyun #define GVI_WAIT_LOCKN					HOSTREG(0x003C)
27*4882a593Smuzhiyun #define GVI_WAIT_HTPDN					HOSTREG(0x0040)
28*4882a593Smuzhiyun #define GVI_INTR_EN					HOSTREG(0x0050)
29*4882a593Smuzhiyun #define GVI_INTR_CLR					HOSTREG(0x0054)
30*4882a593Smuzhiyun #define GVI_INTR_RAW_STATUS				HOSTREG(0x0058)
31*4882a593Smuzhiyun #define GVI_INTR_STATUS					HOSTREG(0x005c)
32*4882a593Smuzhiyun #define GVI_COLOR_BAR_CTRL				HOSTREG(0x0060)
33*4882a593Smuzhiyun #define GVI_COLOR_BAR_HTIMING0				HOSTREG(0x0070)
34*4882a593Smuzhiyun #define GVI_COLOR_BAR_HTIMING1				HOSTREG(0x0074)
35*4882a593Smuzhiyun #define GVI_COLOR_BAR_VTIMING0				HOSTREG(0x0078)
36*4882a593Smuzhiyun #define GVI_COLOR_BAR_VTIMING1				HOSTREG(0x007c)
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun /* SYS_CTRL0 */
39*4882a593Smuzhiyun #define SYS_CTRL0_GVI_EN				BIT(0)
40*4882a593Smuzhiyun #define SYS_CTRL0_AUTO_GATING				BIT(1)
41*4882a593Smuzhiyun #define SYS_CTRL0_FRM_RST_EN				BIT(2)
42*4882a593Smuzhiyun #define SYS_CTRL0_FRM_RST_MODE				BIT(3)
43*4882a593Smuzhiyun #define SYS_CTRL0_LANE_NUM_MASK				GENMASK(7, 4)
44*4882a593Smuzhiyun #define SYS_CTRL0_LANE_NUM(x)				UPDATE(x, 7, 4)
45*4882a593Smuzhiyun #define SYS_CTRL0_BYTE_MODE_MASK			GENMASK(9, 8)
46*4882a593Smuzhiyun #define SYS_CTRL0_BYTE_MODE(x)				UPDATE(x, 9, 8)
47*4882a593Smuzhiyun #define SYS_CTRL0_SECTION_NUM_MASK			GENMASK(11, 10)
48*4882a593Smuzhiyun #define SYS_CTRL0_SECTION_NUM(x)			UPDATE(x, 11, 10)
49*4882a593Smuzhiyun #define SYS_CTRL0_CDR_ENDIAN_SWAP			BIT(12)
50*4882a593Smuzhiyun #define SYS_CTRL0_PACK_BYTE_SWAP			BIT(13)
51*4882a593Smuzhiyun #define SYS_CTRL0_PACK_ENDIAN_SWAP			BIT(14)
52*4882a593Smuzhiyun #define SYS_CTRL0_ENC8B10B_ENDIAN_SWAP			BIT(15)
53*4882a593Smuzhiyun #define SYS_CTRL0_CDR_EN				BIT(16)
54*4882a593Smuzhiyun #define SYS_CTRL0_ALN_EN				BIT(17)
55*4882a593Smuzhiyun #define SYS_CTRL0_NOR_EN				BIT(18)
56*4882a593Smuzhiyun #define SYS_CTRL0_ALN_NOR_MODE				BIT(19)
57*4882a593Smuzhiyun #define SYS_CTRL0_GVI_MASK				GENMASK(19, 16)
58*4882a593Smuzhiyun #define SYS_CTRL0_GVI_GN_EN(x)				UPDATE(x, 19, 16)
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun #define SYS_CTRL0_SCRAMBLER_EN				BIT(20)
61*4882a593Smuzhiyun #define SYS_CTRL0_ENCODE8B10B_EN			BIT(21)
62*4882a593Smuzhiyun #define SYS_CTRL0_INIT_RD_EN				BIT(22)
63*4882a593Smuzhiyun #define SYS_CTRL0_INIT_RD_VALUE				BIT(23)
64*4882a593Smuzhiyun #define SYS_CTRL0_FORCE_HTPDN_EN			BIT(24)
65*4882a593Smuzhiyun #define SYS_CTRL0_FORCE_HTPDN_VALUE			BIT(25)
66*4882a593Smuzhiyun #define SYS_CTRL0_FORCE_PLL_EN				BIT(26)
67*4882a593Smuzhiyun #define SYS_CTRL0_FORCE_PLL_VALUE			BIT(27)
68*4882a593Smuzhiyun #define SYS_CTRL0_FORCE_LOCKN_EN			BIT(28)
69*4882a593Smuzhiyun #define SYS_CTRL0_FORCE_LOCKN_VALUE			BIT(29)
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun /* SYS_CTRL1 */
72*4882a593Smuzhiyun #define SYS_CTRL1_COLOR_DEPTH_MASK			GENMASK(3, 0)
73*4882a593Smuzhiyun #define SYS_CTRL1_COLOR_DEPTH(x)			UPDATE(x, 3, 0)
74*4882a593Smuzhiyun #define SYS_CTRL1_DUAL_PIXEL_EN				BIT(4)
75*4882a593Smuzhiyun #define SYS_CTRL1_TIMING_ALIGN_EN			BIT(8)
76*4882a593Smuzhiyun #define SYS_CTRL1_LANE_ALIGN_EN				BIT(9)
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun #define SYS_CTRL1_DUAL_PIXEL_SWAP			BIT(12)
79*4882a593Smuzhiyun #define SYS_CTRL1_RB_SWAP				BIT(13)
80*4882a593Smuzhiyun #define SYS_CTRL1_YC_SWAP				BIT(14)
81*4882a593Smuzhiyun #define SYS_CTRL1_WHOLE_FRM_EN				BIT(16)
82*4882a593Smuzhiyun #define SYS_CTRL1_NOR_PROTECT				BIT(17)
83*4882a593Smuzhiyun #define SYS_CTRL1_RD_WCNT_UPDATE			BIT(31)
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun /* SYS_CTRL2 */
86*4882a593Smuzhiyun #define SYS_CTRL2_AFIFO_READ_THOLD_MASK			GENMASK(7, 0)
87*4882a593Smuzhiyun #define SYS_CTRL2_AFIFO_READ_THOLD(x)			UPDATE(x, 7, 0)
88*4882a593Smuzhiyun #define SYS_CTRL2_AFIFO_ALMOST_FULL_THOLD_MASK		GENMASK(23, 16)
89*4882a593Smuzhiyun #define SYS_CTRL2_AFIFO_ALMOST_FULL_THOLD(x)		UPDATE(x, 23, 16)
90*4882a593Smuzhiyun #define SYS_CTRL2_AFIFO_ALMOST_EMPTY_THOLD_MASK		GENMASK(31, 24)
91*4882a593Smuzhiyun #define SYS_CTRL2_AFIFO_ALMOST_EMPTY_THOLD(x)		UPDATE(x, 31, 24)
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun /* SYS_CTRL3 */
94*4882a593Smuzhiyun #define SYS_CTRL3_LANE0_SEL_MASK			GENMASK(2, 0)
95*4882a593Smuzhiyun #define SYS_CTRL3_LANE0_SEL(x)				UPDATE(x, 2, 0)
96*4882a593Smuzhiyun #define SYS_CTRL3_LANE1_SEL_MASK			GENMASK(6, 4)
97*4882a593Smuzhiyun #define SYS_CTRL3_LANE1_SEL(x)				UPDATE(x, 6, 4)
98*4882a593Smuzhiyun #define SYS_CTRL3_LANE2_SEL_MASK			GENMASK(10, 8)
99*4882a593Smuzhiyun #define SYS_CTRL3_LANE2_SEL(x)				UPDATE(x, 10, 8)
100*4882a593Smuzhiyun #define SYS_CTRL3_LANE3_SEL_MASK			GENMASK(14, 12)
101*4882a593Smuzhiyun #define SYS_CTRL3_LANE3_SEL(x)				UPDATE(x, 14, 12)
102*4882a593Smuzhiyun #define SYS_CTRL3_LANE4_SEL_MASK			GENMASK(18, 16)
103*4882a593Smuzhiyun #define SYS_CTRL3_LANE4_SEL(x)				UPDATE(x, 18, 16)
104*4882a593Smuzhiyun #define SYS_CTRL3_LANE5_SEL_MASK			GENMASK(22, 20)
105*4882a593Smuzhiyun #define SYS_CTRL3_LANE5_SEL(x)				UPDATE(x, 22, 20)
106*4882a593Smuzhiyun #define SYS_CTRL3_LANE6_SEL_MASK			GENMASK(26, 24)
107*4882a593Smuzhiyun #define SYS_CTRL3_LANE6_SEL(x)				UPDATE(x, 26, 24)
108*4882a593Smuzhiyun #define SYS_CTRL3_LANE7_SEL_MASK			GENMASK(30, 28)
109*4882a593Smuzhiyun #define SYS_CTRL3_LANE7_SEL(x)				UPDATE(x, 30, 28)
110*4882a593Smuzhiyun /* VERSIION */
111*4882a593Smuzhiyun #define VERSION_VERSION(x)				UPDATE(x, 31, 0)
112*4882a593Smuzhiyun /* SYS_RESET*/
113*4882a593Smuzhiyun #define SYS_RST_SOFT_RST				BIT(0)
114*4882a593Smuzhiyun /* LINE_FLAG */
115*4882a593Smuzhiyun #define LINE_FLAG_LANE_FLAG0_MASK			GENMASK(15, 0)
116*4882a593Smuzhiyun #define LINE_FLAG_LANE_FLAG0(x)				UPDATE(x, 15, 0)
117*4882a593Smuzhiyun #define LINE_FLAG_LANE_FLAG1_MASK			GENMASK(31, 16)
118*4882a593Smuzhiyun #define LINE_FLAG_LANE_FLAG1(x)				UPDATE(x, 31, 16)
119*4882a593Smuzhiyun /* STATUS */
120*4882a593Smuzhiyun #define STATUS_HTDPN					BIT(4)
121*4882a593Smuzhiyun #define STATUS_LOCKN					BIT(5)
122*4882a593Smuzhiyun #define STATUS_PLL_LOCKN				BIT(6)
123*4882a593Smuzhiyun #define STATUS_AFIFO0_WCNT_MASK				GENMASK(23, 16)
124*4882a593Smuzhiyun #define STATUS_AFIFO0_WCNT(x)				UPDATE(x, 23, 16)
125*4882a593Smuzhiyun #define STATUS_AFIFO1_WCNT_MASK				GENMASK(31, 24)
126*4882a593Smuzhiyun #define STATUS_AFIFO1_WCNT(x)				UPDATE(x, 31, 24)
127*4882a593Smuzhiyun /* PLL_LTIMEOUT */
128*4882a593Smuzhiyun #define PLL_LOCK_TIMEOUT_PLL_LOCK_TIME_OUT_MASK		GENMASK(31, 0)
129*4882a593Smuzhiyun #define PLL_LOCK_TIMEOUT_PLL_LOCK_TIME_OUT(x)		UPDATE(x, 31, 0)
130*4882a593Smuzhiyun /* HTPDNEOUT */
131*4882a593Smuzhiyun #define HTPDN_TIMEOUT_HTPDN_TIME_OUT_MASK		GENMASK(31, 0)
132*4882a593Smuzhiyun #define HTPDN_TIMEOUT_HTPDN_TIME_OUT(x)			UPDATE(x, 31, 0)
133*4882a593Smuzhiyun /* LOCKNEOUT */
134*4882a593Smuzhiyun #define LOCKN_TIMEOUT_LOCKN_TIME_OUT_MASK		GENMASK(31, 0)
135*4882a593Smuzhiyun #define LOCKN_TIMEOUT_LOCKN_TIME_OUT(x)			UPDATE(x, 31, 0)
136*4882a593Smuzhiyun /* WAIT_LOCKN */
137*4882a593Smuzhiyun #define WAIT_LOCKN_WAIT_LOCKN_TIME_MASK			GENMASK(30, 0)
138*4882a593Smuzhiyun #define WAIT_LOCKN_WAIT_LOCKN_TIME(x)			UPDATE(x, 30, 0)
139*4882a593Smuzhiyun #define WAIT_LOCKN_WAIT_LOCKN_TIME_EN			BIT(31)
140*4882a593Smuzhiyun /* WAIT_HTPDN */
141*4882a593Smuzhiyun #define WAIT_HTPDN_WAIT_HTPDN_TIME_MASK			GENMASK(30, 0)
142*4882a593Smuzhiyun #define WAIT_HTPDN_WAIT_HTPDN_TIME(x)			UPDATE(x, 30, 0)
143*4882a593Smuzhiyun #define WAIT_HTPDN_WAIT_HTPDN_EN			BIT(31)
144*4882a593Smuzhiyun /* INTR_EN */
145*4882a593Smuzhiyun #define INTR_EN_INTR_FRM_ST_EN				BIT(0)
146*4882a593Smuzhiyun #define INTR_EN_INTR_PLL_LOCK_EN			BIT(1)
147*4882a593Smuzhiyun #define INTR_EN_INTR_HTPDN_EN				BIT(2)
148*4882a593Smuzhiyun #define INTR_EN_INTR_LOCKN_EN				BIT(3)
149*4882a593Smuzhiyun #define INTR_EN_INTR_PLL_TIMEOUT_EN			BIT(4)
150*4882a593Smuzhiyun #define INTR_EN_INTR_HTPDN_TIMEOUT_EN			BIT(5)
151*4882a593Smuzhiyun #define INTR_EN_INTR_LOCKN_TIMEOUT_EN			BIT(6)
152*4882a593Smuzhiyun #define INTR_EN_INTR_LINE_FLAG0_EN			BIT(8)
153*4882a593Smuzhiyun #define INTR_EN_INTR_LINE_FLAG1_EN			BIT(9)
154*4882a593Smuzhiyun #define INTR_EN_INTR_AFIFO_OVERFLOW_EN			BIT(10)
155*4882a593Smuzhiyun #define INTR_EN_INTR_AFIFO_UNDERFLOW_EN			BIT(11)
156*4882a593Smuzhiyun #define INTR_EN_INTR_PLL_ERR_EN				BIT(12)
157*4882a593Smuzhiyun #define INTR_EN_INTR_HTPDN_ERR_EN			BIT(13)
158*4882a593Smuzhiyun #define INTR_EN_INTR_LOCKN_ERR_EN			BIT(14)
159*4882a593Smuzhiyun /* INTR_CLR*/
160*4882a593Smuzhiyun #define INTR_CLR_INTR_FRM_ST_CLR			BIT(0)
161*4882a593Smuzhiyun #define INTR_CLR_INTR_PLL_LOCK_CLR			BIT(1)
162*4882a593Smuzhiyun #define INTR_CLR_INTR_HTPDN_CLR				BIT(2)
163*4882a593Smuzhiyun #define INTR_CLR_INTR_LOCKN_CLR				BIT(3)
164*4882a593Smuzhiyun #define INTR_CLR_INTR_PLL_TIMEOUT_CLR			BIT(4)
165*4882a593Smuzhiyun #define INTR_CLR_INTR_HTPDN_TIMEOUT_CLR			BIT(5)
166*4882a593Smuzhiyun #define INTR_CLR_INTR_LOCKN_TIMEOUT_CLR			BIT(6)
167*4882a593Smuzhiyun #define INTR_CLR_INTR_LINE_FLAG0_CLR			BIT(8)
168*4882a593Smuzhiyun #define INTR_CLR_INTR_LINE_FLAG1_CLR			BIT(9)
169*4882a593Smuzhiyun #define INTR_CLR_INTR_AFIFO_OVERFLOW_CLR		BIT(10)
170*4882a593Smuzhiyun #define INTR_CLR_INTR_AFIFO_UNDERFLOW_CLR		BIT(11)
171*4882a593Smuzhiyun #define INTR_CLR_INTR_PLL_ERR_CLR			BIT(12)
172*4882a593Smuzhiyun #define INTR_CLR_INTR_HTPDN_ERR_CLR			BIT(13)
173*4882a593Smuzhiyun #define INTR_CLR_INTR_LOCKN_ERR_CLR			BIT(14)
174*4882a593Smuzhiyun /* INTR_RAW_STATUS */
175*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_FRM_ST			BIT(0)
176*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_PLL_LOCK		BIT(1)
177*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_HTPDN			BIT(2)
178*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_LOCKN			BIT(3)
179*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_PLL_TIMEOUT		BIT(4)
180*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_HTPDN_TIMEOUT		BIT(5)
181*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_LOCKN_TIMEOUT		BIT(6)
182*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_LINE_FLAG0		BIT(8)
183*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_LINE_FLAG1		BIT(9)
184*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_AFIFO_OVERFLOW		BIT(10)
185*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_AFIFO_UNDERFLOW	BIT(11)
186*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_PLL_ERR		BIT(12)
187*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_HTPDN_ERR		BIT(13)
188*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_LOCKN_ERR		BIT(14)
189*4882a593Smuzhiyun /* INTR_STATUS */
190*4882a593Smuzhiyun #define INTR_STATUS_INTR_FRM_ST				BIT(0)
191*4882a593Smuzhiyun #define INTR_STATUS_INTR_PLL_LOCK			BIT(1)
192*4882a593Smuzhiyun #define INTR_STATUS_INTR_HTPDN				BIT(2)
193*4882a593Smuzhiyun #define INTR_STATUS_INTR_LOCKN				BIT(3)
194*4882a593Smuzhiyun #define INTR_STATUS_INTR_PLL_TIMEOUT			BIT(4)
195*4882a593Smuzhiyun #define INTR_STATUS_INTR_HTPDN_TIMEOUT			BIT(5)
196*4882a593Smuzhiyun #define INTR_STATUS_INTR_LOCKN_TIMEOUT			BIT(6)
197*4882a593Smuzhiyun #define INTR_STATUS_INTR_LINE_FLAG0			BIT(8)
198*4882a593Smuzhiyun #define INTR_STATUS_INTR_LINE_FLAG1			BIT(9)
199*4882a593Smuzhiyun #define INTR_STATUS_INTR_AFIFO_OVERFLOW			BIT(10)
200*4882a593Smuzhiyun #define INTR_STATUS_INTR_AFIFO_UNDERFLOW		BIT(11)
201*4882a593Smuzhiyun #define INTR_STATUS_INTR_PLL_ERR			BIT(12)
202*4882a593Smuzhiyun #define INTR_STATUS_INTR_HTPDN_ERR			BIT(13)
203*4882a593Smuzhiyun #define INTR_STATUS_INTR_LOCKN_ERR			BIT(14)
204*4882a593Smuzhiyun 
205*4882a593Smuzhiyun /* COLOR_BAR_CTRL */
206*4882a593Smuzhiyun #define COLOR_BAR_EN					BIT(0)
207*4882a593Smuzhiyun 
208*4882a593Smuzhiyun #define COLOR_DEPTH_RGB_YUV444_18BIT			0
209*4882a593Smuzhiyun #define COLOR_DEPTH_RGB_YUV444_24BIT			1
210*4882a593Smuzhiyun #define COLOR_DEPTH_RGB_YUV444_30BIT			2
211*4882a593Smuzhiyun #define COLOR_DEPTH_YUV422_16BIT			8
212*4882a593Smuzhiyun #define COLOR_DEPTH_YUV422_20BIT			9
213*4882a593Smuzhiyun 
214*4882a593Smuzhiyun int rk628_gvi_parse(struct rk628 *rk628, struct device_node *gvi_np);
215*4882a593Smuzhiyun void rk628_gvi_enable(struct rk628 *rk628);
216*4882a593Smuzhiyun void rk628_gvi_disable(struct rk628 *rk628);
217*4882a593Smuzhiyun 
218*4882a593Smuzhiyun #endif
219