1c942fddfSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-or-later
2243229b1SElaine Zhang /*
3243229b1SElaine Zhang * Copyright (c) 2018 Rockchip Electronics Co. Ltd.
4243229b1SElaine Zhang * Author: Elaine Zhang<zhangqing@rock-chips.com>
5243229b1SElaine Zhang */
6243229b1SElaine Zhang
7243229b1SElaine Zhang #include <linux/clk-provider.h>
862e59c4eSStephen Boyd #include <linux/io.h>
9243229b1SElaine Zhang #include <linux/of.h>
10243229b1SElaine Zhang #include <linux/of_address.h>
11243229b1SElaine Zhang #include <linux/syscore_ops.h>
12243229b1SElaine Zhang #include <dt-bindings/clock/px30-cru.h>
13243229b1SElaine Zhang #include "clk.h"
14243229b1SElaine Zhang
15243229b1SElaine Zhang #define PX30_GRF_SOC_STATUS0 0x480
16243229b1SElaine Zhang
17243229b1SElaine Zhang enum px30_plls {
18243229b1SElaine Zhang apll, dpll, cpll, npll, apll_b_h, apll_b_l,
19243229b1SElaine Zhang };
20243229b1SElaine Zhang
21243229b1SElaine Zhang enum px30_pmu_plls {
22243229b1SElaine Zhang gpll,
23243229b1SElaine Zhang };
24243229b1SElaine Zhang
25243229b1SElaine Zhang static struct rockchip_pll_rate_table px30_pll_rates[] = {
26243229b1SElaine Zhang /* _mhz, _refdiv, _fbdiv, _postdiv1, _postdiv2, _dsmpd, _frac */
27243229b1SElaine Zhang RK3036_PLL_RATE(1608000000, 1, 67, 1, 1, 1, 0),
28243229b1SElaine Zhang RK3036_PLL_RATE(1584000000, 1, 66, 1, 1, 1, 0),
29243229b1SElaine Zhang RK3036_PLL_RATE(1560000000, 1, 65, 1, 1, 1, 0),
30243229b1SElaine Zhang RK3036_PLL_RATE(1536000000, 1, 64, 1, 1, 1, 0),
31243229b1SElaine Zhang RK3036_PLL_RATE(1512000000, 1, 63, 1, 1, 1, 0),
32243229b1SElaine Zhang RK3036_PLL_RATE(1488000000, 1, 62, 1, 1, 1, 0),
33243229b1SElaine Zhang RK3036_PLL_RATE(1464000000, 1, 61, 1, 1, 1, 0),
34243229b1SElaine Zhang RK3036_PLL_RATE(1440000000, 1, 60, 1, 1, 1, 0),
35243229b1SElaine Zhang RK3036_PLL_RATE(1416000000, 1, 59, 1, 1, 1, 0),
36243229b1SElaine Zhang RK3036_PLL_RATE(1392000000, 1, 58, 1, 1, 1, 0),
37243229b1SElaine Zhang RK3036_PLL_RATE(1368000000, 1, 57, 1, 1, 1, 0),
38243229b1SElaine Zhang RK3036_PLL_RATE(1344000000, 1, 56, 1, 1, 1, 0),
39243229b1SElaine Zhang RK3036_PLL_RATE(1320000000, 1, 55, 1, 1, 1, 0),
40243229b1SElaine Zhang RK3036_PLL_RATE(1296000000, 1, 54, 1, 1, 1, 0),
41243229b1SElaine Zhang RK3036_PLL_RATE(1272000000, 1, 53, 1, 1, 1, 0),
42243229b1SElaine Zhang RK3036_PLL_RATE(1248000000, 1, 52, 1, 1, 1, 0),
43243229b1SElaine Zhang RK3036_PLL_RATE(1200000000, 1, 50, 1, 1, 1, 0),
44243229b1SElaine Zhang RK3036_PLL_RATE(1188000000, 2, 99, 1, 1, 1, 0),
45243229b1SElaine Zhang RK3036_PLL_RATE(1104000000, 1, 46, 1, 1, 1, 0),
46243229b1SElaine Zhang RK3036_PLL_RATE(1100000000, 12, 550, 1, 1, 1, 0),
47243229b1SElaine Zhang RK3036_PLL_RATE(1008000000, 1, 84, 2, 1, 1, 0),
48243229b1SElaine Zhang RK3036_PLL_RATE(1000000000, 6, 500, 2, 1, 1, 0),
49243229b1SElaine Zhang RK3036_PLL_RATE(984000000, 1, 82, 2, 1, 1, 0),
50243229b1SElaine Zhang RK3036_PLL_RATE(960000000, 1, 80, 2, 1, 1, 0),
51243229b1SElaine Zhang RK3036_PLL_RATE(936000000, 1, 78, 2, 1, 1, 0),
52243229b1SElaine Zhang RK3036_PLL_RATE(912000000, 1, 76, 2, 1, 1, 0),
53243229b1SElaine Zhang RK3036_PLL_RATE(900000000, 4, 300, 2, 1, 1, 0),
54243229b1SElaine Zhang RK3036_PLL_RATE(888000000, 1, 74, 2, 1, 1, 0),
55243229b1SElaine Zhang RK3036_PLL_RATE(864000000, 1, 72, 2, 1, 1, 0),
56243229b1SElaine Zhang RK3036_PLL_RATE(840000000, 1, 70, 2, 1, 1, 0),
57243229b1SElaine Zhang RK3036_PLL_RATE(816000000, 1, 68, 2, 1, 1, 0),
58243229b1SElaine Zhang RK3036_PLL_RATE(800000000, 6, 400, 2, 1, 1, 0),
59243229b1SElaine Zhang RK3036_PLL_RATE(700000000, 6, 350, 2, 1, 1, 0),
60243229b1SElaine Zhang RK3036_PLL_RATE(696000000, 1, 58, 2, 1, 1, 0),
61243229b1SElaine Zhang RK3036_PLL_RATE(624000000, 1, 52, 2, 1, 1, 0),
62243229b1SElaine Zhang RK3036_PLL_RATE(600000000, 1, 75, 3, 1, 1, 0),
63243229b1SElaine Zhang RK3036_PLL_RATE(594000000, 2, 99, 2, 1, 1, 0),
64243229b1SElaine Zhang RK3036_PLL_RATE(504000000, 1, 63, 3, 1, 1, 0),
65243229b1SElaine Zhang RK3036_PLL_RATE(500000000, 6, 250, 2, 1, 1, 0),
66243229b1SElaine Zhang RK3036_PLL_RATE(408000000, 1, 68, 2, 2, 1, 0),
67243229b1SElaine Zhang RK3036_PLL_RATE(312000000, 1, 52, 2, 2, 1, 0),
68243229b1SElaine Zhang RK3036_PLL_RATE(216000000, 1, 72, 4, 2, 1, 0),
69243229b1SElaine Zhang RK3036_PLL_RATE(96000000, 1, 64, 4, 4, 1, 0),
70243229b1SElaine Zhang { /* sentinel */ },
71243229b1SElaine Zhang };
72243229b1SElaine Zhang
73243229b1SElaine Zhang #define PX30_DIV_ACLKM_MASK 0x7
74243229b1SElaine Zhang #define PX30_DIV_ACLKM_SHIFT 12
75243229b1SElaine Zhang #define PX30_DIV_PCLK_DBG_MASK 0xf
76243229b1SElaine Zhang #define PX30_DIV_PCLK_DBG_SHIFT 8
77243229b1SElaine Zhang
78243229b1SElaine Zhang #define PX30_CLKSEL0(_aclk_core, _pclk_dbg) \
79243229b1SElaine Zhang { \
80243229b1SElaine Zhang .reg = PX30_CLKSEL_CON(0), \
81243229b1SElaine Zhang .val = HIWORD_UPDATE(_aclk_core, PX30_DIV_ACLKM_MASK, \
82243229b1SElaine Zhang PX30_DIV_ACLKM_SHIFT) | \
83243229b1SElaine Zhang HIWORD_UPDATE(_pclk_dbg, PX30_DIV_PCLK_DBG_MASK, \
84243229b1SElaine Zhang PX30_DIV_PCLK_DBG_SHIFT), \
85243229b1SElaine Zhang }
86243229b1SElaine Zhang
87243229b1SElaine Zhang #define PX30_CPUCLK_RATE(_prate, _aclk_core, _pclk_dbg) \
88243229b1SElaine Zhang { \
89243229b1SElaine Zhang .prate = _prate, \
90243229b1SElaine Zhang .divs = { \
91243229b1SElaine Zhang PX30_CLKSEL0(_aclk_core, _pclk_dbg), \
92243229b1SElaine Zhang }, \
93243229b1SElaine Zhang }
94243229b1SElaine Zhang
95243229b1SElaine Zhang static struct rockchip_cpuclk_rate_table px30_cpuclk_rates[] __initdata = {
96243229b1SElaine Zhang PX30_CPUCLK_RATE(1608000000, 1, 7),
97243229b1SElaine Zhang PX30_CPUCLK_RATE(1584000000, 1, 7),
98243229b1SElaine Zhang PX30_CPUCLK_RATE(1560000000, 1, 7),
99243229b1SElaine Zhang PX30_CPUCLK_RATE(1536000000, 1, 7),
100243229b1SElaine Zhang PX30_CPUCLK_RATE(1512000000, 1, 7),
101243229b1SElaine Zhang PX30_CPUCLK_RATE(1488000000, 1, 5),
102243229b1SElaine Zhang PX30_CPUCLK_RATE(1464000000, 1, 5),
103243229b1SElaine Zhang PX30_CPUCLK_RATE(1440000000, 1, 5),
104243229b1SElaine Zhang PX30_CPUCLK_RATE(1416000000, 1, 5),
105243229b1SElaine Zhang PX30_CPUCLK_RATE(1392000000, 1, 5),
106243229b1SElaine Zhang PX30_CPUCLK_RATE(1368000000, 1, 5),
107243229b1SElaine Zhang PX30_CPUCLK_RATE(1344000000, 1, 5),
108243229b1SElaine Zhang PX30_CPUCLK_RATE(1320000000, 1, 5),
109243229b1SElaine Zhang PX30_CPUCLK_RATE(1296000000, 1, 5),
110243229b1SElaine Zhang PX30_CPUCLK_RATE(1272000000, 1, 5),
111243229b1SElaine Zhang PX30_CPUCLK_RATE(1248000000, 1, 5),
112243229b1SElaine Zhang PX30_CPUCLK_RATE(1224000000, 1, 5),
113243229b1SElaine Zhang PX30_CPUCLK_RATE(1200000000, 1, 5),
114243229b1SElaine Zhang PX30_CPUCLK_RATE(1104000000, 1, 5),
115243229b1SElaine Zhang PX30_CPUCLK_RATE(1008000000, 1, 5),
116243229b1SElaine Zhang PX30_CPUCLK_RATE(912000000, 1, 5),
117243229b1SElaine Zhang PX30_CPUCLK_RATE(816000000, 1, 3),
118243229b1SElaine Zhang PX30_CPUCLK_RATE(696000000, 1, 3),
119243229b1SElaine Zhang PX30_CPUCLK_RATE(600000000, 1, 3),
120243229b1SElaine Zhang PX30_CPUCLK_RATE(408000000, 1, 1),
121243229b1SElaine Zhang PX30_CPUCLK_RATE(312000000, 1, 1),
122243229b1SElaine Zhang PX30_CPUCLK_RATE(216000000, 1, 1),
123243229b1SElaine Zhang PX30_CPUCLK_RATE(96000000, 1, 1),
124243229b1SElaine Zhang };
125243229b1SElaine Zhang
126243229b1SElaine Zhang static const struct rockchip_cpuclk_reg_data px30_cpuclk_data = {
127*a3561e77SElaine Zhang .core_reg[0] = PX30_CLKSEL_CON(0),
128*a3561e77SElaine Zhang .div_core_shift[0] = 0,
129*a3561e77SElaine Zhang .div_core_mask[0] = 0xf,
130*a3561e77SElaine Zhang .num_cores = 1,
131243229b1SElaine Zhang .mux_core_alt = 1,
132243229b1SElaine Zhang .mux_core_main = 0,
133243229b1SElaine Zhang .mux_core_shift = 7,
134243229b1SElaine Zhang .mux_core_mask = 0x1,
135243229b1SElaine Zhang };
136243229b1SElaine Zhang
137243229b1SElaine Zhang PNAME(mux_pll_p) = { "xin24m"};
138243229b1SElaine Zhang PNAME(mux_usb480m_p) = { "xin24m", "usb480m_phy", "clk_rtc32k_pmu" };
139243229b1SElaine Zhang PNAME(mux_armclk_p) = { "apll_core", "gpll_core" };
140243229b1SElaine Zhang PNAME(mux_ddrphy_p) = { "dpll_ddr", "gpll_ddr" };
141243229b1SElaine Zhang PNAME(mux_ddrstdby_p) = { "clk_ddrphy1x", "clk_stdby_2wrap" };
142243229b1SElaine Zhang PNAME(mux_4plls_p) = { "gpll", "dummy_cpll", "usb480m", "npll" };
143243229b1SElaine Zhang PNAME(mux_cpll_npll_p) = { "cpll", "npll" };
144243229b1SElaine Zhang PNAME(mux_npll_cpll_p) = { "npll", "cpll" };
145243229b1SElaine Zhang PNAME(mux_gpll_cpll_p) = { "gpll", "dummy_cpll" };
146243229b1SElaine Zhang PNAME(mux_gpll_npll_p) = { "gpll", "npll" };
147243229b1SElaine Zhang PNAME(mux_gpll_xin24m_p) = { "gpll", "xin24m"};
148243229b1SElaine Zhang PNAME(mux_gpll_cpll_npll_p) = { "gpll", "dummy_cpll", "npll" };
149243229b1SElaine Zhang PNAME(mux_gpll_cpll_npll_xin24m_p) = { "gpll", "dummy_cpll", "npll", "xin24m" };
150243229b1SElaine Zhang PNAME(mux_gpll_xin24m_npll_p) = { "gpll", "xin24m", "npll"};
151243229b1SElaine Zhang PNAME(mux_pdm_p) = { "clk_pdm_src", "clk_pdm_frac" };
152243229b1SElaine Zhang PNAME(mux_i2s0_tx_p) = { "clk_i2s0_tx_src", "clk_i2s0_tx_frac", "mclk_i2s0_tx_in", "xin12m"};
153243229b1SElaine Zhang PNAME(mux_i2s0_rx_p) = { "clk_i2s0_rx_src", "clk_i2s0_rx_frac", "mclk_i2s0_rx_in", "xin12m"};
154243229b1SElaine Zhang PNAME(mux_i2s1_p) = { "clk_i2s1_src", "clk_i2s1_frac", "i2s1_clkin", "xin12m"};
155243229b1SElaine Zhang PNAME(mux_i2s2_p) = { "clk_i2s2_src", "clk_i2s2_frac", "i2s2_clkin", "xin12m"};
156243229b1SElaine Zhang PNAME(mux_i2s0_tx_out_p) = { "clk_i2s0_tx", "xin12m", "clk_i2s0_rx"};
157243229b1SElaine Zhang PNAME(mux_i2s0_rx_out_p) = { "clk_i2s0_rx", "xin12m", "clk_i2s0_tx"};
158243229b1SElaine Zhang PNAME(mux_i2s1_out_p) = { "clk_i2s1", "xin12m"};
159243229b1SElaine Zhang PNAME(mux_i2s2_out_p) = { "clk_i2s2", "xin12m"};
160243229b1SElaine Zhang PNAME(mux_i2s0_tx_rx_p) = { "clk_i2s0_tx_mux", "clk_i2s0_rx_mux"};
161243229b1SElaine Zhang PNAME(mux_i2s0_rx_tx_p) = { "clk_i2s0_rx_mux", "clk_i2s0_tx_mux"};
162243229b1SElaine Zhang PNAME(mux_uart_src_p) = { "gpll", "xin24m", "usb480m", "npll" };
163243229b1SElaine Zhang PNAME(mux_uart1_p) = { "clk_uart1_src", "clk_uart1_np5", "clk_uart1_frac" };
164243229b1SElaine Zhang PNAME(mux_uart2_p) = { "clk_uart2_src", "clk_uart2_np5", "clk_uart2_frac" };
165243229b1SElaine Zhang PNAME(mux_uart3_p) = { "clk_uart3_src", "clk_uart3_np5", "clk_uart3_frac" };
166243229b1SElaine Zhang PNAME(mux_uart4_p) = { "clk_uart4_src", "clk_uart4_np5", "clk_uart4_frac" };
167243229b1SElaine Zhang PNAME(mux_uart5_p) = { "clk_uart5_src", "clk_uart5_np5", "clk_uart5_frac" };
168243229b1SElaine Zhang PNAME(mux_cif_out_p) = { "xin24m", "dummy_cpll", "npll", "usb480m" };
169243229b1SElaine Zhang PNAME(mux_dclk_vopb_p) = { "dclk_vopb_src", "dclk_vopb_frac", "xin24m" };
170243229b1SElaine Zhang PNAME(mux_dclk_vopl_p) = { "dclk_vopl_src", "dclk_vopl_frac", "xin24m" };
171e4078109SFinley Xiao PNAME(mux_nandc_p) = { "clk_nandc_div", "clk_nandc_div50" };
172e4078109SFinley Xiao PNAME(mux_sdio_p) = { "clk_sdio_div", "clk_sdio_div50" };
173e4078109SFinley Xiao PNAME(mux_emmc_p) = { "clk_emmc_div", "clk_emmc_div50" };
174e4078109SFinley Xiao PNAME(mux_sdmmc_p) = { "clk_sdmmc_div", "clk_sdmmc_div50" };
175243229b1SElaine Zhang PNAME(mux_gmac_p) = { "clk_gmac_src", "gmac_clkin" };
176243229b1SElaine Zhang PNAME(mux_gmac_rmii_sel_p) = { "clk_gmac_rx_tx_div20", "clk_gmac_rx_tx_div2" };
177243229b1SElaine Zhang PNAME(mux_rtc32k_pmu_p) = { "xin32k", "pmu_pvtm_32k", "clk_rtc32k_frac", };
178243229b1SElaine Zhang PNAME(mux_wifi_pmu_p) = { "xin24m", "clk_wifi_pmu_src" };
179243229b1SElaine Zhang PNAME(mux_uart0_pmu_p) = { "clk_uart0_pmu_src", "clk_uart0_np5", "clk_uart0_frac" };
180243229b1SElaine Zhang PNAME(mux_usbphy_ref_p) = { "xin24m", "clk_ref24m_pmu" };
181243229b1SElaine Zhang PNAME(mux_mipidsiphy_ref_p) = { "xin24m", "clk_ref24m_pmu" };
182243229b1SElaine Zhang PNAME(mux_gpu_p) = { "clk_gpu_div", "clk_gpu_np5" };
183243229b1SElaine Zhang
184243229b1SElaine Zhang static struct rockchip_pll_clock px30_pll_clks[] __initdata = {
185243229b1SElaine Zhang [apll] = PLL(pll_rk3328, PLL_APLL, "apll", mux_pll_p,
186243229b1SElaine Zhang 0, PX30_PLL_CON(0),
187243229b1SElaine Zhang PX30_MODE_CON, 0, 0, 0, px30_pll_rates),
188243229b1SElaine Zhang [dpll] = PLL(pll_rk3328, PLL_DPLL, "dpll", mux_pll_p,
189243229b1SElaine Zhang 0, PX30_PLL_CON(8),
190243229b1SElaine Zhang PX30_MODE_CON, 4, 1, 0, NULL),
191243229b1SElaine Zhang [cpll] = PLL(pll_rk3328, PLL_CPLL, "cpll", mux_pll_p,
192243229b1SElaine Zhang 0, PX30_PLL_CON(16),
193243229b1SElaine Zhang PX30_MODE_CON, 2, 2, 0, px30_pll_rates),
194243229b1SElaine Zhang [npll] = PLL(pll_rk3328, PLL_NPLL, "npll", mux_pll_p,
195243229b1SElaine Zhang 0, PX30_PLL_CON(24),
196243229b1SElaine Zhang PX30_MODE_CON, 6, 4, 0, px30_pll_rates),
197243229b1SElaine Zhang };
198243229b1SElaine Zhang
199243229b1SElaine Zhang static struct rockchip_pll_clock px30_pmu_pll_clks[] __initdata = {
200243229b1SElaine Zhang [gpll] = PLL(pll_rk3328, PLL_GPLL, "gpll", mux_pll_p, 0, PX30_PMU_PLL_CON(0),
201243229b1SElaine Zhang PX30_PMU_MODE, 0, 3, 0, px30_pll_rates),
202243229b1SElaine Zhang };
203243229b1SElaine Zhang
204243229b1SElaine Zhang #define MFLAGS CLK_MUX_HIWORD_MASK
205243229b1SElaine Zhang #define DFLAGS CLK_DIVIDER_HIWORD_MASK
206243229b1SElaine Zhang #define GFLAGS (CLK_GATE_HIWORD_MASK | CLK_GATE_SET_TO_DISABLE)
207243229b1SElaine Zhang
208243229b1SElaine Zhang static struct rockchip_clk_branch px30_pdm_fracmux __initdata =
209243229b1SElaine Zhang MUX(0, "clk_pdm_mux", mux_pdm_p, CLK_SET_RATE_PARENT,
210243229b1SElaine Zhang PX30_CLKSEL_CON(26), 15, 1, MFLAGS);
211243229b1SElaine Zhang
212243229b1SElaine Zhang static struct rockchip_clk_branch px30_i2s0_tx_fracmux __initdata =
213243229b1SElaine Zhang MUX(0, "clk_i2s0_tx_mux", mux_i2s0_tx_p, CLK_SET_RATE_PARENT,
214243229b1SElaine Zhang PX30_CLKSEL_CON(28), 10, 2, MFLAGS);
215243229b1SElaine Zhang
216243229b1SElaine Zhang static struct rockchip_clk_branch px30_i2s0_rx_fracmux __initdata =
217243229b1SElaine Zhang MUX(0, "clk_i2s0_rx_mux", mux_i2s0_rx_p, CLK_SET_RATE_PARENT,
218243229b1SElaine Zhang PX30_CLKSEL_CON(58), 10, 2, MFLAGS);
219243229b1SElaine Zhang
220243229b1SElaine Zhang static struct rockchip_clk_branch px30_i2s1_fracmux __initdata =
221243229b1SElaine Zhang MUX(0, "clk_i2s1_mux", mux_i2s1_p, CLK_SET_RATE_PARENT,
222243229b1SElaine Zhang PX30_CLKSEL_CON(30), 10, 2, MFLAGS);
223243229b1SElaine Zhang
224243229b1SElaine Zhang static struct rockchip_clk_branch px30_i2s2_fracmux __initdata =
225243229b1SElaine Zhang MUX(0, "clk_i2s2_mux", mux_i2s2_p, CLK_SET_RATE_PARENT,
226243229b1SElaine Zhang PX30_CLKSEL_CON(32), 10, 2, MFLAGS);
227243229b1SElaine Zhang
228243229b1SElaine Zhang static struct rockchip_clk_branch px30_uart1_fracmux __initdata =
229243229b1SElaine Zhang MUX(0, "clk_uart1_mux", mux_uart1_p, CLK_SET_RATE_PARENT,
230243229b1SElaine Zhang PX30_CLKSEL_CON(35), 14, 2, MFLAGS);
231243229b1SElaine Zhang
232243229b1SElaine Zhang static struct rockchip_clk_branch px30_uart2_fracmux __initdata =
233243229b1SElaine Zhang MUX(0, "clk_uart2_mux", mux_uart2_p, CLK_SET_RATE_PARENT,
234243229b1SElaine Zhang PX30_CLKSEL_CON(38), 14, 2, MFLAGS);
235243229b1SElaine Zhang
236243229b1SElaine Zhang static struct rockchip_clk_branch px30_uart3_fracmux __initdata =
237243229b1SElaine Zhang MUX(0, "clk_uart3_mux", mux_uart3_p, CLK_SET_RATE_PARENT,
238243229b1SElaine Zhang PX30_CLKSEL_CON(41), 14, 2, MFLAGS);
239243229b1SElaine Zhang
240243229b1SElaine Zhang static struct rockchip_clk_branch px30_uart4_fracmux __initdata =
241243229b1SElaine Zhang MUX(0, "clk_uart4_mux", mux_uart4_p, CLK_SET_RATE_PARENT,
242243229b1SElaine Zhang PX30_CLKSEL_CON(44), 14, 2, MFLAGS);
243243229b1SElaine Zhang
244243229b1SElaine Zhang static struct rockchip_clk_branch px30_uart5_fracmux __initdata =
245243229b1SElaine Zhang MUX(0, "clk_uart5_mux", mux_uart5_p, CLK_SET_RATE_PARENT,
246243229b1SElaine Zhang PX30_CLKSEL_CON(47), 14, 2, MFLAGS);
247243229b1SElaine Zhang
248243229b1SElaine Zhang static struct rockchip_clk_branch px30_dclk_vopb_fracmux __initdata =
249243229b1SElaine Zhang MUX(0, "dclk_vopb_mux", mux_dclk_vopb_p, CLK_SET_RATE_PARENT,
250243229b1SElaine Zhang PX30_CLKSEL_CON(5), 14, 2, MFLAGS);
251243229b1SElaine Zhang
252243229b1SElaine Zhang static struct rockchip_clk_branch px30_dclk_vopl_fracmux __initdata =
253243229b1SElaine Zhang MUX(0, "dclk_vopl_mux", mux_dclk_vopl_p, CLK_SET_RATE_PARENT,
254243229b1SElaine Zhang PX30_CLKSEL_CON(8), 14, 2, MFLAGS);
255243229b1SElaine Zhang
256243229b1SElaine Zhang static struct rockchip_clk_branch px30_rtc32k_pmu_fracmux __initdata =
257243229b1SElaine Zhang MUX(SCLK_RTC32K_PMU, "clk_rtc32k_pmu", mux_rtc32k_pmu_p, CLK_SET_RATE_PARENT,
258243229b1SElaine Zhang PX30_PMU_CLKSEL_CON(0), 14, 2, MFLAGS);
259243229b1SElaine Zhang
260243229b1SElaine Zhang static struct rockchip_clk_branch px30_uart0_pmu_fracmux __initdata =
261243229b1SElaine Zhang MUX(0, "clk_uart0_pmu_mux", mux_uart0_pmu_p, CLK_SET_RATE_PARENT,
262243229b1SElaine Zhang PX30_PMU_CLKSEL_CON(4), 14, 2, MFLAGS);
263243229b1SElaine Zhang
264243229b1SElaine Zhang static struct rockchip_clk_branch px30_clk_branches[] __initdata = {
265243229b1SElaine Zhang /*
266243229b1SElaine Zhang * Clock-Architecture Diagram 1
267243229b1SElaine Zhang */
268243229b1SElaine Zhang
269243229b1SElaine Zhang MUX(USB480M, "usb480m", mux_usb480m_p, CLK_SET_RATE_PARENT,
270243229b1SElaine Zhang PX30_MODE_CON, 8, 2, MFLAGS),
271243229b1SElaine Zhang FACTOR(0, "xin12m", "xin24m", 0, 1, 2),
272243229b1SElaine Zhang
273243229b1SElaine Zhang /*
274243229b1SElaine Zhang * Clock-Architecture Diagram 3
275243229b1SElaine Zhang */
276243229b1SElaine Zhang
277243229b1SElaine Zhang /* PD_CORE */
278243229b1SElaine Zhang GATE(0, "apll_core", "apll", CLK_IGNORE_UNUSED,
279243229b1SElaine Zhang PX30_CLKGATE_CON(0), 0, GFLAGS),
280243229b1SElaine Zhang GATE(0, "gpll_core", "gpll", CLK_IGNORE_UNUSED,
281243229b1SElaine Zhang PX30_CLKGATE_CON(0), 0, GFLAGS),
282243229b1SElaine Zhang COMPOSITE_NOMUX(0, "pclk_dbg", "armclk", CLK_IGNORE_UNUSED,
283243229b1SElaine Zhang PX30_CLKSEL_CON(0), 8, 4, DFLAGS | CLK_DIVIDER_READ_ONLY,
284243229b1SElaine Zhang PX30_CLKGATE_CON(0), 2, GFLAGS),
285243229b1SElaine Zhang COMPOSITE_NOMUX(0, "aclk_core", "armclk", CLK_IGNORE_UNUSED,
286243229b1SElaine Zhang PX30_CLKSEL_CON(0), 12, 3, DFLAGS | CLK_DIVIDER_READ_ONLY,
287243229b1SElaine Zhang PX30_CLKGATE_CON(0), 1, GFLAGS),
288243229b1SElaine Zhang GATE(0, "aclk_core_niu", "aclk_core", CLK_IGNORE_UNUSED,
289243229b1SElaine Zhang PX30_CLKGATE_CON(0), 4, GFLAGS),
290243229b1SElaine Zhang GATE(0, "aclk_core_prf", "aclk_core", CLK_IGNORE_UNUSED,
291243229b1SElaine Zhang PX30_CLKGATE_CON(17), 5, GFLAGS),
292243229b1SElaine Zhang GATE(0, "pclk_dbg_niu", "pclk_dbg", CLK_IGNORE_UNUSED,
293243229b1SElaine Zhang PX30_CLKGATE_CON(0), 5, GFLAGS),
294243229b1SElaine Zhang GATE(0, "pclk_core_dbg", "pclk_dbg", CLK_IGNORE_UNUSED,
295243229b1SElaine Zhang PX30_CLKGATE_CON(0), 6, GFLAGS),
296243229b1SElaine Zhang GATE(0, "pclk_core_grf", "pclk_dbg", CLK_IGNORE_UNUSED,
297243229b1SElaine Zhang PX30_CLKGATE_CON(17), 6, GFLAGS),
298243229b1SElaine Zhang
299243229b1SElaine Zhang GATE(0, "clk_jtag", "jtag_clkin", CLK_IGNORE_UNUSED,
300243229b1SElaine Zhang PX30_CLKGATE_CON(0), 3, GFLAGS),
301243229b1SElaine Zhang GATE(SCLK_PVTM, "clk_pvtm", "xin24m", 0,
302243229b1SElaine Zhang PX30_CLKGATE_CON(17), 4, GFLAGS),
303243229b1SElaine Zhang
304243229b1SElaine Zhang /* PD_GPU */
305243229b1SElaine Zhang COMPOSITE_NODIV(0, "clk_gpu_src", mux_4plls_p, 0,
306243229b1SElaine Zhang PX30_CLKSEL_CON(1), 6, 2, MFLAGS,
307243229b1SElaine Zhang PX30_CLKGATE_CON(0), 8, GFLAGS),
308243229b1SElaine Zhang COMPOSITE_NOMUX(0, "clk_gpu_div", "clk_gpu_src", 0,
309243229b1SElaine Zhang PX30_CLKSEL_CON(1), 0, 4, DFLAGS,
310243229b1SElaine Zhang PX30_CLKGATE_CON(0), 12, GFLAGS),
311243229b1SElaine Zhang COMPOSITE_NOMUX_HALFDIV(0, "clk_gpu_np5", "clk_gpu_src", 0,
312243229b1SElaine Zhang PX30_CLKSEL_CON(1), 8, 4, DFLAGS,
313243229b1SElaine Zhang PX30_CLKGATE_CON(0), 9, GFLAGS),
314243229b1SElaine Zhang COMPOSITE_NODIV(SCLK_GPU, "clk_gpu", mux_gpu_p, CLK_SET_RATE_PARENT,
315243229b1SElaine Zhang PX30_CLKSEL_CON(1), 15, 1, MFLAGS,
316243229b1SElaine Zhang PX30_CLKGATE_CON(0), 10, GFLAGS),
317243229b1SElaine Zhang COMPOSITE_NOMUX(0, "aclk_gpu", "clk_gpu", CLK_IGNORE_UNUSED,
318243229b1SElaine Zhang PX30_CLKSEL_CON(1), 13, 2, DFLAGS,
319243229b1SElaine Zhang PX30_CLKGATE_CON(17), 10, GFLAGS),
320243229b1SElaine Zhang GATE(0, "aclk_gpu_niu", "aclk_gpu", CLK_IGNORE_UNUSED,
321243229b1SElaine Zhang PX30_CLKGATE_CON(0), 11, GFLAGS),
322243229b1SElaine Zhang GATE(0, "aclk_gpu_prf", "aclk_gpu", CLK_IGNORE_UNUSED,
323243229b1SElaine Zhang PX30_CLKGATE_CON(17), 8, GFLAGS),
324243229b1SElaine Zhang GATE(0, "pclk_gpu_grf", "aclk_gpu", CLK_IGNORE_UNUSED,
325243229b1SElaine Zhang PX30_CLKGATE_CON(17), 9, GFLAGS),
326243229b1SElaine Zhang
327243229b1SElaine Zhang /*
328243229b1SElaine Zhang * Clock-Architecture Diagram 4
329243229b1SElaine Zhang */
330243229b1SElaine Zhang
331243229b1SElaine Zhang /* PD_DDR */
332243229b1SElaine Zhang GATE(0, "dpll_ddr", "dpll", CLK_IGNORE_UNUSED,
333243229b1SElaine Zhang PX30_CLKGATE_CON(0), 7, GFLAGS),
334243229b1SElaine Zhang GATE(0, "gpll_ddr", "gpll", CLK_IGNORE_UNUSED,
335243229b1SElaine Zhang PX30_CLKGATE_CON(0), 13, GFLAGS),
336243229b1SElaine Zhang COMPOSITE_NOGATE(SCLK_DDRCLK, "sclk_ddrc", mux_ddrphy_p, CLK_IGNORE_UNUSED,
337243229b1SElaine Zhang PX30_CLKSEL_CON(2), 7, 1, MFLAGS, 0, 3, DFLAGS | CLK_DIVIDER_POWER_OF_TWO),
338243229b1SElaine Zhang COMPOSITE_NOGATE(0, "clk_ddrphy4x", mux_ddrphy_p, CLK_IGNORE_UNUSED,
339243229b1SElaine Zhang PX30_CLKSEL_CON(2), 7, 1, MFLAGS, 0, 3, DFLAGS),
340243229b1SElaine Zhang FACTOR_GATE(0, "clk_ddrphy1x", "clk_ddrphy4x", CLK_IGNORE_UNUSED, 1, 4,
341243229b1SElaine Zhang PX30_CLKGATE_CON(0), 14, GFLAGS),
342243229b1SElaine Zhang FACTOR_GATE(0, "clk_stdby_2wrap", "clk_ddrphy4x", CLK_IGNORE_UNUSED, 1, 4,
343243229b1SElaine Zhang PX30_CLKGATE_CON(1), 0, GFLAGS),
344243229b1SElaine Zhang COMPOSITE_NODIV(0, "clk_ddrstdby", mux_ddrstdby_p, CLK_IGNORE_UNUSED,
345243229b1SElaine Zhang PX30_CLKSEL_CON(2), 4, 1, MFLAGS,
346243229b1SElaine Zhang PX30_CLKGATE_CON(1), 13, GFLAGS),
347243229b1SElaine Zhang GATE(0, "aclk_split", "clk_ddrphy1x", CLK_IGNORE_UNUSED,
348243229b1SElaine Zhang PX30_CLKGATE_CON(1), 15, GFLAGS),
349243229b1SElaine Zhang GATE(0, "clk_msch", "clk_ddrphy1x", CLK_IGNORE_UNUSED,
350243229b1SElaine Zhang PX30_CLKGATE_CON(1), 8, GFLAGS),
351243229b1SElaine Zhang GATE(0, "aclk_ddrc", "clk_ddrphy1x", CLK_IGNORE_UNUSED,
352243229b1SElaine Zhang PX30_CLKGATE_CON(1), 5, GFLAGS),
353243229b1SElaine Zhang GATE(0, "clk_core_ddrc", "clk_ddrphy1x", CLK_IGNORE_UNUSED,
354243229b1SElaine Zhang PX30_CLKGATE_CON(1), 6, GFLAGS),
355243229b1SElaine Zhang GATE(0, "aclk_cmd_buff", "clk_ddrphy1x", CLK_IGNORE_UNUSED,
356243229b1SElaine Zhang PX30_CLKGATE_CON(1), 6, GFLAGS),
357243229b1SElaine Zhang GATE(0, "clk_ddrmon", "clk_ddrphy1x", CLK_IGNORE_UNUSED,
358243229b1SElaine Zhang PX30_CLKGATE_CON(1), 11, GFLAGS),
359243229b1SElaine Zhang
360243229b1SElaine Zhang GATE(0, "clk_ddrmon_timer", "xin24m", CLK_IGNORE_UNUSED,
361243229b1SElaine Zhang PX30_CLKGATE_CON(0), 15, GFLAGS),
362243229b1SElaine Zhang
363243229b1SElaine Zhang COMPOSITE_NOMUX(PCLK_DDR, "pclk_ddr", "gpll", CLK_IGNORE_UNUSED,
364243229b1SElaine Zhang PX30_CLKSEL_CON(2), 8, 5, DFLAGS,
365243229b1SElaine Zhang PX30_CLKGATE_CON(1), 1, GFLAGS),
366243229b1SElaine Zhang GATE(0, "pclk_ddrmon", "pclk_ddr", CLK_IGNORE_UNUSED,
367243229b1SElaine Zhang PX30_CLKGATE_CON(1), 10, GFLAGS),
368243229b1SElaine Zhang GATE(0, "pclk_ddrc", "pclk_ddr", CLK_IGNORE_UNUSED,
369243229b1SElaine Zhang PX30_CLKGATE_CON(1), 7, GFLAGS),
370243229b1SElaine Zhang GATE(0, "pclk_msch", "pclk_ddr", CLK_IGNORE_UNUSED,
371243229b1SElaine Zhang PX30_CLKGATE_CON(1), 9, GFLAGS),
372243229b1SElaine Zhang GATE(0, "pclk_stdby", "pclk_ddr", CLK_IGNORE_UNUSED,
373243229b1SElaine Zhang PX30_CLKGATE_CON(1), 12, GFLAGS),
374243229b1SElaine Zhang GATE(0, "pclk_ddr_grf", "pclk_ddr", CLK_IGNORE_UNUSED,
375243229b1SElaine Zhang PX30_CLKGATE_CON(1), 14, GFLAGS),
376243229b1SElaine Zhang GATE(0, "pclk_cmdbuff", "pclk_ddr", CLK_IGNORE_UNUSED,
377243229b1SElaine Zhang PX30_CLKGATE_CON(1), 3, GFLAGS),
378243229b1SElaine Zhang
379243229b1SElaine Zhang /*
380243229b1SElaine Zhang * Clock-Architecture Diagram 5
381243229b1SElaine Zhang */
382243229b1SElaine Zhang
383243229b1SElaine Zhang /* PD_VI */
384243229b1SElaine Zhang COMPOSITE(ACLK_VI_PRE, "aclk_vi_pre", mux_gpll_cpll_npll_p, 0,
385243229b1SElaine Zhang PX30_CLKSEL_CON(11), 6, 2, MFLAGS, 0, 5, DFLAGS,
386243229b1SElaine Zhang PX30_CLKGATE_CON(4), 8, GFLAGS),
387243229b1SElaine Zhang COMPOSITE_NOMUX(HCLK_VI_PRE, "hclk_vi_pre", "aclk_vi_pre", 0,
388243229b1SElaine Zhang PX30_CLKSEL_CON(11), 8, 4, DFLAGS,
389243229b1SElaine Zhang PX30_CLKGATE_CON(4), 12, GFLAGS),
390243229b1SElaine Zhang COMPOSITE(SCLK_ISP, "clk_isp", mux_gpll_cpll_npll_p, 0,
391243229b1SElaine Zhang PX30_CLKSEL_CON(12), 6, 2, MFLAGS, 0, 5, DFLAGS,
392243229b1SElaine Zhang PX30_CLKGATE_CON(4), 9, GFLAGS),
393243229b1SElaine Zhang COMPOSITE(SCLK_CIF_OUT, "clk_cif_out", mux_cif_out_p, 0,
394243229b1SElaine Zhang PX30_CLKSEL_CON(13), 6, 2, MFLAGS, 0, 6, DFLAGS,
395243229b1SElaine Zhang PX30_CLKGATE_CON(4), 11, GFLAGS),
396243229b1SElaine Zhang GATE(PCLK_ISP, "pclkin_isp", "ext_pclkin", 0,
397243229b1SElaine Zhang PX30_CLKGATE_CON(4), 13, GFLAGS),
398243229b1SElaine Zhang GATE(PCLK_CIF, "pclkin_cif", "ext_pclkin", 0,
399243229b1SElaine Zhang PX30_CLKGATE_CON(4), 14, GFLAGS),
400243229b1SElaine Zhang
401243229b1SElaine Zhang /*
402243229b1SElaine Zhang * Clock-Architecture Diagram 6
403243229b1SElaine Zhang */
404243229b1SElaine Zhang
405243229b1SElaine Zhang /* PD_VO */
406243229b1SElaine Zhang COMPOSITE(ACLK_VO_PRE, "aclk_vo_pre", mux_gpll_cpll_npll_p, 0,
407243229b1SElaine Zhang PX30_CLKSEL_CON(3), 6, 2, MFLAGS, 0, 5, DFLAGS,
408243229b1SElaine Zhang PX30_CLKGATE_CON(2), 0, GFLAGS),
409243229b1SElaine Zhang COMPOSITE_NOMUX(HCLK_VO_PRE, "hclk_vo_pre", "aclk_vo_pre", 0,
410243229b1SElaine Zhang PX30_CLKSEL_CON(3), 8, 4, DFLAGS,
411243229b1SElaine Zhang PX30_CLKGATE_CON(2), 12, GFLAGS),
412243229b1SElaine Zhang COMPOSITE_NOMUX(PCLK_VO_PRE, "pclk_vo_pre", "aclk_vo_pre", 0,
413243229b1SElaine Zhang PX30_CLKSEL_CON(3), 12, 4, DFLAGS,
414243229b1SElaine Zhang PX30_CLKGATE_CON(2), 13, GFLAGS),
415243229b1SElaine Zhang COMPOSITE(SCLK_RGA_CORE, "clk_rga_core", mux_gpll_cpll_npll_p, 0,
416243229b1SElaine Zhang PX30_CLKSEL_CON(4), 6, 2, MFLAGS, 0, 5, DFLAGS,
417243229b1SElaine Zhang PX30_CLKGATE_CON(2), 1, GFLAGS),
418243229b1SElaine Zhang
419243229b1SElaine Zhang COMPOSITE(SCLK_VOPB_PWM, "clk_vopb_pwm", mux_gpll_xin24m_p, 0,
420243229b1SElaine Zhang PX30_CLKSEL_CON(7), 7, 1, MFLAGS, 0, 7, DFLAGS,
421243229b1SElaine Zhang PX30_CLKGATE_CON(2), 5, GFLAGS),
422243229b1SElaine Zhang COMPOSITE(0, "dclk_vopb_src", mux_cpll_npll_p, CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
423243229b1SElaine Zhang PX30_CLKSEL_CON(5), 11, 1, MFLAGS, 0, 8, DFLAGS,
424243229b1SElaine Zhang PX30_CLKGATE_CON(2), 2, GFLAGS),
425243229b1SElaine Zhang COMPOSITE_FRACMUX(0, "dclk_vopb_frac", "dclk_vopb_src", CLK_SET_RATE_PARENT,
426243229b1SElaine Zhang PX30_CLKSEL_CON(6), 0,
427243229b1SElaine Zhang PX30_CLKGATE_CON(2), 3, GFLAGS,
428243229b1SElaine Zhang &px30_dclk_vopb_fracmux),
429243229b1SElaine Zhang GATE(DCLK_VOPB, "dclk_vopb", "dclk_vopb_mux", CLK_SET_RATE_PARENT,
430243229b1SElaine Zhang PX30_CLKGATE_CON(2), 4, GFLAGS),
431243229b1SElaine Zhang COMPOSITE(0, "dclk_vopl_src", mux_npll_cpll_p, 0,
432243229b1SElaine Zhang PX30_CLKSEL_CON(8), 11, 1, MFLAGS, 0, 8, DFLAGS,
433243229b1SElaine Zhang PX30_CLKGATE_CON(2), 6, GFLAGS),
434243229b1SElaine Zhang COMPOSITE_FRACMUX(0, "dclk_vopl_frac", "dclk_vopl_src", CLK_SET_RATE_PARENT,
435243229b1SElaine Zhang PX30_CLKSEL_CON(9), 0,
436243229b1SElaine Zhang PX30_CLKGATE_CON(2), 7, GFLAGS,
437243229b1SElaine Zhang &px30_dclk_vopl_fracmux),
438243229b1SElaine Zhang GATE(DCLK_VOPL, "dclk_vopl", "dclk_vopl_mux", CLK_SET_RATE_PARENT,
439243229b1SElaine Zhang PX30_CLKGATE_CON(2), 8, GFLAGS),
440243229b1SElaine Zhang
441243229b1SElaine Zhang /* PD_VPU */
442243229b1SElaine Zhang COMPOSITE(0, "aclk_vpu_pre", mux_gpll_cpll_npll_p, 0,
443243229b1SElaine Zhang PX30_CLKSEL_CON(10), 6, 2, MFLAGS, 0, 5, DFLAGS,
444243229b1SElaine Zhang PX30_CLKGATE_CON(4), 0, GFLAGS),
445243229b1SElaine Zhang COMPOSITE_NOMUX(0, "hclk_vpu_pre", "aclk_vpu_pre", 0,
446243229b1SElaine Zhang PX30_CLKSEL_CON(10), 8, 4, DFLAGS,
447243229b1SElaine Zhang PX30_CLKGATE_CON(4), 2, GFLAGS),
448243229b1SElaine Zhang COMPOSITE(SCLK_CORE_VPU, "sclk_core_vpu", mux_gpll_cpll_npll_p, 0,
449243229b1SElaine Zhang PX30_CLKSEL_CON(13), 14, 2, MFLAGS, 8, 5, DFLAGS,
450243229b1SElaine Zhang PX30_CLKGATE_CON(4), 1, GFLAGS),
451243229b1SElaine Zhang
452243229b1SElaine Zhang /*
453243229b1SElaine Zhang * Clock-Architecture Diagram 7
454243229b1SElaine Zhang */
455243229b1SElaine Zhang
456243229b1SElaine Zhang COMPOSITE_NODIV(ACLK_PERI_SRC, "aclk_peri_src", mux_gpll_cpll_p, 0,
457243229b1SElaine Zhang PX30_CLKSEL_CON(14), 15, 1, MFLAGS,
458243229b1SElaine Zhang PX30_CLKGATE_CON(5), 7, GFLAGS),
459243229b1SElaine Zhang COMPOSITE_NOMUX(ACLK_PERI_PRE, "aclk_peri_pre", "aclk_peri_src", CLK_IGNORE_UNUSED,
460243229b1SElaine Zhang PX30_CLKSEL_CON(14), 0, 5, DFLAGS,
461243229b1SElaine Zhang PX30_CLKGATE_CON(5), 8, GFLAGS),
462243229b1SElaine Zhang DIV(HCLK_PERI_PRE, "hclk_peri_pre", "aclk_peri_src", CLK_IGNORE_UNUSED,
463243229b1SElaine Zhang PX30_CLKSEL_CON(14), 8, 5, DFLAGS),
464243229b1SElaine Zhang
465243229b1SElaine Zhang /* PD_MMC_NAND */
466243229b1SElaine Zhang GATE(HCLK_MMC_NAND, "hclk_mmc_nand", "hclk_peri_pre", 0,
467243229b1SElaine Zhang PX30_CLKGATE_CON(6), 0, GFLAGS),
468e4078109SFinley Xiao COMPOSITE(SCLK_NANDC_DIV, "clk_nandc_div", mux_gpll_cpll_npll_p, 0,
469243229b1SElaine Zhang PX30_CLKSEL_CON(15), 6, 2, MFLAGS, 0, 5, DFLAGS,
470e4078109SFinley Xiao PX30_CLKGATE_CON(5), 11, GFLAGS),
471e4078109SFinley Xiao COMPOSITE(SCLK_NANDC_DIV50, "clk_nandc_div50", mux_gpll_cpll_npll_p, 0,
472e4078109SFinley Xiao PX30_CLKSEL_CON(15), 6, 2, MFLAGS, 8, 5, DFLAGS,
473e4078109SFinley Xiao PX30_CLKGATE_CON(5), 12, GFLAGS),
474e4078109SFinley Xiao COMPOSITE_NODIV(SCLK_NANDC, "clk_nandc", mux_nandc_p,
475e4078109SFinley Xiao CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
476e4078109SFinley Xiao PX30_CLKSEL_CON(15), 15, 1, MFLAGS,
477243229b1SElaine Zhang PX30_CLKGATE_CON(5), 13, GFLAGS),
478243229b1SElaine Zhang
479e4078109SFinley Xiao COMPOSITE(SCLK_SDIO_DIV, "clk_sdio_div", mux_gpll_cpll_npll_xin24m_p, 0,
480243229b1SElaine Zhang PX30_CLKSEL_CON(18), 14, 2, MFLAGS, 0, 8, DFLAGS,
481e4078109SFinley Xiao PX30_CLKGATE_CON(6), 1, GFLAGS),
482e4078109SFinley Xiao COMPOSITE_DIV_OFFSET(SCLK_SDIO_DIV50, "clk_sdio_div50",
483e4078109SFinley Xiao mux_gpll_cpll_npll_xin24m_p, 0,
484e4078109SFinley Xiao PX30_CLKSEL_CON(18), 14, 2, MFLAGS,
485e4078109SFinley Xiao PX30_CLKSEL_CON(19), 0, 8, DFLAGS,
486e4078109SFinley Xiao PX30_CLKGATE_CON(6), 2, GFLAGS),
487e4078109SFinley Xiao COMPOSITE_NODIV(SCLK_SDIO, "clk_sdio", mux_sdio_p,
488e4078109SFinley Xiao CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
489e4078109SFinley Xiao PX30_CLKSEL_CON(19), 15, 1, MFLAGS,
490243229b1SElaine Zhang PX30_CLKGATE_CON(6), 3, GFLAGS),
491243229b1SElaine Zhang
492e4078109SFinley Xiao COMPOSITE(SCLK_EMMC_DIV, "clk_emmc_div", mux_gpll_cpll_npll_xin24m_p, 0,
493243229b1SElaine Zhang PX30_CLKSEL_CON(20), 14, 2, MFLAGS, 0, 8, DFLAGS,
494e4078109SFinley Xiao PX30_CLKGATE_CON(6), 4, GFLAGS),
495e4078109SFinley Xiao COMPOSITE_DIV_OFFSET(SCLK_EMMC_DIV50, "clk_emmc_div50", mux_gpll_cpll_npll_xin24m_p, 0,
496e4078109SFinley Xiao PX30_CLKSEL_CON(20), 14, 2, MFLAGS,
497e4078109SFinley Xiao PX30_CLKSEL_CON(21), 0, 8, DFLAGS,
498e4078109SFinley Xiao PX30_CLKGATE_CON(6), 5, GFLAGS),
499e4078109SFinley Xiao COMPOSITE_NODIV(SCLK_EMMC, "clk_emmc", mux_emmc_p,
500e4078109SFinley Xiao CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
501e4078109SFinley Xiao PX30_CLKSEL_CON(21), 15, 1, MFLAGS,
502243229b1SElaine Zhang PX30_CLKGATE_CON(6), 6, GFLAGS),
503243229b1SElaine Zhang
504243229b1SElaine Zhang COMPOSITE(SCLK_SFC, "clk_sfc", mux_gpll_cpll_p, 0,
505243229b1SElaine Zhang PX30_CLKSEL_CON(22), 7, 1, MFLAGS, 0, 7, DFLAGS,
506243229b1SElaine Zhang PX30_CLKGATE_CON(6), 7, GFLAGS),
507243229b1SElaine Zhang
508243229b1SElaine Zhang MMC(SCLK_SDMMC_DRV, "sdmmc_drv", "clk_sdmmc",
509243229b1SElaine Zhang PX30_SDMMC_CON0, 1),
510243229b1SElaine Zhang MMC(SCLK_SDMMC_SAMPLE, "sdmmc_sample", "clk_sdmmc",
511243229b1SElaine Zhang PX30_SDMMC_CON1, 1),
512243229b1SElaine Zhang
513243229b1SElaine Zhang MMC(SCLK_SDIO_DRV, "sdio_drv", "clk_sdio",
514243229b1SElaine Zhang PX30_SDIO_CON0, 1),
515243229b1SElaine Zhang MMC(SCLK_SDIO_SAMPLE, "sdio_sample", "clk_sdio",
516243229b1SElaine Zhang PX30_SDIO_CON1, 1),
517243229b1SElaine Zhang
518243229b1SElaine Zhang MMC(SCLK_EMMC_DRV, "emmc_drv", "clk_emmc",
519243229b1SElaine Zhang PX30_EMMC_CON0, 1),
520243229b1SElaine Zhang MMC(SCLK_EMMC_SAMPLE, "emmc_sample", "clk_emmc",
521243229b1SElaine Zhang PX30_EMMC_CON1, 1),
522243229b1SElaine Zhang
523243229b1SElaine Zhang /* PD_SDCARD */
524243229b1SElaine Zhang GATE(0, "hclk_sdmmc_pre", "hclk_peri_pre", 0,
525243229b1SElaine Zhang PX30_CLKGATE_CON(6), 12, GFLAGS),
526e4078109SFinley Xiao COMPOSITE(SCLK_SDMMC_DIV, "clk_sdmmc_div", mux_gpll_cpll_npll_xin24m_p, 0,
527243229b1SElaine Zhang PX30_CLKSEL_CON(16), 14, 2, MFLAGS, 0, 8, DFLAGS,
528e4078109SFinley Xiao PX30_CLKGATE_CON(6), 13, GFLAGS),
529e4078109SFinley Xiao COMPOSITE_DIV_OFFSET(SCLK_SDMMC_DIV50, "clk_sdmmc_div50", mux_gpll_cpll_npll_xin24m_p, 0,
530e4078109SFinley Xiao PX30_CLKSEL_CON(16), 14, 2, MFLAGS,
531e4078109SFinley Xiao PX30_CLKSEL_CON(17), 0, 8, DFLAGS,
532e4078109SFinley Xiao PX30_CLKGATE_CON(6), 14, GFLAGS),
533e4078109SFinley Xiao COMPOSITE_NODIV(SCLK_SDMMC, "clk_sdmmc", mux_sdmmc_p,
534e4078109SFinley Xiao CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
535e4078109SFinley Xiao PX30_CLKSEL_CON(17), 15, 1, MFLAGS,
536243229b1SElaine Zhang PX30_CLKGATE_CON(6), 15, GFLAGS),
537243229b1SElaine Zhang
538243229b1SElaine Zhang /* PD_USB */
539243229b1SElaine Zhang GATE(HCLK_USB, "hclk_usb", "hclk_peri_pre", 0,
540243229b1SElaine Zhang PX30_CLKGATE_CON(7), 2, GFLAGS),
541243229b1SElaine Zhang GATE(SCLK_OTG_ADP, "clk_otg_adp", "clk_rtc32k_pmu", 0,
542243229b1SElaine Zhang PX30_CLKGATE_CON(7), 3, GFLAGS),
543243229b1SElaine Zhang
544243229b1SElaine Zhang /* PD_GMAC */
545243229b1SElaine Zhang COMPOSITE(SCLK_GMAC_SRC, "clk_gmac_src", mux_gpll_cpll_npll_p, 0,
546243229b1SElaine Zhang PX30_CLKSEL_CON(22), 14, 2, MFLAGS, 8, 5, DFLAGS,
547243229b1SElaine Zhang PX30_CLKGATE_CON(7), 11, GFLAGS),
548243229b1SElaine Zhang MUX(SCLK_GMAC, "clk_gmac", mux_gmac_p, CLK_SET_RATE_PARENT,
549243229b1SElaine Zhang PX30_CLKSEL_CON(23), 6, 1, MFLAGS),
550243229b1SElaine Zhang GATE(SCLK_MAC_REF, "clk_mac_ref", "clk_gmac", 0,
551243229b1SElaine Zhang PX30_CLKGATE_CON(7), 15, GFLAGS),
552243229b1SElaine Zhang GATE(SCLK_GMAC_RX_TX, "clk_gmac_rx_tx", "clk_gmac", 0,
553243229b1SElaine Zhang PX30_CLKGATE_CON(7), 13, GFLAGS),
554243229b1SElaine Zhang FACTOR(0, "clk_gmac_rx_tx_div2", "clk_gmac_rx_tx", 0, 1, 2),
555243229b1SElaine Zhang FACTOR(0, "clk_gmac_rx_tx_div20", "clk_gmac_rx_tx", 0, 1, 20),
556243229b1SElaine Zhang MUX(SCLK_GMAC_RMII, "clk_gmac_rmii_sel", mux_gmac_rmii_sel_p, CLK_SET_RATE_PARENT,
557243229b1SElaine Zhang PX30_CLKSEL_CON(23), 7, 1, MFLAGS),
558243229b1SElaine Zhang
559243229b1SElaine Zhang GATE(0, "aclk_gmac_pre", "aclk_peri_pre", 0,
560243229b1SElaine Zhang PX30_CLKGATE_CON(7), 10, GFLAGS),
561243229b1SElaine Zhang COMPOSITE_NOMUX(0, "pclk_gmac_pre", "aclk_gmac_pre", 0,
562243229b1SElaine Zhang PX30_CLKSEL_CON(23), 0, 4, DFLAGS,
563243229b1SElaine Zhang PX30_CLKGATE_CON(7), 12, GFLAGS),
564243229b1SElaine Zhang
565243229b1SElaine Zhang COMPOSITE(SCLK_MAC_OUT, "clk_mac_out", mux_gpll_cpll_npll_p, 0,
566243229b1SElaine Zhang PX30_CLKSEL_CON(12), 14, 2, MFLAGS, 8, 5, DFLAGS,
567243229b1SElaine Zhang PX30_CLKGATE_CON(8), 5, GFLAGS),
568243229b1SElaine Zhang
569243229b1SElaine Zhang /*
570243229b1SElaine Zhang * Clock-Architecture Diagram 8
571243229b1SElaine Zhang */
572243229b1SElaine Zhang
573243229b1SElaine Zhang /* PD_BUS */
574243229b1SElaine Zhang COMPOSITE_NODIV(ACLK_BUS_SRC, "aclk_bus_src", mux_gpll_cpll_p, CLK_IGNORE_UNUSED,
575243229b1SElaine Zhang PX30_CLKSEL_CON(23), 15, 1, MFLAGS,
576243229b1SElaine Zhang PX30_CLKGATE_CON(8), 6, GFLAGS),
577243229b1SElaine Zhang COMPOSITE_NOMUX(HCLK_BUS_PRE, "hclk_bus_pre", "aclk_bus_src", CLK_IGNORE_UNUSED,
578243229b1SElaine Zhang PX30_CLKSEL_CON(24), 0, 5, DFLAGS,
579243229b1SElaine Zhang PX30_CLKGATE_CON(8), 8, GFLAGS),
580243229b1SElaine Zhang COMPOSITE_NOMUX(ACLK_BUS_PRE, "aclk_bus_pre", "aclk_bus_src", CLK_IGNORE_UNUSED,
581243229b1SElaine Zhang PX30_CLKSEL_CON(23), 8, 5, DFLAGS,
582243229b1SElaine Zhang PX30_CLKGATE_CON(8), 7, GFLAGS),
583243229b1SElaine Zhang COMPOSITE_NOMUX(PCLK_BUS_PRE, "pclk_bus_pre", "aclk_bus_pre", CLK_IGNORE_UNUSED,
584243229b1SElaine Zhang PX30_CLKSEL_CON(24), 8, 2, DFLAGS,
585243229b1SElaine Zhang PX30_CLKGATE_CON(8), 9, GFLAGS),
586243229b1SElaine Zhang GATE(0, "pclk_top_pre", "pclk_bus_pre", CLK_IGNORE_UNUSED,
587243229b1SElaine Zhang PX30_CLKGATE_CON(8), 10, GFLAGS),
588243229b1SElaine Zhang
589243229b1SElaine Zhang COMPOSITE(0, "clk_pdm_src", mux_gpll_xin24m_npll_p, 0,
590243229b1SElaine Zhang PX30_CLKSEL_CON(26), 8, 2, MFLAGS, 0, 7, DFLAGS,
591243229b1SElaine Zhang PX30_CLKGATE_CON(9), 9, GFLAGS),
592243229b1SElaine Zhang COMPOSITE_FRACMUX(0, "clk_pdm_frac", "clk_pdm_src", CLK_SET_RATE_PARENT,
593243229b1SElaine Zhang PX30_CLKSEL_CON(27), 0,
594243229b1SElaine Zhang PX30_CLKGATE_CON(9), 10, GFLAGS,
595243229b1SElaine Zhang &px30_pdm_fracmux),
596243229b1SElaine Zhang GATE(SCLK_PDM, "clk_pdm", "clk_pdm_mux", CLK_SET_RATE_PARENT,
597243229b1SElaine Zhang PX30_CLKGATE_CON(9), 11, GFLAGS),
598243229b1SElaine Zhang
599243229b1SElaine Zhang COMPOSITE(0, "clk_i2s0_tx_src", mux_gpll_npll_p, 0,
600243229b1SElaine Zhang PX30_CLKSEL_CON(28), 8, 1, MFLAGS, 0, 7, DFLAGS,
601243229b1SElaine Zhang PX30_CLKGATE_CON(9), 12, GFLAGS),
602243229b1SElaine Zhang COMPOSITE_FRACMUX(0, "clk_i2s0_tx_frac", "clk_i2s0_tx_src", CLK_SET_RATE_PARENT,
603243229b1SElaine Zhang PX30_CLKSEL_CON(29), 0,
604243229b1SElaine Zhang PX30_CLKGATE_CON(9), 13, GFLAGS,
605243229b1SElaine Zhang &px30_i2s0_tx_fracmux),
606243229b1SElaine Zhang COMPOSITE_NODIV(SCLK_I2S0_TX, "clk_i2s0_tx", mux_i2s0_tx_rx_p, CLK_SET_RATE_PARENT,
607243229b1SElaine Zhang PX30_CLKSEL_CON(28), 12, 1, MFLAGS,
608243229b1SElaine Zhang PX30_CLKGATE_CON(9), 14, GFLAGS),
609243229b1SElaine Zhang COMPOSITE_NODIV(0, "clk_i2s0_tx_out_pre", mux_i2s0_tx_out_p, 0,
610243229b1SElaine Zhang PX30_CLKSEL_CON(28), 14, 2, MFLAGS,
611243229b1SElaine Zhang PX30_CLKGATE_CON(9), 15, GFLAGS),
612243229b1SElaine Zhang GATE(SCLK_I2S0_TX_OUT, "clk_i2s0_tx_out", "clk_i2s0_tx_out_pre", CLK_SET_RATE_PARENT,
613243229b1SElaine Zhang PX30_CLKGATE_CON(10), 8, CLK_GATE_HIWORD_MASK),
614243229b1SElaine Zhang
615243229b1SElaine Zhang COMPOSITE(0, "clk_i2s0_rx_src", mux_gpll_npll_p, 0,
616243229b1SElaine Zhang PX30_CLKSEL_CON(58), 8, 1, MFLAGS, 0, 7, DFLAGS,
617243229b1SElaine Zhang PX30_CLKGATE_CON(17), 0, GFLAGS),
618243229b1SElaine Zhang COMPOSITE_FRACMUX(0, "clk_i2s0_rx_frac", "clk_i2s0_rx_src", CLK_SET_RATE_PARENT,
619243229b1SElaine Zhang PX30_CLKSEL_CON(59), 0,
620243229b1SElaine Zhang PX30_CLKGATE_CON(17), 1, GFLAGS,
621243229b1SElaine Zhang &px30_i2s0_rx_fracmux),
622243229b1SElaine Zhang COMPOSITE_NODIV(SCLK_I2S0_RX, "clk_i2s0_rx", mux_i2s0_rx_tx_p, CLK_SET_RATE_PARENT,
623243229b1SElaine Zhang PX30_CLKSEL_CON(58), 12, 1, MFLAGS,
624243229b1SElaine Zhang PX30_CLKGATE_CON(17), 2, GFLAGS),
625243229b1SElaine Zhang COMPOSITE_NODIV(0, "clk_i2s0_rx_out_pre", mux_i2s0_rx_out_p, 0,
626243229b1SElaine Zhang PX30_CLKSEL_CON(58), 14, 2, MFLAGS,
627243229b1SElaine Zhang PX30_CLKGATE_CON(17), 3, GFLAGS),
628243229b1SElaine Zhang GATE(SCLK_I2S0_RX_OUT, "clk_i2s0_rx_out", "clk_i2s0_rx_out_pre", CLK_SET_RATE_PARENT,
629243229b1SElaine Zhang PX30_CLKGATE_CON(10), 11, CLK_GATE_HIWORD_MASK),
630243229b1SElaine Zhang
631243229b1SElaine Zhang COMPOSITE(0, "clk_i2s1_src", mux_gpll_npll_p, 0,
632243229b1SElaine Zhang PX30_CLKSEL_CON(30), 8, 1, MFLAGS, 0, 7, DFLAGS,
633243229b1SElaine Zhang PX30_CLKGATE_CON(10), 0, GFLAGS),
634243229b1SElaine Zhang COMPOSITE_FRACMUX(0, "clk_i2s1_frac", "clk_i2s1_src", CLK_SET_RATE_PARENT,
635243229b1SElaine Zhang PX30_CLKSEL_CON(31), 0,
636243229b1SElaine Zhang PX30_CLKGATE_CON(10), 1, GFLAGS,
637243229b1SElaine Zhang &px30_i2s1_fracmux),
638243229b1SElaine Zhang GATE(SCLK_I2S1, "clk_i2s1", "clk_i2s1_mux", CLK_SET_RATE_PARENT,
639243229b1SElaine Zhang PX30_CLKGATE_CON(10), 2, GFLAGS),
640243229b1SElaine Zhang COMPOSITE_NODIV(0, "clk_i2s1_out_pre", mux_i2s1_out_p, 0,
641243229b1SElaine Zhang PX30_CLKSEL_CON(30), 15, 1, MFLAGS,
642243229b1SElaine Zhang PX30_CLKGATE_CON(10), 3, GFLAGS),
643243229b1SElaine Zhang GATE(SCLK_I2S1_OUT, "clk_i2s1_out", "clk_i2s1_out_pre", CLK_SET_RATE_PARENT,
644243229b1SElaine Zhang PX30_CLKGATE_CON(10), 9, CLK_GATE_HIWORD_MASK),
645243229b1SElaine Zhang
646243229b1SElaine Zhang COMPOSITE(0, "clk_i2s2_src", mux_gpll_npll_p, 0,
647243229b1SElaine Zhang PX30_CLKSEL_CON(32), 8, 1, MFLAGS, 0, 7, DFLAGS,
648243229b1SElaine Zhang PX30_CLKGATE_CON(10), 4, GFLAGS),
649243229b1SElaine Zhang COMPOSITE_FRACMUX(0, "clk_i2s2_frac", "clk_i2s2_src", CLK_SET_RATE_PARENT,
650243229b1SElaine Zhang PX30_CLKSEL_CON(33), 0,
651243229b1SElaine Zhang PX30_CLKGATE_CON(10), 5, GFLAGS,
652243229b1SElaine Zhang &px30_i2s2_fracmux),
653243229b1SElaine Zhang GATE(SCLK_I2S2, "clk_i2s2", "clk_i2s2_mux", CLK_SET_RATE_PARENT,
654243229b1SElaine Zhang PX30_CLKGATE_CON(10), 6, GFLAGS),
655243229b1SElaine Zhang COMPOSITE_NODIV(0, "clk_i2s2_out_pre", mux_i2s2_out_p, 0,
656243229b1SElaine Zhang PX30_CLKSEL_CON(32), 15, 1, MFLAGS,
657243229b1SElaine Zhang PX30_CLKGATE_CON(10), 7, GFLAGS),
658243229b1SElaine Zhang GATE(SCLK_I2S2_OUT, "clk_i2s2_out", "clk_i2s2_out_pre", CLK_SET_RATE_PARENT,
659243229b1SElaine Zhang PX30_CLKGATE_CON(10), 10, CLK_GATE_HIWORD_MASK),
660243229b1SElaine Zhang
661243229b1SElaine Zhang COMPOSITE(SCLK_UART1_SRC, "clk_uart1_src", mux_uart_src_p, CLK_SET_RATE_NO_REPARENT,
662243229b1SElaine Zhang PX30_CLKSEL_CON(34), 14, 2, MFLAGS, 0, 5, DFLAGS,
663243229b1SElaine Zhang PX30_CLKGATE_CON(10), 12, GFLAGS),
664243229b1SElaine Zhang COMPOSITE_NOMUX_HALFDIV(0, "clk_uart1_np5", "clk_uart1_src", 0,
665243229b1SElaine Zhang PX30_CLKSEL_CON(35), 0, 5, DFLAGS,
666243229b1SElaine Zhang PX30_CLKGATE_CON(10), 13, GFLAGS),
667243229b1SElaine Zhang COMPOSITE_FRACMUX(0, "clk_uart1_frac", "clk_uart1_src", CLK_SET_RATE_PARENT,
668243229b1SElaine Zhang PX30_CLKSEL_CON(36), 0,
669243229b1SElaine Zhang PX30_CLKGATE_CON(10), 14, GFLAGS,
670243229b1SElaine Zhang &px30_uart1_fracmux),
671243229b1SElaine Zhang GATE(SCLK_UART1, "clk_uart1", "clk_uart1_mux", CLK_SET_RATE_PARENT,
672243229b1SElaine Zhang PX30_CLKGATE_CON(10), 15, GFLAGS),
673243229b1SElaine Zhang
674243229b1SElaine Zhang COMPOSITE(SCLK_UART2_SRC, "clk_uart2_src", mux_uart_src_p, 0,
675243229b1SElaine Zhang PX30_CLKSEL_CON(37), 14, 2, MFLAGS, 0, 5, DFLAGS,
676243229b1SElaine Zhang PX30_CLKGATE_CON(11), 0, GFLAGS),
677243229b1SElaine Zhang COMPOSITE_NOMUX_HALFDIV(0, "clk_uart2_np5", "clk_uart2_src", 0,
678243229b1SElaine Zhang PX30_CLKSEL_CON(38), 0, 5, DFLAGS,
679243229b1SElaine Zhang PX30_CLKGATE_CON(11), 1, GFLAGS),
680243229b1SElaine Zhang COMPOSITE_FRACMUX(0, "clk_uart2_frac", "clk_uart2_src", CLK_SET_RATE_PARENT,
681243229b1SElaine Zhang PX30_CLKSEL_CON(39), 0,
682243229b1SElaine Zhang PX30_CLKGATE_CON(11), 2, GFLAGS,
683243229b1SElaine Zhang &px30_uart2_fracmux),
684243229b1SElaine Zhang GATE(SCLK_UART2, "clk_uart2", "clk_uart2_mux", CLK_SET_RATE_PARENT,
685243229b1SElaine Zhang PX30_CLKGATE_CON(11), 3, GFLAGS),
686243229b1SElaine Zhang
687243229b1SElaine Zhang COMPOSITE(0, "clk_uart3_src", mux_uart_src_p, 0,
688243229b1SElaine Zhang PX30_CLKSEL_CON(40), 14, 2, MFLAGS, 0, 5, DFLAGS,
689243229b1SElaine Zhang PX30_CLKGATE_CON(11), 4, GFLAGS),
690243229b1SElaine Zhang COMPOSITE_NOMUX_HALFDIV(0, "clk_uart3_np5", "clk_uart3_src", 0,
691243229b1SElaine Zhang PX30_CLKSEL_CON(41), 0, 5, DFLAGS,
692243229b1SElaine Zhang PX30_CLKGATE_CON(11), 5, GFLAGS),
693243229b1SElaine Zhang COMPOSITE_FRACMUX(0, "clk_uart3_frac", "clk_uart3_src", CLK_SET_RATE_PARENT,
694243229b1SElaine Zhang PX30_CLKSEL_CON(42), 0,
695243229b1SElaine Zhang PX30_CLKGATE_CON(11), 6, GFLAGS,
696243229b1SElaine Zhang &px30_uart3_fracmux),
697243229b1SElaine Zhang GATE(SCLK_UART3, "clk_uart3", "clk_uart3_mux", CLK_SET_RATE_PARENT,
698243229b1SElaine Zhang PX30_CLKGATE_CON(11), 7, GFLAGS),
699243229b1SElaine Zhang
700243229b1SElaine Zhang COMPOSITE(0, "clk_uart4_src", mux_uart_src_p, 0,
701243229b1SElaine Zhang PX30_CLKSEL_CON(43), 14, 2, MFLAGS, 0, 5, DFLAGS,
702243229b1SElaine Zhang PX30_CLKGATE_CON(11), 8, GFLAGS),
703243229b1SElaine Zhang COMPOSITE_NOMUX_HALFDIV(0, "clk_uart4_np5", "clk_uart4_src", 0,
704243229b1SElaine Zhang PX30_CLKSEL_CON(44), 0, 5, DFLAGS,
705243229b1SElaine Zhang PX30_CLKGATE_CON(11), 9, GFLAGS),
706243229b1SElaine Zhang COMPOSITE_FRACMUX(0, "clk_uart4_frac", "clk_uart4_src", CLK_SET_RATE_PARENT,
707243229b1SElaine Zhang PX30_CLKSEL_CON(45), 0,
708243229b1SElaine Zhang PX30_CLKGATE_CON(11), 10, GFLAGS,
709243229b1SElaine Zhang &px30_uart4_fracmux),
710243229b1SElaine Zhang GATE(SCLK_UART4, "clk_uart4", "clk_uart4_mux", CLK_SET_RATE_PARENT,
711243229b1SElaine Zhang PX30_CLKGATE_CON(11), 11, GFLAGS),
712243229b1SElaine Zhang
713243229b1SElaine Zhang COMPOSITE(0, "clk_uart5_src", mux_uart_src_p, 0,
714243229b1SElaine Zhang PX30_CLKSEL_CON(46), 14, 2, MFLAGS, 0, 5, DFLAGS,
715243229b1SElaine Zhang PX30_CLKGATE_CON(11), 12, GFLAGS),
716243229b1SElaine Zhang COMPOSITE_NOMUX_HALFDIV(0, "clk_uart5_np5", "clk_uart5_src", 0,
717243229b1SElaine Zhang PX30_CLKSEL_CON(47), 0, 5, DFLAGS,
718243229b1SElaine Zhang PX30_CLKGATE_CON(11), 13, GFLAGS),
719243229b1SElaine Zhang COMPOSITE_FRACMUX(0, "clk_uart5_frac", "clk_uart5_src", CLK_SET_RATE_PARENT,
720243229b1SElaine Zhang PX30_CLKSEL_CON(48), 0,
721243229b1SElaine Zhang PX30_CLKGATE_CON(11), 14, GFLAGS,
722243229b1SElaine Zhang &px30_uart5_fracmux),
723243229b1SElaine Zhang GATE(SCLK_UART5, "clk_uart5", "clk_uart5_mux", CLK_SET_RATE_PARENT,
724243229b1SElaine Zhang PX30_CLKGATE_CON(11), 15, GFLAGS),
725243229b1SElaine Zhang
726243229b1SElaine Zhang COMPOSITE(SCLK_I2C0, "clk_i2c0", mux_gpll_xin24m_p, 0,
727243229b1SElaine Zhang PX30_CLKSEL_CON(49), 7, 1, MFLAGS, 0, 7, DFLAGS,
728243229b1SElaine Zhang PX30_CLKGATE_CON(12), 0, GFLAGS),
729243229b1SElaine Zhang COMPOSITE(SCLK_I2C1, "clk_i2c1", mux_gpll_xin24m_p, 0,
730243229b1SElaine Zhang PX30_CLKSEL_CON(49), 15, 1, MFLAGS, 8, 7, DFLAGS,
731243229b1SElaine Zhang PX30_CLKGATE_CON(12), 1, GFLAGS),
732243229b1SElaine Zhang COMPOSITE(SCLK_I2C2, "clk_i2c2", mux_gpll_xin24m_p, 0,
733243229b1SElaine Zhang PX30_CLKSEL_CON(50), 7, 1, MFLAGS, 0, 7, DFLAGS,
734243229b1SElaine Zhang PX30_CLKGATE_CON(12), 2, GFLAGS),
735243229b1SElaine Zhang COMPOSITE(SCLK_I2C3, "clk_i2c3", mux_gpll_xin24m_p, 0,
736243229b1SElaine Zhang PX30_CLKSEL_CON(50), 15, 1, MFLAGS, 8, 7, DFLAGS,
737243229b1SElaine Zhang PX30_CLKGATE_CON(12), 3, GFLAGS),
738243229b1SElaine Zhang COMPOSITE(SCLK_PWM0, "clk_pwm0", mux_gpll_xin24m_p, 0,
739243229b1SElaine Zhang PX30_CLKSEL_CON(52), 7, 1, MFLAGS, 0, 7, DFLAGS,
740243229b1SElaine Zhang PX30_CLKGATE_CON(12), 5, GFLAGS),
741243229b1SElaine Zhang COMPOSITE(SCLK_PWM1, "clk_pwm1", mux_gpll_xin24m_p, 0,
742243229b1SElaine Zhang PX30_CLKSEL_CON(52), 15, 1, MFLAGS, 8, 7, DFLAGS,
743243229b1SElaine Zhang PX30_CLKGATE_CON(12), 6, GFLAGS),
744243229b1SElaine Zhang COMPOSITE(SCLK_SPI0, "clk_spi0", mux_gpll_xin24m_p, 0,
745243229b1SElaine Zhang PX30_CLKSEL_CON(53), 7, 1, MFLAGS, 0, 7, DFLAGS,
746243229b1SElaine Zhang PX30_CLKGATE_CON(12), 7, GFLAGS),
747243229b1SElaine Zhang COMPOSITE(SCLK_SPI1, "clk_spi1", mux_gpll_xin24m_p, 0,
748243229b1SElaine Zhang PX30_CLKSEL_CON(53), 15, 1, MFLAGS, 8, 7, DFLAGS,
749243229b1SElaine Zhang PX30_CLKGATE_CON(12), 8, GFLAGS),
750243229b1SElaine Zhang
751243229b1SElaine Zhang GATE(SCLK_TIMER0, "sclk_timer0", "xin24m", 0,
752243229b1SElaine Zhang PX30_CLKGATE_CON(13), 0, GFLAGS),
753243229b1SElaine Zhang GATE(SCLK_TIMER1, "sclk_timer1", "xin24m", 0,
754243229b1SElaine Zhang PX30_CLKGATE_CON(13), 1, GFLAGS),
755243229b1SElaine Zhang GATE(SCLK_TIMER2, "sclk_timer2", "xin24m", 0,
756243229b1SElaine Zhang PX30_CLKGATE_CON(13), 2, GFLAGS),
757243229b1SElaine Zhang GATE(SCLK_TIMER3, "sclk_timer3", "xin24m", 0,
758243229b1SElaine Zhang PX30_CLKGATE_CON(13), 3, GFLAGS),
759243229b1SElaine Zhang GATE(SCLK_TIMER4, "sclk_timer4", "xin24m", 0,
760243229b1SElaine Zhang PX30_CLKGATE_CON(13), 4, GFLAGS),
761243229b1SElaine Zhang GATE(SCLK_TIMER5, "sclk_timer5", "xin24m", 0,
762243229b1SElaine Zhang PX30_CLKGATE_CON(13), 5, GFLAGS),
763243229b1SElaine Zhang
764243229b1SElaine Zhang COMPOSITE_NOMUX(SCLK_TSADC, "clk_tsadc", "xin24m", 0,
765243229b1SElaine Zhang PX30_CLKSEL_CON(54), 0, 11, DFLAGS,
766243229b1SElaine Zhang PX30_CLKGATE_CON(12), 9, GFLAGS),
767243229b1SElaine Zhang COMPOSITE_NOMUX(SCLK_SARADC, "clk_saradc", "xin24m", 0,
768243229b1SElaine Zhang PX30_CLKSEL_CON(55), 0, 11, DFLAGS,
769243229b1SElaine Zhang PX30_CLKGATE_CON(12), 10, GFLAGS),
770243229b1SElaine Zhang COMPOSITE_NOMUX(SCLK_OTP, "clk_otp", "xin24m", 0,
771243229b1SElaine Zhang PX30_CLKSEL_CON(56), 0, 3, DFLAGS,
772243229b1SElaine Zhang PX30_CLKGATE_CON(12), 11, GFLAGS),
773243229b1SElaine Zhang COMPOSITE_NOMUX(SCLK_OTP_USR, "clk_otp_usr", "clk_otp", 0,
774243229b1SElaine Zhang PX30_CLKSEL_CON(56), 4, 2, DFLAGS,
775243229b1SElaine Zhang PX30_CLKGATE_CON(13), 6, GFLAGS),
776243229b1SElaine Zhang
777243229b1SElaine Zhang GATE(0, "clk_cpu_boost", "xin24m", CLK_IGNORE_UNUSED,
778243229b1SElaine Zhang PX30_CLKGATE_CON(12), 12, GFLAGS),
779243229b1SElaine Zhang
780243229b1SElaine Zhang /* PD_CRYPTO */
781243229b1SElaine Zhang GATE(0, "aclk_crypto_pre", "aclk_bus_pre", 0,
782243229b1SElaine Zhang PX30_CLKGATE_CON(8), 12, GFLAGS),
783243229b1SElaine Zhang GATE(0, "hclk_crypto_pre", "hclk_bus_pre", 0,
784243229b1SElaine Zhang PX30_CLKGATE_CON(8), 13, GFLAGS),
785243229b1SElaine Zhang COMPOSITE(SCLK_CRYPTO, "clk_crypto", mux_gpll_cpll_npll_p, 0,
786243229b1SElaine Zhang PX30_CLKSEL_CON(25), 6, 2, MFLAGS, 0, 5, DFLAGS,
787243229b1SElaine Zhang PX30_CLKGATE_CON(8), 14, GFLAGS),
788243229b1SElaine Zhang COMPOSITE(SCLK_CRYPTO_APK, "clk_crypto_apk", mux_gpll_cpll_npll_p, 0,
789243229b1SElaine Zhang PX30_CLKSEL_CON(25), 14, 2, MFLAGS, 8, 5, DFLAGS,
790243229b1SElaine Zhang PX30_CLKGATE_CON(8), 15, GFLAGS),
791243229b1SElaine Zhang
792243229b1SElaine Zhang /*
793243229b1SElaine Zhang * Clock-Architecture Diagram 9
794243229b1SElaine Zhang */
795243229b1SElaine Zhang
796243229b1SElaine Zhang /* PD_BUS_TOP */
797243229b1SElaine Zhang GATE(0, "pclk_top_niu", "pclk_top_pre", CLK_IGNORE_UNUSED, PX30_CLKGATE_CON(16), 0, GFLAGS),
798243229b1SElaine Zhang GATE(0, "pclk_top_cru", "pclk_top_pre", CLK_IGNORE_UNUSED, PX30_CLKGATE_CON(16), 1, GFLAGS),
799243229b1SElaine Zhang GATE(PCLK_OTP_PHY, "pclk_otp_phy", "pclk_top_pre", CLK_IGNORE_UNUSED, PX30_CLKGATE_CON(16), 2, GFLAGS),
800243229b1SElaine Zhang GATE(0, "pclk_ddrphy", "pclk_top_pre", CLK_IGNORE_UNUSED, PX30_CLKGATE_CON(16), 3, GFLAGS),
801243229b1SElaine Zhang GATE(PCLK_MIPIDSIPHY, "pclk_mipidsiphy", "pclk_top_pre", 0, PX30_CLKGATE_CON(16), 4, GFLAGS),
802243229b1SElaine Zhang GATE(PCLK_MIPICSIPHY, "pclk_mipicsiphy", "pclk_top_pre", 0, PX30_CLKGATE_CON(16), 5, GFLAGS),
8033b0b4ebfSHeiko Stuebner GATE(PCLK_USB_GRF, "pclk_usb_grf", "pclk_top_pre", 0, PX30_CLKGATE_CON(16), 6, GFLAGS),
804243229b1SElaine Zhang GATE(0, "pclk_cpu_hoost", "pclk_top_pre", CLK_IGNORE_UNUSED, PX30_CLKGATE_CON(16), 7, GFLAGS),
805243229b1SElaine Zhang
806243229b1SElaine Zhang /* PD_VI */
8078a88550fSHeiko Stuebner GATE(0, "aclk_vi_niu", "aclk_vi_pre", 0, PX30_CLKGATE_CON(4), 15, GFLAGS),
808243229b1SElaine Zhang GATE(ACLK_CIF, "aclk_cif", "aclk_vi_pre", 0, PX30_CLKGATE_CON(5), 1, GFLAGS),
809243229b1SElaine Zhang GATE(ACLK_ISP, "aclk_isp", "aclk_vi_pre", 0, PX30_CLKGATE_CON(5), 3, GFLAGS),
8108a88550fSHeiko Stuebner GATE(0, "hclk_vi_niu", "hclk_vi_pre", 0, PX30_CLKGATE_CON(5), 0, GFLAGS),
811243229b1SElaine Zhang GATE(HCLK_CIF, "hclk_cif", "hclk_vi_pre", 0, PX30_CLKGATE_CON(5), 2, GFLAGS),
812243229b1SElaine Zhang GATE(HCLK_ISP, "hclk_isp", "hclk_vi_pre", 0, PX30_CLKGATE_CON(5), 4, GFLAGS),
813243229b1SElaine Zhang
814243229b1SElaine Zhang /* PD_VO */
8158a88550fSHeiko Stuebner GATE(0, "aclk_vo_niu", "aclk_vo_pre", 0, PX30_CLKGATE_CON(3), 0, GFLAGS),
816243229b1SElaine Zhang GATE(ACLK_VOPB, "aclk_vopb", "aclk_vo_pre", 0, PX30_CLKGATE_CON(3), 3, GFLAGS),
817243229b1SElaine Zhang GATE(ACLK_RGA, "aclk_rga", "aclk_vo_pre", 0, PX30_CLKGATE_CON(3), 7, GFLAGS),
818243229b1SElaine Zhang GATE(ACLK_VOPL, "aclk_vopl", "aclk_vo_pre", 0, PX30_CLKGATE_CON(3), 5, GFLAGS),
819243229b1SElaine Zhang
8208a88550fSHeiko Stuebner GATE(0, "hclk_vo_niu", "hclk_vo_pre", 0, PX30_CLKGATE_CON(3), 1, GFLAGS),
821243229b1SElaine Zhang GATE(HCLK_VOPB, "hclk_vopb", "hclk_vo_pre", 0, PX30_CLKGATE_CON(3), 4, GFLAGS),
822243229b1SElaine Zhang GATE(HCLK_RGA, "hclk_rga", "hclk_vo_pre", 0, PX30_CLKGATE_CON(3), 8, GFLAGS),
823243229b1SElaine Zhang GATE(HCLK_VOPL, "hclk_vopl", "hclk_vo_pre", 0, PX30_CLKGATE_CON(3), 6, GFLAGS),
824243229b1SElaine Zhang
8258a88550fSHeiko Stuebner GATE(0, "pclk_vo_niu", "pclk_vo_pre", 0, PX30_CLKGATE_CON(3), 2, GFLAGS),
826243229b1SElaine Zhang GATE(PCLK_MIPI_DSI, "pclk_mipi_dsi", "pclk_vo_pre", 0, PX30_CLKGATE_CON(3), 9, GFLAGS),
827243229b1SElaine Zhang
828243229b1SElaine Zhang /* PD_BUS */
829243229b1SElaine Zhang GATE(0, "aclk_bus_niu", "aclk_bus_pre", CLK_IGNORE_UNUSED, PX30_CLKGATE_CON(13), 8, GFLAGS),
830243229b1SElaine Zhang GATE(0, "aclk_intmem", "aclk_bus_pre", CLK_IGNORE_UNUSED, PX30_CLKGATE_CON(13), 11, GFLAGS),
831243229b1SElaine Zhang GATE(ACLK_GIC, "aclk_gic", "aclk_bus_pre", CLK_IGNORE_UNUSED, PX30_CLKGATE_CON(13), 12, GFLAGS),
832243229b1SElaine Zhang GATE(ACLK_DCF, "aclk_dcf", "aclk_bus_pre", 0, PX30_CLKGATE_CON(13), 15, GFLAGS),
833243229b1SElaine Zhang
834e4488e45SHeiko Stuebner /* aclk_dmac is controlled by sgrf_soc_con1[11]. */
835e4488e45SHeiko Stuebner SGRF_GATE(ACLK_DMAC, "aclk_dmac", "aclk_bus_pre"),
836e4488e45SHeiko Stuebner
837243229b1SElaine Zhang GATE(0, "hclk_bus_niu", "hclk_bus_pre", CLK_IGNORE_UNUSED, PX30_CLKGATE_CON(13), 9, GFLAGS),
838243229b1SElaine Zhang GATE(0, "hclk_rom", "hclk_bus_pre", CLK_IGNORE_UNUSED, PX30_CLKGATE_CON(13), 14, GFLAGS),
839243229b1SElaine Zhang GATE(HCLK_PDM, "hclk_pdm", "hclk_bus_pre", 0, PX30_CLKGATE_CON(14), 1, GFLAGS),
840243229b1SElaine Zhang GATE(HCLK_I2S0, "hclk_i2s0", "hclk_bus_pre", 0, PX30_CLKGATE_CON(14), 2, GFLAGS),
841243229b1SElaine Zhang GATE(HCLK_I2S1, "hclk_i2s1", "hclk_bus_pre", 0, PX30_CLKGATE_CON(14), 3, GFLAGS),
842243229b1SElaine Zhang GATE(HCLK_I2S2, "hclk_i2s2", "hclk_bus_pre", 0, PX30_CLKGATE_CON(14), 4, GFLAGS),
843243229b1SElaine Zhang
844243229b1SElaine Zhang GATE(0, "pclk_bus_niu", "pclk_bus_pre", CLK_IGNORE_UNUSED, PX30_CLKGATE_CON(13), 10, GFLAGS),
845243229b1SElaine Zhang GATE(PCLK_DCF, "pclk_dcf", "pclk_bus_pre", 0, PX30_CLKGATE_CON(14), 0, GFLAGS),
846243229b1SElaine Zhang GATE(PCLK_UART1, "pclk_uart1", "pclk_bus_pre", 0, PX30_CLKGATE_CON(14), 5, GFLAGS),
847243229b1SElaine Zhang GATE(PCLK_UART2, "pclk_uart2", "pclk_bus_pre", 0, PX30_CLKGATE_CON(14), 6, GFLAGS),
848243229b1SElaine Zhang GATE(PCLK_UART3, "pclk_uart3", "pclk_bus_pre", 0, PX30_CLKGATE_CON(14), 7, GFLAGS),
849243229b1SElaine Zhang GATE(PCLK_UART4, "pclk_uart4", "pclk_bus_pre", 0, PX30_CLKGATE_CON(14), 8, GFLAGS),
850243229b1SElaine Zhang GATE(PCLK_UART5, "pclk_uart5", "pclk_bus_pre", 0, PX30_CLKGATE_CON(14), 9, GFLAGS),
851243229b1SElaine Zhang GATE(PCLK_I2C0, "pclk_i2c0", "pclk_bus_pre", 0, PX30_CLKGATE_CON(14), 10, GFLAGS),
852243229b1SElaine Zhang GATE(PCLK_I2C1, "pclk_i2c1", "pclk_bus_pre", 0, PX30_CLKGATE_CON(14), 11, GFLAGS),
853243229b1SElaine Zhang GATE(PCLK_I2C2, "pclk_i2c2", "pclk_bus_pre", 0, PX30_CLKGATE_CON(14), 12, GFLAGS),
854243229b1SElaine Zhang GATE(PCLK_I2C3, "pclk_i2c3", "pclk_bus_pre", 0, PX30_CLKGATE_CON(14), 13, GFLAGS),
855243229b1SElaine Zhang GATE(PCLK_I2C4, "pclk_i2c4", "pclk_bus_pre", 0, PX30_CLKGATE_CON(14), 14, GFLAGS),
856243229b1SElaine Zhang GATE(PCLK_PWM0, "pclk_pwm0", "pclk_bus_pre", 0, PX30_CLKGATE_CON(14), 15, GFLAGS),
857243229b1SElaine Zhang GATE(PCLK_PWM1, "pclk_pwm1", "pclk_bus_pre", 0, PX30_CLKGATE_CON(15), 0, GFLAGS),
858243229b1SElaine Zhang GATE(PCLK_SPI0, "pclk_spi0", "pclk_bus_pre", 0, PX30_CLKGATE_CON(15), 1, GFLAGS),
859243229b1SElaine Zhang GATE(PCLK_SPI1, "pclk_spi1", "pclk_bus_pre", 0, PX30_CLKGATE_CON(15), 2, GFLAGS),
860243229b1SElaine Zhang GATE(PCLK_SARADC, "pclk_saradc", "pclk_bus_pre", 0, PX30_CLKGATE_CON(15), 3, GFLAGS),
861243229b1SElaine Zhang GATE(PCLK_TSADC, "pclk_tsadc", "pclk_bus_pre", 0, PX30_CLKGATE_CON(15), 4, GFLAGS),
862243229b1SElaine Zhang GATE(PCLK_TIMER, "pclk_timer", "pclk_bus_pre", 0, PX30_CLKGATE_CON(15), 5, GFLAGS),
863243229b1SElaine Zhang GATE(PCLK_OTP_NS, "pclk_otp_ns", "pclk_bus_pre", CLK_IGNORE_UNUSED, PX30_CLKGATE_CON(15), 6, GFLAGS),
864243229b1SElaine Zhang GATE(PCLK_WDT_NS, "pclk_wdt_ns", "pclk_bus_pre", CLK_IGNORE_UNUSED, PX30_CLKGATE_CON(15), 7, GFLAGS),
865243229b1SElaine Zhang GATE(PCLK_GPIO1, "pclk_gpio1", "pclk_bus_pre", 0, PX30_CLKGATE_CON(15), 8, GFLAGS),
866243229b1SElaine Zhang GATE(PCLK_GPIO2, "pclk_gpio2", "pclk_bus_pre", 0, PX30_CLKGATE_CON(15), 9, GFLAGS),
867243229b1SElaine Zhang GATE(PCLK_GPIO3, "pclk_gpio3", "pclk_bus_pre", 0, PX30_CLKGATE_CON(15), 10, GFLAGS),
868243229b1SElaine Zhang GATE(0, "pclk_grf", "pclk_bus_pre", CLK_IGNORE_UNUSED, PX30_CLKGATE_CON(15), 11, GFLAGS),
869243229b1SElaine Zhang GATE(0, "pclk_sgrf", "pclk_bus_pre", CLK_IGNORE_UNUSED, PX30_CLKGATE_CON(15), 12, GFLAGS),
870243229b1SElaine Zhang
871243229b1SElaine Zhang /* PD_VPU */
872243229b1SElaine Zhang GATE(0, "hclk_vpu_niu", "hclk_vpu_pre", CLK_IGNORE_UNUSED, PX30_CLKGATE_CON(4), 7, GFLAGS),
873243229b1SElaine Zhang GATE(HCLK_VPU, "hclk_vpu", "hclk_vpu_pre", 0, PX30_CLKGATE_CON(4), 6, GFLAGS),
874243229b1SElaine Zhang GATE(0, "aclk_vpu_niu", "aclk_vpu_pre", CLK_IGNORE_UNUSED, PX30_CLKGATE_CON(4), 5, GFLAGS),
875243229b1SElaine Zhang GATE(ACLK_VPU, "aclk_vpu", "aclk_vpu_pre", 0, PX30_CLKGATE_CON(4), 4, GFLAGS),
876243229b1SElaine Zhang
877243229b1SElaine Zhang /* PD_CRYPTO */
878243229b1SElaine Zhang GATE(0, "hclk_crypto_niu", "hclk_crypto_pre", CLK_IGNORE_UNUSED, PX30_CLKGATE_CON(9), 3, GFLAGS),
879243229b1SElaine Zhang GATE(HCLK_CRYPTO, "hclk_crypto", "hclk_crypto_pre", 0, PX30_CLKGATE_CON(9), 5, GFLAGS),
880243229b1SElaine Zhang GATE(0, "aclk_crypto_niu", "aclk_crypto_pre", CLK_IGNORE_UNUSED, PX30_CLKGATE_CON(9), 2, GFLAGS),
881243229b1SElaine Zhang GATE(ACLK_CRYPTO, "aclk_crypto", "aclk_crypto_pre", 0, PX30_CLKGATE_CON(9), 4, GFLAGS),
882243229b1SElaine Zhang
883243229b1SElaine Zhang /* PD_SDCARD */
884243229b1SElaine Zhang GATE(0, "hclk_sdmmc_niu", "hclk_sdmmc_pre", CLK_IGNORE_UNUSED, PX30_CLKGATE_CON(7), 0, GFLAGS),
885243229b1SElaine Zhang GATE(HCLK_SDMMC, "hclk_sdmmc", "hclk_sdmmc_pre", 0, PX30_CLKGATE_CON(7), 1, GFLAGS),
886243229b1SElaine Zhang
887243229b1SElaine Zhang /* PD_PERI */
888243229b1SElaine Zhang GATE(0, "aclk_peri_niu", "aclk_peri_pre", CLK_IGNORE_UNUSED, PX30_CLKGATE_CON(5), 9, GFLAGS),
889243229b1SElaine Zhang
890243229b1SElaine Zhang /* PD_MMC_NAND */
891243229b1SElaine Zhang GATE(HCLK_NANDC, "hclk_nandc", "hclk_mmc_nand", 0, PX30_CLKGATE_CON(5), 15, GFLAGS),
892243229b1SElaine Zhang GATE(0, "hclk_mmc_nand_niu", "hclk_mmc_nand", CLK_IGNORE_UNUSED, PX30_CLKGATE_CON(6), 8, GFLAGS),
893243229b1SElaine Zhang GATE(HCLK_SDIO, "hclk_sdio", "hclk_mmc_nand", 0, PX30_CLKGATE_CON(6), 9, GFLAGS),
894243229b1SElaine Zhang GATE(HCLK_EMMC, "hclk_emmc", "hclk_mmc_nand", 0, PX30_CLKGATE_CON(6), 10, GFLAGS),
895243229b1SElaine Zhang GATE(HCLK_SFC, "hclk_sfc", "hclk_mmc_nand", 0, PX30_CLKGATE_CON(6), 11, GFLAGS),
896243229b1SElaine Zhang
897243229b1SElaine Zhang /* PD_USB */
898243229b1SElaine Zhang GATE(0, "hclk_usb_niu", "hclk_usb", CLK_IGNORE_UNUSED, PX30_CLKGATE_CON(7), 4, GFLAGS),
899243229b1SElaine Zhang GATE(HCLK_OTG, "hclk_otg", "hclk_usb", 0, PX30_CLKGATE_CON(7), 5, GFLAGS),
900243229b1SElaine Zhang GATE(HCLK_HOST, "hclk_host", "hclk_usb", 0, PX30_CLKGATE_CON(7), 6, GFLAGS),
901243229b1SElaine Zhang GATE(HCLK_HOST_ARB, "hclk_host_arb", "hclk_usb", CLK_IGNORE_UNUSED, PX30_CLKGATE_CON(7), 8, GFLAGS),
902243229b1SElaine Zhang
903243229b1SElaine Zhang /* PD_GMAC */
904243229b1SElaine Zhang GATE(0, "aclk_gmac_niu", "aclk_gmac_pre", CLK_IGNORE_UNUSED,
905243229b1SElaine Zhang PX30_CLKGATE_CON(8), 0, GFLAGS),
906243229b1SElaine Zhang GATE(ACLK_GMAC, "aclk_gmac", "aclk_gmac_pre", 0,
907243229b1SElaine Zhang PX30_CLKGATE_CON(8), 2, GFLAGS),
908243229b1SElaine Zhang GATE(0, "pclk_gmac_niu", "pclk_gmac_pre", CLK_IGNORE_UNUSED,
909243229b1SElaine Zhang PX30_CLKGATE_CON(8), 1, GFLAGS),
910243229b1SElaine Zhang GATE(PCLK_GMAC, "pclk_gmac", "pclk_gmac_pre", 0,
911243229b1SElaine Zhang PX30_CLKGATE_CON(8), 3, GFLAGS),
912243229b1SElaine Zhang };
913243229b1SElaine Zhang
914243229b1SElaine Zhang static struct rockchip_clk_branch px30_clk_pmu_branches[] __initdata = {
915243229b1SElaine Zhang /*
916243229b1SElaine Zhang * Clock-Architecture Diagram 2
917243229b1SElaine Zhang */
918243229b1SElaine Zhang
919243229b1SElaine Zhang COMPOSITE_FRACMUX(0, "clk_rtc32k_frac", "xin24m", CLK_IGNORE_UNUSED,
920243229b1SElaine Zhang PX30_PMU_CLKSEL_CON(1), 0,
921243229b1SElaine Zhang PX30_PMU_CLKGATE_CON(0), 13, GFLAGS,
922243229b1SElaine Zhang &px30_rtc32k_pmu_fracmux),
923243229b1SElaine Zhang
924243229b1SElaine Zhang COMPOSITE_NOMUX(XIN24M_DIV, "xin24m_div", "xin24m", CLK_IGNORE_UNUSED,
925243229b1SElaine Zhang PX30_PMU_CLKSEL_CON(0), 8, 5, DFLAGS,
926243229b1SElaine Zhang PX30_PMU_CLKGATE_CON(0), 12, GFLAGS),
927243229b1SElaine Zhang
928243229b1SElaine Zhang COMPOSITE_NOMUX(0, "clk_wifi_pmu_src", "gpll", 0,
929243229b1SElaine Zhang PX30_PMU_CLKSEL_CON(2), 8, 6, DFLAGS,
930243229b1SElaine Zhang PX30_PMU_CLKGATE_CON(0), 14, GFLAGS),
931243229b1SElaine Zhang COMPOSITE_NODIV(SCLK_WIFI_PMU, "clk_wifi_pmu", mux_wifi_pmu_p, CLK_SET_RATE_PARENT,
932243229b1SElaine Zhang PX30_PMU_CLKSEL_CON(2), 15, 1, MFLAGS,
933243229b1SElaine Zhang PX30_PMU_CLKGATE_CON(0), 15, GFLAGS),
934243229b1SElaine Zhang
935243229b1SElaine Zhang COMPOSITE(0, "clk_uart0_pmu_src", mux_uart_src_p, 0,
936243229b1SElaine Zhang PX30_PMU_CLKSEL_CON(3), 14, 2, MFLAGS, 0, 5, DFLAGS,
937243229b1SElaine Zhang PX30_PMU_CLKGATE_CON(1), 0, GFLAGS),
938243229b1SElaine Zhang COMPOSITE_NOMUX_HALFDIV(0, "clk_uart0_np5", "clk_uart0_pmu_src", 0,
939243229b1SElaine Zhang PX30_PMU_CLKSEL_CON(4), 0, 5, DFLAGS,
940243229b1SElaine Zhang PX30_PMU_CLKGATE_CON(1), 1, GFLAGS),
941243229b1SElaine Zhang COMPOSITE_FRACMUX(0, "clk_uart0_frac", "clk_uart0_pmu_src", CLK_SET_RATE_PARENT,
942243229b1SElaine Zhang PX30_PMU_CLKSEL_CON(5), 0,
943243229b1SElaine Zhang PX30_PMU_CLKGATE_CON(1), 2, GFLAGS,
944243229b1SElaine Zhang &px30_uart0_pmu_fracmux),
945243229b1SElaine Zhang GATE(SCLK_UART0_PMU, "clk_uart0_pmu", "clk_uart0_pmu_mux", CLK_SET_RATE_PARENT,
946243229b1SElaine Zhang PX30_PMU_CLKGATE_CON(1), 3, GFLAGS),
947243229b1SElaine Zhang
948243229b1SElaine Zhang GATE(SCLK_PVTM_PMU, "clk_pvtm_pmu", "xin24m", 0,
949243229b1SElaine Zhang PX30_PMU_CLKGATE_CON(1), 4, GFLAGS),
950243229b1SElaine Zhang
951243229b1SElaine Zhang COMPOSITE_NOMUX(PCLK_PMU_PRE, "pclk_pmu_pre", "gpll", 0,
952243229b1SElaine Zhang PX30_PMU_CLKSEL_CON(0), 0, 5, DFLAGS,
953243229b1SElaine Zhang PX30_PMU_CLKGATE_CON(0), 0, GFLAGS),
954243229b1SElaine Zhang
955243229b1SElaine Zhang COMPOSITE_NOMUX(SCLK_REF24M_PMU, "clk_ref24m_pmu", "gpll", 0,
956243229b1SElaine Zhang PX30_PMU_CLKSEL_CON(2), 0, 6, DFLAGS,
957243229b1SElaine Zhang PX30_PMU_CLKGATE_CON(1), 8, GFLAGS),
958243229b1SElaine Zhang COMPOSITE_NODIV(SCLK_USBPHY_REF, "clk_usbphy_ref", mux_usbphy_ref_p, CLK_SET_RATE_PARENT,
959243229b1SElaine Zhang PX30_PMU_CLKSEL_CON(2), 6, 1, MFLAGS,
960243229b1SElaine Zhang PX30_PMU_CLKGATE_CON(1), 9, GFLAGS),
961243229b1SElaine Zhang COMPOSITE_NODIV(SCLK_MIPIDSIPHY_REF, "clk_mipidsiphy_ref", mux_mipidsiphy_ref_p, CLK_SET_RATE_PARENT,
962243229b1SElaine Zhang PX30_PMU_CLKSEL_CON(2), 7, 1, MFLAGS,
963243229b1SElaine Zhang PX30_PMU_CLKGATE_CON(1), 10, GFLAGS),
964243229b1SElaine Zhang
965243229b1SElaine Zhang /*
966243229b1SElaine Zhang * Clock-Architecture Diagram 9
967243229b1SElaine Zhang */
968243229b1SElaine Zhang
969243229b1SElaine Zhang /* PD_PMU */
970243229b1SElaine Zhang GATE(0, "pclk_pmu_niu", "pclk_pmu_pre", CLK_IGNORE_UNUSED, PX30_PMU_CLKGATE_CON(0), 1, GFLAGS),
971243229b1SElaine Zhang GATE(0, "pclk_pmu_sgrf", "pclk_pmu_pre", CLK_IGNORE_UNUSED, PX30_PMU_CLKGATE_CON(0), 2, GFLAGS),
972243229b1SElaine Zhang GATE(0, "pclk_pmu_grf", "pclk_pmu_pre", CLK_IGNORE_UNUSED, PX30_PMU_CLKGATE_CON(0), 3, GFLAGS),
973243229b1SElaine Zhang GATE(0, "pclk_pmu", "pclk_pmu_pre", CLK_IGNORE_UNUSED, PX30_PMU_CLKGATE_CON(0), 4, GFLAGS),
974243229b1SElaine Zhang GATE(0, "pclk_pmu_mem", "pclk_pmu_pre", CLK_IGNORE_UNUSED, PX30_PMU_CLKGATE_CON(0), 5, GFLAGS),
975243229b1SElaine Zhang GATE(PCLK_GPIO0_PMU, "pclk_gpio0_pmu", "pclk_pmu_pre", 0, PX30_PMU_CLKGATE_CON(0), 6, GFLAGS),
976243229b1SElaine Zhang GATE(PCLK_UART0_PMU, "pclk_uart0_pmu", "pclk_pmu_pre", 0, PX30_PMU_CLKGATE_CON(0), 7, GFLAGS),
977243229b1SElaine Zhang GATE(0, "pclk_cru_pmu", "pclk_pmu_pre", CLK_IGNORE_UNUSED, PX30_PMU_CLKGATE_CON(0), 8, GFLAGS),
978243229b1SElaine Zhang };
979243229b1SElaine Zhang
9807990660fSHeiko Stuebner static const char *const px30_cru_critical_clocks[] __initconst = {
981243229b1SElaine Zhang "aclk_bus_pre",
982243229b1SElaine Zhang "pclk_bus_pre",
983243229b1SElaine Zhang "hclk_bus_pre",
984243229b1SElaine Zhang "aclk_peri_pre",
985243229b1SElaine Zhang "hclk_peri_pre",
986243229b1SElaine Zhang "aclk_gpu_niu",
987243229b1SElaine Zhang "pclk_top_pre",
988243229b1SElaine Zhang "pclk_pmu_pre",
989243229b1SElaine Zhang "hclk_usb_niu",
9908a88550fSHeiko Stuebner "pclk_vo_niu",
9918a88550fSHeiko Stuebner "aclk_vo_niu",
9928a88550fSHeiko Stuebner "hclk_vo_niu",
9938a88550fSHeiko Stuebner "aclk_vi_niu",
9948a88550fSHeiko Stuebner "hclk_vi_niu",
995243229b1SElaine Zhang "pll_npll",
996243229b1SElaine Zhang "usb480m",
997243229b1SElaine Zhang "clk_uart2",
998243229b1SElaine Zhang "pclk_uart2",
9993b0b4ebfSHeiko Stuebner "pclk_usb_grf",
1000243229b1SElaine Zhang };
1001243229b1SElaine Zhang
px30_clk_init(struct device_node * np)1002243229b1SElaine Zhang static void __init px30_clk_init(struct device_node *np)
1003243229b1SElaine Zhang {
1004243229b1SElaine Zhang struct rockchip_clk_provider *ctx;
1005243229b1SElaine Zhang void __iomem *reg_base;
1006243229b1SElaine Zhang
1007243229b1SElaine Zhang reg_base = of_iomap(np, 0);
1008243229b1SElaine Zhang if (!reg_base) {
1009243229b1SElaine Zhang pr_err("%s: could not map cru region\n", __func__);
1010243229b1SElaine Zhang return;
1011243229b1SElaine Zhang }
1012243229b1SElaine Zhang
1013243229b1SElaine Zhang ctx = rockchip_clk_init(np, reg_base, CLK_NR_CLKS);
1014243229b1SElaine Zhang if (IS_ERR(ctx)) {
1015243229b1SElaine Zhang pr_err("%s: rockchip clk init failed\n", __func__);
1016243229b1SElaine Zhang iounmap(reg_base);
1017243229b1SElaine Zhang return;
1018243229b1SElaine Zhang }
1019243229b1SElaine Zhang
1020243229b1SElaine Zhang rockchip_clk_register_plls(ctx, px30_pll_clks,
1021243229b1SElaine Zhang ARRAY_SIZE(px30_pll_clks),
1022243229b1SElaine Zhang PX30_GRF_SOC_STATUS0);
1023243229b1SElaine Zhang rockchip_clk_register_branches(ctx, px30_clk_branches,
1024243229b1SElaine Zhang ARRAY_SIZE(px30_clk_branches));
1025243229b1SElaine Zhang
1026243229b1SElaine Zhang rockchip_clk_register_armclk(ctx, ARMCLK, "armclk",
1027243229b1SElaine Zhang mux_armclk_p, ARRAY_SIZE(mux_armclk_p),
1028243229b1SElaine Zhang &px30_cpuclk_data, px30_cpuclk_rates,
1029243229b1SElaine Zhang ARRAY_SIZE(px30_cpuclk_rates));
1030243229b1SElaine Zhang
10317990660fSHeiko Stuebner rockchip_clk_protect_critical(px30_cru_critical_clocks,
10327990660fSHeiko Stuebner ARRAY_SIZE(px30_cru_critical_clocks));
10337990660fSHeiko Stuebner
1034243229b1SElaine Zhang rockchip_register_softrst(np, 12, reg_base + PX30_SOFTRST_CON(0),
1035243229b1SElaine Zhang ROCKCHIP_SOFTRST_HIWORD_MASK);
1036243229b1SElaine Zhang
1037243229b1SElaine Zhang rockchip_register_restart_notifier(ctx, PX30_GLB_SRST_FST, NULL);
1038243229b1SElaine Zhang
1039243229b1SElaine Zhang rockchip_clk_of_add_provider(np, ctx);
1040243229b1SElaine Zhang }
1041243229b1SElaine Zhang CLK_OF_DECLARE(px30_cru, "rockchip,px30-cru", px30_clk_init);
1042243229b1SElaine Zhang
px30_pmu_clk_init(struct device_node * np)1043243229b1SElaine Zhang static void __init px30_pmu_clk_init(struct device_node *np)
1044243229b1SElaine Zhang {
1045243229b1SElaine Zhang struct rockchip_clk_provider *ctx;
1046243229b1SElaine Zhang void __iomem *reg_base;
1047243229b1SElaine Zhang
1048243229b1SElaine Zhang reg_base = of_iomap(np, 0);
1049243229b1SElaine Zhang if (!reg_base) {
1050243229b1SElaine Zhang pr_err("%s: could not map cru pmu region\n", __func__);
1051243229b1SElaine Zhang return;
1052243229b1SElaine Zhang }
1053243229b1SElaine Zhang
1054243229b1SElaine Zhang ctx = rockchip_clk_init(np, reg_base, CLKPMU_NR_CLKS);
1055243229b1SElaine Zhang if (IS_ERR(ctx)) {
1056243229b1SElaine Zhang pr_err("%s: rockchip pmu clk init failed\n", __func__);
1057243229b1SElaine Zhang return;
1058243229b1SElaine Zhang }
1059243229b1SElaine Zhang
1060243229b1SElaine Zhang rockchip_clk_register_plls(ctx, px30_pmu_pll_clks,
1061243229b1SElaine Zhang ARRAY_SIZE(px30_pmu_pll_clks), PX30_GRF_SOC_STATUS0);
1062243229b1SElaine Zhang
1063243229b1SElaine Zhang rockchip_clk_register_branches(ctx, px30_clk_pmu_branches,
1064243229b1SElaine Zhang ARRAY_SIZE(px30_clk_pmu_branches));
1065243229b1SElaine Zhang
1066243229b1SElaine Zhang rockchip_clk_of_add_provider(np, ctx);
1067243229b1SElaine Zhang }
1068243229b1SElaine Zhang CLK_OF_DECLARE(px30_cru_pmu, "rockchip,px30-pmucru", px30_pmu_clk_init);
1069