xref: /rk3399_rockchip-uboot/drivers/video/drm/rk628/rk628_cru.h (revision ab3bc87339b1566ceabcfb54995e11928492c356)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (c) 2020 Rockchip Electronics Co. Ltd.
4  *
5  * Author: Guochun Huang <hero.huang@rock-chips.com>
6  */
7 
8 #ifndef RK628_CRU_H
9 #define RK628_CRU_H
10 
11 #include "rk628.h"
12 
13 #define CRU_REG(x)		((x) + 0xc0000)
14 
15 #define CRU_CPLL_CON0		CRU_REG(0x0000)
16 #define PLL_BYPASS_MASK		BIT(15)
17 #define PLL_BYPASS(x)		HIWORD_UPDATE(x, 15, 15)
18 #define PLL_BYPASS_SHIFT	15
19 #define PLL_POSTDIV1_MASK	GENMASK(14, 12)
20 #define PLL_POSTDIV1(x)		HIWORD_UPDATE(x, 14, 12)
21 #define PLL_POSTDIV1_SHIFT	12
22 #define PLL_FBDIV_MASK		GENMASK(11, 0)
23 #define PLL_FBDIV(x)		HIWORD_UPDATE(x, 11, 0)
24 #define PLL_FBDIV_SHIFT		0
25 #define CRU_CPLL_CON1		CRU_REG(0x0004)
26 #define PLL_PD_MASK		BIT(13)
27 #define PLL_PD(x)		HIWORD_UPDATE(x, 13, 13)
28 #define PLL_DSMPD_MASK		BIT(12)
29 #define PLL_DSMPD(x)		HIWORD_UPDATE(x, 12, 12)
30 #define PLL_DSMPD_SHIFT		12
31 #define PLL_LOCK		BIT(10)
32 #define PLL_POSTDIV2_MASK	GENMASK(8, 6)
33 #define PLL_POSTDIV2(x)		HIWORD_UPDATE(x, 8, 6)
34 #define PLL_POSTDIV2_SHIFT	6
35 #define PLL_REFDIV_MASK		GENMASK(5, 0)
36 #define PLL_REFDIV(x)		HIWORD_UPDATE(x, 5, 0)
37 #define PLL_REFDIV_SHIFT	0
38 #define CRU_CPLL_CON2		CRU_REG(0x0008)
39 #define PLL_FRAC_MASK		GENMASK(23, 0)
40 #define PLL_FRAC(x)		((x) << 0)
41 #define PLL_FRAC_SHIFT		0
42 #define CRU_CPLL_CON3		CRU_REG(0x000c)
43 #define CRU_CPLL_CON4		CRU_REG(0x0010)
44 #define CRU_GPLL_CON0		CRU_REG(0x0020)
45 #define CRU_GPLL_CON1		CRU_REG(0x0024)
46 #define CRU_GPLL_CON2		CRU_REG(0x0028)
47 #define CRU_GPLL_CON3		CRU_REG(0x002c)
48 #define CRU_GPLL_CON4		CRU_REG(0x0030)
49 #define CRU_APLL_CON0		CRU_REG(0x0040)
50 #define CRU_APLL_CON1		CRU_REG(0x0044)
51 #define CRU_APLL_CON2		CRU_REG(0x0048)
52 #define CRU_APLL_CON3		CRU_REG(0x004c)
53 #define CRU_APLL_CON4		CRU_REG(0x0050)
54 #define CRU_MODE_CON00		CRU_REG(0x0060)
55 #define CLK_APLL_MODE_MASK	BIT(4)
56 #define CLK_APLL_MODE_SHIFT	4
57 #define CLK_APLL_MODE_GPLL	1
58 #define CLK_APLL_MODE_OSC	0
59 #define CLK_GPLL_MODE_MASK	BIT(2)
60 #define CLK_GPLL_MODE_SHIFT	2
61 #define CLK_GPLL_MODE_GPLL	1
62 #define CLK_GPLL_MODE_OSC	0
63 #define CLK_CPLL_MODE_MASK	BIT(0)
64 #define CLK_CPLL_MODE_SHIFT	0
65 #define CLK_CPLL_MODE_CPLL	1
66 #define CLK_CPLL_MODE_OSC	0
67 #define CRU_CLKSEL_CON00	CRU_REG(0x0080)
68 #define CRU_CLKSEL_CON01	CRU_REG(0x0084)
69 #define CRU_CLKSEL_CON02	CRU_REG(0x0088)
70 #define SCLK_VOP_SEL_MASK	BIT(9)
71 #define SCLK_VOP_SEL_SHIFT	9
72 #define SCLK_VOP_SEL_GPLL	1
73 #define SCLK_VOP_SEL_CPLL	0
74 #define CLK_RX_READ_SEL_MASK	BIT(8)
75 #define CLK_RX_READ_SEL_SHIFT	8
76 #define CLK_RX_READ_SEL_GPLL	1
77 #define CLK_RX_READ_SEL_CPLL	0
78 #define CLK_BT1120DEC_SEL_MASK	BIT(7)
79 #define CLK_BT1120DEC_SEL_SHIFT	7
80 #define CLK_BT1120DEC_SEL_GPLL	1
81 #define CLK_BT1120DEC_SEL_CPLL	0
82 #define CLK_BT1120DEC_DIV(x)	HIWORD_UPDATE(x, 4, 0)
83 #define CRU_CLKSEL_CON03	CRU_REG(0x008c)
84 #define CRU_CLKSEL_CON04	CRU_REG(0x0090)
85 #define CLK_HDMIRX_AUD_DIV_MASK	GENMASK(13, 6)
86 #define CLK_HDMIRX_AUD_DIV(x)	HIWORD_UPDATE(x, 13, 6)
87 #define CLK_HDMIRX_AUD_SEL_MASK	GENMASK(15, 14)
88 #define CLK_HDMIRX_AUD_SEL(x)	HIWORD_UPDATE(x, 15, 14)
89 #define CRU_CLKSEL_CON05	CRU_REG(0x0094)
90 #define CLK_HDMIRX_AUD_DIV_MASK	GENMASK(13, 6)
91 #define CLK_HDMIRX_AUD_DIV(x)	HIWORD_UPDATE(x, 13, 6)
92 #define CLK_HDMIRX_AUD_SEL_V1(x)	HIWORD_UPDATE(x, 15, 15)
93 #define CLK_HDMIRX_AUD_SEL_MASK_V1	GENMASK(15, 15)
94 #define CLK_HDMIRX_AUD_SEL_V2(x)	HIWORD_UPDATE(x, 15, 14)
95 #define CLK_HDMIRX_AUD_SEL_MASK_V2	GENMASK(15, 14)
96 #define CLK_IMODET_SEL_MASK	BIT(5)
97 #define CLK_IMODET_SEL_SHIFT	5
98 #define CRU_CLKSEL_CON06	CRU_REG(0x0098)
99 #define SCLK_UART_SEL(x)	HIWORD_UPDATE(x, 15, 14)
100 #define SCLK_UART_SEL_MASK	GENMASK(15, 14)
101 #define SCLK_UART_SEL_SHIFT	14
102 #define SCLK_UART_SEL_OSC	2
103 #define SCLK_UART_SEL_UART_FRAC	1
104 #define SCLK_UART_SEL_UART_SRC	0
105 #define CRU_CLKSEL_CON07	CRU_REG(0x009c)
106 #define CRU_CLKSEL_CON08	CRU_REG(0x00a0)
107 #define CRU_CLKSEL_CON09	CRU_REG(0x00a4)
108 #define CRU_CLKSEL_CON10	CRU_REG(0x00a8)
109 #define CRU_CLKSEL_CON11	CRU_REG(0x00ac)
110 #define CRU_CLKSEL_CON12	CRU_REG(0x00b0)
111 #define CRU_CLKSEL_CON13	CRU_REG(0x00b4)
112 #define CRU_CLKSEL_CON14	CRU_REG(0x00b8)
113 #define CRU_CLKSEL_CON15	CRU_REG(0x00bc)
114 #define CRU_CLKSEL_CON16	CRU_REG(0x00c0)
115 #define CRU_CLKSEL_CON17	CRU_REG(0x00c4)
116 #define CRU_CLKSEL_CON18	CRU_REG(0x00c8)
117 #define CRU_CLKSEL_CON20	CRU_REG(0x00d0)
118 #define CRU_CLKSEL_CON21	CRU_REG(0x00d4)
119 #define CLK_UART_SRC_SEL_MASK	BIT(15)
120 #define CLK_UART_SRC_SEL_GPLL	(1 << 15)
121 #define CLK_UART_SRC_SEL_CPLL	(0 << 15)
122 #define CLK_UART_SRC_DIV_MASK	GENMASK(12, 8)
123 #define CLK_UART_SRC_DIV_SHIFT	8
124 #define CRU_GATE_CON00		CRU_REG(0x0180)
125 #define CRU_GATE_CON01		CRU_REG(0x0184)
126 #define CRU_GATE_CON02		CRU_REG(0x0188)
127 #define CRU_GATE_CON03		CRU_REG(0x018c)
128 #define CRU_GATE_CON04		CRU_REG(0x0190)
129 #define CRU_GATE_CON05		CRU_REG(0x0194)
130 #define CRU_SOFTRST_CON00	CRU_REG(0x0200)
131 #define CRU_SOFTRST_CON01	CRU_REG(0x0204)
132 #define CRU_SOFTRST_CON02	CRU_REG(0x0208)
133 #define CRU_SOFTRST_CON04	CRU_REG(0x0210)
134 #define CRU_MAX_REGISTER	CRU_SOFTRST_CON04
135 
136 #define CGU_CLK_CPLL		1
137 #define CGU_CLK_GPLL		2
138 #define CGU_CLK_CPLL_MUX	3
139 #define CGU_CLK_GPLL_MUX	4
140 #define CGU_PCLK_GPIO0		5
141 #define CGU_PCLK_GPIO1		6
142 #define CGU_PCLK_GPIO2		7
143 #define CGU_PCLK_GPIO3		8
144 #define CGU_PCLK_TXPHY_CON	9
145 #define CGU_PCLK_EFUSE		10
146 #define CGU_PCLK_DSI0		11
147 #define CGU_PCLK_DSI1		12
148 #define CGU_PCLK_CSI		13
149 #define CGU_PCLK_HDMITX		14
150 #define CGU_PCLK_RXPHY		15
151 #define CGU_PCLK_HDMIRX		16
152 #define CGU_PCLK_DPRX		17
153 #define CGU_PCLK_GVIHOST	18
154 #define CGU_CLK_CFG_DPHY0	19
155 #define CGU_CLK_CFG_DPHY1	20
156 #define CGU_CLK_TXESC		21
157 #define CGU_CLK_DPRX_VID	22
158 #define CGU_CLK_IMODET		23
159 #define CGU_CLK_HDMIRX_AUD	24
160 #define CGU_CLK_HDMIRX_CEC	25
161 #define CGU_CLK_RX_READ		26
162 #define CGU_SCLK_VOP		27
163 #define CGU_PCLK_LOGIC		28
164 #define CGU_CLK_GPIO_DB0	29
165 #define CGU_CLK_GPIO_DB1	30
166 #define CGU_CLK_GPIO_DB2	31
167 #define CGU_CLK_GPIO_DB3	32
168 #define CGU_CLK_I2S_8CH_SRC	33
169 #define CGU_CLK_I2S_8CH_FRAC	34
170 #define CGU_MCLK_I2S_8CH	35
171 #define CGU_I2S_MCLKOUT		36
172 #define CGU_BT1120DEC		37
173 #define CGU_SCLK_UART		38
174 #define CGU_CLK_APLL		39
175 
176 unsigned long rk628_cru_clk_get_rate(struct rk628 *rk628, unsigned int id);
177 int rk628_cru_clk_set_rate(struct rk628 *rk628, unsigned int id,
178 			   unsigned long rate);
179 void rk628_cru_init(struct rk628 *rk628);
180 
181 #endif
182