xref: /linux/drivers/clk/rockchip/clk-rv1103b.c (revision 0fc8f6200d2313278fbf4539bbab74677c685531)
1*3e65e426SFabio Estevam // SPDX-License-Identifier: GPL-2.0
2*3e65e426SFabio Estevam /*
3*3e65e426SFabio Estevam  * Copyright (c) 2024 Rockchip Electronics Co. Ltd.
4*3e65e426SFabio Estevam  * Author: Elaine Zhang <zhangqing@rock-chips.com>
5*3e65e426SFabio Estevam  */
6*3e65e426SFabio Estevam 
7*3e65e426SFabio Estevam #include <linux/clk-provider.h>
8*3e65e426SFabio Estevam #include <linux/of.h>
9*3e65e426SFabio Estevam #include <linux/of_address.h>
10*3e65e426SFabio Estevam #include <dt-bindings/clock/rockchip,rv1103b-cru.h>
11*3e65e426SFabio Estevam #include "clk.h"
12*3e65e426SFabio Estevam 
13*3e65e426SFabio Estevam #define RV1103B_GRF_SOC_STATUS0		0x10
14*3e65e426SFabio Estevam #define RV1103B_FRAC_MAX_PRATE		1200000000
15*3e65e426SFabio Estevam #define PVTPLL_SRC_SEL_PVTPLL		(BIT(0) | BIT(16))
16*3e65e426SFabio Estevam 
17*3e65e426SFabio Estevam enum rv1103b_plls {
18*3e65e426SFabio Estevam 	dpll,
19*3e65e426SFabio Estevam 	gpll,
20*3e65e426SFabio Estevam };
21*3e65e426SFabio Estevam 
22*3e65e426SFabio Estevam static struct rockchip_pll_rate_table rv1103b_pll_rates[] = {
23*3e65e426SFabio Estevam 	/* _mhz, _refdiv, _fbdiv, _postdiv1, _postdiv2, _dsmpd, _frac */
24*3e65e426SFabio Estevam 	RK3036_PLL_RATE(1200000000, 1, 100, 2, 1, 1, 0),
25*3e65e426SFabio Estevam 	RK3036_PLL_RATE(1188000000, 1, 99, 2, 1, 1, 0),
26*3e65e426SFabio Estevam 	RK3036_PLL_RATE(1000000000, 3, 250, 2, 1, 1, 0),
27*3e65e426SFabio Estevam 	{ /* sentinel */ },
28*3e65e426SFabio Estevam };
29*3e65e426SFabio Estevam 
30*3e65e426SFabio Estevam #define RV1103B_DIV_ACLK_CORE_MASK	0x1f
31*3e65e426SFabio Estevam #define RV1103B_DIV_ACLK_CORE_SHIFT	0
32*3e65e426SFabio Estevam #define RV1103B_DIV_PCLK_DBG_MASK	0x1f
33*3e65e426SFabio Estevam #define RV1103B_DIV_PCLK_DBG_SHIFT	8
34*3e65e426SFabio Estevam 
35*3e65e426SFabio Estevam #define RV1103B_CLKSEL0(_aclk_core)						\
36*3e65e426SFabio Estevam {										\
37*3e65e426SFabio Estevam 	.reg = RV1103B_CORECLKSEL_CON(2),					\
38*3e65e426SFabio Estevam 	.val = HIWORD_UPDATE(_aclk_core - 1, RV1103B_DIV_ACLK_CORE_MASK,	\
39*3e65e426SFabio Estevam 			     RV1103B_DIV_ACLK_CORE_SHIFT),			\
40*3e65e426SFabio Estevam }
41*3e65e426SFabio Estevam 
42*3e65e426SFabio Estevam #define RV1103B_CLKSEL1(_pclk_dbg)						\
43*3e65e426SFabio Estevam {										\
44*3e65e426SFabio Estevam 	.reg = RV1103B_CORECLKSEL_CON(2),					\
45*3e65e426SFabio Estevam 	.val = HIWORD_UPDATE(_pclk_dbg - 1, RV1103B_DIV_PCLK_DBG_MASK,		\
46*3e65e426SFabio Estevam 			     RV1103B_DIV_PCLK_DBG_SHIFT),			\
47*3e65e426SFabio Estevam }
48*3e65e426SFabio Estevam 
49*3e65e426SFabio Estevam #define RV1103B_CPUCLK_RATE(_prate, _aclk_core, _pclk_dbg)			\
50*3e65e426SFabio Estevam {										\
51*3e65e426SFabio Estevam 	.prate = _prate,							\
52*3e65e426SFabio Estevam 	.divs = {								\
53*3e65e426SFabio Estevam 		RV1103B_CLKSEL0(_aclk_core),					\
54*3e65e426SFabio Estevam 		RV1103B_CLKSEL1(_pclk_dbg),					\
55*3e65e426SFabio Estevam 	},									\
56*3e65e426SFabio Estevam }
57*3e65e426SFabio Estevam 
58*3e65e426SFabio Estevam static struct rockchip_cpuclk_rate_table rv1103b_cpuclk_rates[] __initdata = {
59*3e65e426SFabio Estevam 	RV1103B_CPUCLK_RATE(1608000000, 4, 10),
60*3e65e426SFabio Estevam 	RV1103B_CPUCLK_RATE(1512000000, 4, 10),
61*3e65e426SFabio Estevam 	RV1103B_CPUCLK_RATE(1416000000, 4, 10),
62*3e65e426SFabio Estevam 	RV1103B_CPUCLK_RATE(1296000000, 3, 10),
63*3e65e426SFabio Estevam 	RV1103B_CPUCLK_RATE(1200000000, 3, 10),
64*3e65e426SFabio Estevam 	RV1103B_CPUCLK_RATE(1188000000, 3, 8),
65*3e65e426SFabio Estevam 	RV1103B_CPUCLK_RATE(1104000000, 2, 8),
66*3e65e426SFabio Estevam 	RV1103B_CPUCLK_RATE(1008000000, 2, 8),
67*3e65e426SFabio Estevam 	RV1103B_CPUCLK_RATE(816000000, 2, 6),
68*3e65e426SFabio Estevam 	RV1103B_CPUCLK_RATE(600000000, 2, 4),
69*3e65e426SFabio Estevam 	RV1103B_CPUCLK_RATE(594000000, 2, 4),
70*3e65e426SFabio Estevam 	RV1103B_CPUCLK_RATE(408000000, 1, 3),
71*3e65e426SFabio Estevam 	RV1103B_CPUCLK_RATE(396000000, 1, 3),
72*3e65e426SFabio Estevam };
73*3e65e426SFabio Estevam 
74*3e65e426SFabio Estevam PNAME(mux_pll_p)		= { "xin24m" };
75*3e65e426SFabio Estevam PNAME(mux_200m_100m_p)		= { "clk_gpll_div6", "clk_gpll_div12" };
76*3e65e426SFabio Estevam PNAME(mux_gpll_24m_p)		= { "gpll", "xin24m" };
77*3e65e426SFabio Estevam PNAME(mux_480m_400m_300m_200m_p) = { "clk_gpll_div2p5", "clk_gpll_div3", "clk_gpll_div4", "clk_gpll_div6" };
78*3e65e426SFabio Estevam PNAME(mux_480m_400m_300m_p)	= { "clk_gpll_div2p5", "clk_gpll_div3", "clk_gpll_div4" };
79*3e65e426SFabio Estevam PNAME(mux_300m_200m_p)		= { "clk_gpll_div4", "clk_gpll_div6" };
80*3e65e426SFabio Estevam PNAME(mux_600m_480m_400m_p)	= { "clk_gpll_div2", "clk_gpll_div2p5", "clk_gpll_div3" };
81*3e65e426SFabio Estevam PNAME(mux_400m_300m_p)		= { "clk_gpll_div3", "clk_gpll_div4" };
82*3e65e426SFabio Estevam PNAME(mux_100m_24m_p)		= { "clk_gpll_div12", "xin24m" };
83*3e65e426SFabio Estevam PNAME(mux_200m_24m_p)		= { "clk_gpll_div6", "xin24m" };
84*3e65e426SFabio Estevam PNAME(mux_200m_100m_50m_24m_p)	= { "clk_gpll_div6", "clk_gpll_div12", "clk_gpll_div24", "xin24m" };
85*3e65e426SFabio Estevam PNAME(mux_300m_200m_100m_p)	= { "clk_gpll_div4", "clk_gpll_div6", "clk_gpll_div12" };
86*3e65e426SFabio Estevam PNAME(sclk_uart0_src_p)		= { "clk_uart0_src", "clk_uart0_frac", "xin24m" };
87*3e65e426SFabio Estevam PNAME(sclk_uart1_src_p)		= { "clk_uart1_src", "clk_uart1_frac", "xin24m" };
88*3e65e426SFabio Estevam PNAME(sclk_uart2_src_p)		= { "clk_uart2_src", "clk_uart2_frac", "xin24m" };
89*3e65e426SFabio Estevam PNAME(mclk_sai_src_p)		= { "clk_sai_src", "clk_sai_frac", "mclk_sai_from_io", "xin_osc0_half" };
90*3e65e426SFabio Estevam PNAME(clk_freq_pwm0_src_p)	= { "sclk_sai_from_io", "mclk_sai_from_io", "clk_testout_out" };
91*3e65e426SFabio Estevam PNAME(clk_counter_pwm0_src_p)	= { "sclk_sai_from_io", "mclk_sai_from_io", "clk_testout_out" };
92*3e65e426SFabio Estevam PNAME(clk_mipi0_out2io_p)	= { "clk_ref_mipi0", "xin24m" };
93*3e65e426SFabio Estevam PNAME(clk_mipi1_out2io_p)	= { "clk_ref_mipi1", "xin24m" };
94*3e65e426SFabio Estevam PNAME(mclk_sai_out2io_p)	= { "mclk_sai_src", "xin_osc0_half" };
95*3e65e426SFabio Estevam PNAME(aclk_npu_root_p)		= { "clk_npu_src", "clk_npu_pvtpll" };
96*3e65e426SFabio Estevam PNAME(clk_core_vepu_p)		= { "clk_vepu_src", "clk_vepu_pvtpll" };
97*3e65e426SFabio Estevam PNAME(lsclk_vi_root_p)		= { "clk_gpll_div6", "lsclk_vi_100m" };
98*3e65e426SFabio Estevam PNAME(clk_core_isp_p)		= { "clk_isp_src", "clk_isp_pvtpll_src" };
99*3e65e426SFabio Estevam PNAME(lsclk_pmu_root_p)		= { "xin24m", "clk_rc_osc_io" };
100*3e65e426SFabio Estevam PNAME(xin_rc_div_p)		= { "xin24m", "clk_rc_osc_io" };
101*3e65e426SFabio Estevam PNAME(clk_32k_p)		= { "xin_rc_div", "clk_32k_rtc", "clk_32k_io" };
102*3e65e426SFabio Estevam PNAME(dbclk_pmu_gpio0_p)	= { "xin24m", "clk_32k" };
103*3e65e426SFabio Estevam PNAME(sclk_sfc_2x_pmu1_p)	= { "clk_gpll_div12", "clk_rc_osc_io" };
104*3e65e426SFabio Estevam PNAME(mux_armclk_p)		= { "armclk_gpll", "clk_core_pvtpll" };
105*3e65e426SFabio Estevam 
106*3e65e426SFabio Estevam static struct rockchip_pll_clock rv1103b_pll_clks[] __initdata = {
107*3e65e426SFabio Estevam 	[dpll] = PLL(pll_rk3328, PLL_DPLL, "dpll", mux_pll_p,
108*3e65e426SFabio Estevam 		     CLK_IS_CRITICAL, RV1103B_PLL_CON(16),
109*3e65e426SFabio Estevam 		     RV1103B_MODE_CON, 0, 10, 0, rv1103b_pll_rates),
110*3e65e426SFabio Estevam 	[gpll] = PLL(pll_rk3328, PLL_GPLL, "gpll", mux_pll_p,
111*3e65e426SFabio Estevam 		     CLK_IS_CRITICAL, RV1103B_PLL_CON(24),
112*3e65e426SFabio Estevam 		     RV1103B_MODE_CON, 0, 10, 0, rv1103b_pll_rates),
113*3e65e426SFabio Estevam };
114*3e65e426SFabio Estevam 
115*3e65e426SFabio Estevam #define MFLAGS CLK_MUX_HIWORD_MASK
116*3e65e426SFabio Estevam #define DFLAGS CLK_DIVIDER_HIWORD_MASK
117*3e65e426SFabio Estevam #define GFLAGS (CLK_GATE_HIWORD_MASK | CLK_GATE_SET_TO_DISABLE)
118*3e65e426SFabio Estevam 
119*3e65e426SFabio Estevam static struct rockchip_clk_branch rv1103b_clk_uart0_fracmux __initdata =
120*3e65e426SFabio Estevam 	MUX(SCLK_UART0_SRC, "sclk_uart0_src", sclk_uart0_src_p, CLK_SET_RATE_PARENT,
121*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(32), 8, 2, MFLAGS);
122*3e65e426SFabio Estevam 
123*3e65e426SFabio Estevam static struct rockchip_clk_branch rv1103b_clk_uart1_fracmux __initdata =
124*3e65e426SFabio Estevam 	MUX(SCLK_UART1_SRC, "sclk_uart1_src", sclk_uart1_src_p, CLK_SET_RATE_PARENT,
125*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(32), 10, 2, MFLAGS);
126*3e65e426SFabio Estevam 
127*3e65e426SFabio Estevam static struct rockchip_clk_branch rv1103b_clk_uart2_fracmux __initdata =
128*3e65e426SFabio Estevam 	MUX(SCLK_UART2_SRC, "sclk_uart2_src", sclk_uart2_src_p, CLK_SET_RATE_PARENT,
129*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(32), 12, 2, MFLAGS);
130*3e65e426SFabio Estevam 
131*3e65e426SFabio Estevam static struct rockchip_clk_branch rv1103b_rcdiv_pmu_fracmux __initdata =
132*3e65e426SFabio Estevam 	MUX(CLK_32K, "clk_32k", clk_32k_p, CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
133*3e65e426SFabio Estevam 			RK3568_PMU_CLKSEL_CON(0), 0, 2, MFLAGS);
134*3e65e426SFabio Estevam 
135*3e65e426SFabio Estevam static struct rockchip_clk_branch rv1103b_clk_branches[] __initdata = {
136*3e65e426SFabio Estevam 
137*3e65e426SFabio Estevam 	/*       Clock Definition       */
138*3e65e426SFabio Estevam 	FACTOR(XIN_OSC0_HALF, "xin_osc0_half", "xin24m", 0, 1, 2),
139*3e65e426SFabio Estevam 
140*3e65e426SFabio Estevam 	COMPOSITE_NOGATE(0, "armclk_gpll", mux_gpll_24m_p, CLK_IS_CRITICAL,
141*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(37), 12, 1, MFLAGS, 13, 3, DFLAGS),
142*3e65e426SFabio Estevam 
143*3e65e426SFabio Estevam 	/* pd_top */
144*3e65e426SFabio Estevam 	COMPOSITE_NOMUX(CLK_GPLL_DIV24, "clk_gpll_div24", "gpll", 0,
145*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(0), 0, 5, DFLAGS,
146*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(0), 0, GFLAGS),
147*3e65e426SFabio Estevam 	COMPOSITE_NOMUX(CLK_GPLL_DIV12, "clk_gpll_div12", "gpll", 0,
148*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(0), 5, 5, DFLAGS,
149*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(0), 1, GFLAGS),
150*3e65e426SFabio Estevam 	COMPOSITE_NOMUX(CLK_GPLL_DIV6, "clk_gpll_div6", "gpll", 0,
151*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(1), 0, 5, DFLAGS,
152*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(0), 3, GFLAGS),
153*3e65e426SFabio Estevam 	COMPOSITE_NOMUX(CLK_GPLL_DIV4, "clk_gpll_div4", "gpll", 0,
154*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(1), 10, 5, DFLAGS,
155*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(0), 5, GFLAGS),
156*3e65e426SFabio Estevam 	COMPOSITE_NOMUX(CLK_GPLL_DIV3, "clk_gpll_div3", "gpll", 0,
157*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(2), 0, 5, DFLAGS,
158*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(0), 7, GFLAGS),
159*3e65e426SFabio Estevam 	COMPOSITE_NOMUX_HALFDIV(CLK_GPLL_DIV2P5, "clk_gpll_div2p5", "gpll", 0,
160*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(2), 5, 5, DFLAGS,
161*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(0), 8, GFLAGS),
162*3e65e426SFabio Estevam 	COMPOSITE_NOMUX(CLK_GPLL_DIV2, "clk_gpll_div2", "gpll", 0,
163*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(2), 10, 5, DFLAGS,
164*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(0), 9, GFLAGS),
165*3e65e426SFabio Estevam 	COMPOSITE_NOMUX(CLK_UART0_SRC, "clk_uart0_src", "gpll", 0,
166*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(5), 0, 5, DFLAGS,
167*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(1), 0, GFLAGS),
168*3e65e426SFabio Estevam 	COMPOSITE_NOMUX(CLK_UART1_SRC, "clk_uart1_src", "gpll", 0,
169*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(5), 5, 5, DFLAGS,
170*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(1), 1, GFLAGS),
171*3e65e426SFabio Estevam 	COMPOSITE_NOMUX(CLK_UART2_SRC, "clk_uart2_src", "gpll", 0,
172*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(5), 10, 5, DFLAGS,
173*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(1), 2, GFLAGS),
174*3e65e426SFabio Estevam 	COMPOSITE_FRACMUX(CLK_UART0_FRAC, "clk_uart0_frac", "clk_uart0_src", 0,
175*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(10), 0,
176*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(1), 6, GFLAGS,
177*3e65e426SFabio Estevam 			&rv1103b_clk_uart0_fracmux),
178*3e65e426SFabio Estevam 	COMPOSITE_FRACMUX(CLK_UART1_FRAC, "clk_uart1_frac", "clk_uart1_src", 0,
179*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(11), 0,
180*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(1), 7, GFLAGS,
181*3e65e426SFabio Estevam 			&rv1103b_clk_uart1_fracmux),
182*3e65e426SFabio Estevam 	COMPOSITE_FRACMUX(CLK_UART2_FRAC, "clk_uart2_frac", "clk_uart2_src", 0,
183*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(12), 0,
184*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(1), 8, GFLAGS,
185*3e65e426SFabio Estevam 			&rv1103b_clk_uart2_fracmux),
186*3e65e426SFabio Estevam 	GATE(SCLK_UART0, "sclk_uart0", "sclk_uart0_src", 0,
187*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(3), 3, GFLAGS),
188*3e65e426SFabio Estevam 	GATE(SCLK_UART1, "sclk_uart1", "sclk_uart1_src", 0,
189*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(3), 4, GFLAGS),
190*3e65e426SFabio Estevam 	GATE(SCLK_UART2, "sclk_uart2", "sclk_uart2_src", 0,
191*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(3), 8, GFLAGS),
192*3e65e426SFabio Estevam 
193*3e65e426SFabio Estevam 	COMPOSITE_NOMUX(CLK_SAI_SRC, "clk_sai_src", "gpll", 0,
194*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(20), 0, 5, DFLAGS,
195*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(1), 12, GFLAGS),
196*3e65e426SFabio Estevam 	MUX(MCLK_SAI_SRC, "mclk_sai_src", mclk_sai_src_p, CLK_SET_RATE_PARENT,
197*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(35), 10, 2, MFLAGS),
198*3e65e426SFabio Estevam 	GATE(MCLK_SAI, "mclk_sai", "mclk_sai_src", 0,
199*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(5), 5, GFLAGS),
200*3e65e426SFabio Estevam 
201*3e65e426SFabio Estevam 	COMPOSITE_NODIV(LSCLK_NPU_SRC, "lsclk_npu_src", mux_200m_100m_p, CLK_IS_CRITICAL,
202*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(30), 0, 1, MFLAGS,
203*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(2), 0, GFLAGS),
204*3e65e426SFabio Estevam 	COMPOSITE(CLK_NPU_SRC, "clk_npu_src", mux_gpll_24m_p, 0,
205*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(37), 0, 1, MFLAGS, 1, 2, DFLAGS,
206*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(5), 12, GFLAGS),
207*3e65e426SFabio Estevam 	COMPOSITE_NODIV(ACLK_VEPU_SRC, "aclk_vepu_src", mux_480m_400m_300m_200m_p, 0,
208*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(30), 8, 2, MFLAGS,
209*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(2), 4, GFLAGS),
210*3e65e426SFabio Estevam 	COMPOSITE(CLK_VEPU_SRC, "clk_vepu_src", mux_gpll_24m_p, 0,
211*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(37), 4, 1, MFLAGS, 5, 2, DFLAGS,
212*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(5), 13, GFLAGS),
213*3e65e426SFabio Estevam 	COMPOSITE_NODIV(ACLK_VI_SRC, "aclk_vi_src", mux_480m_400m_300m_p, CLK_IS_CRITICAL,
214*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(30), 12, 2, MFLAGS,
215*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(2), 8, GFLAGS),
216*3e65e426SFabio Estevam 	COMPOSITE(CLK_ISP_SRC, "clk_isp_src", mux_gpll_24m_p, 0,
217*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(37), 8, 1, MFLAGS, 9, 2, DFLAGS,
218*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(5), 14, GFLAGS),
219*3e65e426SFabio Estevam 	COMPOSITE_NODIV(DCLK_VICAP, "dclk_vicap", mux_300m_200m_p, 0,
220*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(30), 14, 1, MFLAGS,
221*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(2), 9, GFLAGS),
222*3e65e426SFabio Estevam 	COMPOSITE(CCLK_EMMC, "cclk_emmc", mux_gpll_24m_p, 0,
223*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(31), 15, 1, MFLAGS, 0, 8, DFLAGS,
224*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(2), 10, GFLAGS),
225*3e65e426SFabio Estevam 	COMPOSITE(CCLK_SDMMC0, "cclk_sdmmc0", mux_gpll_24m_p, 0,
226*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(32), 15, 1, MFLAGS, 0, 8, DFLAGS,
227*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(2), 11, GFLAGS),
228*3e65e426SFabio Estevam 	COMPOSITE(SCLK_SFC_2X, "sclk_sfc_2x", mux_gpll_24m_p, 0,
229*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(33), 15, 1, MFLAGS, 0, 8, DFLAGS,
230*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(2), 12, GFLAGS),
231*3e65e426SFabio Estevam 	COMPOSITE_NODIV(LSCLK_PERI_SRC, "lsclk_peri_src", mux_300m_200m_p, CLK_IS_CRITICAL,
232*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(31), 9, 1, MFLAGS,
233*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(3), 0, GFLAGS),
234*3e65e426SFabio Estevam 	COMPOSITE_NODIV(ACLK_PERI_SRC, "aclk_peri_src", mux_600m_480m_400m_p, CLK_IS_CRITICAL,
235*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(31), 10, 2, MFLAGS,
236*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(3), 1, GFLAGS),
237*3e65e426SFabio Estevam 	COMPOSITE_NODIV(HCLK_HPMCU, "hclk_hpmcu", mux_400m_300m_p, 0,
238*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(31), 12, 1, MFLAGS,
239*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(3), 2, GFLAGS),
240*3e65e426SFabio Estevam 		COMPOSITE_NODIV(CLK_I2C_PMU, "clk_i2c_pmu", mux_100m_24m_p, 0,
241*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(34), 0, 1, MFLAGS,
242*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(4), 0, GFLAGS),
243*3e65e426SFabio Estevam 	COMPOSITE_NODIV(CLK_I2C_PERI, "clk_i2c_peri", mux_200m_24m_p, 0,
244*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(34), 1, 1, MFLAGS,
245*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(4), 4, GFLAGS),
246*3e65e426SFabio Estevam 	COMPOSITE_NODIV(CLK_SPI0, "clk_spi0", mux_200m_100m_50m_24m_p, 0,
247*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(34), 2, 2, MFLAGS,
248*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(4), 5, GFLAGS),
249*3e65e426SFabio Estevam 	COMPOSITE_NODIV(CLK_PWM0_SRC, "clk_pwm0_src", mux_100m_24m_p, 0,
250*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(34), 12, 1, MFLAGS,
251*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(4), 10, GFLAGS),
252*3e65e426SFabio Estevam 	COMPOSITE_NODIV(CLK_PWM1, "clk_pwm1", mux_100m_24m_p, 0,
253*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(34), 13, 1, MFLAGS,
254*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(4), 11, GFLAGS),
255*3e65e426SFabio Estevam 	COMPOSITE_NODIV(CLK_PWM2, "clk_pwm2", mux_100m_24m_p, 0,
256*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(34), 14, 1, MFLAGS,
257*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(4), 12, GFLAGS),
258*3e65e426SFabio Estevam 	COMPOSITE_NODIV(DCLK_DECOM_SRC, "dclk_decom_src", mux_480m_400m_300m_p, 0,
259*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(35), 0, 2, MFLAGS,
260*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(5), 0, GFLAGS),
261*3e65e426SFabio Estevam 	COMPOSITE(CCLK_SDMMC1, "cclk_sdmmc1", mux_gpll_24m_p, 0,
262*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(36), 15, 1, MFLAGS, 0, 8, DFLAGS,
263*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(5), 1, GFLAGS),
264*3e65e426SFabio Estevam 	COMPOSITE_NODIV(CLK_CORE_CRYPTO, "clk_core_crypto", mux_300m_200m_100m_p, 0,
265*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(35), 2, 2, MFLAGS,
266*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(5), 2, GFLAGS),
267*3e65e426SFabio Estevam 	COMPOSITE_NODIV(CLK_PKA_CRYPTO, "clk_pka_crypto", mux_300m_200m_100m_p, 0,
268*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(35), 4, 2, MFLAGS,
269*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(5), 3, GFLAGS),
270*3e65e426SFabio Estevam 	COMPOSITE_NODIV(CLK_CORE_RGA, "clk_core_rga", mux_400m_300m_p, 0,
271*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(35), 8, 1, MFLAGS,
272*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(5), 4, GFLAGS),
273*3e65e426SFabio Estevam 
274*3e65e426SFabio Estevam 	GATE(PCLK_TOP_ROOT, "pclk_top_root", "clk_gpll_div12", CLK_IS_CRITICAL,
275*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(6), 0, GFLAGS),
276*3e65e426SFabio Estevam 	COMPOSITE_NOMUX(CLK_REF_MIPI0, "clk_ref_mipi0", "clk_gpll_div2", 0,
277*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(40), 0, 5, DFLAGS,
278*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(6), 3, GFLAGS),
279*3e65e426SFabio Estevam 	COMPOSITE_NODIV(CLK_MIPI0_OUT2IO, "clk_mipi0_out2io", clk_mipi0_out2io_p, CLK_SET_RATE_PARENT,
280*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(40), 6, 1, MFLAGS,
281*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(6), 4, GFLAGS),
282*3e65e426SFabio Estevam 	COMPOSITE_NOMUX(CLK_REF_MIPI1, "clk_ref_mipi1", "clk_gpll_div2", 0,
283*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(40), 8, 5, DFLAGS,
284*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(6), 5, GFLAGS),
285*3e65e426SFabio Estevam 	COMPOSITE_NODIV(CLK_MIPI1_OUT2IO, "clk_mipi1_out2io", clk_mipi1_out2io_p, CLK_SET_RATE_PARENT,
286*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(40), 14, 1, MFLAGS,
287*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(6), 6, GFLAGS),
288*3e65e426SFabio Estevam 	COMPOSITE(MCLK_SAI_OUT2IO, "mclk_sai_out2io", mclk_sai_out2io_p, 0,
289*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(41), 7, 1, MFLAGS, 13, 3, DFLAGS,
290*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(6), 9, GFLAGS),
291*3e65e426SFabio Estevam 
292*3e65e426SFabio Estevam 	/* pd_vpu */
293*3e65e426SFabio Estevam 	COMPOSITE_NODIV(ACLK_NPU_ROOT, "aclk_npu_root", aclk_npu_root_p, CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
294*3e65e426SFabio Estevam 			RV1103B_NPUCLKSEL_CON(0), 1, 1, MFLAGS,
295*3e65e426SFabio Estevam 			RV1103B_NPUCLKGATE_CON(0), 1, GFLAGS),
296*3e65e426SFabio Estevam 	GATE(HCLK_RKNN, "hclk_rknn", "lsclk_npu_src", 0,
297*3e65e426SFabio Estevam 			RV1103B_NPUCLKGATE_CON(0), 4, GFLAGS),
298*3e65e426SFabio Estevam 	GATE(ACLK_RKNN, "aclk_rknn", "aclk_npu_root", 0,
299*3e65e426SFabio Estevam 			RV1103B_NPUCLKGATE_CON(0), 5, GFLAGS),
300*3e65e426SFabio Estevam 
301*3e65e426SFabio Estevam 	/* pd_vepu */
302*3e65e426SFabio Estevam 	COMPOSITE_NOMUX(LSCLK_VEPU_ROOT, "lsclk_vepu_root", "aclk_vepu_src", CLK_IS_CRITICAL,
303*3e65e426SFabio Estevam 			RV1103B_VEPUCLKSEL_CON(0), 2, 2, DFLAGS,
304*3e65e426SFabio Estevam 			RV1103B_VEPUCLKGATE_CON(0), 0, GFLAGS),
305*3e65e426SFabio Estevam 	GATE(HCLK_VEPU, "hclk_vepu", "lsclk_vepu_root", 0,
306*3e65e426SFabio Estevam 			RV1103B_VEPUCLKGATE_CON(0), 4, GFLAGS),
307*3e65e426SFabio Estevam 	GATE(ACLK_VEPU, "aclk_vepu", "aclk_vepu_src", 0,
308*3e65e426SFabio Estevam 			RV1103B_VEPUCLKGATE_CON(0), 5, GFLAGS),
309*3e65e426SFabio Estevam 	COMPOSITE_NODIV(CLK_CORE_VEPU, "clk_core_vepu", clk_core_vepu_p, 0,
310*3e65e426SFabio Estevam 			RV1103B_VEPUCLKSEL_CON(0), 1, 1, MFLAGS,
311*3e65e426SFabio Estevam 			RV1103B_VEPUCLKGATE_CON(0), 6, GFLAGS),
312*3e65e426SFabio Estevam 	GATE(PCLK_ACODEC, "pclk_acodec", "lsclk_vepu_root", 0,
313*3e65e426SFabio Estevam 			RV1103B_VEPUCLKGATE_CON(0), 13, GFLAGS),
314*3e65e426SFabio Estevam 	GATE(PCLK_USBPHY, "pclk_usbphy", "lsclk_vepu_root", 0,
315*3e65e426SFabio Estevam 			RV1103B_VEPUCLKGATE_CON(0), 14, GFLAGS),
316*3e65e426SFabio Estevam 
317*3e65e426SFabio Estevam 	/* pd_vi */
318*3e65e426SFabio Estevam 	FACTOR(LSCLK_VI_100M, "lsclk_vi_100m", "clk_gpll_div6", 0, 1, 2),
319*3e65e426SFabio Estevam 	COMPOSITE_NODIV(LSCLK_VI_ROOT, "lsclk_vi_root", lsclk_vi_root_p, CLK_IS_CRITICAL,
320*3e65e426SFabio Estevam 			RV1103B_VICLKSEL_CON(0), 3, 1, MFLAGS,
321*3e65e426SFabio Estevam 			RV1103B_VICLKGATE_CON(0), 0, GFLAGS),
322*3e65e426SFabio Estevam 	GATE(HCLK_ISP, "hclk_isp", "lsclk_vi_root", 0,
323*3e65e426SFabio Estevam 			RV1103B_VICLKGATE_CON(0), 4, GFLAGS),
324*3e65e426SFabio Estevam 	GATE(ACLK_ISP, "aclk_isp", "aclk_vi_src", 0,
325*3e65e426SFabio Estevam 			RV1103B_VICLKGATE_CON(0), 5, GFLAGS),
326*3e65e426SFabio Estevam 	COMPOSITE_NODIV(CLK_CORE_ISP, "clk_core_isp", clk_core_isp_p, 0,
327*3e65e426SFabio Estevam 			RV1103B_VICLKSEL_CON(0), 1, 1, MFLAGS,
328*3e65e426SFabio Estevam 			RV1103B_VICLKGATE_CON(0), 6, GFLAGS),
329*3e65e426SFabio Estevam 	GATE(ACLK_VICAP, "aclk_vicap", "aclk_vi_src", 0,
330*3e65e426SFabio Estevam 			RV1103B_VICLKGATE_CON(1), 2, GFLAGS),
331*3e65e426SFabio Estevam 	GATE(HCLK_VICAP, "hclk_vicap", "lsclk_vi_root", 0,
332*3e65e426SFabio Estevam 			RV1103B_VICLKGATE_CON(1), 3, GFLAGS),
333*3e65e426SFabio Estevam 	GATE(ISP0CLK_VICAP, "isp0clk_vicap", "clk_core_isp", 0,
334*3e65e426SFabio Estevam 			RV1103B_VICLKGATE_CON(1), 8, GFLAGS),
335*3e65e426SFabio Estevam 	GATE(PCLK_CSI2HOST0, "pclk_csi2host0", "lsclk_vi_root", 0,
336*3e65e426SFabio Estevam 			RV1103B_VICLKGATE_CON(1), 9, GFLAGS),
337*3e65e426SFabio Estevam 	GATE(PCLK_CSI2HOST1, "pclk_csi2host1", "lsclk_vi_root", 0,
338*3e65e426SFabio Estevam 			RV1103B_VICLKGATE_CON(1), 11, GFLAGS),
339*3e65e426SFabio Estevam 	GATE(HCLK_EMMC, "hclk_emmc", "lsclk_vi_root", 0,
340*3e65e426SFabio Estevam 			RV1103B_VICLKGATE_CON(1), 13, GFLAGS),
341*3e65e426SFabio Estevam 	GATE(HCLK_SFC, "hclk_sfc", "lsclk_vi_root", 0,
342*3e65e426SFabio Estevam 			RV1103B_VICLKGATE_CON(1), 14, GFLAGS),
343*3e65e426SFabio Estevam 	GATE(HCLK_SFC_XIP, "hclk_sfc_xip", "lsclk_vi_root", 0,
344*3e65e426SFabio Estevam 			RV1103B_VICLKGATE_CON(1), 15, GFLAGS),
345*3e65e426SFabio Estevam 	GATE(HCLK_SDMMC0, "hclk_sdmmc0", "lsclk_vi_root", 0,
346*3e65e426SFabio Estevam 			RV1103B_VICLKGATE_CON(2), 0, GFLAGS),
347*3e65e426SFabio Estevam 	GATE(PCLK_CSIPHY, "pclk_csiphy", "lsclk_vi_root", 0,
348*3e65e426SFabio Estevam 			RV1103B_VICLKGATE_CON(2), 2, GFLAGS),
349*3e65e426SFabio Estevam 	GATE(PCLK_GPIO1, "pclk_gpio1", "lsclk_vi_root", 0,
350*3e65e426SFabio Estevam 			RV1103B_VICLKGATE_CON(2), 3, GFLAGS),
351*3e65e426SFabio Estevam 	GATE(DBCLK_GPIO1, "dbclk_gpio1", "xin24m", 0,
352*3e65e426SFabio Estevam 			RV1103B_VICLKGATE_CON(2), 4, GFLAGS),
353*3e65e426SFabio Estevam 
354*3e65e426SFabio Estevam 	/* pd_ddr */
355*3e65e426SFabio Estevam 	GATE(LSCLK_DDR_ROOT, "lsclk_ddr_root", "clk_gpll_div12", CLK_IS_CRITICAL,
356*3e65e426SFabio Estevam 			RV1103B_DDRCLKGATE_CON(0), 0, GFLAGS),
357*3e65e426SFabio Estevam 	GATE(CLK_TIMER_DDRMON, "clk_timer_ddrmon", "xin24m", 0,
358*3e65e426SFabio Estevam 			RV1103B_DDRCLKGATE_CON(0), 4, GFLAGS),
359*3e65e426SFabio Estevam 	FACTOR(0, "sclk_ddr", "dpll", 0, 1, 2),
360*3e65e426SFabio Estevam 
361*3e65e426SFabio Estevam 	/* pd_pmu */
362*3e65e426SFabio Estevam 	COMPOSITE(LSCLK_PMU_ROOT, "lsclk_pmu_root", lsclk_pmu_root_p, CLK_IS_CRITICAL,
363*3e65e426SFabio Estevam 			RV1103B_PMUCLKSEL_CON(2), 4, 1, MFLAGS, 0, 2, DFLAGS,
364*3e65e426SFabio Estevam 			RV1103B_PMUCLKGATE_CON(0), 0, GFLAGS),
365*3e65e426SFabio Estevam 	GATE(PCLK_PMU, "pclk_pmu", "lsclk_pmu_root", CLK_IS_CRITICAL,
366*3e65e426SFabio Estevam 			RV1103B_PMUCLKGATE_CON(0), 2, GFLAGS),
367*3e65e426SFabio Estevam 	MUX(XIN_RC_SRC, "xin_rc_src", xin_rc_div_p, 0,
368*3e65e426SFabio Estevam 			RV1103B_PMUCLKSEL_CON(0), 2, 1, MFLAGS),
369*3e65e426SFabio Estevam 	COMPOSITE_FRACMUX(XIN_RC_DIV, "xin_rc_div", "xin_rc_src", CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
370*3e65e426SFabio Estevam 			RV1103B_PMUCLKSEL_CON(1), 0,
371*3e65e426SFabio Estevam 			RV1103B_PMUCLKGATE_CON(0), 3, GFLAGS,
372*3e65e426SFabio Estevam 			&rv1103b_rcdiv_pmu_fracmux),
373*3e65e426SFabio Estevam 	GATE(PCLK_PMU_GPIO0, "pclk_pmu_gpio0", "lsclk_pmu_root", 0,
374*3e65e426SFabio Estevam 			RV1103B_PMUCLKGATE_CON(0), 4, GFLAGS),
375*3e65e426SFabio Estevam 	COMPOSITE_NODIV(DBCLK_PMU_GPIO0, "dbclk_pmu_gpio0", dbclk_pmu_gpio0_p, 0,
376*3e65e426SFabio Estevam 			RK3568_PMU_CLKSEL_CON(0), 3, 1, MFLAGS,
377*3e65e426SFabio Estevam 			RV1103B_PMUCLKGATE_CON(0), 5, GFLAGS),
378*3e65e426SFabio Estevam 	GATE(PCLK_PWM0, "pclk_pwm0", "lsclk_pmu_root", 0,
379*3e65e426SFabio Estevam 			RV1103B_PMUCLKGATE_CON(2), 0, GFLAGS),
380*3e65e426SFabio Estevam 	GATE(CLK_PWM0, "clk_pwm0", "clk_pwm0_src", 0,
381*3e65e426SFabio Estevam 			RV1103B_PMUCLKGATE_CON(2), 1, GFLAGS),
382*3e65e426SFabio Estevam 	GATE(CLK_OSC_PWM0, "clk_osc_pwm0", "xin24m", 0,
383*3e65e426SFabio Estevam 			RV1103B_PMUCLKGATE_CON(2), 2, GFLAGS),
384*3e65e426SFabio Estevam 	GATE(CLK_RC_PWM0, "clk_rc_pwm0", "clk_32k", 0,
385*3e65e426SFabio Estevam 			RV1103B_PMUCLKGATE_CON(2), 3, GFLAGS),
386*3e65e426SFabio Estevam 	GATE(PCLK_I2C0, "pclk_i2c0", "lsclk_pmu_root", 0,
387*3e65e426SFabio Estevam 			RV1103B_PMUCLKGATE_CON(0), 12, GFLAGS),
388*3e65e426SFabio Estevam 	GATE(CLK_I2C0, "clk_i2c0", "clk_i2c_pmu", 0,
389*3e65e426SFabio Estevam 			RV1103B_PMUCLKGATE_CON(0), 13, GFLAGS),
390*3e65e426SFabio Estevam 	GATE(PCLK_UART0, "pclk_uart0", "lsclk_pmu_root", 0,
391*3e65e426SFabio Estevam 			RV1103B_PMUCLKGATE_CON(0), 14, GFLAGS),
392*3e65e426SFabio Estevam 	GATE(CLK_REFOUT, "clk_refout", "xin24m", 0,
393*3e65e426SFabio Estevam 			RV1103B_PMUCLKGATE_CON(1), 4, GFLAGS),
394*3e65e426SFabio Estevam 	GATE(CLK_PREROLL, "clk_preroll", "lsclk_pmu_root", 0,
395*3e65e426SFabio Estevam 			RV1103B_PMUCLKGATE_CON(1), 6, GFLAGS),
396*3e65e426SFabio Estevam 	GATE(CLK_PREROLL_32K, "clk_preroll_32k", "clk_32k", 0,
397*3e65e426SFabio Estevam 			RV1103B_PMUCLKGATE_CON(1), 7, GFLAGS),
398*3e65e426SFabio Estevam 	GATE(CLK_LPMCU_PMU, "clk_lpmcu_pmu", "lsclk_pmu_root", 0,
399*3e65e426SFabio Estevam 			RV1103B_PMUCLKGATE_CON(2), 12, GFLAGS),
400*3e65e426SFabio Estevam 
401*3e65e426SFabio Estevam 	/* pd_pmu1 */
402*3e65e426SFabio Estevam 	GATE(PCLK_SPI2AHB, "pclk_spi2ahb", "lsclk_pmu_root", 0,
403*3e65e426SFabio Estevam 			RV1103B_PMU1CLKGATE_CON(0), 0, GFLAGS),
404*3e65e426SFabio Estevam 	GATE(HCLK_SPI2AHB, "hclk_spi2ahb", "lsclk_pmu_root", 0,
405*3e65e426SFabio Estevam 			RV1103B_PMU1CLKGATE_CON(0), 1, GFLAGS),
406*3e65e426SFabio Estevam 	GATE(PCLK_WDT_LPMCU, "pclk_wdt_lpmcu", "lsclk_pmu_root", 0,
407*3e65e426SFabio Estevam 			RV1103B_PMU1CLKGATE_CON(0), 9, GFLAGS),
408*3e65e426SFabio Estevam 	GATE(TCLK_WDT_LPMCU, "tclk_wdt_lpmcu", "xin24m", 0,
409*3e65e426SFabio Estevam 			RV1103B_PMU1CLKGATE_CON(0), 10, GFLAGS),
410*3e65e426SFabio Estevam 	GATE(HCLK_SFC_PMU1, "hclk_sfc_pmu1", "lsclk_pmu_root", 0,
411*3e65e426SFabio Estevam 			RV1103B_PMU1CLKGATE_CON(0), 12, GFLAGS),
412*3e65e426SFabio Estevam 	GATE(HCLK_SFC_XIP_PMU1, "hclk_sfc_xip_pmu1", "lsclk_pmu_root", 0,
413*3e65e426SFabio Estevam 			RV1103B_PMU1CLKGATE_CON(0), 13, GFLAGS),
414*3e65e426SFabio Estevam 	COMPOSITE_NODIV(SCLK_SFC_2X_PMU1, "sclk_sfc_2x_pmu1", sclk_sfc_2x_pmu1_p, 0,
415*3e65e426SFabio Estevam 			RV1103B_PMU1CLKSEL_CON(0), 8, 1, MFLAGS,
416*3e65e426SFabio Estevam 			RV1103B_PMU1CLKGATE_CON(0), 14, GFLAGS),
417*3e65e426SFabio Estevam 	GATE(CLK_LPMCU, "clk_lpmcu", "lsclk_pmu_root", 0,
418*3e65e426SFabio Estevam 			RV1103B_PMU1CLKGATE_CON(1), 0, GFLAGS),
419*3e65e426SFabio Estevam 	GATE(CLK_LPMCU_RTC, "clk_lpmcu_rtc", "xin24m", 0,
420*3e65e426SFabio Estevam 			RV1103B_PMU1CLKGATE_CON(1), 4, GFLAGS),
421*3e65e426SFabio Estevam 	GATE(PCLK_LPMCU_MAILBOX, "pclk_lpmcu_mailbox", "lsclk_pmu_root", 0,
422*3e65e426SFabio Estevam 			RV1103B_PMU1CLKGATE_CON(1), 8, GFLAGS),
423*3e65e426SFabio Estevam 
424*3e65e426SFabio Estevam 	/* pd_peri */
425*3e65e426SFabio Estevam 	COMPOSITE_NOMUX(PCLK_PERI_ROOT, "pclk_peri_root", "lsclk_peri_src", CLK_IS_CRITICAL,
426*3e65e426SFabio Estevam 			RV1103B_PERICLKSEL_CON(0), 0, 2, DFLAGS,
427*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(0), 0, GFLAGS),
428*3e65e426SFabio Estevam 	COMPOSITE_NOMUX(PCLK_RTC_ROOT, "pclk_rtc_root", "lsclk_peri_src", CLK_IS_CRITICAL,
429*3e65e426SFabio Estevam 			RV1103B_PERICLKSEL_CON(2), 12, 4, DFLAGS,
430*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(0), 8, GFLAGS),
431*3e65e426SFabio Estevam 	GATE(CLK_TIMER_ROOT, "clk_timer_root", "xin24m", 0,
432*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(0), 1, GFLAGS),
433*3e65e426SFabio Estevam 	GATE(PCLK_TIMER, "pclk_timer", "pclk_peri_root", 0,
434*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(1), 0, GFLAGS),
435*3e65e426SFabio Estevam 	GATE(CLK_TIMER0, "clk_timer0", "clk_timer_root", 0,
436*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(1), 1, GFLAGS),
437*3e65e426SFabio Estevam 	GATE(CLK_TIMER1, "clk_timer1", "clk_timer_root", 0,
438*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(1), 2, GFLAGS),
439*3e65e426SFabio Estevam 	GATE(CLK_TIMER2, "clk_timer2", "clk_timer_root", 0,
440*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(1), 3, GFLAGS),
441*3e65e426SFabio Estevam 	GATE(CLK_TIMER3, "clk_timer3", "clk_timer_root", 0,
442*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(1), 4, GFLAGS),
443*3e65e426SFabio Estevam 	GATE(CLK_TIMER4, "clk_timer4", "clk_timer_root", 0,
444*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(1), 5, GFLAGS),
445*3e65e426SFabio Estevam 	GATE(CLK_TIMER5, "clk_timer5", "clk_timer_root", 0,
446*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(1), 6, GFLAGS),
447*3e65e426SFabio Estevam 	GATE(PCLK_STIMER, "pclk_stimer", "pclk_peri_root", 0,
448*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(1), 7, GFLAGS),
449*3e65e426SFabio Estevam 	GATE(CLK_STIMER0, "clk_stimer0", "clk_timer_root", 0,
450*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(1), 8, GFLAGS),
451*3e65e426SFabio Estevam 	GATE(CLK_STIMER1, "clk_stimer1", "clk_timer_root", 0,
452*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(1), 9, GFLAGS),
453*3e65e426SFabio Estevam 	GATE(PCLK_WDT_NS, "pclk_wdt_ns", "pclk_peri_root", 0,
454*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(2), 0, GFLAGS),
455*3e65e426SFabio Estevam 	GATE(TCLK_WDT_NS, "tclk_wdt_ns", "xin24m", 0,
456*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(2), 1, GFLAGS),
457*3e65e426SFabio Estevam 	GATE(PCLK_WDT_S, "pclk_wdt_s", "pclk_peri_root", 0,
458*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(2), 2, GFLAGS),
459*3e65e426SFabio Estevam 	GATE(TCLK_WDT_S, "tclk_wdt_s", "xin24m", 0,
460*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(2), 3, GFLAGS),
461*3e65e426SFabio Estevam 	GATE(PCLK_WDT_HPMCU, "pclk_wdt_hpmcu", "pclk_peri_root", 0,
462*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(2), 4, GFLAGS),
463*3e65e426SFabio Estevam 	GATE(TCLK_WDT_HPMCU, "tclk_wdt_hpmcu", "xin24m", 0,
464*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(2), 5, GFLAGS),
465*3e65e426SFabio Estevam 	GATE(PCLK_I2C1, "pclk_i2c1", "pclk_peri_root", 0,
466*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(2), 6, GFLAGS),
467*3e65e426SFabio Estevam 	GATE(CLK_I2C1, "clk_i2c1", "clk_i2c_peri", 0,
468*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(2), 7, GFLAGS),
469*3e65e426SFabio Estevam 	GATE(PCLK_I2C2, "pclk_i2c2", "pclk_peri_root", 0,
470*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(2), 8, GFLAGS),
471*3e65e426SFabio Estevam 	GATE(CLK_I2C2, "clk_i2c2", "clk_i2c_peri", 0,
472*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(2), 9, GFLAGS),
473*3e65e426SFabio Estevam 	GATE(PCLK_I2C3, "pclk_i2c3", "pclk_peri_root", 0,
474*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(2), 10, GFLAGS),
475*3e65e426SFabio Estevam 	GATE(CLK_I2C3, "clk_i2c3", "clk_i2c_peri", 0,
476*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(2), 11, GFLAGS),
477*3e65e426SFabio Estevam 	GATE(PCLK_I2C4, "pclk_i2c4", "pclk_peri_root", 0,
478*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(2), 12, GFLAGS),
479*3e65e426SFabio Estevam 	GATE(CLK_I2C4, "clk_i2c4", "clk_i2c_peri", 0,
480*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(2), 13, GFLAGS),
481*3e65e426SFabio Estevam 	GATE(PCLK_SPI0, "pclk_spi0", "pclk_peri_root", 0,
482*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(3), 10, GFLAGS),
483*3e65e426SFabio Estevam 	GATE(PCLK_PWM1, "pclk_pwm1", "pclk_peri_root", 0,
484*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(4), 6, GFLAGS),
485*3e65e426SFabio Estevam 	GATE(CLK_OSC_PWM1, "clk_osc_pwm1", "xin24m", 0,
486*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(4), 8, GFLAGS),
487*3e65e426SFabio Estevam 	GATE(PCLK_PWM2, "pclk_pwm2", "pclk_peri_root", 0,
488*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(4), 12, GFLAGS),
489*3e65e426SFabio Estevam 	GATE(CLK_OSC_PWM2, "clk_osc_pwm2", "xin24m", 0,
490*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(4), 13, GFLAGS),
491*3e65e426SFabio Estevam 	GATE(PCLK_UART2, "pclk_uart2", "pclk_peri_root", 0,
492*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(3), 0, GFLAGS),
493*3e65e426SFabio Estevam 	GATE(PCLK_UART1, "pclk_uart1", "pclk_peri_root", 0,
494*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(3), 2, GFLAGS),
495*3e65e426SFabio Estevam 	GATE(ACLK_RKDMA, "aclk_rkdma", "lsclk_peri_src", 0,
496*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(5), 8, GFLAGS),
497*3e65e426SFabio Estevam 	GATE(PCLK_TSADC, "pclk_tsadc", "pclk_peri_root", 0,
498*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(5), 9, GFLAGS),
499*3e65e426SFabio Estevam 	COMPOSITE_NOMUX(CLK_TSADC, "clk_tsadc", "xin24m", 0,
500*3e65e426SFabio Estevam 			RV1103B_PERICLKSEL_CON(0), 4, 5, DFLAGS,
501*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(5), 10, GFLAGS),
502*3e65e426SFabio Estevam 	COMPOSITE_NOMUX(CLK_TSADC_TSEN, "clk_tsadc_tsen", "xin24m", 0,
503*3e65e426SFabio Estevam 			RV1103B_PERICLKSEL_CON(0), 10, 5, DFLAGS,
504*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(5), 11, GFLAGS),
505*3e65e426SFabio Estevam 	GATE(PCLK_SARADC, "pclk_saradc", "pclk_peri_root", 0,
506*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(5), 12, GFLAGS),
507*3e65e426SFabio Estevam 	COMPOSITE_NOMUX(CLK_SARADC, "clk_saradc", "xin24m", 0,
508*3e65e426SFabio Estevam 			RV1103B_PERICLKSEL_CON(1), 0, 3, DFLAGS,
509*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(5), 13, GFLAGS),
510*3e65e426SFabio Estevam 	GATE(PCLK_GPIO2, "pclk_gpio2", "pclk_peri_root", 0,
511*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(6), 3, GFLAGS),
512*3e65e426SFabio Estevam 	GATE(DBCLK_GPIO2, "dbclk_gpio2", "xin24m", 0,
513*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(6), 4, GFLAGS),
514*3e65e426SFabio Estevam 	GATE(ACLK_USBOTG, "aclk_usbotg", "lsclk_peri_src", 0,
515*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(6), 9, GFLAGS),
516*3e65e426SFabio Estevam 	GATE(CLK_REF_USBOTG, "clk_ref_usbotg", "xin24m", 0,
517*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(6), 10, GFLAGS),
518*3e65e426SFabio Estevam 	GATE(HCLK_SDMMC1, "hclk_sdmmc1", "lsclk_peri_src", 0,
519*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(7), 0, GFLAGS),
520*3e65e426SFabio Estevam 	GATE(HCLK_SAI, "hclk_sai", "lsclk_peri_src", 0,
521*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(7), 1, GFLAGS),
522*3e65e426SFabio Estevam 	GATE(ACLK_CRYPTO, "aclk_crypto", "lsclk_peri_src", 0,
523*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(8), 2, GFLAGS),
524*3e65e426SFabio Estevam 	GATE(HCLK_CRYPTO, "hclk_crypto", "lsclk_peri_src", 0,
525*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(8), 3, GFLAGS),
526*3e65e426SFabio Estevam 	GATE(HCLK_RK_RNG_S, "hclk_rk_rng_s", "lsclk_peri_src", 0,
527*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(8), 5, GFLAGS),
528*3e65e426SFabio Estevam 	GATE(HCLK_RK_RNG_NS, "hclk_rk_rng_ns", "hclk_rk_rng_s", 0,
529*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(8), 4, GFLAGS),
530*3e65e426SFabio Estevam 	GATE(PCLK_OTPC_NS, "pclk_otpc_ns", "pclk_peri_root", 0,
531*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(8), 6, GFLAGS),
532*3e65e426SFabio Estevam 	GATE(CLK_OTPC_ROOT_NS, "clk_otpc_root_ns", "xin24m", 0,
533*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(8), 7, GFLAGS),
534*3e65e426SFabio Estevam 	GATE(CLK_SBPI_OTPC_NS, "clk_sbpi_otpc_ns", "clk_otpc_root_ns", 0,
535*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(8), 8, GFLAGS),
536*3e65e426SFabio Estevam 	COMPOSITE_NOMUX(CLK_USER_OTPC_NS, "clk_user_otpc_ns", "clk_otpc_root_ns", 0,
537*3e65e426SFabio Estevam 			RV1103B_PERICLKSEL_CON(1), 4, 3, DFLAGS,
538*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(8), 9, GFLAGS),
539*3e65e426SFabio Estevam 	GATE(PCLK_OTPC_S, "pclk_otpc_s", "pclk_peri_root", 0,
540*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(8), 10, GFLAGS),
541*3e65e426SFabio Estevam 	GATE(CLK_OTPC_ROOT_S, "clk_otpc_root_s", "xin24m", 0,
542*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(8), 11, GFLAGS),
543*3e65e426SFabio Estevam 	GATE(CLK_SBPI_OTPC_S, "clk_sbpi_otpc_s", "clk_otpc_root_s", 0,
544*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(8), 12, GFLAGS),
545*3e65e426SFabio Estevam 	COMPOSITE_NOMUX(CLK_USER_OTPC_S, "clk_user_otpc_s", "clk_otpc_root_s", 0,
546*3e65e426SFabio Estevam 			RV1103B_PERICLKSEL_CON(1), 8, 3, DFLAGS,
547*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(8), 13, GFLAGS),
548*3e65e426SFabio Estevam 	GATE(PCLK_OTP_MASK, "pclk_otp_mask", "pclk_peri_root", 0,
549*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(8), 15, GFLAGS),
550*3e65e426SFabio Estevam 	GATE(HCLK_RGA, "hclk_rga", "lsclk_peri_src", 0,
551*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(9), 0, GFLAGS),
552*3e65e426SFabio Estevam 	GATE(ACLK_RGA, "aclk_rga", "aclk_peri_src", 0,
553*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(9), 1, GFLAGS),
554*3e65e426SFabio Estevam 	GATE(ACLK_MAC, "aclk_mac", "lsclk_peri_src", 0,
555*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(9), 3, GFLAGS),
556*3e65e426SFabio Estevam 	GATE(PCLK_MAC, "pclk_mac", "pclk_peri_root", 0,
557*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(9), 4, GFLAGS),
558*3e65e426SFabio Estevam 	GATE(CLK_MACPHY, "clk_macphy", "xin24m", 0,
559*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(9), 11, GFLAGS),
560*3e65e426SFabio Estevam 	GATE(ACLK_SPINLOCK, "aclk_spinlock", "lsclk_peri_src", 0,
561*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(10), 0, GFLAGS),
562*3e65e426SFabio Estevam 	GATE(HCLK_CACHE, "hclk_cache", "hclk_hpmcu", 0,
563*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(10), 1, GFLAGS),
564*3e65e426SFabio Estevam 	GATE(PCLK_HPMCU_MAILBOX, "pclk_hpmcu_mailbox", "pclk_peri_root", 0,
565*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(10), 2, GFLAGS),
566*3e65e426SFabio Estevam 	GATE(PCLK_HPMCU_INTMUX, "pclk_hpmcu_intmux", "pclk_peri_root", 0,
567*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(10), 3, GFLAGS),
568*3e65e426SFabio Estevam 	GATE(CLK_HPMCU, "clk_hpmcu", "hclk_hpmcu", 0,
569*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(10), 4, GFLAGS),
570*3e65e426SFabio Estevam 	GATE(CLK_HPMCU_RTC, "clk_hpmcu_rtc", "xin24m", 0,
571*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(10), 8, GFLAGS),
572*3e65e426SFabio Estevam 	GATE(DCLK_DECOM, "dclk_decom", "dclk_decom_src", 0,
573*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(11), 0, GFLAGS),
574*3e65e426SFabio Estevam 	GATE(ACLK_DECOM, "aclk_decom", "aclk_peri_src", 0,
575*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(11), 1, GFLAGS),
576*3e65e426SFabio Estevam 	GATE(PCLK_DECOM, "pclk_decom", "pclk_peri_root", 0,
577*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(11), 2, GFLAGS),
578*3e65e426SFabio Estevam 	GATE(ACLK_SYS_SRAM, "aclk_sys_sram", "lsclk_peri_src", CLK_IS_CRITICAL,
579*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(11), 3, GFLAGS),
580*3e65e426SFabio Estevam 	GATE(PCLK_DMA2DDR, "pclk_dma2ddr", "pclk_peri_root", 0,
581*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(11), 4, GFLAGS),
582*3e65e426SFabio Estevam 	GATE(ACLK_DMA2DDR, "aclk_dma2ddr", "aclk_peri_src", 0,
583*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(11), 5, GFLAGS),
584*3e65e426SFabio Estevam 	GATE(PCLK_DCF, "pclk_dcf", "pclk_peri_root", 0,
585*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(11), 6, GFLAGS),
586*3e65e426SFabio Estevam 	GATE(ACLK_DCF, "aclk_dcf", "lsclk_peri_src", 0,
587*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(11), 7, GFLAGS),
588*3e65e426SFabio Estevam 	COMPOSITE_NOMUX(MCLK_ACODEC_TX, "mclk_acodec_tx", "mclk_sai_src", 0,
589*3e65e426SFabio Estevam 			RV1103B_PERICLKSEL_CON(2), 0, 3, DFLAGS,
590*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(11), 9, GFLAGS),
591*3e65e426SFabio Estevam 	GATE(CLK_REF_USBPHY, "clk_ref_usbphy", "xin24m", 0,
592*3e65e426SFabio Estevam 			RV1103B_PERICLKGATE_CON(11), 12, GFLAGS),
593*3e65e426SFabio Estevam 
594*3e65e426SFabio Estevam 	/* io */
595*3e65e426SFabio Estevam 	COMPOSITE_NODIV(CLK_FREQ_PWM0_SRC, "clk_freq_pwm0_src", clk_freq_pwm0_src_p, 0,
596*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(35), 12, 2, MFLAGS,
597*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(5), 6, GFLAGS),
598*3e65e426SFabio Estevam 	GATE(CLK_FREQ_PWM0, "clk_freq_pwm0", "clk_freq_pwm0_src", 0,
599*3e65e426SFabio Estevam 			RV1103B_PMUCLKGATE_CON(2), 4, GFLAGS),
600*3e65e426SFabio Estevam 	COMPOSITE_NODIV(CLK_COUNTER_PWM0_SRC, "clk_counter_pwm0_src", clk_counter_pwm0_src_p, 0,
601*3e65e426SFabio Estevam 			RV1103B_CLKSEL_CON(35), 14, 2, MFLAGS,
602*3e65e426SFabio Estevam 			RV1103B_CLKGATE_CON(5), 7, GFLAGS),
603*3e65e426SFabio Estevam 	GATE(CLK_COUNTER_PWM0, "clk_counter_pwm0", "clk_counter_pwm0_src", 0,
604*3e65e426SFabio Estevam 			RV1103B_PMUCLKGATE_CON(2), 5, GFLAGS),
605*3e65e426SFabio Estevam 	GATE(SCLK_SPI2AHB, "sclk_spi2ahb", "sclk_spi2ahb_io", 0,
606*3e65e426SFabio Estevam 			RV1103B_PMU1CLKGATE_CON(0), 2, GFLAGS),
607*3e65e426SFabio Estevam 	GATE(CLK_UTMI_USBOTG, "clk_utmi_usbotg", "clk_utmi_usbotg_io", 0,
608*3e65e426SFabio Estevam 			RV1103B_PERICRU_IP_CON, 14, GFLAGS),
609*3e65e426SFabio Estevam };
610*3e65e426SFabio Estevam 
611*3e65e426SFabio Estevam static struct rockchip_clk_branch rv1103b_armclk __initdata =
612*3e65e426SFabio Estevam 	MUX(ARMCLK, "armclk", mux_armclk_p, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
613*3e65e426SFabio Estevam 			RV1103B_CORECLKSEL_CON(0), 1, 1, MFLAGS);
614*3e65e426SFabio Estevam 
615*3e65e426SFabio Estevam static void __init rv1103b_clk_init(struct device_node *np)
616*3e65e426SFabio Estevam {
617*3e65e426SFabio Estevam 	struct rockchip_clk_provider *ctx;
618*3e65e426SFabio Estevam 	unsigned long clk_nr;
619*3e65e426SFabio Estevam 	void __iomem *reg_base;
620*3e65e426SFabio Estevam 
621*3e65e426SFabio Estevam 	clk_nr = rockchip_clk_find_max_clk_id(rv1103b_clk_branches,
622*3e65e426SFabio Estevam 					      ARRAY_SIZE(rv1103b_clk_branches)) + 1;
623*3e65e426SFabio Estevam 	reg_base = of_iomap(np, 0);
624*3e65e426SFabio Estevam 	if (!reg_base) {
625*3e65e426SFabio Estevam 		pr_err("%s: could not map cru region\n", __func__);
626*3e65e426SFabio Estevam 		return;
627*3e65e426SFabio Estevam 	}
628*3e65e426SFabio Estevam 
629*3e65e426SFabio Estevam 	ctx = rockchip_clk_init(np, reg_base, clk_nr);
630*3e65e426SFabio Estevam 	if (IS_ERR(ctx)) {
631*3e65e426SFabio Estevam 		pr_err("%s: rockchip clk init failed\n", __func__);
632*3e65e426SFabio Estevam 		iounmap(reg_base);
633*3e65e426SFabio Estevam 		return;
634*3e65e426SFabio Estevam 	}
635*3e65e426SFabio Estevam 
636*3e65e426SFabio Estevam 	rockchip_clk_register_plls(ctx, rv1103b_pll_clks,
637*3e65e426SFabio Estevam 				   ARRAY_SIZE(rv1103b_pll_clks),
638*3e65e426SFabio Estevam 				   RV1103B_GRF_SOC_STATUS0);
639*3e65e426SFabio Estevam 
640*3e65e426SFabio Estevam 	rockchip_clk_register_branches(ctx, rv1103b_clk_branches,
641*3e65e426SFabio Estevam 				       ARRAY_SIZE(rv1103b_clk_branches));
642*3e65e426SFabio Estevam 
643*3e65e426SFabio Estevam 	rockchip_clk_register_armclk_multi_pll(ctx, &rv1103b_armclk,
644*3e65e426SFabio Estevam 					       rv1103b_cpuclk_rates,
645*3e65e426SFabio Estevam 					       ARRAY_SIZE(rv1103b_cpuclk_rates));
646*3e65e426SFabio Estevam 
647*3e65e426SFabio Estevam 	rockchip_register_restart_notifier(ctx, RV1103B_GLB_SRST_FST, NULL);
648*3e65e426SFabio Estevam 
649*3e65e426SFabio Estevam 	rockchip_clk_of_add_provider(np, ctx);
650*3e65e426SFabio Estevam 
651*3e65e426SFabio Estevam 	/* pvtpll src init */
652*3e65e426SFabio Estevam 	writel_relaxed(PVTPLL_SRC_SEL_PVTPLL, reg_base + RV1103B_CORECLKSEL_CON(0));
653*3e65e426SFabio Estevam 	writel_relaxed(PVTPLL_SRC_SEL_PVTPLL, reg_base + RV1103B_NPUCLKSEL_CON(0));
654*3e65e426SFabio Estevam 	writel_relaxed(PVTPLL_SRC_SEL_PVTPLL, reg_base + RV1103B_VICLKSEL_CON(0));
655*3e65e426SFabio Estevam 	writel_relaxed(PVTPLL_SRC_SEL_PVTPLL, reg_base + RV1103B_VEPUCLKSEL_CON(0));
656*3e65e426SFabio Estevam }
657*3e65e426SFabio Estevam 
658*3e65e426SFabio Estevam CLK_OF_DECLARE(rv1103b_cru, "rockchip,rv1103b-cru", rv1103b_clk_init);
659