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