1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun * Copyright (c) 2022 Rockchip Electronics Co. Ltd.
4*4882a593Smuzhiyun * Author: Joseph Chen <chenjh@rock-chips.com>
5*4882a593Smuzhiyun */
6*4882a593Smuzhiyun
7*4882a593Smuzhiyun #include <linux/clk-provider.h>
8*4882a593Smuzhiyun #include <linux/module.h>
9*4882a593Smuzhiyun #include <linux/of.h>
10*4882a593Smuzhiyun #include <linux/of_device.h>
11*4882a593Smuzhiyun #include <linux/of_address.h>
12*4882a593Smuzhiyun #include <linux/syscore_ops.h>
13*4882a593Smuzhiyun #include <dt-bindings/clock/rk3528-cru.h>
14*4882a593Smuzhiyun #include "clk.h"
15*4882a593Smuzhiyun
16*4882a593Smuzhiyun /* A placeholder for rk3066 pll type. We are rk3328 pll type */
17*4882a593Smuzhiyun #define RK3528_GRF_SOC_STATUS0 0x1a0
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun enum rk3528_plls {
20*4882a593Smuzhiyun apll, cpll, gpll, ppll, dpll,
21*4882a593Smuzhiyun };
22*4882a593Smuzhiyun
23*4882a593Smuzhiyun /*
24*4882a593Smuzhiyun * ## PLL attention.
25*4882a593Smuzhiyun *
26*4882a593Smuzhiyun * [FRAC PLL]: GPLL, PPLL, DPLL
27*4882a593Smuzhiyun * - frac mode: refdiv can be 1 or 2 only
28*4882a593Smuzhiyun * - int mode: refdiv has no special limit
29*4882a593Smuzhiyun * - VCO range: [950, 3800] MHZ
30*4882a593Smuzhiyun *
31*4882a593Smuzhiyun * [INT PLL]: CPLL, APLL
32*4882a593Smuzhiyun * - int mode: refdiv can be 1 or 2 only
33*4882a593Smuzhiyun * - VCO range: [475, 1900] MHZ
34*4882a593Smuzhiyun *
35*4882a593Smuzhiyun * [PPLL]: normal mode only.
36*4882a593Smuzhiyun *
37*4882a593Smuzhiyun *
38*4882a593Smuzhiyun * ## CRU access attention.
39*4882a593Smuzhiyun *
40*4882a593Smuzhiyun * pclk_cru => pclk_vo_root => aclk_vo_root
41*4882a593Smuzhiyun * pclk_cru_pcie => pclk_vpu_root => aclk_vpu_root
42*4882a593Smuzhiyun * pclk_cru_ddrphy => hclk_rkvdec_root => aclk_rkvdec_root
43*4882a593Smuzhiyun */
44*4882a593Smuzhiyun static struct rockchip_pll_rate_table rk3528_pll_rates[] = {
45*4882a593Smuzhiyun /* _mhz, _refdiv, _fbdiv, _postdiv1, _postdiv2, _dsmpd, _frac */
46*4882a593Smuzhiyun RK3036_PLL_RATE(1896000000, 1, 79, 1, 1, 1, 0),
47*4882a593Smuzhiyun RK3036_PLL_RATE(1800000000, 1, 75, 1, 1, 1, 0),
48*4882a593Smuzhiyun RK3036_PLL_RATE(1704000000, 1, 71, 1, 1, 1, 0),
49*4882a593Smuzhiyun RK3036_PLL_RATE(1608000000, 1, 67, 1, 1, 1, 0),
50*4882a593Smuzhiyun RK3036_PLL_RATE(1512000000, 1, 63, 1, 1, 1, 0),
51*4882a593Smuzhiyun RK3036_PLL_RATE(1416000000, 1, 59, 1, 1, 1, 0),
52*4882a593Smuzhiyun RK3036_PLL_RATE(1296000000, 1, 54, 1, 1, 1, 0),
53*4882a593Smuzhiyun RK3036_PLL_RATE(1200000000, 1, 50, 1, 1, 1, 0),
54*4882a593Smuzhiyun RK3036_PLL_RATE(1188000000, 1, 99, 2, 1, 1, 0), /* GPLL */
55*4882a593Smuzhiyun RK3036_PLL_RATE(1092000000, 2, 91, 1, 1, 1, 0),
56*4882a593Smuzhiyun RK3036_PLL_RATE(1008000000, 1, 42, 1, 1, 1, 0),
57*4882a593Smuzhiyun RK3036_PLL_RATE(1000000000, 1, 125, 3, 1, 1, 0), /* PPLL */
58*4882a593Smuzhiyun RK3036_PLL_RATE(996000000, 2, 83, 1, 1, 1, 0), /* CPLL */
59*4882a593Smuzhiyun RK3036_PLL_RATE(960000000, 1, 40, 1, 1, 1, 0),
60*4882a593Smuzhiyun RK3036_PLL_RATE(912000000, 1, 76, 2, 1, 1, 0),
61*4882a593Smuzhiyun RK3036_PLL_RATE(816000000, 1, 68, 2, 1, 1, 0),
62*4882a593Smuzhiyun RK3036_PLL_RATE(600000000, 1, 50, 2, 1, 1, 0),
63*4882a593Smuzhiyun RK3036_PLL_RATE(594000000, 2, 99, 2, 1, 1, 0),
64*4882a593Smuzhiyun RK3036_PLL_RATE(408000000, 1, 68, 2, 2, 1, 0),
65*4882a593Smuzhiyun RK3036_PLL_RATE(312000000, 1, 78, 6, 1, 1, 0),
66*4882a593Smuzhiyun RK3036_PLL_RATE(216000000, 1, 72, 4, 2, 1, 0),
67*4882a593Smuzhiyun RK3036_PLL_RATE(96000000, 1, 24, 3, 2, 1, 0),
68*4882a593Smuzhiyun { /* sentinel */ },
69*4882a593Smuzhiyun };
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun #define RK3528_DIV_ACLK_M_CORE_MASK 0x1f
72*4882a593Smuzhiyun #define RK3528_DIV_ACLK_M_CORE_SHIFT 11
73*4882a593Smuzhiyun #define RK3528_DIV_PCLK_DBG_MASK 0x1f
74*4882a593Smuzhiyun #define RK3528_DIV_PCLK_DBG_SHIFT 1
75*4882a593Smuzhiyun
76*4882a593Smuzhiyun #define RK3528_CLKSEL39(_aclk_m_core) \
77*4882a593Smuzhiyun { \
78*4882a593Smuzhiyun .reg = RK3528_CLKSEL_CON(39), \
79*4882a593Smuzhiyun .val = HIWORD_UPDATE(_aclk_m_core, RK3528_DIV_ACLK_M_CORE_MASK, \
80*4882a593Smuzhiyun RK3528_DIV_ACLK_M_CORE_SHIFT), \
81*4882a593Smuzhiyun }
82*4882a593Smuzhiyun
83*4882a593Smuzhiyun #define RK3528_CLKSEL40(_pclk_dbg) \
84*4882a593Smuzhiyun { \
85*4882a593Smuzhiyun .reg = RK3528_CLKSEL_CON(40), \
86*4882a593Smuzhiyun .val = HIWORD_UPDATE(_pclk_dbg, RK3528_DIV_PCLK_DBG_MASK, \
87*4882a593Smuzhiyun RK3528_DIV_PCLK_DBG_SHIFT), \
88*4882a593Smuzhiyun }
89*4882a593Smuzhiyun
90*4882a593Smuzhiyun /* SIGN-OFF: _aclk_m_core: 550M, _pclk_dbg: 137.5M, */
91*4882a593Smuzhiyun #define RK3528_CPUCLK_RATE(_prate, _aclk_m_core, _pclk_dbg) \
92*4882a593Smuzhiyun { \
93*4882a593Smuzhiyun .prate = _prate, \
94*4882a593Smuzhiyun .divs = { \
95*4882a593Smuzhiyun RK3528_CLKSEL39(_aclk_m_core), \
96*4882a593Smuzhiyun RK3528_CLKSEL40(_pclk_dbg), \
97*4882a593Smuzhiyun }, \
98*4882a593Smuzhiyun }
99*4882a593Smuzhiyun
100*4882a593Smuzhiyun static struct rockchip_cpuclk_rate_table rk3528_cpuclk_rates[] __initdata = {
101*4882a593Smuzhiyun /* APLL(CPU) rate <= 1900M, due to APLL VCO limit */
102*4882a593Smuzhiyun RK3528_CPUCLK_RATE(1896000000, 1, 13),
103*4882a593Smuzhiyun RK3528_CPUCLK_RATE(1800000000, 1, 12),
104*4882a593Smuzhiyun RK3528_CPUCLK_RATE(1704000000, 1, 11),
105*4882a593Smuzhiyun RK3528_CPUCLK_RATE(1608000000, 1, 11),
106*4882a593Smuzhiyun RK3528_CPUCLK_RATE(1512000000, 1, 11),
107*4882a593Smuzhiyun RK3528_CPUCLK_RATE(1416000000, 1, 9),
108*4882a593Smuzhiyun RK3528_CPUCLK_RATE(1296000000, 1, 8),
109*4882a593Smuzhiyun RK3528_CPUCLK_RATE(1200000000, 1, 8),
110*4882a593Smuzhiyun RK3528_CPUCLK_RATE(1188000000, 1, 8),
111*4882a593Smuzhiyun RK3528_CPUCLK_RATE(1092000000, 1, 7),
112*4882a593Smuzhiyun RK3528_CPUCLK_RATE(1008000000, 1, 6),
113*4882a593Smuzhiyun RK3528_CPUCLK_RATE(1000000000, 1, 6),
114*4882a593Smuzhiyun RK3528_CPUCLK_RATE(996000000, 1, 6),
115*4882a593Smuzhiyun RK3528_CPUCLK_RATE(960000000, 1, 6),
116*4882a593Smuzhiyun RK3528_CPUCLK_RATE(912000000, 1, 6),
117*4882a593Smuzhiyun RK3528_CPUCLK_RATE(816000000, 1, 5),
118*4882a593Smuzhiyun RK3528_CPUCLK_RATE(600000000, 1, 3),
119*4882a593Smuzhiyun RK3528_CPUCLK_RATE(594000000, 1, 3),
120*4882a593Smuzhiyun RK3528_CPUCLK_RATE(408000000, 1, 2),
121*4882a593Smuzhiyun RK3528_CPUCLK_RATE(312000000, 1, 2),
122*4882a593Smuzhiyun RK3528_CPUCLK_RATE(216000000, 1, 1),
123*4882a593Smuzhiyun RK3528_CPUCLK_RATE(96000000, 1, 0),
124*4882a593Smuzhiyun };
125*4882a593Smuzhiyun
126*4882a593Smuzhiyun static const struct rockchip_cpuclk_reg_data rk3528_cpuclk_data = {
127*4882a593Smuzhiyun .core_reg[0] = RK3528_CLKSEL_CON(39),
128*4882a593Smuzhiyun .div_core_shift[0] = 5,
129*4882a593Smuzhiyun .div_core_mask[0] = 0x1f,
130*4882a593Smuzhiyun .num_cores = 1,
131*4882a593Smuzhiyun .mux_core_alt = 1,
132*4882a593Smuzhiyun .mux_core_main = 0,
133*4882a593Smuzhiyun .mux_core_shift = 10,
134*4882a593Smuzhiyun .mux_core_mask = 0x1,
135*4882a593Smuzhiyun };
136*4882a593Smuzhiyun
137*4882a593Smuzhiyun PNAME(mux_pll_p) = { "xin24m" };
138*4882a593Smuzhiyun PNAME(mux_24m_32k_p) = { "xin24m", "clk_32k" };
139*4882a593Smuzhiyun PNAME(mux_gpll_cpll_p) = { "gpll", "cpll" };
140*4882a593Smuzhiyun PNAME(mux_gpll_cpll_xin24m_p) = { "gpll", "cpll", "xin24m" };
141*4882a593Smuzhiyun PNAME(mux_100m_50m_24m_p) = { "clk_100m_src", "clk_50m_src", "xin24m" };
142*4882a593Smuzhiyun PNAME(mux_150m_100m_24m_p) = { "clk_150m_src", "clk_100m_src", "xin24m" };
143*4882a593Smuzhiyun PNAME(mux_200m_100m_24m_p) = { "clk_200m_src", "clk_100m_src", "xin24m" };
144*4882a593Smuzhiyun PNAME(mux_200m_100m_50m_24m_p) = { "clk_200m_src", "clk_100m_src", "clk_50m_src", "xin24m" };
145*4882a593Smuzhiyun PNAME(mux_300m_200m_100m_24m_p) = { "clk_300m_src", "clk_200m_src", "clk_100m_src", "xin24m" };
146*4882a593Smuzhiyun PNAME(mux_339m_200m_100m_24m_p) = { "clk_339m_src", "clk_200m_src", "clk_100m_src", "xin24m" };
147*4882a593Smuzhiyun PNAME(mux_500m_200m_100m_24m_p) = { "clk_500m_src", "clk_200m_src", "clk_100m_src", "xin24m" };
148*4882a593Smuzhiyun PNAME(mux_500m_300m_100m_24m_p) = { "clk_500m_src", "clk_300m_src", "clk_100m_src", "xin24m" };
149*4882a593Smuzhiyun PNAME(mux_600m_300m_200m_24m_p) = { "clk_600m_src", "clk_300m_src", "clk_200m_src", "xin24m" };
150*4882a593Smuzhiyun PNAME(aclk_gpu_p) = { "aclk_gpu_root", "clk_gpu_pvtpll_src" };
151*4882a593Smuzhiyun PNAME(aclk_rkvdec_pvtmux_root_p) = { "aclk_rkvdec_root", "clk_rkvdec_pvtpll_src" };
152*4882a593Smuzhiyun PNAME(clk_i2c2_p) = { "clk_200m_src", "clk_100m_src", "xin24m", "clk_32k" };
153*4882a593Smuzhiyun PNAME(clk_ref_pcie_inner_phy_p) = { "clk_ppll_100m_src", "xin24m" };
154*4882a593Smuzhiyun PNAME(dclk_vop0_p) = { "dclk_vop_src0", "clk_hdmiphy_pixel_io" };
155*4882a593Smuzhiyun PNAME(mclk_i2s0_2ch_sai_src_p) = { "clk_i2s0_2ch_src", "clk_i2s0_2ch_frac", "xin12m" };
156*4882a593Smuzhiyun PNAME(mclk_i2s1_8ch_sai_src_p) = { "clk_i2s1_8ch_src", "clk_i2s1_8ch_frac", "xin12m" };
157*4882a593Smuzhiyun PNAME(mclk_i2s2_2ch_sai_src_p) = { "clk_i2s2_2ch_src", "clk_i2s2_2ch_frac", "xin12m" };
158*4882a593Smuzhiyun PNAME(mclk_i2s3_8ch_sai_src_p) = { "clk_i2s3_8ch_src", "clk_i2s3_8ch_frac", "xin12m" };
159*4882a593Smuzhiyun PNAME(mclk_sai_i2s0_p) = { "mclk_i2s0_2ch_sai_src", "i2s0_mclkin" };
160*4882a593Smuzhiyun PNAME(mclk_sai_i2s1_p) = { "mclk_i2s1_8ch_sai_src", "i2s1_mclkin" };
161*4882a593Smuzhiyun PNAME(mclk_spdif_src_p) = { "clk_spdif_src", "clk_spdif_frac", "xin12m" };
162*4882a593Smuzhiyun PNAME(sclk_uart0_src_p) = { "clk_uart0_src", "clk_uart0_frac", "xin24m" };
163*4882a593Smuzhiyun PNAME(sclk_uart1_src_p) = { "clk_uart1_src", "clk_uart1_frac", "xin24m" };
164*4882a593Smuzhiyun PNAME(sclk_uart2_src_p) = { "clk_uart2_src", "clk_uart2_frac", "xin24m" };
165*4882a593Smuzhiyun PNAME(sclk_uart3_src_p) = { "clk_uart3_src", "clk_uart3_frac", "xin24m" };
166*4882a593Smuzhiyun PNAME(sclk_uart4_src_p) = { "clk_uart4_src", "clk_uart4_frac", "xin24m" };
167*4882a593Smuzhiyun PNAME(sclk_uart5_src_p) = { "clk_uart5_src", "clk_uart5_frac", "xin24m" };
168*4882a593Smuzhiyun PNAME(sclk_uart6_src_p) = { "clk_uart6_src", "clk_uart6_frac", "xin24m" };
169*4882a593Smuzhiyun PNAME(sclk_uart7_src_p) = { "clk_uart7_src", "clk_uart7_frac", "xin24m" };
170*4882a593Smuzhiyun PNAME(clk_32k_p) = { "xin_osc0_div", "clk_pvtm_32k" };
171*4882a593Smuzhiyun
172*4882a593Smuzhiyun /* Pass 0 to PLL() '_lshift' as a placeholder for rk3066 pll type. We are rk3328 pll type */
173*4882a593Smuzhiyun static struct rockchip_pll_clock rk3528_pll_clks[] __initdata = {
174*4882a593Smuzhiyun [apll] = PLL(pll_rk3328, PLL_APLL, "apll", mux_pll_p,
175*4882a593Smuzhiyun CLK_IS_CRITICAL, RK3528_PLL_CON(0),
176*4882a593Smuzhiyun RK3528_MODE_CON, 0, 0, 0, rk3528_pll_rates),
177*4882a593Smuzhiyun
178*4882a593Smuzhiyun [cpll] = PLL(pll_rk3328, PLL_CPLL, "cpll", mux_pll_p,
179*4882a593Smuzhiyun CLK_IS_CRITICAL, RK3528_PLL_CON(8),
180*4882a593Smuzhiyun RK3528_MODE_CON, 2, 0, 0, rk3528_pll_rates),
181*4882a593Smuzhiyun
182*4882a593Smuzhiyun [gpll] = PLL(pll_rk3328, PLL_GPLL, "gpll", mux_pll_p,
183*4882a593Smuzhiyun CLK_IS_CRITICAL, RK3528_PLL_CON(24),
184*4882a593Smuzhiyun RK3528_MODE_CON, 4, 0, 0, rk3528_pll_rates),
185*4882a593Smuzhiyun
186*4882a593Smuzhiyun [ppll] = PLL(pll_rk3328, PLL_PPLL, "ppll", mux_pll_p,
187*4882a593Smuzhiyun CLK_IS_CRITICAL, RK3528_PCIE_PLL_CON(32),
188*4882a593Smuzhiyun RK3528_MODE_CON, 6, 0,
189*4882a593Smuzhiyun ROCKCHIP_PLL_FIXED_MODE, rk3528_pll_rates),
190*4882a593Smuzhiyun
191*4882a593Smuzhiyun [dpll] = PLL(pll_rk3328, PLL_DPLL, "dpll", mux_pll_p,
192*4882a593Smuzhiyun CLK_IGNORE_UNUSED, RK3528_DDRPHY_PLL_CON(16),
193*4882a593Smuzhiyun RK3528_DDRPHY_MODE_CON, 0, 0, 0, rk3528_pll_rates),
194*4882a593Smuzhiyun };
195*4882a593Smuzhiyun
196*4882a593Smuzhiyun #define MFLAGS CLK_MUX_HIWORD_MASK
197*4882a593Smuzhiyun #define DFLAGS CLK_DIVIDER_HIWORD_MASK
198*4882a593Smuzhiyun #define GFLAGS (CLK_GATE_HIWORD_MASK | CLK_GATE_SET_TO_DISABLE)
199*4882a593Smuzhiyun
200*4882a593Smuzhiyun static struct rockchip_clk_branch rk3528_uart0_fracmux __initdata =
201*4882a593Smuzhiyun MUX(CLK_UART0, "clk_uart0", sclk_uart0_src_p, CLK_SET_RATE_PARENT,
202*4882a593Smuzhiyun RK3528_CLKSEL_CON(6), 0, 2, MFLAGS);
203*4882a593Smuzhiyun
204*4882a593Smuzhiyun static struct rockchip_clk_branch rk3528_uart1_fracmux __initdata =
205*4882a593Smuzhiyun MUX(CLK_UART1, "clk_uart1", sclk_uart1_src_p, CLK_SET_RATE_PARENT,
206*4882a593Smuzhiyun RK3528_CLKSEL_CON(8), 0, 2, MFLAGS);
207*4882a593Smuzhiyun
208*4882a593Smuzhiyun static struct rockchip_clk_branch rk3528_uart2_fracmux __initdata =
209*4882a593Smuzhiyun MUX(CLK_UART2, "clk_uart2", sclk_uart2_src_p, CLK_SET_RATE_PARENT,
210*4882a593Smuzhiyun RK3528_CLKSEL_CON(10), 0, 2, MFLAGS);
211*4882a593Smuzhiyun
212*4882a593Smuzhiyun static struct rockchip_clk_branch rk3528_uart3_fracmux __initdata =
213*4882a593Smuzhiyun MUX(CLK_UART3, "clk_uart3", sclk_uart3_src_p, CLK_SET_RATE_PARENT,
214*4882a593Smuzhiyun RK3528_CLKSEL_CON(12), 0, 2, MFLAGS);
215*4882a593Smuzhiyun
216*4882a593Smuzhiyun static struct rockchip_clk_branch rk3528_uart4_fracmux __initdata =
217*4882a593Smuzhiyun MUX(CLK_UART4, "clk_uart4", sclk_uart4_src_p, CLK_SET_RATE_PARENT,
218*4882a593Smuzhiyun RK3528_CLKSEL_CON(14), 0, 2, MFLAGS);
219*4882a593Smuzhiyun
220*4882a593Smuzhiyun static struct rockchip_clk_branch rk3528_uart5_fracmux __initdata =
221*4882a593Smuzhiyun MUX(CLK_UART5, "clk_uart5", sclk_uart5_src_p, CLK_SET_RATE_PARENT,
222*4882a593Smuzhiyun RK3528_CLKSEL_CON(16), 0, 2, MFLAGS);
223*4882a593Smuzhiyun
224*4882a593Smuzhiyun static struct rockchip_clk_branch rk3528_uart6_fracmux __initdata =
225*4882a593Smuzhiyun MUX(CLK_UART6, "clk_uart6", sclk_uart6_src_p, CLK_SET_RATE_PARENT,
226*4882a593Smuzhiyun RK3528_CLKSEL_CON(18), 0, 2, MFLAGS);
227*4882a593Smuzhiyun
228*4882a593Smuzhiyun static struct rockchip_clk_branch rk3528_uart7_fracmux __initdata =
229*4882a593Smuzhiyun MUX(CLK_UART7, "clk_uart7", sclk_uart7_src_p, CLK_SET_RATE_PARENT,
230*4882a593Smuzhiyun RK3528_CLKSEL_CON(20), 0, 2, MFLAGS);
231*4882a593Smuzhiyun
232*4882a593Smuzhiyun static struct rockchip_clk_branch mclk_i2s0_2ch_sai_src_fracmux __initdata =
233*4882a593Smuzhiyun MUX(MCLK_I2S0_2CH_SAI_SRC_PRE, "mclk_i2s0_2ch_sai_src_pre", mclk_i2s0_2ch_sai_src_p, CLK_SET_RATE_PARENT,
234*4882a593Smuzhiyun RK3528_CLKSEL_CON(22), 0, 2, MFLAGS);
235*4882a593Smuzhiyun
236*4882a593Smuzhiyun static struct rockchip_clk_branch mclk_i2s1_8ch_sai_src_fracmux __initdata =
237*4882a593Smuzhiyun MUX(MCLK_I2S1_8CH_SAI_SRC_PRE, "mclk_i2s1_8ch_sai_src_pre", mclk_i2s1_8ch_sai_src_p, CLK_SET_RATE_PARENT,
238*4882a593Smuzhiyun RK3528_CLKSEL_CON(26), 0, 2, MFLAGS);
239*4882a593Smuzhiyun
240*4882a593Smuzhiyun static struct rockchip_clk_branch mclk_i2s2_2ch_sai_src_fracmux __initdata =
241*4882a593Smuzhiyun MUX(MCLK_I2S2_2CH_SAI_SRC_PRE, "mclk_i2s2_2ch_sai_src_pre", mclk_i2s2_2ch_sai_src_p, CLK_SET_RATE_PARENT,
242*4882a593Smuzhiyun RK3528_CLKSEL_CON(28), 0, 2, MFLAGS);
243*4882a593Smuzhiyun
244*4882a593Smuzhiyun static struct rockchip_clk_branch mclk_i2s3_8ch_sai_src_fracmux __initdata =
245*4882a593Smuzhiyun MUX(MCLK_I2S3_8CH_SAI_SRC_PRE, "mclk_i2s3_8ch_sai_src_pre", mclk_i2s3_8ch_sai_src_p, CLK_SET_RATE_PARENT,
246*4882a593Smuzhiyun RK3528_CLKSEL_CON(24), 0, 2, MFLAGS);
247*4882a593Smuzhiyun
248*4882a593Smuzhiyun static struct rockchip_clk_branch mclk_spdif_src_fracmux __initdata =
249*4882a593Smuzhiyun MUX(MCLK_SDPDIF_SRC_PRE, "mclk_spdif_src_pre", mclk_spdif_src_p, CLK_SET_RATE_PARENT,
250*4882a593Smuzhiyun RK3528_CLKSEL_CON(32), 0, 2, MFLAGS);
251*4882a593Smuzhiyun
252*4882a593Smuzhiyun /*
253*4882a593Smuzhiyun * CRU Clock-Architecture
254*4882a593Smuzhiyun */
255*4882a593Smuzhiyun static struct rockchip_clk_branch rk3528_clk_branches[] __initdata = {
256*4882a593Smuzhiyun /* top */
257*4882a593Smuzhiyun FACTOR(0, "xin12m", "xin24m", 0, 1, 2),
258*4882a593Smuzhiyun
259*4882a593Smuzhiyun COMPOSITE(CLK_MATRIX_250M_SRC, "clk_250m_src", mux_gpll_cpll_p, CLK_IS_CRITICAL,
260*4882a593Smuzhiyun RK3528_CLKSEL_CON(1), 15, 1, MFLAGS, 10, 5, DFLAGS,
261*4882a593Smuzhiyun RK3528_CLKGATE_CON(0), 5, GFLAGS),
262*4882a593Smuzhiyun COMPOSITE(CLK_MATRIX_500M_SRC, "clk_500m_src", mux_gpll_cpll_p, CLK_IS_CRITICAL,
263*4882a593Smuzhiyun RK3528_CLKSEL_CON(3), 11, 1, MFLAGS, 6, 5, DFLAGS,
264*4882a593Smuzhiyun RK3528_CLKGATE_CON(0), 10, GFLAGS),
265*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_MATRIX_50M_SRC, "clk_50m_src", "cpll", CLK_IS_CRITICAL,
266*4882a593Smuzhiyun RK3528_CLKSEL_CON(0), 2, 5, DFLAGS,
267*4882a593Smuzhiyun RK3528_CLKGATE_CON(0), 1, GFLAGS),
268*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_MATRIX_100M_SRC, "clk_100m_src", "cpll", CLK_IS_CRITICAL,
269*4882a593Smuzhiyun RK3528_CLKSEL_CON(0), 7, 5, DFLAGS,
270*4882a593Smuzhiyun RK3528_CLKGATE_CON(0), 2, GFLAGS),
271*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_MATRIX_150M_SRC, "clk_150m_src", "gpll", CLK_IS_CRITICAL,
272*4882a593Smuzhiyun RK3528_CLKSEL_CON(1), 0, 5, DFLAGS,
273*4882a593Smuzhiyun RK3528_CLKGATE_CON(0), 3, GFLAGS),
274*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_MATRIX_200M_SRC, "clk_200m_src", "gpll", CLK_IS_CRITICAL,
275*4882a593Smuzhiyun RK3528_CLKSEL_CON(1), 5, 5, DFLAGS,
276*4882a593Smuzhiyun RK3528_CLKGATE_CON(0), 4, GFLAGS),
277*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_MATRIX_300M_SRC, "clk_300m_src", "gpll", CLK_IS_CRITICAL,
278*4882a593Smuzhiyun RK3528_CLKSEL_CON(2), 0, 5, DFLAGS,
279*4882a593Smuzhiyun RK3528_CLKGATE_CON(0), 6, GFLAGS),
280*4882a593Smuzhiyun COMPOSITE_NOMUX_HALFDIV(CLK_MATRIX_339M_SRC, "clk_339m_src", "gpll", CLK_IS_CRITICAL,
281*4882a593Smuzhiyun RK3528_CLKSEL_CON(2), 5, 5, DFLAGS,
282*4882a593Smuzhiyun RK3528_CLKGATE_CON(0), 7, GFLAGS),
283*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_MATRIX_400M_SRC, "clk_400m_src", "gpll", CLK_IGNORE_UNUSED,
284*4882a593Smuzhiyun RK3528_CLKSEL_CON(2), 10, 5, DFLAGS,
285*4882a593Smuzhiyun RK3528_CLKGATE_CON(0), 8, GFLAGS),
286*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_MATRIX_600M_SRC, "clk_600m_src", "gpll", CLK_IS_CRITICAL,
287*4882a593Smuzhiyun RK3528_CLKSEL_CON(4), 0, 5, DFLAGS,
288*4882a593Smuzhiyun RK3528_CLKGATE_CON(0), 11, GFLAGS),
289*4882a593Smuzhiyun COMPOSITE(DCLK_VOP_SRC0, "dclk_vop_src0", mux_gpll_cpll_p, 0,
290*4882a593Smuzhiyun RK3528_CLKSEL_CON(32), 10, 1, MFLAGS, 2, 8, DFLAGS,
291*4882a593Smuzhiyun RK3528_CLKGATE_CON(3), 7, GFLAGS),
292*4882a593Smuzhiyun COMPOSITE(DCLK_VOP_SRC1, "dclk_vop_src1", mux_gpll_cpll_p, 0,
293*4882a593Smuzhiyun RK3528_CLKSEL_CON(33), 8, 1, MFLAGS, 0, 8, DFLAGS,
294*4882a593Smuzhiyun RK3528_CLKGATE_CON(3), 8, GFLAGS),
295*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_HSM, "clk_hsm", "xin24m", 0,
296*4882a593Smuzhiyun RK3528_CLKSEL_CON(36), 5, 5, DFLAGS,
297*4882a593Smuzhiyun RK3528_CLKGATE_CON(3), 13, GFLAGS),
298*4882a593Smuzhiyun
299*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_UART0_SRC, "clk_uart0_src", "gpll", 0,
300*4882a593Smuzhiyun RK3528_CLKSEL_CON(4), 5, 5, DFLAGS,
301*4882a593Smuzhiyun RK3528_CLKGATE_CON(0), 12, GFLAGS),
302*4882a593Smuzhiyun COMPOSITE_FRACMUX(CLK_UART0_FRAC, "clk_uart0_frac", "clk_uart0_src", CLK_SET_RATE_PARENT,
303*4882a593Smuzhiyun RK3528_CLKSEL_CON(5), 0,
304*4882a593Smuzhiyun RK3528_CLKGATE_CON(0), 13, GFLAGS, &rk3528_uart0_fracmux),
305*4882a593Smuzhiyun GATE(SCLK_UART0, "sclk_uart0", "clk_uart0", 0,
306*4882a593Smuzhiyun RK3528_CLKGATE_CON(0), 14, GFLAGS),
307*4882a593Smuzhiyun
308*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_UART1_SRC, "clk_uart1_src", "gpll", 0,
309*4882a593Smuzhiyun RK3528_CLKSEL_CON(6), 2, 5, DFLAGS,
310*4882a593Smuzhiyun RK3528_CLKGATE_CON(0), 15, GFLAGS),
311*4882a593Smuzhiyun COMPOSITE_FRACMUX(CLK_UART1_FRAC, "clk_uart1_frac", "clk_uart1_src", CLK_SET_RATE_PARENT,
312*4882a593Smuzhiyun RK3528_CLKSEL_CON(7), 0,
313*4882a593Smuzhiyun RK3528_CLKGATE_CON(1), 0, GFLAGS, &rk3528_uart1_fracmux),
314*4882a593Smuzhiyun GATE(SCLK_UART1, "sclk_uart1", "clk_uart1", 0,
315*4882a593Smuzhiyun RK3528_CLKGATE_CON(1), 1, GFLAGS),
316*4882a593Smuzhiyun
317*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_UART2_SRC, "clk_uart2_src", "gpll", 0,
318*4882a593Smuzhiyun RK3528_CLKSEL_CON(8), 2, 5, DFLAGS,
319*4882a593Smuzhiyun RK3528_CLKGATE_CON(1), 2, GFLAGS),
320*4882a593Smuzhiyun COMPOSITE_FRACMUX(CLK_UART2_FRAC, "clk_uart2_frac", "clk_uart2_src", CLK_SET_RATE_PARENT,
321*4882a593Smuzhiyun RK3528_CLKSEL_CON(9), 0,
322*4882a593Smuzhiyun RK3528_CLKGATE_CON(1), 3, GFLAGS, &rk3528_uart2_fracmux),
323*4882a593Smuzhiyun GATE(SCLK_UART2, "sclk_uart2", "clk_uart2", 0,
324*4882a593Smuzhiyun RK3528_CLKGATE_CON(1), 4, GFLAGS),
325*4882a593Smuzhiyun
326*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_UART3_SRC, "clk_uart3_src", "gpll", 0,
327*4882a593Smuzhiyun RK3528_CLKSEL_CON(10), 2, 5, DFLAGS,
328*4882a593Smuzhiyun RK3528_CLKGATE_CON(1), 5, GFLAGS),
329*4882a593Smuzhiyun COMPOSITE_FRACMUX(CLK_UART3_FRAC, "clk_uart3_frac", "clk_uart3_src", CLK_SET_RATE_PARENT,
330*4882a593Smuzhiyun RK3528_CLKSEL_CON(11), 0,
331*4882a593Smuzhiyun RK3528_CLKGATE_CON(1), 6, GFLAGS, &rk3528_uart3_fracmux),
332*4882a593Smuzhiyun GATE(SCLK_UART3, "sclk_uart3", "clk_uart3", 0,
333*4882a593Smuzhiyun RK3528_CLKGATE_CON(1), 7, GFLAGS),
334*4882a593Smuzhiyun
335*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_UART4_SRC, "clk_uart4_src", "gpll", 0,
336*4882a593Smuzhiyun RK3528_CLKSEL_CON(12), 2, 5, DFLAGS,
337*4882a593Smuzhiyun RK3528_CLKGATE_CON(1), 8, GFLAGS),
338*4882a593Smuzhiyun COMPOSITE_FRACMUX(CLK_UART4_FRAC, "clk_uart4_frac", "clk_uart4_src", CLK_SET_RATE_PARENT,
339*4882a593Smuzhiyun RK3528_CLKSEL_CON(13), 0,
340*4882a593Smuzhiyun RK3528_CLKGATE_CON(1), 9, GFLAGS, &rk3528_uart4_fracmux),
341*4882a593Smuzhiyun GATE(SCLK_UART4, "sclk_uart4", "clk_uart4", 0,
342*4882a593Smuzhiyun RK3528_CLKGATE_CON(1), 10, GFLAGS),
343*4882a593Smuzhiyun
344*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_UART5_SRC, "clk_uart5_src", "gpll", 0,
345*4882a593Smuzhiyun RK3528_CLKSEL_CON(14), 2, 5, DFLAGS,
346*4882a593Smuzhiyun RK3528_CLKGATE_CON(1), 11, GFLAGS),
347*4882a593Smuzhiyun COMPOSITE_FRACMUX(CLK_UART5_FRAC, "clk_uart5_frac", "clk_uart5_src", CLK_SET_RATE_PARENT,
348*4882a593Smuzhiyun RK3528_CLKSEL_CON(15), 0,
349*4882a593Smuzhiyun RK3528_CLKGATE_CON(1), 12, GFLAGS, &rk3528_uart5_fracmux),
350*4882a593Smuzhiyun GATE(SCLK_UART5, "sclk_uart5", "clk_uart5", 0,
351*4882a593Smuzhiyun RK3528_CLKGATE_CON(1), 13, GFLAGS),
352*4882a593Smuzhiyun
353*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_UART6_SRC, "clk_uart6_src", "gpll", 0,
354*4882a593Smuzhiyun RK3528_CLKSEL_CON(16), 2, 5, DFLAGS,
355*4882a593Smuzhiyun RK3528_CLKGATE_CON(1), 14, GFLAGS),
356*4882a593Smuzhiyun COMPOSITE_FRACMUX(CLK_UART6_FRAC, "clk_uart6_frac", "clk_uart6_src", CLK_SET_RATE_PARENT,
357*4882a593Smuzhiyun RK3528_CLKSEL_CON(17), 0,
358*4882a593Smuzhiyun RK3528_CLKGATE_CON(1), 15, GFLAGS, &rk3528_uart6_fracmux),
359*4882a593Smuzhiyun GATE(SCLK_UART6, "sclk_uart6", "clk_uart6", 0,
360*4882a593Smuzhiyun RK3528_CLKGATE_CON(2), 0, GFLAGS),
361*4882a593Smuzhiyun
362*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_UART7_SRC, "clk_uart7_src", "gpll", 0,
363*4882a593Smuzhiyun RK3528_CLKSEL_CON(18), 2, 5, DFLAGS,
364*4882a593Smuzhiyun RK3528_CLKGATE_CON(2), 1, GFLAGS),
365*4882a593Smuzhiyun COMPOSITE_FRACMUX(CLK_UART7_FRAC, "clk_uart7_frac", "clk_uart7_src", CLK_SET_RATE_PARENT,
366*4882a593Smuzhiyun RK3528_CLKSEL_CON(19), 0,
367*4882a593Smuzhiyun RK3528_CLKGATE_CON(2), 2, GFLAGS, &rk3528_uart7_fracmux),
368*4882a593Smuzhiyun GATE(SCLK_UART7, "sclk_uart7", "clk_uart7", 0,
369*4882a593Smuzhiyun RK3528_CLKGATE_CON(2), 3, GFLAGS),
370*4882a593Smuzhiyun
371*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_I2S0_2CH_SRC, "clk_i2s0_2ch_src", "gpll", 0,
372*4882a593Smuzhiyun RK3528_CLKSEL_CON(20), 8, 5, DFLAGS,
373*4882a593Smuzhiyun RK3528_CLKGATE_CON(2), 5, GFLAGS),
374*4882a593Smuzhiyun COMPOSITE_FRACMUX(CLK_I2S0_2CH_FRAC, "clk_i2s0_2ch_frac", "clk_i2s0_2ch_src", CLK_SET_RATE_PARENT,
375*4882a593Smuzhiyun RK3528_CLKSEL_CON(21), 0,
376*4882a593Smuzhiyun RK3528_CLKGATE_CON(2), 6, GFLAGS, &mclk_i2s0_2ch_sai_src_fracmux),
377*4882a593Smuzhiyun GATE(MCLK_I2S0_2CH_SAI_SRC, "mclk_i2s0_2ch_sai_src", "mclk_i2s0_2ch_sai_src_pre", 0,
378*4882a593Smuzhiyun RK3528_CLKGATE_CON(2), 7, GFLAGS),
379*4882a593Smuzhiyun
380*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_I2S1_8CH_SRC, "clk_i2s1_8ch_src", "gpll", 0,
381*4882a593Smuzhiyun RK3528_CLKSEL_CON(24), 3, 5, DFLAGS,
382*4882a593Smuzhiyun RK3528_CLKGATE_CON(2), 11, GFLAGS),
383*4882a593Smuzhiyun COMPOSITE_FRACMUX(CLK_I2S1_8CH_FRAC, "clk_i2s1_8ch_frac", "clk_i2s1_8ch_src", CLK_SET_RATE_PARENT,
384*4882a593Smuzhiyun RK3528_CLKSEL_CON(25), 0,
385*4882a593Smuzhiyun RK3528_CLKGATE_CON(2), 12, GFLAGS, &mclk_i2s1_8ch_sai_src_fracmux),
386*4882a593Smuzhiyun GATE(MCLK_I2S1_8CH_SAI_SRC, "mclk_i2s1_8ch_sai_src", "mclk_i2s1_8ch_sai_src_pre", 0,
387*4882a593Smuzhiyun RK3528_CLKGATE_CON(2), 13, GFLAGS),
388*4882a593Smuzhiyun
389*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_I2S2_2CH_SRC, "clk_i2s2_2ch_src", "gpll", 0,
390*4882a593Smuzhiyun RK3528_CLKSEL_CON(26), 3, 5, DFLAGS,
391*4882a593Smuzhiyun RK3528_CLKGATE_CON(2), 14, GFLAGS),
392*4882a593Smuzhiyun COMPOSITE_FRACMUX(CLK_I2S2_2CH_FRAC, "clk_i2s2_2ch_frac", "clk_i2s2_2ch_src", CLK_SET_RATE_PARENT,
393*4882a593Smuzhiyun RK3528_CLKSEL_CON(27), 0,
394*4882a593Smuzhiyun RK3528_CLKGATE_CON(2), 15, GFLAGS, &mclk_i2s2_2ch_sai_src_fracmux),
395*4882a593Smuzhiyun GATE(MCLK_I2S2_2CH_SAI_SRC, "mclk_i2s2_2ch_sai_src", "mclk_i2s2_2ch_sai_src_pre", 0,
396*4882a593Smuzhiyun RK3528_CLKGATE_CON(3), 0, GFLAGS),
397*4882a593Smuzhiyun
398*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_I2S3_8CH_SRC, "clk_i2s3_8ch_src", "gpll", 0,
399*4882a593Smuzhiyun RK3528_CLKSEL_CON(22), 3, 5, DFLAGS,
400*4882a593Smuzhiyun RK3528_CLKGATE_CON(2), 8, GFLAGS),
401*4882a593Smuzhiyun COMPOSITE_FRACMUX(CLK_I2S3_8CH_FRAC, "clk_i2s3_8ch_frac", "clk_i2s3_8ch_src", CLK_SET_RATE_PARENT,
402*4882a593Smuzhiyun RK3528_CLKSEL_CON(23), 0,
403*4882a593Smuzhiyun RK3528_CLKGATE_CON(2), 9, GFLAGS, &mclk_i2s3_8ch_sai_src_fracmux),
404*4882a593Smuzhiyun GATE(MCLK_I2S3_8CH_SAI_SRC, "mclk_i2s3_8ch_sai_src", "mclk_i2s3_8ch_sai_src_pre", 0,
405*4882a593Smuzhiyun RK3528_CLKGATE_CON(2), 10, GFLAGS),
406*4882a593Smuzhiyun
407*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_SPDIF_SRC, "clk_spdif_src", "gpll", 0,
408*4882a593Smuzhiyun RK3528_CLKSEL_CON(30), 2, 5, DFLAGS,
409*4882a593Smuzhiyun RK3528_CLKGATE_CON(3), 4, GFLAGS),
410*4882a593Smuzhiyun COMPOSITE_FRACMUX(CLK_SPDIF_FRAC, "clk_spdif_frac", "clk_spdif_src", CLK_SET_RATE_PARENT,
411*4882a593Smuzhiyun RK3528_CLKSEL_CON(31), 0,
412*4882a593Smuzhiyun RK3528_CLKGATE_CON(3), 5, GFLAGS, &mclk_spdif_src_fracmux),
413*4882a593Smuzhiyun GATE(MCLK_SPDIF_SRC, "mclk_spdif_src", "mclk_spdif_src_pre", 0,
414*4882a593Smuzhiyun RK3528_CLKGATE_CON(3), 6, GFLAGS),
415*4882a593Smuzhiyun
416*4882a593Smuzhiyun /* bus */
417*4882a593Smuzhiyun COMPOSITE_NODIV(ACLK_BUS_M_ROOT, "aclk_bus_m_root", mux_300m_200m_100m_24m_p, CLK_IS_CRITICAL,
418*4882a593Smuzhiyun RK3528_CLKSEL_CON(43), 12, 2, MFLAGS,
419*4882a593Smuzhiyun RK3528_CLKGATE_CON(8), 7, GFLAGS),
420*4882a593Smuzhiyun GATE(ACLK_GIC, "aclk_gic", "aclk_bus_m_root", CLK_IS_CRITICAL,
421*4882a593Smuzhiyun RK3528_CLKGATE_CON(9), 1, GFLAGS),
422*4882a593Smuzhiyun
423*4882a593Smuzhiyun COMPOSITE_NODIV(ACLK_BUS_ROOT, "aclk_bus_root", mux_200m_100m_24m_p, CLK_IS_CRITICAL,
424*4882a593Smuzhiyun RK3528_CLKSEL_CON(43), 6, 2, MFLAGS,
425*4882a593Smuzhiyun RK3528_CLKGATE_CON(8), 4, GFLAGS),
426*4882a593Smuzhiyun GATE(ACLK_SPINLOCK, "aclk_spinlock", "aclk_bus_root", 0,
427*4882a593Smuzhiyun RK3528_CLKGATE_CON(9), 2, GFLAGS),
428*4882a593Smuzhiyun GATE(ACLK_DMAC, "aclk_dmac", "aclk_bus_root", 0,
429*4882a593Smuzhiyun RK3528_CLKGATE_CON(9), 4, GFLAGS),
430*4882a593Smuzhiyun GATE(ACLK_DCF, "aclk_dcf", "aclk_bus_root", 0,
431*4882a593Smuzhiyun RK3528_CLKGATE_CON(11), 11, GFLAGS),
432*4882a593Smuzhiyun COMPOSITE(ACLK_BUS_VOPGL_ROOT, "aclk_bus_vopgl_root", mux_gpll_cpll_p, CLK_IS_CRITICAL,
433*4882a593Smuzhiyun RK3528_CLKSEL_CON(43), 3, 1, MFLAGS, 0, 3, DFLAGS,
434*4882a593Smuzhiyun RK3528_CLKGATE_CON(8), 0, GFLAGS),
435*4882a593Smuzhiyun COMPOSITE_NODIV(ACLK_BUS_H_ROOT, "aclk_bus_h_root", mux_500m_200m_100m_24m_p, CLK_IS_CRITICAL,
436*4882a593Smuzhiyun RK3528_CLKSEL_CON(43), 4, 2, MFLAGS,
437*4882a593Smuzhiyun RK3528_CLKGATE_CON(8), 2, GFLAGS),
438*4882a593Smuzhiyun GATE(ACLK_DMA2DDR, "aclk_dma2ddr", "aclk_bus_h_root", 0,
439*4882a593Smuzhiyun RK3528_CLKGATE_CON(10), 14, GFLAGS),
440*4882a593Smuzhiyun
441*4882a593Smuzhiyun COMPOSITE_NODIV(HCLK_BUS_ROOT, "hclk_bus_root", mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL,
442*4882a593Smuzhiyun RK3528_CLKSEL_CON(43), 8, 2, MFLAGS,
443*4882a593Smuzhiyun RK3528_CLKGATE_CON(8), 5, GFLAGS),
444*4882a593Smuzhiyun
445*4882a593Smuzhiyun COMPOSITE_NODIV(PCLK_BUS_ROOT, "pclk_bus_root", mux_100m_50m_24m_p, CLK_IS_CRITICAL,
446*4882a593Smuzhiyun RK3528_CLKSEL_CON(43), 10, 2, MFLAGS,
447*4882a593Smuzhiyun RK3528_CLKGATE_CON(8), 6, GFLAGS),
448*4882a593Smuzhiyun GATE(PCLK_DFT2APB, "pclk_dft2apb", "pclk_bus_root", 0,
449*4882a593Smuzhiyun RK3528_CLKGATE_CON(8), 13, GFLAGS),
450*4882a593Smuzhiyun GATE(PCLK_BUS_GRF, "pclk_bus_grf", "pclk_bus_root", CLK_IS_CRITICAL,
451*4882a593Smuzhiyun RK3528_CLKGATE_CON(8), 15, GFLAGS),
452*4882a593Smuzhiyun GATE(PCLK_TIMER, "pclk_timer", "pclk_bus_root", 0,
453*4882a593Smuzhiyun RK3528_CLKGATE_CON(9), 5, GFLAGS),
454*4882a593Smuzhiyun GATE(PCLK_JDBCK_DAP, "pclk_jdbck_dap", "pclk_bus_root", 0,
455*4882a593Smuzhiyun RK3528_CLKGATE_CON(9), 12, GFLAGS),
456*4882a593Smuzhiyun GATE(PCLK_WDT_NS, "pclk_wdt_ns", "pclk_bus_root", 0,
457*4882a593Smuzhiyun RK3528_CLKGATE_CON(9), 15, GFLAGS),
458*4882a593Smuzhiyun GATE(PCLK_UART0, "pclk_uart0", "pclk_bus_root", 0,
459*4882a593Smuzhiyun RK3528_CLKGATE_CON(10), 7, GFLAGS),
460*4882a593Smuzhiyun GATE(PCLK_PWM0, "pclk_pwm0", "pclk_bus_root", 0,
461*4882a593Smuzhiyun RK3528_CLKGATE_CON(11), 4, GFLAGS),
462*4882a593Smuzhiyun GATE(PCLK_PWM1, "pclk_pwm1", "pclk_bus_root", 0,
463*4882a593Smuzhiyun RK3528_CLKGATE_CON(11), 7, GFLAGS),
464*4882a593Smuzhiyun GATE(PCLK_DMA2DDR, "pclk_dma2ddr", "pclk_bus_root", 0,
465*4882a593Smuzhiyun RK3528_CLKGATE_CON(10), 13, GFLAGS),
466*4882a593Smuzhiyun GATE(PCLK_SCR, "pclk_scr", "pclk_bus_root", 0,
467*4882a593Smuzhiyun RK3528_CLKGATE_CON(11), 10, GFLAGS),
468*4882a593Smuzhiyun GATE(PCLK_INTMUX, "pclk_intmux", "pclk_bus_root", CLK_IGNORE_UNUSED,
469*4882a593Smuzhiyun RK3528_CLKGATE_CON(11), 12, GFLAGS),
470*4882a593Smuzhiyun
471*4882a593Smuzhiyun COMPOSITE_NODIV(CLK_PWM0, "clk_pwm0", mux_100m_50m_24m_p, 0,
472*4882a593Smuzhiyun RK3528_CLKSEL_CON(44), 6, 2, MFLAGS,
473*4882a593Smuzhiyun RK3528_CLKGATE_CON(11), 5, GFLAGS),
474*4882a593Smuzhiyun COMPOSITE_NODIV(CLK_PWM1, "clk_pwm1", mux_100m_50m_24m_p, 0,
475*4882a593Smuzhiyun RK3528_CLKSEL_CON(44), 8, 2, MFLAGS,
476*4882a593Smuzhiyun RK3528_CLKGATE_CON(11), 8, GFLAGS),
477*4882a593Smuzhiyun
478*4882a593Smuzhiyun GATE(CLK_CAPTURE_PWM1, "clk_capture_pwm1", "xin24m", 0,
479*4882a593Smuzhiyun RK3528_CLKGATE_CON(11), 9, GFLAGS),
480*4882a593Smuzhiyun GATE(CLK_CAPTURE_PWM0, "clk_capture_pwm0", "xin24m", 0,
481*4882a593Smuzhiyun RK3528_CLKGATE_CON(11), 6, GFLAGS),
482*4882a593Smuzhiyun GATE(CLK_JDBCK_DAP, "clk_jdbck_dap", "xin24m", 0,
483*4882a593Smuzhiyun RK3528_CLKGATE_CON(9), 13, GFLAGS),
484*4882a593Smuzhiyun GATE(TCLK_WDT_NS, "tclk_wdt_ns", "xin24m", 0,
485*4882a593Smuzhiyun RK3528_CLKGATE_CON(10), 0, GFLAGS),
486*4882a593Smuzhiyun
487*4882a593Smuzhiyun GATE(CLK_TIMER_ROOT, "clk_timer_root", "xin24m", 0,
488*4882a593Smuzhiyun RK3528_CLKGATE_CON(8), 9, GFLAGS),
489*4882a593Smuzhiyun GATE(CLK_TIMER0, "clk_timer0", "clk_timer_root", 0,
490*4882a593Smuzhiyun RK3528_CLKGATE_CON(9), 6, GFLAGS),
491*4882a593Smuzhiyun GATE(CLK_TIMER1, "clk_timer1", "clk_timer_root", 0,
492*4882a593Smuzhiyun RK3528_CLKGATE_CON(9), 7, GFLAGS),
493*4882a593Smuzhiyun GATE(CLK_TIMER2, "clk_timer2", "clk_timer_root", 0,
494*4882a593Smuzhiyun RK3528_CLKGATE_CON(9), 8, GFLAGS),
495*4882a593Smuzhiyun GATE(CLK_TIMER3, "clk_timer3", "clk_timer_root", 0,
496*4882a593Smuzhiyun RK3528_CLKGATE_CON(9), 9, GFLAGS),
497*4882a593Smuzhiyun GATE(CLK_TIMER4, "clk_timer4", "clk_timer_root", 0,
498*4882a593Smuzhiyun RK3528_CLKGATE_CON(9), 10, GFLAGS),
499*4882a593Smuzhiyun GATE(CLK_TIMER5, "clk_timer5", "clk_timer_root", 0,
500*4882a593Smuzhiyun RK3528_CLKGATE_CON(9), 11, GFLAGS),
501*4882a593Smuzhiyun
502*4882a593Smuzhiyun /* pmu */
503*4882a593Smuzhiyun GATE(HCLK_PMU_ROOT, "hclk_pmu_root", "clk_100m_src", CLK_IGNORE_UNUSED,
504*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(0), 1, GFLAGS),
505*4882a593Smuzhiyun GATE(PCLK_PMU_ROOT, "pclk_pmu_root", "clk_100m_src", CLK_IGNORE_UNUSED,
506*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(0), 0, GFLAGS),
507*4882a593Smuzhiyun
508*4882a593Smuzhiyun GATE(FCLK_MCU, "fclk_mcu", "hclk_pmu_root", 0,
509*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(0), 7, GFLAGS),
510*4882a593Smuzhiyun GATE(HCLK_PMU_SRAM, "hclk_pmu_sram", "hclk_pmu_root", CLK_IS_CRITICAL,
511*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(5), 4, GFLAGS),
512*4882a593Smuzhiyun
513*4882a593Smuzhiyun GATE(PCLK_I2C2, "pclk_i2c2", "pclk_pmu_root", 0,
514*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(0), 2, GFLAGS),
515*4882a593Smuzhiyun GATE(PCLK_PMU_HP_TIMER, "pclk_pmu_hp_timer", "pclk_pmu_root", 0,
516*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(1), 2, GFLAGS),
517*4882a593Smuzhiyun GATE(PCLK_PMU_IOC, "pclk_pmu_ioc", "pclk_pmu_root", CLK_IS_CRITICAL,
518*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(1), 5, GFLAGS),
519*4882a593Smuzhiyun GATE(PCLK_PMU_CRU, "pclk_pmu_cru", "pclk_pmu_root", CLK_IS_CRITICAL,
520*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(1), 6, GFLAGS),
521*4882a593Smuzhiyun GATE(PCLK_PMU_GRF, "pclk_pmu_grf", "pclk_pmu_root", CLK_IS_CRITICAL,
522*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(1), 7, GFLAGS),
523*4882a593Smuzhiyun GATE(PCLK_PMU_WDT, "pclk_pmu_wdt", "pclk_pmu_root", 0,
524*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(1), 10, GFLAGS),
525*4882a593Smuzhiyun GATE(PCLK_PMU, "pclk_pmu", "pclk_pmu_root", CLK_IS_CRITICAL,
526*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(0), 13, GFLAGS),
527*4882a593Smuzhiyun GATE(PCLK_GPIO0, "pclk_gpio0", "pclk_pmu_root", 0,
528*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(0), 14, GFLAGS),
529*4882a593Smuzhiyun GATE(PCLK_OSCCHK, "pclk_oscchk", "pclk_pmu_root", 0,
530*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(0), 9, GFLAGS),
531*4882a593Smuzhiyun GATE(PCLK_PMU_MAILBOX, "pclk_pmu_mailbox", "pclk_pmu_root", 0,
532*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(1), 12, GFLAGS),
533*4882a593Smuzhiyun GATE(PCLK_SCRKEYGEN, "pclk_scrkeygen", "pclk_pmu_root", 0,
534*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(1), 15, GFLAGS),
535*4882a593Smuzhiyun GATE(PCLK_PVTM_PMU, "pclk_pvtm_pmu", "pclk_pmu_root", 0,
536*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(5), 1, GFLAGS),
537*4882a593Smuzhiyun
538*4882a593Smuzhiyun COMPOSITE_NODIV(CLK_I2C2, "clk_i2c2", clk_i2c2_p, 0,
539*4882a593Smuzhiyun RK3528_PMU_CLKSEL_CON(0), 0, 2, MFLAGS,
540*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(0), 3, GFLAGS),
541*4882a593Smuzhiyun
542*4882a593Smuzhiyun GATE(CLK_REFOUT, "clk_refout", "xin24m", 0,
543*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(2), 4, GFLAGS),
544*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_PVTM_PMU, "clk_pvtm_pmu", "xin24m", 0,
545*4882a593Smuzhiyun RK3528_PMU_CLKSEL_CON(5), 0, 5, DFLAGS,
546*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(5), 0, GFLAGS),
547*4882a593Smuzhiyun
548*4882a593Smuzhiyun COMPOSITE_FRAC(XIN_OSC0_DIV, "xin_osc0_div", "xin24m", 0,
549*4882a593Smuzhiyun RK3528_PMU_CLKSEL_CON(1), 0,
550*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(1), 0, GFLAGS),
551*4882a593Smuzhiyun /* clk_32k: internal! No path from external osc 32k */
552*4882a593Smuzhiyun MUX(CLK_DEEPSLOW, "clk_32k", clk_32k_p, CLK_IS_CRITICAL,
553*4882a593Smuzhiyun RK3528_PMU_CLKSEL_CON(2), 0, 1, MFLAGS),
554*4882a593Smuzhiyun GATE(RTC_CLK_MCU, "rtc_clk_mcu", "clk_32k", 0,
555*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(0), 8, GFLAGS),
556*4882a593Smuzhiyun GATE(CLK_DDR_FAIL_SAFE, "clk_ddr_fail_safe", "xin24m", CLK_IGNORE_UNUSED,
557*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(1), 1, GFLAGS),
558*4882a593Smuzhiyun
559*4882a593Smuzhiyun COMPOSITE_NODIV(DBCLK_GPIO0, "dbclk_gpio0", mux_24m_32k_p, 0,
560*4882a593Smuzhiyun RK3528_PMU_CLKSEL_CON(0), 2, 1, MFLAGS,
561*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(0), 15, GFLAGS),
562*4882a593Smuzhiyun COMPOSITE_NODIV(TCLK_PMU_WDT, "tclk_pmu_wdt", mux_24m_32k_p, 0,
563*4882a593Smuzhiyun RK3528_PMU_CLKSEL_CON(2), 1, 1, MFLAGS,
564*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(1), 11, GFLAGS),
565*4882a593Smuzhiyun
566*4882a593Smuzhiyun /* core */
567*4882a593Smuzhiyun COMPOSITE_NOMUX(ACLK_M_CORE_BIU, "aclk_m_core", "armclk", CLK_IS_CRITICAL,
568*4882a593Smuzhiyun RK3528_CLKSEL_CON(39), 11, 5, DFLAGS | CLK_DIVIDER_READ_ONLY,
569*4882a593Smuzhiyun RK3528_CLKGATE_CON(5), 12, GFLAGS),
570*4882a593Smuzhiyun COMPOSITE_NOMUX(PCLK_DBG, "pclk_dbg", "armclk", CLK_IS_CRITICAL,
571*4882a593Smuzhiyun RK3528_CLKSEL_CON(40), 1, 5, DFLAGS | CLK_DIVIDER_READ_ONLY,
572*4882a593Smuzhiyun RK3528_CLKGATE_CON(5), 13, GFLAGS),
573*4882a593Smuzhiyun GATE(PCLK_CPU_ROOT, "pclk_cpu_root", "pclk_dbg", CLK_IS_CRITICAL,
574*4882a593Smuzhiyun RK3528_CLKGATE_CON(6), 1, GFLAGS),
575*4882a593Smuzhiyun GATE(PCLK_CORE_GRF, "pclk_core_grf", "pclk_cpu_root", CLK_IS_CRITICAL,
576*4882a593Smuzhiyun RK3528_CLKGATE_CON(6), 2, GFLAGS),
577*4882a593Smuzhiyun
578*4882a593Smuzhiyun /* ddr */
579*4882a593Smuzhiyun GATE(CLK_DDRC_SRC, "clk_ddrc_src", "dpll", CLK_IS_CRITICAL,
580*4882a593Smuzhiyun RK3528_DDRPHY_CLKGATE_CON(0), 0, GFLAGS),
581*4882a593Smuzhiyun GATE(CLK_DDR_PHY, "clk_ddr_phy", "dpll", CLK_IS_CRITICAL,
582*4882a593Smuzhiyun RK3528_DDRPHY_CLKGATE_CON(0), 1, GFLAGS),
583*4882a593Smuzhiyun
584*4882a593Smuzhiyun COMPOSITE_NODIV(PCLK_DDR_ROOT, "pclk_ddr_root", mux_100m_50m_24m_p, CLK_IS_CRITICAL,
585*4882a593Smuzhiyun RK3528_CLKSEL_CON(90), 0, 2, MFLAGS,
586*4882a593Smuzhiyun RK3528_CLKGATE_CON(45), 0, GFLAGS),
587*4882a593Smuzhiyun GATE(PCLK_DDRMON, "pclk_ddrmon", "pclk_ddr_root", CLK_IGNORE_UNUSED,
588*4882a593Smuzhiyun RK3528_CLKGATE_CON(45), 3, GFLAGS),
589*4882a593Smuzhiyun GATE(PCLK_DDR_HWLP, "pclk_ddr_hwlp", "pclk_ddr_root", CLK_IGNORE_UNUSED,
590*4882a593Smuzhiyun RK3528_CLKGATE_CON(45), 8, GFLAGS),
591*4882a593Smuzhiyun GATE(CLK_TIMER_DDRMON, "clk_timer_ddrmon", "xin24m", CLK_IGNORE_UNUSED,
592*4882a593Smuzhiyun RK3528_CLKGATE_CON(45), 4, GFLAGS),
593*4882a593Smuzhiyun
594*4882a593Smuzhiyun GATE(PCLK_DDRC, "pclk_ddrc", "pclk_ddr_root", CLK_IS_CRITICAL,
595*4882a593Smuzhiyun RK3528_CLKGATE_CON(45), 2, GFLAGS),
596*4882a593Smuzhiyun GATE(PCLK_DDR_GRF, "pclk_ddr_grf", "pclk_ddr_root", CLK_IS_CRITICAL,
597*4882a593Smuzhiyun RK3528_CLKGATE_CON(45), 6, GFLAGS),
598*4882a593Smuzhiyun GATE(PCLK_DDRPHY, "pclk_ddrphy", "pclk_ddr_root", CLK_IS_CRITICAL,
599*4882a593Smuzhiyun RK3528_CLKGATE_CON(45), 9, GFLAGS),
600*4882a593Smuzhiyun
601*4882a593Smuzhiyun GATE(ACLK_DDR_UPCTL, "aclk_ddr_upctl", "clk_ddrc_src", CLK_IS_CRITICAL,
602*4882a593Smuzhiyun RK3528_CLKGATE_CON(45), 11, GFLAGS),
603*4882a593Smuzhiyun GATE(CLK_DDR_UPCTL, "clk_ddr_upctl", "clk_ddrc_src", CLK_IS_CRITICAL,
604*4882a593Smuzhiyun RK3528_CLKGATE_CON(45), 12, GFLAGS),
605*4882a593Smuzhiyun GATE(CLK_DDRMON, "clk_ddrmon", "clk_ddrc_src", CLK_IS_CRITICAL,
606*4882a593Smuzhiyun RK3528_CLKGATE_CON(45), 13, GFLAGS),
607*4882a593Smuzhiyun GATE(ACLK_DDR_SCRAMBLE, "aclk_ddr_scramble", "clk_ddrc_src", CLK_IS_CRITICAL,
608*4882a593Smuzhiyun RK3528_CLKGATE_CON(45), 14, GFLAGS),
609*4882a593Smuzhiyun GATE(ACLK_SPLIT, "aclk_split", "clk_ddrc_src", CLK_IS_CRITICAL,
610*4882a593Smuzhiyun RK3528_CLKGATE_CON(45), 15, GFLAGS),
611*4882a593Smuzhiyun
612*4882a593Smuzhiyun /* gpu */
613*4882a593Smuzhiyun COMPOSITE_NODIV(ACLK_GPU_ROOT, "aclk_gpu_root", mux_500m_300m_100m_24m_p, CLK_IS_CRITICAL,
614*4882a593Smuzhiyun RK3528_CLKSEL_CON(76), 0, 2, MFLAGS,
615*4882a593Smuzhiyun RK3528_CLKGATE_CON(34), 0, GFLAGS),
616*4882a593Smuzhiyun COMPOSITE_NODIV(ACLK_GPU, "aclk_gpu", aclk_gpu_p, CLK_SET_RATE_PARENT,
617*4882a593Smuzhiyun RK3528_CLKSEL_CON(76), 6, 1, MFLAGS,
618*4882a593Smuzhiyun RK3528_CLKGATE_CON(34), 7, GFLAGS),
619*4882a593Smuzhiyun GATE(ACLK_GPU_MALI, "aclk_gpu_mali", "aclk_gpu", 0,
620*4882a593Smuzhiyun RK3528_CLKGATE_CON(34), 8, GFLAGS),
621*4882a593Smuzhiyun COMPOSITE_NODIV(PCLK_GPU_ROOT, "pclk_gpu_root", mux_100m_50m_24m_p, CLK_IS_CRITICAL,
622*4882a593Smuzhiyun RK3528_CLKSEL_CON(76), 4, 2, MFLAGS,
623*4882a593Smuzhiyun RK3528_CLKGATE_CON(34), 2, GFLAGS),
624*4882a593Smuzhiyun
625*4882a593Smuzhiyun /* rkvdec */
626*4882a593Smuzhiyun COMPOSITE_NODIV(ACLK_RKVDEC_ROOT_NDFT, "aclk_rkvdec_root", mux_339m_200m_100m_24m_p, CLK_IS_CRITICAL,
627*4882a593Smuzhiyun RK3528_CLKSEL_CON(88), 6, 2, MFLAGS,
628*4882a593Smuzhiyun RK3528_CLKGATE_CON(44), 3, GFLAGS),
629*4882a593Smuzhiyun COMPOSITE_NODIV(HCLK_RKVDEC_ROOT, "hclk_rkvdec_root", mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL,
630*4882a593Smuzhiyun RK3528_CLKSEL_CON(88), 4, 2, MFLAGS,
631*4882a593Smuzhiyun RK3528_CLKGATE_CON(44), 2, GFLAGS),
632*4882a593Smuzhiyun GATE(PCLK_DDRPHY_CRU, "pclk_ddrphy_cru", "hclk_rkvdec_root", CLK_IS_CRITICAL,
633*4882a593Smuzhiyun RK3528_CLKGATE_CON(44), 4, GFLAGS),
634*4882a593Smuzhiyun GATE(HCLK_RKVDEC, "hclk_rkvdec", "hclk_rkvdec_root", 0,
635*4882a593Smuzhiyun RK3528_CLKGATE_CON(44), 9, GFLAGS),
636*4882a593Smuzhiyun COMPOSITE_NODIV(CLK_HEVC_CA_RKVDEC, "clk_hevc_ca_rkvdec", mux_600m_300m_200m_24m_p, 0,
637*4882a593Smuzhiyun RK3528_CLKSEL_CON(88), 11, 2, MFLAGS,
638*4882a593Smuzhiyun RK3528_CLKGATE_CON(44), 11, GFLAGS),
639*4882a593Smuzhiyun MUX(ACLK_RKVDEC_PVTMUX_ROOT, "aclk_rkvdec_pvtmux_root", aclk_rkvdec_pvtmux_root_p, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
640*4882a593Smuzhiyun RK3528_CLKSEL_CON(88), 13, 1, MFLAGS),
641*4882a593Smuzhiyun GATE(ACLK_RKVDEC, "aclk_rkvdec", "aclk_rkvdec_pvtmux_root", 0,
642*4882a593Smuzhiyun RK3528_CLKGATE_CON(44), 8, GFLAGS),
643*4882a593Smuzhiyun
644*4882a593Smuzhiyun /* rkvenc */
645*4882a593Smuzhiyun COMPOSITE_NODIV(ACLK_RKVENC_ROOT, "aclk_rkvenc_root", mux_300m_200m_100m_24m_p, CLK_IS_CRITICAL,
646*4882a593Smuzhiyun RK3528_CLKSEL_CON(79), 2, 2, MFLAGS,
647*4882a593Smuzhiyun RK3528_CLKGATE_CON(36), 1, GFLAGS),
648*4882a593Smuzhiyun GATE(ACLK_RKVENC, "aclk_rkvenc", "aclk_rkvenc_root", 0,
649*4882a593Smuzhiyun RK3528_CLKGATE_CON(36), 7, GFLAGS),
650*4882a593Smuzhiyun
651*4882a593Smuzhiyun COMPOSITE_NODIV(PCLK_RKVENC_ROOT, "pclk_rkvenc_root", mux_100m_50m_24m_p, CLK_IS_CRITICAL,
652*4882a593Smuzhiyun RK3528_CLKSEL_CON(79), 4, 2, MFLAGS,
653*4882a593Smuzhiyun RK3528_CLKGATE_CON(36), 2, GFLAGS),
654*4882a593Smuzhiyun GATE(PCLK_RKVENC_IOC, "pclk_rkvenc_ioc", "pclk_rkvenc_root", CLK_IS_CRITICAL,
655*4882a593Smuzhiyun RK3528_CLKGATE_CON(37), 10, GFLAGS),
656*4882a593Smuzhiyun GATE(PCLK_RKVENC_GRF, "pclk_rkvenc_grf", "pclk_rkvenc_root", CLK_IS_CRITICAL,
657*4882a593Smuzhiyun RK3528_CLKGATE_CON(38), 6, GFLAGS),
658*4882a593Smuzhiyun GATE(PCLK_I2C1, "pclk_i2c1", "pclk_rkvenc_root", 0,
659*4882a593Smuzhiyun RK3528_CLKGATE_CON(36), 11, GFLAGS),
660*4882a593Smuzhiyun GATE(PCLK_I2C0, "pclk_i2c0", "pclk_rkvenc_root", 0,
661*4882a593Smuzhiyun RK3528_CLKGATE_CON(36), 13, GFLAGS),
662*4882a593Smuzhiyun GATE(PCLK_SPI0, "pclk_spi0", "pclk_rkvenc_root", 0,
663*4882a593Smuzhiyun RK3528_CLKGATE_CON(37), 2, GFLAGS),
664*4882a593Smuzhiyun GATE(PCLK_GPIO4, "pclk_gpio4", "pclk_rkvenc_root", 0,
665*4882a593Smuzhiyun RK3528_CLKGATE_CON(37), 8, GFLAGS),
666*4882a593Smuzhiyun GATE(PCLK_UART1, "pclk_uart1", "pclk_rkvenc_root", 0,
667*4882a593Smuzhiyun RK3528_CLKGATE_CON(38), 2, GFLAGS),
668*4882a593Smuzhiyun GATE(PCLK_UART3, "pclk_uart3", "pclk_rkvenc_root", 0,
669*4882a593Smuzhiyun RK3528_CLKGATE_CON(38), 4, GFLAGS),
670*4882a593Smuzhiyun GATE(PCLK_CAN0, "pclk_can0", "pclk_rkvenc_root", 0,
671*4882a593Smuzhiyun RK3528_CLKGATE_CON(38), 7, GFLAGS),
672*4882a593Smuzhiyun GATE(PCLK_CAN1, "pclk_can1", "pclk_rkvenc_root", 0,
673*4882a593Smuzhiyun RK3528_CLKGATE_CON(38), 9, GFLAGS),
674*4882a593Smuzhiyun
675*4882a593Smuzhiyun COMPOSITE_NODIV(MCLK_PDM, "mclk_pdm", mux_150m_100m_24m_p, 0,
676*4882a593Smuzhiyun RK3528_CLKSEL_CON(80), 12, 2, MFLAGS,
677*4882a593Smuzhiyun RK3528_CLKGATE_CON(38), 1, GFLAGS),
678*4882a593Smuzhiyun COMPOSITE(CLK_CAN0, "clk_can0", mux_gpll_cpll_p, 0,
679*4882a593Smuzhiyun RK3528_CLKSEL_CON(81), 6, 1, MFLAGS, 0, 6, DFLAGS,
680*4882a593Smuzhiyun RK3528_CLKGATE_CON(38), 8, GFLAGS),
681*4882a593Smuzhiyun COMPOSITE(CLK_CAN1, "clk_can1", mux_gpll_cpll_p, 0,
682*4882a593Smuzhiyun RK3528_CLKSEL_CON(81), 13, 1, MFLAGS, 7, 6, DFLAGS,
683*4882a593Smuzhiyun RK3528_CLKGATE_CON(38), 10, GFLAGS),
684*4882a593Smuzhiyun
685*4882a593Smuzhiyun COMPOSITE_NODIV(HCLK_RKVENC_ROOT, "hclk_rkvenc_root", mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL,
686*4882a593Smuzhiyun RK3528_CLKSEL_CON(79), 0, 2, MFLAGS,
687*4882a593Smuzhiyun RK3528_CLKGATE_CON(36), 0, GFLAGS),
688*4882a593Smuzhiyun GATE(HCLK_SAI_I2S1, "hclk_sai_i2s1", "hclk_rkvenc_root", 0,
689*4882a593Smuzhiyun RK3528_CLKGATE_CON(36), 9, GFLAGS),
690*4882a593Smuzhiyun GATE(HCLK_SPDIF, "hclk_spdif", "hclk_rkvenc_root", 0,
691*4882a593Smuzhiyun RK3528_CLKGATE_CON(37), 14, GFLAGS),
692*4882a593Smuzhiyun GATE(HCLK_PDM, "hclk_pdm", "hclk_rkvenc_root", 0,
693*4882a593Smuzhiyun RK3528_CLKGATE_CON(38), 0, GFLAGS),
694*4882a593Smuzhiyun GATE(HCLK_RKVENC, "hclk_rkvenc", "hclk_rkvenc_root", 0,
695*4882a593Smuzhiyun RK3528_CLKGATE_CON(36), 6, GFLAGS),
696*4882a593Smuzhiyun
697*4882a593Smuzhiyun COMPOSITE_NODIV(CLK_CORE_RKVENC, "clk_core_rkvenc", mux_300m_200m_100m_24m_p, 0,
698*4882a593Smuzhiyun RK3528_CLKSEL_CON(79), 6, 2, MFLAGS,
699*4882a593Smuzhiyun RK3528_CLKGATE_CON(36), 8, GFLAGS),
700*4882a593Smuzhiyun COMPOSITE_NODIV(CLK_I2C0, "clk_i2c0", mux_200m_100m_50m_24m_p, 0,
701*4882a593Smuzhiyun RK3528_CLKSEL_CON(79), 11, 2, MFLAGS,
702*4882a593Smuzhiyun RK3528_CLKGATE_CON(36), 14, GFLAGS),
703*4882a593Smuzhiyun COMPOSITE_NODIV(CLK_I2C1, "clk_i2c1", mux_200m_100m_50m_24m_p, 0,
704*4882a593Smuzhiyun RK3528_CLKSEL_CON(79), 9, 2, MFLAGS,
705*4882a593Smuzhiyun RK3528_CLKGATE_CON(36), 12, GFLAGS),
706*4882a593Smuzhiyun #if 0
707*4882a593Smuzhiyun GATE(SCLK_IN_SPI0, "sclk_in_spi0", "sclk_in_spi0_io", 0,
708*4882a593Smuzhiyun RK3528_CLKGATE_CON(37), 4, GFLAGS),
709*4882a593Smuzhiyun GATE(CLK_UART_JTAG, "clk_uart_jtag", "xin24m", 0,
710*4882a593Smuzhiyun RK3528_CLKGATE_CON(37), 0, GFLAGS),
711*4882a593Smuzhiyun #endif
712*4882a593Smuzhiyun COMPOSITE_NODIV(CLK_SPI0, "clk_spi0", mux_200m_100m_50m_24m_p, 0,
713*4882a593Smuzhiyun RK3528_CLKSEL_CON(79), 13, 2, MFLAGS,
714*4882a593Smuzhiyun RK3528_CLKGATE_CON(37), 3, GFLAGS),
715*4882a593Smuzhiyun COMPOSITE_NODIV(MCLK_SAI_I2S1, "mclk_sai_i2s1", mclk_sai_i2s1_p, CLK_SET_RATE_PARENT,
716*4882a593Smuzhiyun RK3528_CLKSEL_CON(79), 8, 1, MFLAGS,
717*4882a593Smuzhiyun RK3528_CLKGATE_CON(36), 10, GFLAGS),
718*4882a593Smuzhiyun GATE(DBCLK_GPIO4, "dbclk_gpio4", "xin24m", 0,
719*4882a593Smuzhiyun RK3528_CLKGATE_CON(37), 9, GFLAGS),
720*4882a593Smuzhiyun
721*4882a593Smuzhiyun /* vo */
722*4882a593Smuzhiyun COMPOSITE_NODIV(HCLK_VO_ROOT, "hclk_vo_root", mux_150m_100m_24m_p, CLK_IS_CRITICAL,
723*4882a593Smuzhiyun RK3528_CLKSEL_CON(83), 2, 2, MFLAGS,
724*4882a593Smuzhiyun RK3528_CLKGATE_CON(39), 1, GFLAGS),
725*4882a593Smuzhiyun GATE(HCLK_VOP, "hclk_vop", "hclk_vo_root", 0,
726*4882a593Smuzhiyun RK3528_CLKGATE_CON(40), 2, GFLAGS),
727*4882a593Smuzhiyun GATE(HCLK_USBHOST, "hclk_usbhost", "hclk_vo_root", 0,
728*4882a593Smuzhiyun RK3528_CLKGATE_CON(43), 3, GFLAGS),
729*4882a593Smuzhiyun GATE(HCLK_JPEG_DECODER, "hclk_jpeg_decoder", "hclk_vo_root", 0,
730*4882a593Smuzhiyun RK3528_CLKGATE_CON(41), 7, GFLAGS),
731*4882a593Smuzhiyun GATE(HCLK_VDPP, "hclk_vdpp", "hclk_vo_root", 0,
732*4882a593Smuzhiyun RK3528_CLKGATE_CON(39), 10, GFLAGS),
733*4882a593Smuzhiyun GATE(HCLK_CVBS, "hclk_cvbs", "hclk_vo_root", 0,
734*4882a593Smuzhiyun RK3528_CLKGATE_CON(41), 3, GFLAGS),
735*4882a593Smuzhiyun GATE(HCLK_USBHOST_ARB, "hclk_usbhost_arb", "hclk_vo_root", 0,
736*4882a593Smuzhiyun RK3528_CLKGATE_CON(43), 4, GFLAGS),
737*4882a593Smuzhiyun GATE(HCLK_SAI_I2S3, "hclk_sai_i2s3", "hclk_vo_root", 0,
738*4882a593Smuzhiyun RK3528_CLKGATE_CON(42), 1, GFLAGS),
739*4882a593Smuzhiyun GATE(HCLK_HDCP, "hclk_hdcp", "hclk_vo_root", 0,
740*4882a593Smuzhiyun RK3528_CLKGATE_CON(41), 1, GFLAGS),
741*4882a593Smuzhiyun GATE(HCLK_RGA2E, "hclk_rga2e", "hclk_vo_root", 0,
742*4882a593Smuzhiyun RK3528_CLKGATE_CON(39), 7, GFLAGS),
743*4882a593Smuzhiyun GATE(HCLK_SDMMC0, "hclk_sdmmc0", "hclk_vo_root", 0,
744*4882a593Smuzhiyun RK3528_CLKGATE_CON(42), 9, GFLAGS),
745*4882a593Smuzhiyun GATE(HCLK_HDCP_KEY, "hclk_hdcp_key", "hclk_vo_root", 0,
746*4882a593Smuzhiyun RK3528_CLKGATE_CON(40), 15, GFLAGS),
747*4882a593Smuzhiyun
748*4882a593Smuzhiyun COMPOSITE_NODIV(ACLK_VO_L_ROOT, "aclk_vo_l_root", mux_150m_100m_24m_p, CLK_IS_CRITICAL,
749*4882a593Smuzhiyun RK3528_CLKSEL_CON(84), 1, 2, MFLAGS,
750*4882a593Smuzhiyun RK3528_CLKGATE_CON(41), 8, GFLAGS),
751*4882a593Smuzhiyun GATE(ACLK_MAC_VO, "aclk_gmac0", "aclk_vo_l_root", 0,
752*4882a593Smuzhiyun RK3528_CLKGATE_CON(41), 10, GFLAGS),
753*4882a593Smuzhiyun
754*4882a593Smuzhiyun COMPOSITE_NODIV(PCLK_VO_ROOT, "pclk_vo_root", mux_100m_50m_24m_p, CLK_IS_CRITICAL,
755*4882a593Smuzhiyun RK3528_CLKSEL_CON(83), 4, 2, MFLAGS,
756*4882a593Smuzhiyun RK3528_CLKGATE_CON(39), 2, GFLAGS),
757*4882a593Smuzhiyun GATE(PCLK_MAC_VO, "pclk_gmac0", "pclk_vo_root", 0,
758*4882a593Smuzhiyun RK3528_CLKGATE_CON(41), 11, GFLAGS),
759*4882a593Smuzhiyun GATE(PCLK_VCDCPHY, "pclk_vcdcphy", "pclk_vo_root", 0,
760*4882a593Smuzhiyun RK3528_CLKGATE_CON(42), 4, GFLAGS),
761*4882a593Smuzhiyun GATE(PCLK_GPIO2, "pclk_gpio2", "pclk_vo_root", 0,
762*4882a593Smuzhiyun RK3528_CLKGATE_CON(42), 5, GFLAGS),
763*4882a593Smuzhiyun GATE(PCLK_VO_IOC, "pclk_vo_ioc", "pclk_vo_root", CLK_IS_CRITICAL,
764*4882a593Smuzhiyun RK3528_CLKGATE_CON(42), 7, GFLAGS),
765*4882a593Smuzhiyun GATE(PCLK_OTPC_NS, "pclk_otpc_ns", "pclk_vo_root", 0,
766*4882a593Smuzhiyun RK3528_CLKGATE_CON(42), 11, GFLAGS),
767*4882a593Smuzhiyun GATE(PCLK_UART4, "pclk_uart4", "pclk_vo_root", 0,
768*4882a593Smuzhiyun RK3528_CLKGATE_CON(43), 7, GFLAGS),
769*4882a593Smuzhiyun GATE(PCLK_I2C4, "pclk_i2c4", "pclk_vo_root", 0,
770*4882a593Smuzhiyun RK3528_CLKGATE_CON(43), 9, GFLAGS),
771*4882a593Smuzhiyun GATE(PCLK_I2C7, "pclk_i2c7", "pclk_vo_root", 0,
772*4882a593Smuzhiyun RK3528_CLKGATE_CON(43), 11, GFLAGS),
773*4882a593Smuzhiyun
774*4882a593Smuzhiyun GATE(PCLK_USBPHY, "pclk_usbphy", "pclk_vo_root", 0,
775*4882a593Smuzhiyun RK3528_CLKGATE_CON(43), 13, GFLAGS),
776*4882a593Smuzhiyun
777*4882a593Smuzhiyun GATE(PCLK_VO_GRF, "pclk_vo_grf", "pclk_vo_root", CLK_IS_CRITICAL,
778*4882a593Smuzhiyun RK3528_CLKGATE_CON(39), 13, GFLAGS),
779*4882a593Smuzhiyun GATE(PCLK_CRU, "pclk_cru", "pclk_vo_root", CLK_IS_CRITICAL,
780*4882a593Smuzhiyun RK3528_CLKGATE_CON(39), 15, GFLAGS),
781*4882a593Smuzhiyun GATE(PCLK_HDMI, "pclk_hdmi", "pclk_vo_root", 0,
782*4882a593Smuzhiyun RK3528_CLKGATE_CON(40), 6, GFLAGS),
783*4882a593Smuzhiyun GATE(PCLK_HDMIPHY, "pclk_hdmiphy", "pclk_vo_root", 0,
784*4882a593Smuzhiyun RK3528_CLKGATE_CON(40), 14, GFLAGS),
785*4882a593Smuzhiyun GATE(PCLK_HDCP, "pclk_hdcp", "pclk_vo_root", 0,
786*4882a593Smuzhiyun RK3528_CLKGATE_CON(41), 2, GFLAGS),
787*4882a593Smuzhiyun
788*4882a593Smuzhiyun COMPOSITE_NODIV(CLK_CORE_VDPP, "clk_core_vdpp", mux_339m_200m_100m_24m_p, 0,
789*4882a593Smuzhiyun RK3528_CLKSEL_CON(83), 10, 2, MFLAGS,
790*4882a593Smuzhiyun RK3528_CLKGATE_CON(39), 12, GFLAGS),
791*4882a593Smuzhiyun COMPOSITE_NODIV(CLK_CORE_RGA2E, "clk_core_rga2e", mux_339m_200m_100m_24m_p, 0,
792*4882a593Smuzhiyun RK3528_CLKSEL_CON(83), 8, 2, MFLAGS,
793*4882a593Smuzhiyun RK3528_CLKGATE_CON(39), 9, GFLAGS),
794*4882a593Smuzhiyun COMPOSITE_NODIV(ACLK_JPEG_ROOT, "aclk_jpeg_root", mux_339m_200m_100m_24m_p, CLK_IS_CRITICAL,
795*4882a593Smuzhiyun RK3528_CLKSEL_CON(84), 9, 2, MFLAGS,
796*4882a593Smuzhiyun RK3528_CLKGATE_CON(41), 15, GFLAGS),
797*4882a593Smuzhiyun GATE(ACLK_JPEG_DECODER, "aclk_jpeg_decoder", "aclk_jpeg_root", 0,
798*4882a593Smuzhiyun RK3528_CLKGATE_CON(41), 6, GFLAGS),
799*4882a593Smuzhiyun
800*4882a593Smuzhiyun COMPOSITE_NODIV(ACLK_VO_ROOT, "aclk_vo_root", mux_339m_200m_100m_24m_p, CLK_IS_CRITICAL,
801*4882a593Smuzhiyun RK3528_CLKSEL_CON(83), 0, 2, MFLAGS,
802*4882a593Smuzhiyun RK3528_CLKGATE_CON(39), 0, GFLAGS),
803*4882a593Smuzhiyun GATE_NO_SET_RATE(ACLK_RGA2E, "aclk_rga2e", "aclk_vo_root", 0,
804*4882a593Smuzhiyun RK3528_CLKGATE_CON(39), 8, GFLAGS),
805*4882a593Smuzhiyun GATE_NO_SET_RATE(ACLK_VDPP, "aclk_vdpp", "aclk_vo_root", 0,
806*4882a593Smuzhiyun RK3528_CLKGATE_CON(39), 11, GFLAGS),
807*4882a593Smuzhiyun GATE_NO_SET_RATE(ACLK_HDCP, "aclk_hdcp", "aclk_vo_root", 0,
808*4882a593Smuzhiyun RK3528_CLKGATE_CON(41), 0, GFLAGS),
809*4882a593Smuzhiyun
810*4882a593Smuzhiyun COMPOSITE(CCLK_SRC_SDMMC0, "cclk_src_sdmmc0", mux_gpll_cpll_xin24m_p, 0,
811*4882a593Smuzhiyun RK3528_CLKSEL_CON(85), 6, 2, MFLAGS, 0, 6, DFLAGS,
812*4882a593Smuzhiyun RK3528_CLKGATE_CON(42), 8, GFLAGS),
813*4882a593Smuzhiyun
814*4882a593Smuzhiyun COMPOSITE(ACLK_VOP_ROOT, "aclk_vop_root", mux_gpll_cpll_p, CLK_IS_CRITICAL,
815*4882a593Smuzhiyun RK3528_CLKSEL_CON(83), 15, 1, MFLAGS, 12, 3, DFLAGS,
816*4882a593Smuzhiyun RK3528_CLKGATE_CON(40), 0, GFLAGS),
817*4882a593Smuzhiyun GATE(ACLK_VOP, "aclk_vop", "aclk_vop_root", 0,
818*4882a593Smuzhiyun RK3528_CLKGATE_CON(40), 5, GFLAGS),
819*4882a593Smuzhiyun
820*4882a593Smuzhiyun COMPOSITE_NODIV(CLK_I2C4, "clk_i2c4", mux_200m_100m_50m_24m_p, 0,
821*4882a593Smuzhiyun RK3528_CLKSEL_CON(85), 13, 2, MFLAGS,
822*4882a593Smuzhiyun RK3528_CLKGATE_CON(43), 10, GFLAGS),
823*4882a593Smuzhiyun COMPOSITE_NODIV(CLK_I2C7, "clk_i2c7", mux_200m_100m_50m_24m_p, 0,
824*4882a593Smuzhiyun RK3528_CLKSEL_CON(86), 0, 2, MFLAGS,
825*4882a593Smuzhiyun RK3528_CLKGATE_CON(43), 12, GFLAGS),
826*4882a593Smuzhiyun GATE(DBCLK_GPIO2, "dbclk_gpio2", "xin24m", 0,
827*4882a593Smuzhiyun RK3528_CLKGATE_CON(42), 6, GFLAGS),
828*4882a593Smuzhiyun
829*4882a593Smuzhiyun GATE(CLK_HDMIHDP0, "clk_hdmihdp0", "xin24m", 0,
830*4882a593Smuzhiyun RK3528_CLKGATE_CON(43), 2, GFLAGS),
831*4882a593Smuzhiyun GATE(CLK_MACPHY, "clk_macphy", "xin24m", 0,
832*4882a593Smuzhiyun RK3528_CLKGATE_CON(42), 3, GFLAGS),
833*4882a593Smuzhiyun GATE(CLK_REF_USBPHY, "clk_ref_usbphy", "xin24m", 0,
834*4882a593Smuzhiyun RK3528_CLKGATE_CON(43), 14, GFLAGS),
835*4882a593Smuzhiyun GATE(CLK_SBPI_OTPC_NS, "clk_sbpi_otpc_ns", "xin24m", 0,
836*4882a593Smuzhiyun RK3528_CLKGATE_CON(42), 12, GFLAGS),
837*4882a593Smuzhiyun FACTOR(CLK_USER_OTPC_NS, "clk_user_otpc_ns", "clk_sbpi_otpc_ns", 0, 1, 2),
838*4882a593Smuzhiyun
839*4882a593Smuzhiyun GATE(MCLK_SAI_I2S3, "mclk_sai_i2s3", "mclk_i2s3_8ch_sai_src", 0,
840*4882a593Smuzhiyun RK3528_CLKGATE_CON(42), 2, GFLAGS),
841*4882a593Smuzhiyun COMPOSITE_NODIV(DCLK_VOP0, "dclk_vop0", dclk_vop0_p, CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
842*4882a593Smuzhiyun RK3528_CLKSEL_CON(84), 0, 1, MFLAGS,
843*4882a593Smuzhiyun RK3528_CLKGATE_CON(40), 3, GFLAGS),
844*4882a593Smuzhiyun GATE(DCLK_VOP1, "dclk_vop1", "dclk_vop_src1", CLK_SET_RATE_PARENT,
845*4882a593Smuzhiyun RK3528_CLKGATE_CON(40), 4, GFLAGS),
846*4882a593Smuzhiyun FACTOR_GATE(DCLK_CVBS, "dclk_cvbs", "dclk_vop1", 0, 1, 4,
847*4882a593Smuzhiyun RK3528_CLKGATE_CON(41), 4, GFLAGS),
848*4882a593Smuzhiyun GATE(DCLK_4X_CVBS, "dclk_4x_cvbs", "dclk_vop1", 0,
849*4882a593Smuzhiyun RK3528_CLKGATE_CON(41), 5, GFLAGS),
850*4882a593Smuzhiyun
851*4882a593Smuzhiyun FACTOR_GATE(CLK_SFR_HDMI, "clk_sfr_hdmi", "dclk_vop_src1", 0, 1, 4,
852*4882a593Smuzhiyun RK3528_CLKGATE_CON(40), 7, GFLAGS),
853*4882a593Smuzhiyun
854*4882a593Smuzhiyun GATE(CLK_SPDIF_HDMI, "clk_spdif_hdmi", "mclk_spdif_src", 0,
855*4882a593Smuzhiyun RK3528_CLKGATE_CON(40), 10, GFLAGS),
856*4882a593Smuzhiyun GATE(MCLK_SPDIF, "mclk_spdif", "mclk_spdif_src", 0,
857*4882a593Smuzhiyun RK3528_CLKGATE_CON(37), 15, GFLAGS),
858*4882a593Smuzhiyun GATE(CLK_CEC_HDMI, "clk_cec_hdmi", "clk_32k", 0,
859*4882a593Smuzhiyun RK3528_CLKGATE_CON(40), 8, GFLAGS),
860*4882a593Smuzhiyun #if 0
861*4882a593Smuzhiyun GATE(CLK_USBHOST_OHCI, "clk_usbhost_ohci", "clk_usbhost_ohci_io", 0,
862*4882a593Smuzhiyun RK3528_CLKGATE_CON(43), 5, GFLAGS),
863*4882a593Smuzhiyun GATE(CLK_USBHOST_UTMI, "clk_usbhost_utmi", "clk_usbhost_utmi_io", 0,
864*4882a593Smuzhiyun RK3528_CLKGATE_CON(43), 6, GFLAGS),
865*4882a593Smuzhiyun GATE(CLK_HDMIPHY_TMDSSRC, "clk_hdmiphy_tmdssrc", "clk_hdmiphy_tmdssrc_io", 0,
866*4882a593Smuzhiyun RK3528_CLKGATE_CON(40), 11, GFLAGS),
867*4882a593Smuzhiyun GATE(CLK_HDMIPHY_PREP, "clk_hdmiphy_prep", "clk_hdmiphy_prep_io", 0,
868*4882a593Smuzhiyun RK3528_CLKGATE_CON(40), 12, GFLAGS),
869*4882a593Smuzhiyun #endif
870*4882a593Smuzhiyun /* vpu */
871*4882a593Smuzhiyun GATE(DBCLK_GPIO1, "dbclk_gpio1", "xin24m", 0,
872*4882a593Smuzhiyun RK3528_CLKGATE_CON(26), 5, GFLAGS),
873*4882a593Smuzhiyun GATE(DBCLK_GPIO3, "dbclk_gpio3", "xin24m", 0,
874*4882a593Smuzhiyun RK3528_CLKGATE_CON(27), 1, GFLAGS),
875*4882a593Smuzhiyun GATE(CLK_SUSPEND_USB3OTG, "clk_suspend_usb3otg", "xin24m", 0,
876*4882a593Smuzhiyun RK3528_CLKGATE_CON(33), 4, GFLAGS),
877*4882a593Smuzhiyun GATE(CLK_PCIE_AUX, "clk_pcie_aux", "xin24m", 0,
878*4882a593Smuzhiyun RK3528_CLKGATE_CON(30), 2, GFLAGS),
879*4882a593Smuzhiyun GATE(TCLK_EMMC, "tclk_emmc", "xin24m", 0,
880*4882a593Smuzhiyun RK3528_CLKGATE_CON(26), 3, GFLAGS),
881*4882a593Smuzhiyun GATE(CLK_REF_USB3OTG, "clk_ref_usb3otg", "xin24m", 0,
882*4882a593Smuzhiyun RK3528_CLKGATE_CON(33), 2, GFLAGS),
883*4882a593Smuzhiyun COMPOSITE(CCLK_SRC_SDIO0, "cclk_src_sdio0", mux_gpll_cpll_xin24m_p, 0,
884*4882a593Smuzhiyun RK3528_CLKSEL_CON(72), 6, 2, MFLAGS, 0, 6, DFLAGS,
885*4882a593Smuzhiyun RK3528_CLKGATE_CON(32), 1, GFLAGS),
886*4882a593Smuzhiyun
887*4882a593Smuzhiyun COMPOSITE_NODIV(PCLK_VPU_ROOT, "pclk_vpu_root", mux_100m_50m_24m_p, CLK_IS_CRITICAL,
888*4882a593Smuzhiyun RK3528_CLKSEL_CON(61), 4, 2, MFLAGS,
889*4882a593Smuzhiyun RK3528_CLKGATE_CON(25), 5, GFLAGS),
890*4882a593Smuzhiyun GATE(PCLK_VPU_GRF, "pclk_vpu_grf", "pclk_vpu_root", CLK_IS_CRITICAL,
891*4882a593Smuzhiyun RK3528_CLKGATE_CON(25), 12, GFLAGS),
892*4882a593Smuzhiyun GATE(PCLK_CRU_PCIE, "pclk_cru_pcie", "pclk_vpu_root", CLK_IS_CRITICAL,
893*4882a593Smuzhiyun RK3528_CLKGATE_CON(25), 11, GFLAGS),
894*4882a593Smuzhiyun GATE(PCLK_UART6, "pclk_uart6", "pclk_vpu_root", 0,
895*4882a593Smuzhiyun RK3528_CLKGATE_CON(27), 11, GFLAGS),
896*4882a593Smuzhiyun GATE(PCLK_CAN2, "pclk_can2", "pclk_vpu_root", 0,
897*4882a593Smuzhiyun RK3528_CLKGATE_CON(32), 7, GFLAGS),
898*4882a593Smuzhiyun GATE(PCLK_SPI1, "pclk_spi1", "pclk_vpu_root", 0,
899*4882a593Smuzhiyun RK3528_CLKGATE_CON(27), 4, GFLAGS),
900*4882a593Smuzhiyun GATE(PCLK_CAN3, "pclk_can3", "pclk_vpu_root", 0,
901*4882a593Smuzhiyun RK3528_CLKGATE_CON(32), 9, GFLAGS),
902*4882a593Smuzhiyun GATE(PCLK_GPIO3, "pclk_gpio3", "pclk_vpu_root", 0,
903*4882a593Smuzhiyun RK3528_CLKGATE_CON(27), 0, GFLAGS),
904*4882a593Smuzhiyun GATE(PCLK_GPIO1, "pclk_gpio1", "pclk_vpu_root", 0,
905*4882a593Smuzhiyun RK3528_CLKGATE_CON(26), 4, GFLAGS),
906*4882a593Smuzhiyun GATE(PCLK_SARADC, "pclk_saradc", "pclk_vpu_root", 0,
907*4882a593Smuzhiyun RK3528_CLKGATE_CON(32), 11, GFLAGS),
908*4882a593Smuzhiyun GATE(PCLK_ACODEC, "pclk_acodec", "pclk_vpu_root", 0,
909*4882a593Smuzhiyun RK3528_CLKGATE_CON(26), 13, GFLAGS),
910*4882a593Smuzhiyun GATE(PCLK_UART7, "pclk_uart7", "pclk_vpu_root", 0,
911*4882a593Smuzhiyun RK3528_CLKGATE_CON(27), 13, GFLAGS),
912*4882a593Smuzhiyun GATE(PCLK_UART5, "pclk_uart5", "pclk_vpu_root", 0,
913*4882a593Smuzhiyun RK3528_CLKGATE_CON(27), 9, GFLAGS),
914*4882a593Smuzhiyun GATE(PCLK_TSADC, "pclk_tsadc", "pclk_vpu_root", 0,
915*4882a593Smuzhiyun RK3528_CLKGATE_CON(32), 14, GFLAGS),
916*4882a593Smuzhiyun GATE(PCLK_PCIE, "pclk_pcie", "pclk_vpu_root", 0,
917*4882a593Smuzhiyun RK3528_CLKGATE_CON(30), 1, GFLAGS),
918*4882a593Smuzhiyun GATE(PCLK_UART2, "pclk_uart2", "pclk_vpu_root", 0,
919*4882a593Smuzhiyun RK3528_CLKGATE_CON(27), 7, GFLAGS),
920*4882a593Smuzhiyun GATE(PCLK_VPU_IOC, "pclk_vpu_ioc", "pclk_vpu_root", CLK_IS_CRITICAL,
921*4882a593Smuzhiyun RK3528_CLKGATE_CON(26), 8, GFLAGS),
922*4882a593Smuzhiyun GATE(PCLK_PIPE_GRF, "pclk_pipe_grf", "pclk_vpu_root", CLK_IS_CRITICAL,
923*4882a593Smuzhiyun RK3528_CLKGATE_CON(30), 7, GFLAGS),
924*4882a593Smuzhiyun GATE(PCLK_I2C5, "pclk_i2c5", "pclk_vpu_root", 0,
925*4882a593Smuzhiyun RK3528_CLKGATE_CON(28), 1, GFLAGS),
926*4882a593Smuzhiyun GATE(PCLK_PCIE_PHY, "pclk_pcie_phy", "pclk_vpu_root", 0,
927*4882a593Smuzhiyun RK3528_CLKGATE_CON(30), 6, GFLAGS),
928*4882a593Smuzhiyun GATE(PCLK_I2C3, "pclk_i2c3", "pclk_vpu_root", 0,
929*4882a593Smuzhiyun RK3528_CLKGATE_CON(27), 15, GFLAGS),
930*4882a593Smuzhiyun GATE(PCLK_MAC_VPU, "pclk_gmac1", "pclk_vpu_root", CLK_IS_CRITICAL,
931*4882a593Smuzhiyun RK3528_CLKGATE_CON(28), 6, GFLAGS),
932*4882a593Smuzhiyun GATE(PCLK_I2C6, "pclk_i2c6", "pclk_vpu_root", 0,
933*4882a593Smuzhiyun RK3528_CLKGATE_CON(28), 3, GFLAGS),
934*4882a593Smuzhiyun
935*4882a593Smuzhiyun COMPOSITE_NODIV(ACLK_VPU_L_ROOT, "aclk_vpu_l_root", mux_200m_100m_24m_p, CLK_IS_CRITICAL,
936*4882a593Smuzhiyun RK3528_CLKSEL_CON(60), 0, 2, MFLAGS,
937*4882a593Smuzhiyun RK3528_CLKGATE_CON(25), 0, GFLAGS),
938*4882a593Smuzhiyun GATE_NO_SET_RATE(ACLK_EMMC, "aclk_emmc", "aclk_vpu_l_root", 0,
939*4882a593Smuzhiyun RK3528_CLKGATE_CON(26), 1, GFLAGS),
940*4882a593Smuzhiyun GATE_NO_SET_RATE(ACLK_MAC_VPU, "aclk_gmac1", "aclk_vpu_l_root", 0,
941*4882a593Smuzhiyun RK3528_CLKGATE_CON(28), 5, GFLAGS),
942*4882a593Smuzhiyun GATE_NO_SET_RATE(ACLK_PCIE, "aclk_pcie", "aclk_vpu_l_root", 0,
943*4882a593Smuzhiyun RK3528_CLKGATE_CON(30), 3, GFLAGS),
944*4882a593Smuzhiyun
945*4882a593Smuzhiyun GATE_NO_SET_RATE(ACLK_USB3OTG, "aclk_usb3otg", "aclk_vpu_l_root", 0,
946*4882a593Smuzhiyun RK3528_CLKGATE_CON(33), 1, GFLAGS),
947*4882a593Smuzhiyun
948*4882a593Smuzhiyun COMPOSITE_NODIV(HCLK_VPU_ROOT, "hclk_vpu_root", mux_200m_100m_50m_24m_p, CLK_IS_CRITICAL,
949*4882a593Smuzhiyun RK3528_CLKSEL_CON(61), 2, 2, MFLAGS,
950*4882a593Smuzhiyun RK3528_CLKGATE_CON(25), 4, GFLAGS),
951*4882a593Smuzhiyun GATE(HCLK_VPU, "hclk_vpu", "hclk_vpu_root", 0,
952*4882a593Smuzhiyun RK3528_CLKGATE_CON(25), 10, GFLAGS),
953*4882a593Smuzhiyun GATE(HCLK_SFC, "hclk_sfc", "hclk_vpu_root", 0,
954*4882a593Smuzhiyun RK3528_CLKGATE_CON(25), 13, GFLAGS),
955*4882a593Smuzhiyun GATE(HCLK_EMMC, "hclk_emmc", "hclk_vpu_root", 0,
956*4882a593Smuzhiyun RK3528_CLKGATE_CON(26), 0, GFLAGS),
957*4882a593Smuzhiyun GATE(HCLK_SAI_I2S0, "hclk_sai_i2s0", "hclk_vpu_root", 0,
958*4882a593Smuzhiyun RK3528_CLKGATE_CON(26), 9, GFLAGS),
959*4882a593Smuzhiyun GATE(HCLK_SAI_I2S2, "hclk_sai_i2s2", "hclk_vpu_root", 0,
960*4882a593Smuzhiyun RK3528_CLKGATE_CON(26), 11, GFLAGS),
961*4882a593Smuzhiyun
962*4882a593Smuzhiyun GATE(HCLK_PCIE_SLV, "hclk_pcie_slv", "hclk_vpu_root", 0,
963*4882a593Smuzhiyun RK3528_CLKGATE_CON(30), 4, GFLAGS),
964*4882a593Smuzhiyun GATE(HCLK_PCIE_DBI, "hclk_pcie_dbi", "hclk_vpu_root", 0,
965*4882a593Smuzhiyun RK3528_CLKGATE_CON(30), 5, GFLAGS),
966*4882a593Smuzhiyun GATE(HCLK_SDIO0, "hclk_sdio0", "hclk_vpu_root", 0,
967*4882a593Smuzhiyun RK3528_CLKGATE_CON(32), 2, GFLAGS),
968*4882a593Smuzhiyun GATE(HCLK_SDIO1, "hclk_sdio1", "hclk_vpu_root", 0,
969*4882a593Smuzhiyun RK3528_CLKGATE_CON(32), 4, GFLAGS),
970*4882a593Smuzhiyun
971*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_GMAC1_VPU_25M, "clk_gmac1_25m", "ppll", 0,
972*4882a593Smuzhiyun RK3528_CLKSEL_CON(60), 2, 8, DFLAGS,
973*4882a593Smuzhiyun RK3528_CLKGATE_CON(25), 1, GFLAGS),
974*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_PPLL_125M_MATRIX, "clk_ppll_125m_src", "ppll", 0,
975*4882a593Smuzhiyun RK3528_CLKSEL_CON(60), 10, 5, DFLAGS,
976*4882a593Smuzhiyun RK3528_CLKGATE_CON(25), 2, GFLAGS),
977*4882a593Smuzhiyun
978*4882a593Smuzhiyun COMPOSITE(CLK_CAN3, "clk_can3", mux_gpll_cpll_p, 0,
979*4882a593Smuzhiyun RK3528_CLKSEL_CON(73), 13, 1, MFLAGS, 7, 6, DFLAGS,
980*4882a593Smuzhiyun RK3528_CLKGATE_CON(32), 10, GFLAGS),
981*4882a593Smuzhiyun COMPOSITE_NODIV(CLK_I2C6, "clk_i2c6", mux_200m_100m_50m_24m_p, 0,
982*4882a593Smuzhiyun RK3528_CLKSEL_CON(64), 0, 2, MFLAGS,
983*4882a593Smuzhiyun RK3528_CLKGATE_CON(28), 4, GFLAGS),
984*4882a593Smuzhiyun
985*4882a593Smuzhiyun COMPOSITE(SCLK_SFC, "sclk_sfc", mux_gpll_cpll_xin24m_p, 0,
986*4882a593Smuzhiyun RK3528_CLKSEL_CON(61), 12, 2, MFLAGS, 6, 6, DFLAGS,
987*4882a593Smuzhiyun RK3528_CLKGATE_CON(25), 14, GFLAGS),
988*4882a593Smuzhiyun COMPOSITE(CCLK_SRC_EMMC, "cclk_src_emmc", mux_gpll_cpll_xin24m_p, 0,
989*4882a593Smuzhiyun RK3528_CLKSEL_CON(62), 6, 2, MFLAGS, 0, 6, DFLAGS,
990*4882a593Smuzhiyun RK3528_CLKGATE_CON(25), 15, GFLAGS),
991*4882a593Smuzhiyun
992*4882a593Smuzhiyun COMPOSITE_NODIV(ACLK_VPU_ROOT, "aclk_vpu_root", mux_300m_200m_100m_24m_p, CLK_IS_CRITICAL,
993*4882a593Smuzhiyun RK3528_CLKSEL_CON(61), 0, 2, MFLAGS,
994*4882a593Smuzhiyun RK3528_CLKGATE_CON(25), 3, GFLAGS),
995*4882a593Smuzhiyun GATE(ACLK_VPU, "aclk_vpu", "aclk_vpu_root", 0,
996*4882a593Smuzhiyun RK3528_CLKGATE_CON(25), 9, GFLAGS),
997*4882a593Smuzhiyun
998*4882a593Smuzhiyun COMPOSITE_NODIV(CLK_SPI1, "clk_spi1", mux_200m_100m_50m_24m_p, 0,
999*4882a593Smuzhiyun RK3528_CLKSEL_CON(63), 10, 2, MFLAGS,
1000*4882a593Smuzhiyun RK3528_CLKGATE_CON(27), 5, GFLAGS),
1001*4882a593Smuzhiyun COMPOSITE(CCLK_SRC_SDIO1, "cclk_src_sdio1", mux_gpll_cpll_xin24m_p, 0,
1002*4882a593Smuzhiyun RK3528_CLKSEL_CON(72), 14, 2, MFLAGS, 8, 6, DFLAGS,
1003*4882a593Smuzhiyun RK3528_CLKGATE_CON(32), 3, GFLAGS),
1004*4882a593Smuzhiyun COMPOSITE(CLK_CAN2, "clk_can2", mux_gpll_cpll_p, 0,
1005*4882a593Smuzhiyun RK3528_CLKSEL_CON(73), 6, 1, MFLAGS, 0, 6, DFLAGS,
1006*4882a593Smuzhiyun RK3528_CLKGATE_CON(32), 8, GFLAGS),
1007*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_TSADC, "clk_tsadc", "xin24m", 0,
1008*4882a593Smuzhiyun RK3528_CLKSEL_CON(74), 3, 5, DFLAGS,
1009*4882a593Smuzhiyun RK3528_CLKGATE_CON(32), 15, GFLAGS),
1010*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_SARADC, "clk_saradc", "xin24m", 0,
1011*4882a593Smuzhiyun RK3528_CLKSEL_CON(74), 0, 3, DFLAGS,
1012*4882a593Smuzhiyun RK3528_CLKGATE_CON(32), 12, GFLAGS),
1013*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_TSADC_TSEN, "clk_tsadc_tsen", "xin24m", 0,
1014*4882a593Smuzhiyun RK3528_CLKSEL_CON(74), 8, 5, DFLAGS,
1015*4882a593Smuzhiyun RK3528_CLKGATE_CON(33), 0, GFLAGS),
1016*4882a593Smuzhiyun COMPOSITE_NODIV(BCLK_EMMC, "bclk_emmc", mux_200m_100m_50m_24m_p, 0,
1017*4882a593Smuzhiyun RK3528_CLKSEL_CON(62), 8, 2, MFLAGS,
1018*4882a593Smuzhiyun RK3528_CLKGATE_CON(26), 2, GFLAGS),
1019*4882a593Smuzhiyun COMPOSITE_NOMUX(MCLK_ACODEC_TX, "mclk_acodec_tx", "mclk_i2s2_2ch_sai_src", 0,
1020*4882a593Smuzhiyun RK3528_CLKSEL_CON(63), 0, 8, DFLAGS,
1021*4882a593Smuzhiyun RK3528_CLKGATE_CON(26), 14, GFLAGS),
1022*4882a593Smuzhiyun COMPOSITE_NODIV(CLK_I2C3, "clk_i2c3", mux_200m_100m_50m_24m_p, 0,
1023*4882a593Smuzhiyun RK3528_CLKSEL_CON(63), 12, 2, MFLAGS,
1024*4882a593Smuzhiyun RK3528_CLKGATE_CON(28), 0, GFLAGS),
1025*4882a593Smuzhiyun COMPOSITE_NODIV(CLK_I2C5, "clk_i2c5", mux_200m_100m_50m_24m_p, 0,
1026*4882a593Smuzhiyun RK3528_CLKSEL_CON(63), 14, 2, MFLAGS,
1027*4882a593Smuzhiyun RK3528_CLKGATE_CON(28), 2, GFLAGS),
1028*4882a593Smuzhiyun COMPOSITE_NODIV(MCLK_SAI_I2S0, "mclk_sai_i2s0", mclk_sai_i2s0_p, CLK_SET_RATE_PARENT,
1029*4882a593Smuzhiyun RK3528_CLKSEL_CON(62), 10, 1, MFLAGS,
1030*4882a593Smuzhiyun RK3528_CLKGATE_CON(26), 10, GFLAGS),
1031*4882a593Smuzhiyun GATE(MCLK_SAI_I2S2, "mclk_sai_i2s2", "mclk_i2s2_2ch_sai_src", 0,
1032*4882a593Smuzhiyun RK3528_CLKGATE_CON(26), 12, GFLAGS),
1033*4882a593Smuzhiyun #if 0
1034*4882a593Smuzhiyun GATE(SCLK_IN_SPI1, "sclk_in_spi1", "sclk_in_spi1_io", 0,
1035*4882a593Smuzhiyun RK3528_CLKGATE_CON(27), 6, GFLAGS),
1036*4882a593Smuzhiyun
1037*4882a593Smuzhiyun /* vpuphy */
1038*4882a593Smuzhiyun GATE(CLK_PIPE_USB3OTG_COMBO, "clk_pipe_usb3otg_combo", "clk_pipe_usb3otg_io", 0,
1039*4882a593Smuzhiyun RK3528_CLKGATE_CON(31), 0, GFLAGS),
1040*4882a593Smuzhiyun GATE(CLK_UTMI_USB3OTG, "clk_utmi_usb3otg", "clk_utmi_usb3otg_io", 0,
1041*4882a593Smuzhiyun RK3528_CLKGATE_CON(31), 1, GFLAGS),
1042*4882a593Smuzhiyun GATE(CLK_PCIE_PIPE_PHY, "clk_pcie_pipe_phy", "clk_pipe_usb3otg_io", 0,
1043*4882a593Smuzhiyun RK3528_CLKGATE_CON(31), 2, GFLAGS),
1044*4882a593Smuzhiyun #endif
1045*4882a593Smuzhiyun /* pcie */
1046*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_PPLL_100M_MATRIX, "clk_ppll_100m_src", "ppll", CLK_IS_CRITICAL,
1047*4882a593Smuzhiyun RK3528_PCIE_CLKSEL_CON(1), 2, 5, DFLAGS,
1048*4882a593Smuzhiyun RK3528_PCIE_CLKGATE_CON(0), 1, GFLAGS),
1049*4882a593Smuzhiyun COMPOSITE_NOMUX(CLK_PPLL_50M_MATRIX, "clk_ppll_50m_src", "ppll", CLK_IS_CRITICAL,
1050*4882a593Smuzhiyun RK3528_PCIE_CLKSEL_CON(1), 7, 5, DFLAGS,
1051*4882a593Smuzhiyun RK3528_PCIE_CLKGATE_CON(0), 2, GFLAGS),
1052*4882a593Smuzhiyun MUX(CLK_REF_PCIE_INNER_PHY, "clk_ref_pcie_inner_phy", clk_ref_pcie_inner_phy_p, 0,
1053*4882a593Smuzhiyun RK3528_PCIE_CLKSEL_CON(1), 13, 1, MFLAGS),
1054*4882a593Smuzhiyun FACTOR(CLK_REF_PCIE_100M_PHY, "clk_ref_pcie_100m_phy", "clk_ppll_100m_src", 0, 1, 1),
1055*4882a593Smuzhiyun
1056*4882a593Smuzhiyun /* gmac */
1057*4882a593Smuzhiyun FACTOR(CLK_GMAC1_RMII_VPU, "clk_gmac1_50m", "clk_ppll_50m_src", 0, 1, 1),
1058*4882a593Smuzhiyun FACTOR(CLK_GMAC1_SRC_VPU, "clk_gmac1_125m", "clk_ppll_125m_src", 0, 1, 1),
1059*4882a593Smuzhiyun
1060*4882a593Smuzhiyun /* they are orphans */
1061*4882a593Smuzhiyun DIV(CLK_GMAC0_SRC, "clk_gmac0_src", "clk_gmac0_io_i", 0,
1062*4882a593Smuzhiyun RK3528_CLKSEL_CON(84), 3, 6, DFLAGS),
1063*4882a593Smuzhiyun GATE(CLK_GMAC0_TX, "clk_gmac0_tx", "clk_gmac0_src", 0,
1064*4882a593Smuzhiyun RK3528_CLKGATE_CON(41), 13, GFLAGS),
1065*4882a593Smuzhiyun GATE(CLK_GMAC0_RX, "clk_gmac0_rx", "clk_gmac0_src", 0,
1066*4882a593Smuzhiyun RK3528_CLKGATE_CON(41), 14, GFLAGS),
1067*4882a593Smuzhiyun GATE(CLK_GMAC0_RMII_50M, "clk_gmac0_rmii_50m", "clk_gmac0_io_i", 0,
1068*4882a593Smuzhiyun RK3528_CLKGATE_CON(41), 12, GFLAGS),
1069*4882a593Smuzhiyun GATE(CLK_SCRKEYGEN, "clk_scrkeygen", "clk_pmupvtm_out", 0,
1070*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(2), 0, GFLAGS),
1071*4882a593Smuzhiyun GATE(CLK_PVTM_OSCCHK, "clk_pvtm_oscchk", "clk_pmupvtm_out", 0,
1072*4882a593Smuzhiyun RK3528_PMU_CLKGATE_CON(2), 1, GFLAGS),
1073*4882a593Smuzhiyun };
1074*4882a593Smuzhiyun
1075*4882a593Smuzhiyun static struct rockchip_clk_branch rk3528_grf_clk_branches[] __initdata = {
1076*4882a593Smuzhiyun MMC(SCLK_SDMMC_DRV, "sdmmc_drv", "cclk_src_sdmmc0", RK3528_SDMMC_CON0, 1),
1077*4882a593Smuzhiyun MMC(SCLK_SDMMC_SAMPLE, "sdmmc_sample", "cclk_src_sdmmc0", RK3528_SDMMC_CON1, 1),
1078*4882a593Smuzhiyun MMC(SCLK_SDIO0_DRV, "sdio0_drv", "cclk_src_sdio0", RK3528_SDIO0_CON0, 1),
1079*4882a593Smuzhiyun MMC(SCLK_SDIO0_SAMPLE, "sdio0_sample", "cclk_src_sdio0", RK3528_SDIO0_CON1, 1),
1080*4882a593Smuzhiyun MMC(SCLK_SDIO1_DRV, "sdio1_drv", "cclk_src_sdio1", RK3528_SDIO1_CON0, 1),
1081*4882a593Smuzhiyun MMC(SCLK_SDIO1_SAMPLE, "sdio1_sample", "cclk_src_sdio1", RK3528_SDIO1_CON1, 1),
1082*4882a593Smuzhiyun };
1083*4882a593Smuzhiyun
1084*4882a593Smuzhiyun static void __iomem *rk3528_cru_base;
1085*4882a593Smuzhiyun
rk3528_dump_cru(void)1086*4882a593Smuzhiyun static void rk3528_dump_cru(void)
1087*4882a593Smuzhiyun {
1088*4882a593Smuzhiyun if (rk3528_cru_base) {
1089*4882a593Smuzhiyun pr_warn("CRU:\n");
1090*4882a593Smuzhiyun print_hex_dump(KERN_WARNING, "", DUMP_PREFIX_OFFSET,
1091*4882a593Smuzhiyun 32, 4, rk3528_cru_base,
1092*4882a593Smuzhiyun 0x8b8, false);
1093*4882a593Smuzhiyun pr_warn("PCIE CRU:\n");
1094*4882a593Smuzhiyun print_hex_dump(KERN_WARNING, "", DUMP_PREFIX_OFFSET,
1095*4882a593Smuzhiyun 32, 4, rk3528_cru_base + RK3528_PCIE_CRU_BASE,
1096*4882a593Smuzhiyun 0x804, false);
1097*4882a593Smuzhiyun pr_warn("DDRPHY CRU:\n");
1098*4882a593Smuzhiyun print_hex_dump(KERN_WARNING, "", DUMP_PREFIX_OFFSET,
1099*4882a593Smuzhiyun 32, 4, rk3528_cru_base + RK3528_DDRPHY_CRU_BASE,
1100*4882a593Smuzhiyun 0x804, false);
1101*4882a593Smuzhiyun }
1102*4882a593Smuzhiyun }
1103*4882a593Smuzhiyun
rk3528_clk_init(struct device_node * np)1104*4882a593Smuzhiyun static void __init rk3528_clk_init(struct device_node *np)
1105*4882a593Smuzhiyun {
1106*4882a593Smuzhiyun struct rockchip_clk_provider *ctx;
1107*4882a593Smuzhiyun void __iomem *reg_base;
1108*4882a593Smuzhiyun struct clk **clks;
1109*4882a593Smuzhiyun
1110*4882a593Smuzhiyun reg_base = of_iomap(np, 0);
1111*4882a593Smuzhiyun if (!reg_base) {
1112*4882a593Smuzhiyun pr_err("%s: could not map cru region\n", __func__);
1113*4882a593Smuzhiyun return;
1114*4882a593Smuzhiyun }
1115*4882a593Smuzhiyun
1116*4882a593Smuzhiyun rk3528_cru_base = reg_base;
1117*4882a593Smuzhiyun
1118*4882a593Smuzhiyun ctx = rockchip_clk_init(np, reg_base, CLK_NR_CLKS);
1119*4882a593Smuzhiyun if (IS_ERR(ctx)) {
1120*4882a593Smuzhiyun pr_err("%s: rockchip clk init failed\n", __func__);
1121*4882a593Smuzhiyun iounmap(reg_base);
1122*4882a593Smuzhiyun return;
1123*4882a593Smuzhiyun }
1124*4882a593Smuzhiyun clks = ctx->clk_data.clks;
1125*4882a593Smuzhiyun
1126*4882a593Smuzhiyun rockchip_clk_register_plls(ctx, rk3528_pll_clks,
1127*4882a593Smuzhiyun ARRAY_SIZE(rk3528_pll_clks),
1128*4882a593Smuzhiyun RK3528_GRF_SOC_STATUS0);
1129*4882a593Smuzhiyun
1130*4882a593Smuzhiyun rockchip_clk_register_armclk(ctx, ARMCLK, "armclk",
1131*4882a593Smuzhiyun 2, clks[PLL_APLL], clks[PLL_GPLL],
1132*4882a593Smuzhiyun &rk3528_cpuclk_data, rk3528_cpuclk_rates,
1133*4882a593Smuzhiyun ARRAY_SIZE(rk3528_cpuclk_rates));
1134*4882a593Smuzhiyun rockchip_clk_register_branches(ctx, rk3528_clk_branches,
1135*4882a593Smuzhiyun ARRAY_SIZE(rk3528_clk_branches));
1136*4882a593Smuzhiyun
1137*4882a593Smuzhiyun rockchip_register_softrst(np, 47, reg_base + RK3528_SOFTRST_CON(0),
1138*4882a593Smuzhiyun ROCKCHIP_SOFTRST_HIWORD_MASK);
1139*4882a593Smuzhiyun rockchip_register_restart_notifier(ctx, RK3528_GLB_SRST_FST, NULL);
1140*4882a593Smuzhiyun
1141*4882a593Smuzhiyun rockchip_clk_of_add_provider(np, ctx);
1142*4882a593Smuzhiyun
1143*4882a593Smuzhiyun if (!rk_dump_cru)
1144*4882a593Smuzhiyun rk_dump_cru = rk3528_dump_cru;
1145*4882a593Smuzhiyun
1146*4882a593Smuzhiyun }
1147*4882a593Smuzhiyun
1148*4882a593Smuzhiyun CLK_OF_DECLARE(rk3528_cru, "rockchip,rk3528-cru", rk3528_clk_init);
1149*4882a593Smuzhiyun
rk3528_grf_clk_init(struct device_node * np)1150*4882a593Smuzhiyun static void __init rk3528_grf_clk_init(struct device_node *np)
1151*4882a593Smuzhiyun {
1152*4882a593Smuzhiyun struct rockchip_clk_provider *ctx;
1153*4882a593Smuzhiyun void __iomem *reg_base;
1154*4882a593Smuzhiyun
1155*4882a593Smuzhiyun reg_base = of_iomap(of_get_parent(np), 0);
1156*4882a593Smuzhiyun if (!reg_base) {
1157*4882a593Smuzhiyun pr_err("%s: could not map cru grf region\n", __func__);
1158*4882a593Smuzhiyun return;
1159*4882a593Smuzhiyun }
1160*4882a593Smuzhiyun
1161*4882a593Smuzhiyun ctx = rockchip_clk_init(np, reg_base, CLK_NR_GRF_CLKS);
1162*4882a593Smuzhiyun if (IS_ERR(ctx)) {
1163*4882a593Smuzhiyun pr_err("%s: rockchip grf clk init failed\n", __func__);
1164*4882a593Smuzhiyun return;
1165*4882a593Smuzhiyun }
1166*4882a593Smuzhiyun
1167*4882a593Smuzhiyun rockchip_clk_register_branches(ctx, rk3528_grf_clk_branches,
1168*4882a593Smuzhiyun ARRAY_SIZE(rk3528_grf_clk_branches));
1169*4882a593Smuzhiyun
1170*4882a593Smuzhiyun rockchip_clk_of_add_provider(np, ctx);
1171*4882a593Smuzhiyun }
1172*4882a593Smuzhiyun
1173*4882a593Smuzhiyun CLK_OF_DECLARE(rk3528_grf_cru, "rockchip,rk3528-grf-cru", rk3528_grf_clk_init);
1174*4882a593Smuzhiyun
1175