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