// SPDX-License-Identifier: GPL-2.0
/*
 * Copyright (c) 2019 Rockchip Electronics Co. Ltd.
 * Author: Finley Xiao <finley.xiao@rock-chips.com>
 */

#include <linux/clk-provider.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/of_device.h>
#include <linux/syscore_ops.h>
#include <dt-bindings/clock/rockchip,rv1126-cru.h>
#include "clk.h"

#define RV1126_GMAC_CON			0x460
#define RV1126_GRF_IOFUNC_CON1		0x10264
#define RV1126_GRF_SOC_STATUS0		0x10

#define RV1126_FRAC_MAX_PRATE		1200000000
#define RV1126_CSIOUT_FRAC_MAX_PRATE	300000000

enum rv1126_pmu_plls {
	gpll,
};

enum rv1126_plls {
	apll, dpll, cpll, hpll,
};

static struct rockchip_pll_rate_table rv1126_pll_rates[] = {
	/* _mhz, _refdiv, _fbdiv, _postdiv1, _postdiv2, _dsmpd, _frac */
	RK3036_PLL_RATE(1608000000, 1, 67, 1, 1, 1, 0),
	RK3036_PLL_RATE(1600000000, 3, 200, 1, 1, 1, 0),
	RK3036_PLL_RATE(1584000000, 1, 132, 2, 1, 1, 0),
	RK3036_PLL_RATE(1560000000, 1, 130, 2, 1, 1, 0),
	RK3036_PLL_RATE(1536000000, 1, 128, 2, 1, 1, 0),
	RK3036_PLL_RATE(1512000000, 1, 126, 2, 1, 1, 0),
	RK3036_PLL_RATE(1488000000, 1, 124, 2, 1, 1, 0),
	RK3036_PLL_RATE(1464000000, 1, 122, 2, 1, 1, 0),
	RK3036_PLL_RATE(1440000000, 1, 120, 2, 1, 1, 0),
	RK3036_PLL_RATE(1416000000, 1, 118, 2, 1, 1, 0),
	RK3036_PLL_RATE(1400000000, 3, 350, 2, 1, 1, 0),
	RK3036_PLL_RATE(1392000000, 1, 116, 2, 1, 1, 0),
	RK3036_PLL_RATE(1368000000, 1, 114, 2, 1, 1, 0),
	RK3036_PLL_RATE(1344000000, 1, 112, 2, 1, 1, 0),
	RK3036_PLL_RATE(1320000000, 1, 110, 2, 1, 1, 0),
	RK3036_PLL_RATE(1296000000, 1, 108, 2, 1, 1, 0),
	RK3036_PLL_RATE(1272000000, 1, 106, 2, 1, 1, 0),
	RK3036_PLL_RATE(1248000000, 1, 104, 2, 1, 1, 0),
	RK3036_PLL_RATE(1200000000, 1, 100, 2, 1, 1, 0),
	RK3036_PLL_RATE(1188000000, 1, 99, 2, 1, 1, 0),
	RK3036_PLL_RATE(1104000000, 1, 92, 2, 1, 1, 0),
	RK3036_PLL_RATE(1100000000, 3, 275, 2, 1, 1, 0),
	RK3036_PLL_RATE(1008000000, 1, 84, 2, 1, 1, 0),
	RK3036_PLL_RATE(1000000000, 3, 250, 2, 1, 1, 0),
	RK3036_PLL_RATE(984000000, 1, 82, 2, 1, 1, 0),
	RK3036_PLL_RATE(960000000, 1, 80, 2, 1, 1, 0),
	RK3036_PLL_RATE(936000000, 1, 78, 2, 1, 1, 0),
	RK3036_PLL_RATE(912000000, 1, 76, 2, 1, 1, 0),
	RK3036_PLL_RATE(900000000, 1, 75, 2, 1, 1, 0),
	RK3036_PLL_RATE(888000000, 1, 74, 2, 1, 1, 0),
	RK3036_PLL_RATE(864000000, 1, 72, 2, 1, 1, 0),
	RK3036_PLL_RATE(840000000, 1, 70, 2, 1, 1, 0),
	RK3036_PLL_RATE(816000000, 1, 68, 2, 1, 1, 0),
	RK3036_PLL_RATE(800000000, 3, 200, 2, 1, 1, 0),
	RK3036_PLL_RATE(700000000, 3, 350, 4, 1, 1, 0),
	RK3036_PLL_RATE(696000000, 1, 116, 4, 1, 1, 0),
	RK3036_PLL_RATE(624000000, 1, 104, 4, 1, 1, 0),
	RK3036_PLL_RATE(600000000, 1, 100, 4, 1, 1, 0),
	RK3036_PLL_RATE(594000000, 1, 99, 4, 1, 1, 0),
	RK3036_PLL_RATE(504000000, 1, 84, 4, 1, 1, 0),
	RK3036_PLL_RATE(500000000, 1, 125, 6, 1, 1, 0),
	RK3036_PLL_RATE(408000000, 1, 68, 2, 2, 1, 0),
	RK3036_PLL_RATE(312000000, 1, 78, 6, 1, 1, 0),
	RK3036_PLL_RATE(216000000, 1, 72, 4, 2, 1, 0),
	RK3036_PLL_RATE(96000000, 1, 96, 6, 4, 1, 0),
	{ /* sentinel */ },
};

#define RV1126_DIV_ACLK_CORE_MASK	0xf
#define RV1126_DIV_ACLK_CORE_SHIFT	4
#define RV1126_DIV_PCLK_DBG_MASK	0x7
#define RV1126_DIV_PCLK_DBG_SHIFT	0

#define RV1126_CLKSEL1(_aclk_core, _pclk_dbg)				\
{									\
	.reg = RV1126_CLKSEL_CON(1),					\
	.val = HIWORD_UPDATE(_aclk_core, RV1126_DIV_ACLK_CORE_MASK,	\
			     RV1126_DIV_ACLK_CORE_SHIFT) |		\
	       HIWORD_UPDATE(_pclk_dbg, RV1126_DIV_PCLK_DBG_MASK,	\
			     RV1126_DIV_PCLK_DBG_SHIFT),		\
}

#define RV1126_CPUCLK_RATE(_prate, _aclk_core, _pclk_dbg)		\
{									\
	.prate = _prate,						\
	.divs = {							\
		RV1126_CLKSEL1(_aclk_core, _pclk_dbg),			\
	},								\
}

static struct rockchip_cpuclk_rate_table rv1126_cpuclk_rates[] __initdata = {
	RV1126_CPUCLK_RATE(1608000000, 1, 7),
	RV1126_CPUCLK_RATE(1584000000, 1, 7),
	RV1126_CPUCLK_RATE(1560000000, 1, 7),
	RV1126_CPUCLK_RATE(1536000000, 1, 7),
	RV1126_CPUCLK_RATE(1512000000, 1, 7),
	RV1126_CPUCLK_RATE(1488000000, 1, 5),
	RV1126_CPUCLK_RATE(1464000000, 1, 5),
	RV1126_CPUCLK_RATE(1440000000, 1, 5),
	RV1126_CPUCLK_RATE(1416000000, 1, 5),
	RV1126_CPUCLK_RATE(1392000000, 1, 5),
	RV1126_CPUCLK_RATE(1368000000, 1, 5),
	RV1126_CPUCLK_RATE(1344000000, 1, 5),
	RV1126_CPUCLK_RATE(1320000000, 1, 5),
	RV1126_CPUCLK_RATE(1296000000, 1, 5),
	RV1126_CPUCLK_RATE(1272000000, 1, 5),
	RV1126_CPUCLK_RATE(1248000000, 1, 5),
	RV1126_CPUCLK_RATE(1224000000, 1, 5),
	RV1126_CPUCLK_RATE(1200000000, 1, 5),
	RV1126_CPUCLK_RATE(1104000000, 1, 5),
	RV1126_CPUCLK_RATE(1008000000, 1, 5),
	RV1126_CPUCLK_RATE(912000000, 1, 5),
	RV1126_CPUCLK_RATE(816000000, 1, 3),
	RV1126_CPUCLK_RATE(696000000, 1, 3),
	RV1126_CPUCLK_RATE(600000000, 1, 3),
	RV1126_CPUCLK_RATE(408000000, 1, 1),
	RV1126_CPUCLK_RATE(312000000, 1, 1),
	RV1126_CPUCLK_RATE(216000000,  1, 1),
	RV1126_CPUCLK_RATE(96000000, 1, 1),
};

static const struct rockchip_cpuclk_reg_data rv1126_cpuclk_data = {
	.core_reg[0] = RV1126_CLKSEL_CON(0),
	.div_core_shift[0] = 0,
	.div_core_mask[0] = 0x1f,
	.num_cores = 1,
	.mux_core_alt = 0,
	.mux_core_main = 2,
	.mux_core_shift = 6,
	.mux_core_mask = 0x3,
};

PNAME(mux_pll_p)			= { "xin24m" };
PNAME(mux_rtc32k_p)			= { "clk_pmupvtm_divout", "xin32k", "clk_osc0_div32k" };
PNAME(mux_wifi_p)			= { "clk_wifi_osc0", "clk_wifi_div" };
PNAME(mux_gpll_usb480m_cpll_xin24m_p)	= { "gpll", "usb480m", "cpll", "xin24m" };
PNAME(mux_uart1_p)			= { "sclk_uart1_div", "sclk_uart1_fracdiv", "xin24m" };
PNAME(mux_xin24m_gpll_p)		= { "xin24m", "gpll" };
PNAME(mux_gpll_xin24m_p)		= { "gpll", "xin24m" };
PNAME(mux_xin24m_32k_p)			= { "xin24m", "clk_rtc32k" };
PNAME(mux_usbphy_otg_ref_p)		= { "clk_ref12m", "xin_osc0_div2_usbphyref_otg" };
PNAME(mux_usbphy_host_ref_p)		= { "clk_ref12m", "xin_osc0_div2_usbphyref_host" };
PNAME(mux_mipidsiphy_ref_p)		= { "clk_ref24m", "xin_osc0_mipiphyref" };
PNAME(mux_usb480m_p)			= { "xin24m", "usb480m_phy", "clk_rtc32k" };
PNAME(mux_armclk_p)			= { "gpll", "cpll", "apll" };
PNAME(mux_gpll_cpll_dpll_p)		= { "gpll", "cpll", "dummy_dpll" };
PNAME(mux_gpll_cpll_p)			= { "gpll", "cpll" };
PNAME(mux_hclk_pclk_pdbus_p)		= { "gpll", "dummy_cpll" };
PNAME(mux_gpll_cpll_usb480m_xin24m_p)	= { "gpll", "cpll", "usb480m", "xin24m" };
PNAME(mux_uart0_p)			= { "sclk_uart0_div", "sclk_uart0_frac", "xin24m" };
PNAME(mux_uart2_p)			= { "sclk_uart2_div", "sclk_uart2_frac", "xin24m" };
PNAME(mux_uart3_p)			= { "sclk_uart3_div", "sclk_uart3_frac", "xin24m" };
PNAME(mux_uart4_p)			= { "sclk_uart4_div", "sclk_uart4_frac", "xin24m" };
PNAME(mux_uart5_p)			= { "sclk_uart5_div", "sclk_uart5_frac", "xin24m" };
PNAME(mux_cpll_gpll_p)			= { "cpll", "gpll" };
PNAME(mux_i2s0_tx_p)			= { "mclk_i2s0_tx_div", "mclk_i2s0_tx_fracdiv", "i2s0_mclkin", "xin12m" };
PNAME(mux_i2s0_rx_p)			= { "mclk_i2s0_rx_div", "mclk_i2s0_rx_fracdiv", "i2s0_mclkin", "xin12m" };
PNAME(mux_i2s0_tx_out2io_p)		= { "mclk_i2s0_tx", "xin12m" };
PNAME(mux_i2s0_rx_out2io_p)		= { "mclk_i2s0_rx", "xin12m" };
PNAME(mux_i2s1_p)			= { "mclk_i2s1_div", "mclk_i2s1_fracdiv", "i2s1_mclkin", "xin12m" };
PNAME(mux_i2s1_out2io_p)		= { "mclk_i2s1", "xin12m" };
PNAME(mux_i2s2_p)			= { "mclk_i2s2_div", "mclk_i2s2_fracdiv", "i2s2_mclkin", "xin12m" };
PNAME(mux_i2s2_out2io_p)		= { "mclk_i2s2", "xin12m" };
PNAME(mux_gpll_cpll_xin24m_p)		= { "gpll", "cpll", "xin24m" };
PNAME(mux_audpwm_p)			= { "sclk_audpwm_div", "sclk_audpwm_fracdiv", "xin24m" };
PNAME(mux_usb480m_gpll_p)		= { "usb480m", "gpll" };
PNAME(clk_gmac_src_m0_p)		= { "clk_gmac_div", "clk_gmac_rgmii_m0" };
PNAME(clk_gmac_src_m1_p)		= { "clk_gmac_div", "clk_gmac_rgmii_m1" };
PNAME(mux_clk_gmac_src_p)		= { "clk_gmac_src_m0", "clk_gmac_src_m1" };
PNAME(mux_rgmii_clk_p)			= { "clk_gmac_tx_div50", "clk_gmac_tx_div5", "clk_gmac_tx_src", "clk_gmac_tx_src"};
PNAME(mux_rmii_clk_p)			= { "clk_gmac_rx_div20", "clk_gmac_rx_div2" };
PNAME(mux_gmac_tx_rx_p)			= { "rgmii_mode_clk", "rmii_mode_clk" };
PNAME(mux_dpll_gpll_p)			= { "dpll", "gpll" };

static u32 rgmii_mux_idx[]		= { 2, 3, 0, 1 };

static struct rockchip_pll_clock rv1126_pmu_pll_clks[] __initdata = {
	[gpll] = PLL(pll_rk3328, PLL_GPLL, "gpll",  mux_pll_p,
		     0, RV1126_PMU_PLL_CON(0),
		     RV1126_PMU_MODE, 0, 3, 0, rv1126_pll_rates),
};

static struct rockchip_pll_clock rv1126_pll_clks[] __initdata = {
	[apll] = PLL(pll_rk3328, PLL_APLL, "apll", mux_pll_p,
		     0, RV1126_PLL_CON(0),
		     RV1126_MODE_CON, 0, 0, 0, rv1126_pll_rates),
	[dpll] = PLL(pll_rk3328, PLL_DPLL, "dpll", mux_pll_p,
		     0, RV1126_PLL_CON(8),
		     RV1126_MODE_CON, 2, 1, 0, NULL),
	[cpll] = PLL(pll_rk3328, PLL_CPLL, "cpll", mux_pll_p,
		     0, RV1126_PLL_CON(16),
		     RV1126_MODE_CON, 4, 2, 0, rv1126_pll_rates),
	[hpll] = PLL(pll_rk3328, PLL_HPLL, "hpll", mux_pll_p,
		     0, RV1126_PLL_CON(24),
		     RV1126_MODE_CON, 6, 4, 0, rv1126_pll_rates),
};

#define MFLAGS CLK_MUX_HIWORD_MASK
#define DFLAGS CLK_DIVIDER_HIWORD_MASK
#define GFLAGS (CLK_GATE_HIWORD_MASK | CLK_GATE_SET_TO_DISABLE)

static struct rockchip_clk_branch rv1126_rtc32k_fracmux __initdata =
	MUX(CLK_RTC32K, "clk_rtc32k", mux_rtc32k_p, CLK_SET_RATE_PARENT,
			RV1126_PMU_CLKSEL_CON(0), 7, 2, MFLAGS);

static struct rockchip_clk_branch rv1126_uart1_fracmux __initdata =
	MUX(SCLK_UART1_MUX, "sclk_uart1_mux", mux_uart1_p, CLK_SET_RATE_PARENT,
			RV1126_PMU_CLKSEL_CON(4), 10, 2, MFLAGS);

static struct rockchip_clk_branch rv1126_uart0_fracmux __initdata =
	MUX(SCLK_UART0_MUX, "sclk_uart0_mux", mux_uart0_p, CLK_SET_RATE_PARENT,
			RV1126_CLKSEL_CON(10), 10, 2, MFLAGS);

static struct rockchip_clk_branch rv1126_uart2_fracmux __initdata =
	MUX(SCLK_UART2_MUX, "sclk_uart2_mux", mux_uart2_p, CLK_SET_RATE_PARENT,
			RV1126_CLKSEL_CON(12), 10, 2, MFLAGS);

static struct rockchip_clk_branch rv1126_uart3_fracmux __initdata =
	MUX(SCLK_UART3_MUX, "sclk_uart3_mux", mux_uart3_p, CLK_SET_RATE_PARENT,
			RV1126_CLKSEL_CON(14), 10, 2, MFLAGS);

static struct rockchip_clk_branch rv1126_uart4_fracmux __initdata =
	MUX(SCLK_UART4_MUX, "sclk_uart4_mux", mux_uart4_p, CLK_SET_RATE_PARENT,
			RV1126_CLKSEL_CON(16), 10, 2, MFLAGS);

static struct rockchip_clk_branch rv1126_uart5_fracmux __initdata =
	MUX(SCLK_UART5_MUX, "sclk_uart5_mux", mux_uart5_p, CLK_SET_RATE_PARENT,
			RV1126_CLKSEL_CON(18), 10, 2, MFLAGS);

static struct rockchip_clk_branch rv1126_i2s0_tx_fracmux __initdata =
	MUX(MCLK_I2S0_TX_MUX, "mclk_i2s0_tx_mux", mux_i2s0_tx_p, CLK_SET_RATE_PARENT,
			RV1126_CLKSEL_CON(30), 0, 2, MFLAGS);

static struct rockchip_clk_branch rv1126_i2s0_rx_fracmux __initdata =
	MUX(MCLK_I2S0_RX_MUX, "mclk_i2s0_rx_mux", mux_i2s0_rx_p, CLK_SET_RATE_PARENT,
			RV1126_CLKSEL_CON(30), 2, 2, MFLAGS);

static struct rockchip_clk_branch rv1126_i2s1_fracmux __initdata =
	MUX(MCLK_I2S1_MUX, "mclk_i2s1_mux", mux_i2s1_p, CLK_SET_RATE_PARENT,
			RV1126_CLKSEL_CON(31), 8, 2, MFLAGS);

static struct rockchip_clk_branch rv1126_i2s2_fracmux __initdata =
	MUX(MCLK_I2S2_MUX, "mclk_i2s2_mux", mux_i2s2_p, CLK_SET_RATE_PARENT,
			RV1126_CLKSEL_CON(33), 8, 2, MFLAGS);

static struct rockchip_clk_branch rv1126_audpwm_fracmux __initdata =
	MUX(SCLK_AUDPWM_MUX, "mclk_audpwm_mux", mux_audpwm_p, CLK_SET_RATE_PARENT,
			RV1126_CLKSEL_CON(36), 8, 2, MFLAGS);

static struct rockchip_clk_branch rv1126_clk_pmu_branches[] __initdata = {
	/*
	 * Clock-Architecture Diagram 2
	 */
	/* PD_PMU */
	COMPOSITE_NOMUX(PCLK_PDPMU, "pclk_pdpmu", "gpll", CLK_IGNORE_UNUSED,
			RV1126_PMU_CLKSEL_CON(1), 0, 5, DFLAGS,
			RV1126_PMU_CLKGATE_CON(0), 0, GFLAGS),

	COMPOSITE_FRACMUX(CLK_OSC0_DIV32K, "clk_osc0_div32k", "xin24m", CLK_IGNORE_UNUSED,
			RV1126_PMU_CLKSEL_CON(13), 0,
			RV1126_PMU_CLKGATE_CON(2), 9, GFLAGS,
			&rv1126_rtc32k_fracmux),

	COMPOSITE_NOMUX(CLK_WIFI_DIV, "clk_wifi_div", "gpll", 0,
			RV1126_PMU_CLKSEL_CON(12), 0, 6, DFLAGS,
			RV1126_PMU_CLKGATE_CON(2), 10, GFLAGS),
	GATE(CLK_WIFI_OSC0, "clk_wifi_osc0", "xin24m", 0,
			RV1126_PMU_CLKGATE_CON(2), 11, GFLAGS),
	MUX(CLK_WIFI, "clk_wifi", mux_wifi_p, CLK_SET_RATE_PARENT,
			RV1126_PMU_CLKSEL_CON(12), 8, 1, MFLAGS),

	GATE(PCLK_PMU, "pclk_pmu", "pclk_pdpmu", CLK_IGNORE_UNUSED,
			RV1126_PMU_CLKGATE_CON(0), 1, GFLAGS),

	GATE(PCLK_UART1, "pclk_uart1", "pclk_pdpmu", 0,
			RV1126_PMU_CLKGATE_CON(0), 11, GFLAGS),
	COMPOSITE(SCLK_UART1_DIV, "sclk_uart1_div", mux_gpll_usb480m_cpll_xin24m_p, 0,
			RV1126_PMU_CLKSEL_CON(4), 8, 2, MFLAGS, 0, 7, DFLAGS,
			RV1126_PMU_CLKGATE_CON(0), 12, GFLAGS),
	COMPOSITE_FRACMUX(SCLK_UART1_FRACDIV, "sclk_uart1_fracdiv", "sclk_uart1_div",
			CLK_SET_RATE_PARENT,
			RV1126_PMU_CLKSEL_CON(5), 0,
			RV1126_PMU_CLKGATE_CON(0), 13, GFLAGS,
			&rv1126_uart1_fracmux),
	GATE(SCLK_UART1, "sclk_uart1", "sclk_uart1_mux", 0,
			RV1126_PMU_CLKGATE_CON(0), 14, GFLAGS),

	GATE(PCLK_I2C0, "pclk_i2c0", "pclk_pdpmu", 0,
			RV1126_PMU_CLKGATE_CON(0), 5, GFLAGS),
	COMPOSITE_NOMUX(CLK_I2C0, "clk_i2c0", "gpll", 0,
			RV1126_PMU_CLKSEL_CON(2), 0, 7, DFLAGS,
			RV1126_PMU_CLKGATE_CON(0), 6, GFLAGS),
	GATE(PCLK_I2C2, "pclk_i2c2", "pclk_pdpmu", 0,
			RV1126_PMU_CLKGATE_CON(0), 9, GFLAGS),
	COMPOSITE_NOMUX(CLK_I2C2, "clk_i2c2", "gpll", 0,
			RV1126_PMU_CLKSEL_CON(3), 0, 7, DFLAGS,
			RV1126_PMU_CLKGATE_CON(0), 10, GFLAGS),

	GATE(CLK_CAPTURE_PWM0, "clk_capture_pwm0", "xin24m", 0,
			RV1126_PMU_CLKGATE_CON(1), 2, GFLAGS),
	GATE(PCLK_PWM0, "pclk_pwm0", "pclk_pdpmu", 0,
			RV1126_PMU_CLKGATE_CON(1), 0, GFLAGS),
	COMPOSITE(CLK_PWM0, "clk_pwm0", mux_xin24m_gpll_p, 0,
			RV1126_PMU_CLKSEL_CON(6), 7, 1, MFLAGS, 0, 7, DFLAGS,
			RV1126_PMU_CLKGATE_CON(1), 1, GFLAGS),
	GATE(CLK_CAPTURE_PWM1, "clk_capture_pwm1", "xin24m", 0,
			RV1126_PMU_CLKGATE_CON(1), 5, GFLAGS),
	GATE(PCLK_PWM1, "pclk_pwm1", "pclk_pdpmu", 0,
			RV1126_PMU_CLKGATE_CON(1), 3, GFLAGS),
	COMPOSITE(CLK_PWM1, "clk_pwm1", mux_xin24m_gpll_p, 0,
			RV1126_PMU_CLKSEL_CON(6), 15, 1, MFLAGS, 8, 7, DFLAGS,
			RV1126_PMU_CLKGATE_CON(1), 4, GFLAGS),

	GATE(PCLK_SPI0, "pclk_spi0", "pclk_pdpmu", 0,
			RV1126_PMU_CLKGATE_CON(1), 11, GFLAGS),
	COMPOSITE(CLK_SPI0, "clk_spi0", mux_gpll_xin24m_p, 0,
			RV1126_PMU_CLKSEL_CON(9), 7, 1, MFLAGS, 0, 7, DFLAGS,
			RV1126_PMU_CLKGATE_CON(1), 12, GFLAGS),

	GATE(PCLK_GPIO0, "pclk_gpio0", "pclk_pdpmu", 0,
			RV1126_PMU_CLKGATE_CON(1), 9, GFLAGS),
	COMPOSITE_NODIV(DBCLK_GPIO0, "dbclk_gpio0", mux_xin24m_32k_p, 0,
			RV1126_PMU_CLKSEL_CON(8), 15, 1, MFLAGS,
			RV1126_PMU_CLKGATE_CON(1), 10, GFLAGS),

	GATE(PCLK_PMUPVTM, "pclk_pmupvtm", "pclk_pdpmu", 0,
			RV1126_PMU_CLKGATE_CON(2), 6, GFLAGS),
	GATE(CLK_PMUPVTM, "clk_pmupvtm", "xin24m", 0,
			RV1126_PMU_CLKGATE_CON(2), 5, GFLAGS),
	GATE(CLK_CORE_PMUPVTM, "clk_core_pmupvtm", "xin24m", 0,
			RV1126_PMU_CLKGATE_CON(2), 7, GFLAGS),

	COMPOSITE_NOMUX(CLK_REF12M, "clk_ref12m", "gpll", 0,
			RV1126_PMU_CLKSEL_CON(7), 8, 7, DFLAGS,
			RV1126_PMU_CLKGATE_CON(1), 15, GFLAGS),
	GATE(0, "xin_osc0_usbphyref_otg", "xin24m", 0,
			RV1126_PMU_CLKGATE_CON(1), 6, GFLAGS),
	GATE(0, "xin_osc0_usbphyref_host", "xin24m", 0,
			RV1126_PMU_CLKGATE_CON(1), 7, GFLAGS),
	FACTOR(0, "xin_osc0_div2_usbphyref_otg", "xin_osc0_usbphyref_otg", 0, 1, 2),
	FACTOR(0, "xin_osc0_div2_usbphyref_host", "xin_osc0_usbphyref_host", 0, 1, 2),
	MUX(CLK_USBPHY_OTG_REF, "clk_usbphy_otg_ref", mux_usbphy_otg_ref_p, CLK_SET_RATE_PARENT,
			RV1126_PMU_CLKSEL_CON(7), 6, 1, MFLAGS),
	MUX(CLK_USBPHY_HOST_REF, "clk_usbphy_host_ref", mux_usbphy_host_ref_p, CLK_SET_RATE_PARENT,
			RV1126_PMU_CLKSEL_CON(7), 7, 1, MFLAGS),

	COMPOSITE_NOMUX(CLK_REF24M, "clk_ref24m", "gpll", 0,
			RV1126_PMU_CLKSEL_CON(7), 0, 6, DFLAGS,
			RV1126_PMU_CLKGATE_CON(1), 14, GFLAGS),
	GATE(0, "xin_osc0_mipiphyref", "xin24m", 0,
			RV1126_PMU_CLKGATE_CON(1), 8, GFLAGS),
	MUX(CLK_MIPIDSIPHY_REF, "clk_mipidsiphy_ref", mux_mipidsiphy_ref_p, CLK_SET_RATE_PARENT,
			RV1126_PMU_CLKSEL_CON(7), 15, 1, MFLAGS),

	GATE(CLK_PMU, "clk_pmu", "xin24m", CLK_IGNORE_UNUSED,
			RV1126_PMU_CLKGATE_CON(0), 15, GFLAGS),

	GATE(PCLK_PMUSGRF, "pclk_pmusgrf", "pclk_pdpmu", CLK_IGNORE_UNUSED,
			RV1126_PMU_CLKGATE_CON(0), 4, GFLAGS),
	GATE(PCLK_PMUGRF, "pclk_pmugrf", "pclk_pdpmu", CLK_IGNORE_UNUSED,
			RV1126_PMU_CLKGATE_CON(1), 13, GFLAGS),
	GATE(PCLK_PMUCRU, "pclk_pmucru", "pclk_pdpmu", CLK_IGNORE_UNUSED,
			RV1126_PMU_CLKGATE_CON(2), 4, GFLAGS),
	GATE(PCLK_CHIPVEROTP, "pclk_chipverotp", "pclk_pdpmu", CLK_IGNORE_UNUSED,
			RV1126_PMU_CLKGATE_CON(2), 0, GFLAGS),
	GATE(PCLK_PDPMU_NIU, "pclk_pdpmu_niu", "pclk_pdpmu", CLK_IGNORE_UNUSED,
			RV1126_PMU_CLKGATE_CON(0), 2, GFLAGS),

	GATE(PCLK_SCRKEYGEN, "pclk_scrkeygen", "pclk_pdpmu", 0,
			RV1126_PMU_CLKGATE_CON(0), 7, GFLAGS),
};

static struct rockchip_clk_branch rv1126_clk_branches[] __initdata = {
	/*
	 * Clock-Architecture Diagram 1
	 */
	MUX(USB480M, "usb480m", mux_usb480m_p, CLK_SET_RATE_PARENT,
			RV1126_MODE_CON, 10, 2, MFLAGS),
	FACTOR(0, "xin12m", "xin24m", 0, 1, 2),

	/*
	 * Clock-Architecture Diagram 3
	 */
	/* PD_CORE */
	COMPOSITE_NOMUX(0, "pclk_dbg", "armclk", CLK_IGNORE_UNUSED,
			RV1126_CLKSEL_CON(1), 0, 3, DFLAGS | CLK_DIVIDER_READ_ONLY,
			RV1126_CLKGATE_CON(0), 6, GFLAGS),
	GATE(CLK_CORE_CPUPVTM, "clk_core_cpupvtm", "armclk", 0,
			RV1126_CLKGATE_CON(0), 12, GFLAGS),
	GATE(PCLK_CPUPVTM, "pclk_cpupvtm", "pclk_dbg", 0,
			RV1126_CLKGATE_CON(0), 10, GFLAGS),
	GATE(CLK_CPUPVTM, "clk_cpupvtm", "xin24m", 0,
			RV1126_CLKGATE_CON(0), 11, GFLAGS),
	COMPOSITE_NOMUX(HCLK_PDCORE_NIU, "hclk_pdcore_niu", "gpll", CLK_IGNORE_UNUSED,
			RV1126_CLKSEL_CON(0), 8, 5, DFLAGS,
			RV1126_CLKGATE_CON(0), 8, GFLAGS),

	/*
	 * Clock-Architecture Diagram 4
	 */
	/* PD_BUS */
	COMPOSITE(0, "aclk_pdbus_pre", mux_gpll_cpll_dpll_p, CLK_IGNORE_UNUSED,
			RV1126_CLKSEL_CON(2), 6, 2, MFLAGS, 0, 5, DFLAGS,
			RV1126_CLKGATE_CON(2), 0, GFLAGS),
	GATE(ACLK_PDBUS, "aclk_pdbus", "aclk_pdbus_pre", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(2), 11, GFLAGS),
	COMPOSITE(0, "hclk_pdbus_pre", mux_hclk_pclk_pdbus_p, CLK_IGNORE_UNUSED,
			RV1126_CLKSEL_CON(2), 15, 1, MFLAGS, 8, 5, DFLAGS,
			RV1126_CLKGATE_CON(2), 1, GFLAGS),
	GATE(HCLK_PDBUS, "hclk_pdbus", "hclk_pdbus_pre", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(2), 12, GFLAGS),
	COMPOSITE(0, "pclk_pdbus_pre", mux_hclk_pclk_pdbus_p, CLK_IGNORE_UNUSED,
			RV1126_CLKSEL_CON(3), 7, 1, MFLAGS, 0, 5, DFLAGS,
			RV1126_CLKGATE_CON(2), 2, GFLAGS),
	GATE(PCLK_PDBUS, "pclk_pdbus", "pclk_pdbus_pre", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(2), 13, GFLAGS),
	/* aclk_dmac is controlled by sgrf_clkgat_con. */
	SGRF_GATE(ACLK_DMAC, "aclk_dmac", "hclk_pdbus"),
	GATE(ACLK_DCF, "aclk_dcf", "hclk_pdbus", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(3), 6, GFLAGS),
	GATE(PCLK_DCF, "pclk_dcf", "pclk_pdbus", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(3), 7, GFLAGS),
	GATE(PCLK_WDT, "pclk_wdt", "pclk_pdbus", 0,
			RV1126_CLKGATE_CON(6), 14, GFLAGS),
	GATE(PCLK_MAILBOX, "pclk_mailbox", "pclk_pdbus", 0,
			RV1126_CLKGATE_CON(7), 10, GFLAGS),

	COMPOSITE(CLK_SCR1, "clk_scr1", mux_gpll_cpll_p, 0,
			RV1126_CLKSEL_CON(3), 15, 1, MFLAGS, 8, 5, DFLAGS,
			RV1126_CLKGATE_CON(4), 7, GFLAGS),
	GATE(0, "clk_scr1_niu", "clk_scr1", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(2), 14, GFLAGS),
	GATE(CLK_SCR1_CORE, "clk_scr1_core", "clk_scr1", 0,
			RV1126_CLKGATE_CON(4), 8, GFLAGS),
	GATE(CLK_SCR1_RTC, "clk_scr1_rtc", "xin24m", 0,
			RV1126_CLKGATE_CON(4), 9, GFLAGS),
	GATE(CLK_SCR1_JTAG, "clk_scr1_jtag", "clk_scr1_jtag_io", 0,
			RV1126_CLKGATE_CON(4), 10, GFLAGS),

	GATE(PCLK_UART0, "pclk_uart0", "pclk_pdbus", 0,
			RV1126_CLKGATE_CON(5), 0, GFLAGS),
	COMPOSITE(SCLK_UART0_DIV, "sclk_uart0_div", mux_gpll_cpll_usb480m_xin24m_p, 0,
			RV1126_CLKSEL_CON(10), 8, 2, MFLAGS, 0, 7, DFLAGS,
			RV1126_CLKGATE_CON(5), 1, GFLAGS),
	COMPOSITE_FRACMUX(SCLK_UART0_FRAC, "sclk_uart0_frac", "sclk_uart0_div", CLK_SET_RATE_PARENT,
			RV1126_CLKSEL_CON(11), 0,
			RV1126_CLKGATE_CON(5), 2, GFLAGS,
			&rv1126_uart0_fracmux),
	GATE(SCLK_UART0, "sclk_uart0", "sclk_uart0_mux", 0,
			RV1126_CLKGATE_CON(5), 3, GFLAGS),
	GATE(PCLK_UART2, "pclk_uart2", "pclk_pdbus", 0,
			RV1126_CLKGATE_CON(5), 4, GFLAGS),
	COMPOSITE(SCLK_UART2_DIV, "sclk_uart2_div", mux_gpll_cpll_usb480m_xin24m_p, 0,
			RV1126_CLKSEL_CON(12), 8, 2, MFLAGS, 0, 7, DFLAGS,
			RV1126_CLKGATE_CON(5), 5, GFLAGS),
	COMPOSITE_FRACMUX(SCLK_UART2_FRAC, "sclk_uart2_frac", "sclk_uart2_div", CLK_SET_RATE_PARENT,
			RV1126_CLKSEL_CON(13), 0,
			RV1126_CLKGATE_CON(5), 6, GFLAGS,
			&rv1126_uart2_fracmux),
	GATE(SCLK_UART2, "sclk_uart2", "sclk_uart2_mux", 0,
			RV1126_CLKGATE_CON(5), 7, GFLAGS),
	GATE(PCLK_UART3, "pclk_uart3", "pclk_pdbus", 0,
			RV1126_CLKGATE_CON(5), 8, GFLAGS),
	COMPOSITE(SCLK_UART3_DIV, "sclk_uart3_div", mux_gpll_cpll_usb480m_xin24m_p, 0,
			RV1126_CLKSEL_CON(14), 8, 2, MFLAGS, 0, 7, DFLAGS,
			RV1126_CLKGATE_CON(5), 9, GFLAGS),
	COMPOSITE_FRACMUX(SCLK_UART3_FRAC, "sclk_uart3_frac", "sclk_uart3_div", CLK_SET_RATE_PARENT,
			RV1126_CLKSEL_CON(15), 0,
			RV1126_CLKGATE_CON(5), 10, GFLAGS,
			&rv1126_uart3_fracmux),
	GATE(SCLK_UART3, "sclk_uart3", "sclk_uart3_mux", 0,
			RV1126_CLKGATE_CON(5), 11, GFLAGS),
	GATE(PCLK_UART4, "pclk_uart4", "pclk_pdbus", 0,
			RV1126_CLKGATE_CON(5), 12, GFLAGS),
	COMPOSITE(SCLK_UART4_DIV, "sclk_uart4_div", mux_gpll_cpll_usb480m_xin24m_p, 0,
			RV1126_CLKSEL_CON(16), 8, 2, MFLAGS, 0, 7,
			DFLAGS, RV1126_CLKGATE_CON(5), 13, GFLAGS),
	COMPOSITE_FRACMUX(SCLK_UART4_FRAC, "sclk_uart4_frac", "sclk_uart4_div", CLK_SET_RATE_PARENT,
			RV1126_CLKSEL_CON(17), 0,
			RV1126_CLKGATE_CON(5), 14, GFLAGS,
			&rv1126_uart4_fracmux),
	GATE(SCLK_UART4, "sclk_uart4", "sclk_uart4_mux", 0,
			RV1126_CLKGATE_CON(5), 15, GFLAGS),
	GATE(PCLK_UART5, "pclk_uart5", "pclk_pdbus", 0,
			RV1126_CLKGATE_CON(6), 0, GFLAGS),
	COMPOSITE(SCLK_UART5_DIV, "sclk_uart5_div", mux_gpll_cpll_usb480m_xin24m_p, 0,
			RV1126_CLKSEL_CON(18), 8, 2, MFLAGS, 0, 7,
			DFLAGS, RV1126_CLKGATE_CON(6), 1, GFLAGS),
	COMPOSITE_FRACMUX(SCLK_UART5_FRAC, "sclk_uart5_frac", "sclk_uart5_div", CLK_SET_RATE_PARENT,
			RV1126_CLKSEL_CON(19), 0,
			RV1126_CLKGATE_CON(6), 2, GFLAGS,
			&rv1126_uart5_fracmux),
	GATE(SCLK_UART5, "sclk_uart5", "sclk_uart5_mux", 0,
			RV1126_CLKGATE_CON(6), 3, GFLAGS),

	GATE(PCLK_I2C1, "pclk_i2c1", "pclk_pdbus", 0,
			RV1126_CLKGATE_CON(3), 10, GFLAGS),
	COMPOSITE_NOMUX(CLK_I2C1, "clk_i2c1", "gpll", 0,
			RV1126_CLKSEL_CON(5), 0, 7, DFLAGS,
			RV1126_CLKGATE_CON(3), 11, GFLAGS),
	GATE(PCLK_I2C3, "pclk_i2c3", "pclk_pdbus", 0,
			RV1126_CLKGATE_CON(3), 12, GFLAGS),
	COMPOSITE_NOMUX(CLK_I2C3, "clk_i2c3", "gpll", 0,
			RV1126_CLKSEL_CON(5), 8, 7, DFLAGS,
			RV1126_CLKGATE_CON(3), 13, GFLAGS),
	GATE(PCLK_I2C4, "pclk_i2c4", "pclk_pdbus", 0,
			RV1126_CLKGATE_CON(3), 14, GFLAGS),
	COMPOSITE_NOMUX(CLK_I2C4, "clk_i2c4", "gpll", 0,
			RV1126_CLKSEL_CON(6), 0, 7, DFLAGS,
			RV1126_CLKGATE_CON(3), 15, GFLAGS),
	GATE(PCLK_I2C5, "pclk_i2c5", "pclk_pdbus", 0,
			RV1126_CLKGATE_CON(4), 0, GFLAGS),
	COMPOSITE_NOMUX(CLK_I2C5, "clk_i2c5", "gpll", 0,
			RV1126_CLKSEL_CON(6), 8, 7, DFLAGS,
			RV1126_CLKGATE_CON(4), 1, GFLAGS),

	GATE(PCLK_SPI1, "pclk_spi1", "pclk_pdbus", 0,
			RV1126_CLKGATE_CON(4), 2, GFLAGS),
	COMPOSITE(CLK_SPI1, "clk_spi1", mux_gpll_xin24m_p, 0,
			RV1126_CLKSEL_CON(8), 7, 1, MFLAGS, 0, 7, DFLAGS,
			RV1126_CLKGATE_CON(4), 3, GFLAGS),

	GATE(CLK_CAPTURE_PWM2, "clk_capture_pwm2", "xin24m", 0,
			RV1126_CLKGATE_CON(4), 6, GFLAGS),
	GATE(PCLK_PWM2, "pclk_pwm2", "pclk_pdbus", 0,
			RV1126_CLKGATE_CON(4), 4, GFLAGS),
	COMPOSITE(CLK_PWM2, "clk_pwm2", mux_xin24m_gpll_p, 0,
			RV1126_CLKSEL_CON(9), 15, 1, MFLAGS, 8, 7, DFLAGS,
			RV1126_CLKGATE_CON(4), 5, GFLAGS),

	GATE(PCLK_GPIO1, "pclk_gpio1", "pclk_pdbus", 0,
			RV1126_CLKGATE_CON(7), 0, GFLAGS),
	COMPOSITE_NODIV(DBCLK_GPIO1, "dbclk_gpio1", mux_xin24m_32k_p, 0,
			RV1126_CLKSEL_CON(21), 15, 1, MFLAGS,
			RV1126_CLKGATE_CON(7), 1, GFLAGS),
	GATE(PCLK_GPIO2, "pclk_gpio2", "pclk_pdbus", 0,
			RV1126_CLKGATE_CON(7), 2, GFLAGS),
	COMPOSITE_NODIV(DBCLK_GPIO2, "dbclk_gpio2", mux_xin24m_32k_p, 0,
			RV1126_CLKSEL_CON(22), 15, 1, MFLAGS,
			RV1126_CLKGATE_CON(7), 3, GFLAGS),
	GATE(PCLK_GPIO3, "pclk_gpio3", "pclk_pdbus", 0,
			RV1126_CLKGATE_CON(7), 4, GFLAGS),
	COMPOSITE_NODIV(DBCLK_GPIO3, "dbclk_gpio3", mux_xin24m_32k_p, 0,
			RV1126_CLKSEL_CON(23), 15, 1, MFLAGS,
			RV1126_CLKGATE_CON(7), 5, GFLAGS),
	GATE(PCLK_GPIO4, "pclk_gpio4", "pclk_pdbus", 0,
			RV1126_CLKGATE_CON(7), 6, GFLAGS),
	COMPOSITE_NODIV(DBCLK_GPIO4, "dbclk_gpio4", mux_xin24m_32k_p, 0,
			RV1126_CLKSEL_CON(24), 15, 1, MFLAGS,
			RV1126_CLKGATE_CON(7), 7, GFLAGS),

	GATE(PCLK_SARADC, "pclk_saradc", "pclk_pdbus", 0,
			RV1126_CLKGATE_CON(6), 4, GFLAGS),
	COMPOSITE_NOMUX(CLK_SARADC, "clk_saradc", "xin24m", 0,
			RV1126_CLKSEL_CON(20), 0, 11, DFLAGS,
			RV1126_CLKGATE_CON(6), 5, GFLAGS),

	GATE(PCLK_TIMER, "pclk_timer", "pclk_pdbus", 0,
			RV1126_CLKGATE_CON(6), 7, GFLAGS),
	GATE(CLK_TIMER0, "clk_timer0", "xin24m", 0,
			RV1126_CLKGATE_CON(6), 8, GFLAGS),
	GATE(CLK_TIMER1, "clk_timer1", "xin24m", 0,
			RV1126_CLKGATE_CON(6), 9, GFLAGS),
	GATE(CLK_TIMER2, "clk_timer2", "xin24m", 0,
			RV1126_CLKGATE_CON(6), 10, GFLAGS),
	GATE(CLK_TIMER3, "clk_timer3", "xin24m", 0,
			RV1126_CLKGATE_CON(6), 11, GFLAGS),
	GATE(CLK_TIMER4, "clk_timer4", "xin24m", 0,
			RV1126_CLKGATE_CON(6), 12, GFLAGS),
	GATE(CLK_TIMER5, "clk_timer5", "xin24m", 0,
			RV1126_CLKGATE_CON(6), 13, GFLAGS),

	GATE(ACLK_SPINLOCK, "aclk_spinlock", "hclk_pdbus", 0,
			RV1126_CLKGATE_CON(6), 6, GFLAGS),

	GATE(ACLK_DECOM, "aclk_decom", "aclk_pdbus", 0,
			RV1126_CLKGATE_CON(7), 11, GFLAGS),
	GATE(PCLK_DECOM, "pclk_decom", "pclk_pdbus", 0,
			RV1126_CLKGATE_CON(7), 12, GFLAGS),
	COMPOSITE(DCLK_DECOM, "dclk_decom", mux_gpll_cpll_p, 0,
			RV1126_CLKSEL_CON(25), 15, 1, MFLAGS, 8, 7, DFLAGS,
			RV1126_CLKGATE_CON(7), 13, GFLAGS),

	GATE(PCLK_CAN, "pclk_can", "pclk_pdbus", 0,
			RV1126_CLKGATE_CON(7), 8, GFLAGS),
	COMPOSITE(CLK_CAN, "clk_can", mux_gpll_xin24m_p, 0,
			RV1126_CLKSEL_CON(25), 7, 1, MFLAGS, 0, 7, DFLAGS,
			RV1126_CLKGATE_CON(7), 9, GFLAGS),
	/* pclk_otp and clk_otp are controlled by sgrf_clkgat_con. */
	SGRF_GATE(CLK_OTP, "clk_otp", "xin24m"),
	SGRF_GATE(PCLK_OTP, "pclk_otp", "pclk_pdbus"),

	GATE(PCLK_NPU_TSADC, "pclk_npu_tsadc", "pclk_pdbus", 0,
			RV1126_CLKGATE_CON(24), 3, GFLAGS),
	COMPOSITE_NOMUX(CLK_NPU_TSADC, "clk_npu_tsadc", "xin24m", 0,
			RV1126_CLKSEL_CON(71), 0, 11, DFLAGS,
			RV1126_CLKGATE_CON(24), 4, GFLAGS),
	GATE(CLK_NPU_TSADCPHY, "clk_npu_tsadcphy", "clk_npu_tsadc", 0,
			RV1126_CLKGATE_CON(24), 5, GFLAGS),
	GATE(PCLK_CPU_TSADC, "pclk_cpu_tsadc", "pclk_pdbus", 0,
			RV1126_CLKGATE_CON(24), 0, GFLAGS),
	COMPOSITE_NOMUX(CLK_CPU_TSADC, "clk_cpu_tsadc", "xin24m", 0,
			RV1126_CLKSEL_CON(70), 0, 11, DFLAGS,
			RV1126_CLKGATE_CON(24), 1, GFLAGS),
	GATE(CLK_CPU_TSADCPHY, "clk_cpu_tsadcphy", "clk_cpu_tsadc", 0,
			RV1126_CLKGATE_CON(24), 2, GFLAGS),

	/*
	 * Clock-Architecture Diagram 6
	 */
	/* PD_AUDIO */
	COMPOSITE_NOMUX(HCLK_PDAUDIO, "hclk_pdaudio", "gpll", 0,
			RV1126_CLKSEL_CON(26), 0, 5, DFLAGS,
			RV1126_CLKGATE_CON(9), 0, GFLAGS),

	GATE(HCLK_I2S0, "hclk_i2s0", "hclk_pdaudio", 0,
			RV1126_CLKGATE_CON(9), 4, GFLAGS),
	COMPOSITE(MCLK_I2S0_TX_DIV, "mclk_i2s0_tx_div", mux_cpll_gpll_p, 0,
			RV1126_CLKSEL_CON(27), 7, 1, MFLAGS, 0, 7, DFLAGS,
			RV1126_CLKGATE_CON(9), 5, GFLAGS),
	COMPOSITE_FRACMUX(MCLK_I2S0_TX_FRACDIV, "mclk_i2s0_tx_fracdiv", "mclk_i2s0_tx_div",
			CLK_SET_RATE_PARENT,
			RV1126_CLKSEL_CON(28), 0,
			RV1126_CLKGATE_CON(9), 6, GFLAGS,
			&rv1126_i2s0_tx_fracmux),
	GATE(MCLK_I2S0_TX, "mclk_i2s0_tx", "mclk_i2s0_tx_mux", 0,
			RV1126_CLKGATE_CON(9), 9, GFLAGS),
	COMPOSITE(MCLK_I2S0_RX_DIV, "mclk_i2s0_rx_div", mux_cpll_gpll_p, 0,
			RV1126_CLKSEL_CON(27), 15, 1, MFLAGS, 8, 7, DFLAGS,
			RV1126_CLKGATE_CON(9), 7, GFLAGS),
	COMPOSITE_FRACMUX(MCLK_I2S0_RX_FRACDIV, "mclk_i2s0_rx_fracdiv", "mclk_i2s0_rx_div",
			CLK_SET_RATE_PARENT,
			RV1126_CLKSEL_CON(29), 0,
			RV1126_CLKGATE_CON(9), 8, GFLAGS,
			&rv1126_i2s0_rx_fracmux),
	GATE(MCLK_I2S0_RX, "mclk_i2s0_rx", "mclk_i2s0_rx_mux", 0,
			RV1126_CLKGATE_CON(9), 10, GFLAGS),
	COMPOSITE_NODIV(MCLK_I2S0_TX_OUT2IO, "mclk_i2s0_tx_out2io", mux_i2s0_tx_out2io_p, 0,
			RV1126_CLKSEL_CON(30), 6, 1, MFLAGS,
			RV1126_CLKGATE_CON(9), 13, GFLAGS),
	COMPOSITE_NODIV(MCLK_I2S0_RX_OUT2IO, "mclk_i2s0_rx_out2io", mux_i2s0_rx_out2io_p, 0,
			RV1126_CLKSEL_CON(30), 8, 1, MFLAGS,
			RV1126_CLKGATE_CON(9), 14, GFLAGS),

	GATE(HCLK_I2S1, "hclk_i2s1", "hclk_pdaudio", 0,
			RV1126_CLKGATE_CON(10), 0, GFLAGS),
	COMPOSITE(MCLK_I2S1_DIV, "mclk_i2s1_div", mux_cpll_gpll_p, 0,
			RV1126_CLKSEL_CON(31), 7, 1, MFLAGS, 0, 7, DFLAGS,
			RV1126_CLKGATE_CON(10), 1, GFLAGS),
	COMPOSITE_FRACMUX(MCLK_I2S1_FRACDIV, "mclk_i2s1_fracdiv", "mclk_i2s1_div",
			CLK_SET_RATE_PARENT,
			RV1126_CLKSEL_CON(32), 0,
			RV1126_CLKGATE_CON(10), 2, GFLAGS,
			&rv1126_i2s1_fracmux),
	GATE(MCLK_I2S1, "mclk_i2s1", "mclk_i2s1_mux", 0,
			RV1126_CLKGATE_CON(10), 3, GFLAGS),
	COMPOSITE_NODIV(MCLK_I2S1_OUT2IO, "mclk_i2s1_out2io", mux_i2s1_out2io_p, 0,
			RV1126_CLKSEL_CON(31), 12, 1, MFLAGS,
			RV1126_CLKGATE_CON(10), 4, GFLAGS),
	GATE(HCLK_I2S2, "hclk_i2s2", "hclk_pdaudio", 0,
			RV1126_CLKGATE_CON(10), 5, GFLAGS),
	COMPOSITE(MCLK_I2S2_DIV, "mclk_i2s2_div", mux_cpll_gpll_p, 0,
			RV1126_CLKSEL_CON(33), 7, 1, MFLAGS, 0, 7, DFLAGS,
			RV1126_CLKGATE_CON(10), 6, GFLAGS),
	COMPOSITE_FRACMUX(MCLK_I2S2_FRACDIV, "mclk_i2s2_fracdiv", "mclk_i2s2_div",
			CLK_SET_RATE_PARENT,
			RV1126_CLKSEL_CON(34), 0,
			RV1126_CLKGATE_CON(10), 7, GFLAGS,
			&rv1126_i2s2_fracmux),
	GATE(MCLK_I2S2, "mclk_i2s2", "mclk_i2s2_mux", 0,
			RV1126_CLKGATE_CON(10), 8, GFLAGS),
	COMPOSITE_NODIV(MCLK_I2S2_OUT2IO, "mclk_i2s2_out2io", mux_i2s2_out2io_p, 0,
			RV1126_CLKSEL_CON(33), 10, 1, MFLAGS,
			RV1126_CLKGATE_CON(10), 9, GFLAGS),

	GATE(HCLK_PDM, "hclk_pdm", "hclk_pdaudio", 0,
			RV1126_CLKGATE_CON(10), 10, GFLAGS),
	COMPOSITE(MCLK_PDM, "mclk_pdm", mux_gpll_cpll_xin24m_p, 0,
			RV1126_CLKSEL_CON(35), 8, 2, MFLAGS, 0, 7, DFLAGS,
			RV1126_CLKGATE_CON(10), 11, GFLAGS),

	GATE(HCLK_AUDPWM, "hclk_audpwm", "hclk_pdaudio", 0,
			RV1126_CLKGATE_CON(10), 12, GFLAGS),
	COMPOSITE(SCLK_ADUPWM_DIV, "sclk_audpwm_div", mux_gpll_cpll_p, 0,
			RV1126_CLKSEL_CON(36), 7, 1, MFLAGS, 0, 7, DFLAGS,
			RV1126_CLKGATE_CON(10), 13, GFLAGS),
	COMPOSITE_FRACMUX(SCLK_AUDPWM_FRACDIV, "sclk_audpwm_fracdiv", "sclk_audpwm_div",
			CLK_SET_RATE_PARENT,
			RV1126_CLKSEL_CON(37), 0,
			RV1126_CLKGATE_CON(10), 14, GFLAGS,
			&rv1126_audpwm_fracmux),
	GATE(SCLK_AUDPWM, "sclk_audpwm", "mclk_audpwm_mux", 0,
			RV1126_CLKGATE_CON(10), 15, GFLAGS),

	GATE(PCLK_ACDCDIG, "pclk_acdcdig", "hclk_pdaudio", 0,
			RV1126_CLKGATE_CON(11), 0, GFLAGS),
	GATE(CLK_ACDCDIG_ADC, "clk_acdcdig_adc", "mclk_i2s0_rx", 0,
			RV1126_CLKGATE_CON(11), 2, GFLAGS),
	GATE(CLK_ACDCDIG_DAC, "clk_acdcdig_dac", "mclk_i2s0_tx", 0,
			RV1126_CLKGATE_CON(11), 3, GFLAGS),
	COMPOSITE(CLK_ACDCDIG_I2C, "clk_acdcdig_i2c", mux_gpll_xin24m_p, 0,
			RV1126_CLKSEL_CON(72), 8, 1, MFLAGS, 0, 7, DFLAGS,
			RV1126_CLKGATE_CON(11), 1, GFLAGS),

	/*
	 * Clock-Architecture Diagram 12
	 */
	/* PD_PHP */
	COMPOSITE(ACLK_PDPHP, "aclk_pdphp", mux_gpll_cpll_p, CLK_IGNORE_UNUSED,
			RV1126_CLKSEL_CON(53), 7, 1, MFLAGS, 0, 5, DFLAGS,
			RV1126_CLKGATE_CON(17), 0, GFLAGS),
	COMPOSITE_NOMUX(HCLK_PDPHP, "hclk_pdphp", "gpll", CLK_IGNORE_UNUSED,
			RV1126_CLKSEL_CON(53), 8, 5, DFLAGS,
			RV1126_CLKGATE_CON(17), 1, GFLAGS),
	/* PD_SDCARD */
	GATE(HCLK_PDSDMMC, "hclk_pdsdmmc", "hclk_pdphp", 0,
			RV1126_CLKGATE_CON(17), 6, GFLAGS),
	GATE(HCLK_SDMMC, "hclk_sdmmc", "hclk_pdsdmmc", 0,
			RV1126_CLKGATE_CON(18), 4, GFLAGS),
	COMPOSITE(CLK_SDMMC, "clk_sdmmc", mux_gpll_cpll_xin24m_p, 0,
			RV1126_CLKSEL_CON(55), 14, 2, MFLAGS, 0, 8,
			DFLAGS, RV1126_CLKGATE_CON(18), 5, GFLAGS),
	MMC(SCLK_SDMMC_DRV,     "sdmmc_drv",    "clk_sdmmc", RV1126_SDMMC_CON0, 1),
	MMC(SCLK_SDMMC_SAMPLE,  "sdmmc_sample", "clk_sdmmc", RV1126_SDMMC_CON1, 1),

	/* PD_SDIO */
	GATE(HCLK_PDSDIO, "hclk_pdsdio", "hclk_pdphp", 0,
			RV1126_CLKGATE_CON(17), 8, GFLAGS),
	GATE(HCLK_SDIO, "hclk_sdio", "hclk_pdsdio", 0,
			RV1126_CLKGATE_CON(18), 6, GFLAGS),
	COMPOSITE(CLK_SDIO, "clk_sdio", mux_gpll_cpll_xin24m_p, 0,
			RV1126_CLKSEL_CON(56), 14, 2, MFLAGS, 0, 8, DFLAGS,
			RV1126_CLKGATE_CON(18), 7, GFLAGS),
	MMC(SCLK_SDIO_DRV, "sdio_drv", "clk_sdio", RV1126_SDIO_CON0, 1),
	MMC(SCLK_SDIO_SAMPLE, "sdio_sample", "clk_sdio", RV1126_SDIO_CON1, 1),

	/* PD_NVM */
	GATE(HCLK_PDNVM, "hclk_pdnvm", "hclk_pdphp", 0,
			RV1126_CLKGATE_CON(18), 1, GFLAGS),
	GATE(HCLK_EMMC, "hclk_emmc", "hclk_pdnvm", 0,
			RV1126_CLKGATE_CON(18), 8, GFLAGS),
	COMPOSITE(CLK_EMMC, "clk_emmc", mux_gpll_cpll_xin24m_p, 0,
			RV1126_CLKSEL_CON(57), 14, 2, MFLAGS, 0, 8, DFLAGS,
			RV1126_CLKGATE_CON(18), 9, GFLAGS),
	GATE(HCLK_NANDC, "hclk_nandc", "hclk_pdnvm", 0,
			RV1126_CLKGATE_CON(18), 13, GFLAGS),
	COMPOSITE(CLK_NANDC, "clk_nandc", mux_gpll_cpll_p, 0,
			RV1126_CLKSEL_CON(59), 15, 1, MFLAGS, 0, 8, DFLAGS,
			RV1126_CLKGATE_CON(18), 14, GFLAGS),
	GATE(HCLK_SFC, "hclk_sfc", "hclk_pdnvm", 0,
			RV1126_CLKGATE_CON(18), 10, GFLAGS),
	GATE(HCLK_SFCXIP, "hclk_sfcxip", "hclk_pdnvm", 0,
			RV1126_CLKGATE_CON(18), 11, GFLAGS),
	COMPOSITE(SCLK_SFC, "sclk_sfc", mux_cpll_gpll_p, 0,
			RV1126_CLKSEL_CON(58), 15, 1, MFLAGS, 0, 8, DFLAGS,
			RV1126_CLKGATE_CON(18), 12, GFLAGS),
	MMC(SCLK_EMMC_DRV, "emmc_drv", "clk_emmc", RV1126_EMMC_CON0, 1),
	MMC(SCLK_EMMC_SAMPLE, "emmc_sample", "clk_emmc", RV1126_EMMC_CON1, 1),

	/* PD_USB */
	GATE(ACLK_PDUSB, "aclk_pdusb", "aclk_pdphp", 0,
			RV1126_CLKGATE_CON(19), 0, GFLAGS),
	GATE(HCLK_PDUSB, "hclk_pdusb", "hclk_pdphp", 0,
			RV1126_CLKGATE_CON(19), 1, GFLAGS),
	GATE(HCLK_USBHOST, "hclk_usbhost", "hclk_pdusb", 0,
			RV1126_CLKGATE_CON(19), 4, GFLAGS),
	GATE(HCLK_USBHOST_ARB, "hclk_usbhost_arb", "hclk_pdusb", 0,
			RV1126_CLKGATE_CON(19), 5, GFLAGS),
	COMPOSITE(CLK_USBHOST_UTMI_OHCI, "clk_usbhost_utmi_ohci", mux_usb480m_gpll_p, 0,
			RV1126_CLKSEL_CON(61), 7, 1, MFLAGS, 0, 5, DFLAGS,
			RV1126_CLKGATE_CON(19), 6, GFLAGS),
	GATE(ACLK_USBOTG, "aclk_usbotg", "aclk_pdusb", 0,
			RV1126_CLKGATE_CON(19), 7, GFLAGS),
	GATE(CLK_USBOTG_REF, "clk_usbotg_ref", "xin24m", 0,
			RV1126_CLKGATE_CON(19), 8, GFLAGS),
	/* PD_GMAC */
	GATE(ACLK_PDGMAC, "aclk_pdgmac", "aclk_pdphp", 0,
			RV1126_CLKGATE_CON(20), 0, GFLAGS),
	COMPOSITE_NOMUX(PCLK_PDGMAC, "pclk_pdgmac", "aclk_pdgmac", 0,
			RV1126_CLKSEL_CON(63), 8, 5, DFLAGS,
			RV1126_CLKGATE_CON(20), 1, GFLAGS),
	GATE(ACLK_GMAC, "aclk_gmac", "aclk_pdgmac", 0,
			RV1126_CLKGATE_CON(20), 4, GFLAGS),
	GATE(PCLK_GMAC, "pclk_gmac", "pclk_pdgmac", 0,
			RV1126_CLKGATE_CON(20), 5, GFLAGS),

	COMPOSITE(CLK_GMAC_DIV, "clk_gmac_div", mux_cpll_gpll_p, 0,
			RV1126_CLKSEL_CON(63), 7, 1, MFLAGS, 0, 5, DFLAGS,
			RV1126_CLKGATE_CON(20), 6, GFLAGS),
	GATE(CLK_GMAC_RGMII_M0, "clk_gmac_rgmii_m0", "clk_gmac_rgmii_clkin_m0", 0,
			RV1126_CLKGATE_CON(20), 12, GFLAGS),
	MUX(CLK_GMAC_SRC_M0, "clk_gmac_src_m0", clk_gmac_src_m0_p, CLK_SET_RATE_PARENT,
			RV1126_GMAC_CON, 0, 1, MFLAGS),
	GATE(CLK_GMAC_RGMII_M1, "clk_gmac_rgmii_m1", "clk_gmac_rgmii_clkin_m1", 0,
			RV1126_CLKGATE_CON(20), 13, GFLAGS),
	MUX(CLK_GMAC_SRC_M1, "clk_gmac_src_m1", clk_gmac_src_m1_p, CLK_SET_RATE_PARENT,
			RV1126_GMAC_CON, 5, 1, MFLAGS),
	MUXGRF(CLK_GMAC_SRC, "clk_gmac_src", mux_clk_gmac_src_p, CLK_SET_RATE_PARENT |
			CLK_SET_RATE_NO_REPARENT,
			RV1126_GRF_IOFUNC_CON1, 12, 1, MFLAGS),

	GATE(CLK_GMAC_REF, "clk_gmac_ref", "clk_gmac_src", 0,
			RV1126_CLKGATE_CON(20), 7, GFLAGS),

	GATE(CLK_GMAC_TX_SRC, "clk_gmac_tx_src", "clk_gmac_src", 0,
			RV1126_CLKGATE_CON(20), 9, GFLAGS),
	FACTOR(CLK_GMAC_TX_DIV5, "clk_gmac_tx_div5", "clk_gmac_tx_src", 0, 1, 5),
	FACTOR(CLK_GMAC_TX_DIV50, "clk_gmac_tx_div50", "clk_gmac_tx_src", 0, 1, 50),
	MUXTBL(RGMII_MODE_CLK, "rgmii_mode_clk", mux_rgmii_clk_p, CLK_SET_RATE_PARENT,
			RV1126_GMAC_CON, 2, 2, MFLAGS, rgmii_mux_idx),
	GATE(CLK_GMAC_RX_SRC, "clk_gmac_rx_src", "clk_gmac_src", 0,
			RV1126_CLKGATE_CON(20), 8, GFLAGS),
	FACTOR(CLK_GMAC_RX_DIV2, "clk_gmac_rx_div2", "clk_gmac_rx_src", 0, 1, 2),
	FACTOR(CLK_GMAC_RX_DIV20, "clk_gmac_rx_div20", "clk_gmac_rx_src", 0, 1, 20),
	MUX(RMII_MODE_CLK, "rmii_mode_clk", mux_rmii_clk_p, CLK_SET_RATE_PARENT,
			RV1126_GMAC_CON, 1, 1, MFLAGS),
	MUX(CLK_GMAC_TX_RX, "clk_gmac_tx_rx", mux_gmac_tx_rx_p, CLK_SET_RATE_PARENT |
			CLK_SET_RATE_NO_REPARENT,
			RV1126_GMAC_CON, 4, 1, MFLAGS),

	GATE(CLK_GMAC_PTPREF, "clk_gmac_ptpref", "xin24m", 0,
			RV1126_CLKGATE_CON(20), 10, GFLAGS),
	COMPOSITE(CLK_GMAC_ETHERNET_OUT, "clk_gmac_ethernet_out2io", mux_cpll_gpll_p, 0,
			RV1126_CLKSEL_CON(61), 15, 1, MFLAGS, 8, 5, DFLAGS,
			RV1126_CLKGATE_CON(20), 11, GFLAGS),

	/*
	 * Clock-Architecture Diagram 15
	 */
	GATE(PCLK_PDTOP, "pclk_pdtop", "pclk_pdbus", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(23), 8, GFLAGS),
	GATE(PCLK_DSIPHY, "pclk_dsiphy", "pclk_pdtop", 0,
			RV1126_CLKGATE_CON(23), 4, GFLAGS),
	GATE(PCLK_CSIPHY0, "pclk_csiphy0", "pclk_pdtop", 0,
			RV1126_CLKGATE_CON(23), 2, GFLAGS),
	GATE(PCLK_CSIPHY1, "pclk_csiphy1", "pclk_pdtop", 0,
			RV1126_CLKGATE_CON(23), 3, GFLAGS),
	GATE(PCLK_USBPHY_HOST, "pclk_usbphy_host", "pclk_pdtop", 0,
			RV1126_CLKGATE_CON(19), 13, GFLAGS),
	GATE(PCLK_USBPHY_OTG, "pclk_usbphy_otg", "pclk_pdtop", 0,
			RV1126_CLKGATE_CON(19), 12, GFLAGS),

	/*
	 * Clock-Architecture Diagram 3
	 */
	/* PD_CORE */
	COMPOSITE_NOMUX(0, "aclk_core", "armclk", CLK_IGNORE_UNUSED,
			RV1126_CLKSEL_CON(1), 4, 4, DFLAGS | CLK_DIVIDER_READ_ONLY,
			RV1126_CLKGATE_CON(0), 2, GFLAGS),
	GATE(0, "pclk_dbg_daplite", "pclk_dbg", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(0), 5, GFLAGS),
	GATE(0, "clk_a7_jtag", "clk_jtag_ori", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(0), 9, GFLAGS),
	GATE(0, "aclk_core_niu", "aclk_core", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(0), 3, GFLAGS),
	GATE(0, "pclk_dbg_niu", "pclk_dbg", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(0), 4, GFLAGS),
	/*
	 * Clock-Architecture Diagram 4
	 */
	/* PD_BUS */
	GATE(0, "aclk_pdbus_hold_niu1", "aclk_pdbus", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(2), 10, GFLAGS),
	GATE(0, "aclk_pdbus_niu1", "aclk_pdbus", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(2), 3, GFLAGS),
	GATE(0, "hclk_pdbus_niu1", "hclk_pdbus", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(2), 4, GFLAGS),
	GATE(0, "pclk_pdbus_niu1", "pclk_pdbus", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(2), 5, GFLAGS),
	GATE(0, "aclk_pdbus_niu2", "aclk_pdbus", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(2), 6, GFLAGS),
	GATE(0, "hclk_pdbus_niu2", "hclk_pdbus", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(2), 7, GFLAGS),
	GATE(0, "aclk_pdbus_niu3", "aclk_pdbus", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(2), 8, GFLAGS),
	GATE(0, "hclk_pdbus_niu3", "hclk_pdbus", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(2), 9, GFLAGS),
	GATE(0, "pclk_grf", "pclk_pdbus", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(6), 15, GFLAGS),
	GATE(0, "pclk_sgrf", "pclk_pdbus", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(8), 4, GFLAGS),
	GATE(0, "aclk_sysram", "hclk_pdbus", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(3), 9, GFLAGS),
	GATE(0, "pclk_intmux", "pclk_pdbus", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(7), 14, GFLAGS),

	/*
	 * Clock-Architecture Diagram 6
	 */
	/* PD_AUDIO */
	GATE(0, "hclk_pdaudio_niu", "hclk_pdaudio", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(9), 2, GFLAGS),
	GATE(0, "pclk_pdaudio_niu", "hclk_pdaudio", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(9), 3, GFLAGS),

	/*
	 * Clock-Architecture Diagram 12
	 */
	/* PD_PHP */
	GATE(0, "aclk_pdphpmid", "aclk_pdphp", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(17), 2, GFLAGS),
	GATE(0, "hclk_pdphpmid", "hclk_pdphp", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(17), 3, GFLAGS),
	GATE(0, "aclk_pdphpmid_niu", "aclk_pdphpmid", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(17), 4, GFLAGS),
	GATE(0, "hclk_pdphpmid_niu", "hclk_pdphpmid", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(17), 5, GFLAGS),

	/* PD_SDCARD */
	GATE(0, "hclk_pdsdmmc_niu", "hclk_pdsdmmc", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(17), 7, GFLAGS),

	/* PD_SDIO */
	GATE(0, "hclk_pdsdio_niu", "hclk_pdsdio", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(17), 9, GFLAGS),

	/* PD_NVM */
	GATE(0, "hclk_pdnvm_niu", "hclk_pdnvm", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(18), 3, GFLAGS),

	/* PD_USB */
	GATE(0, "aclk_pdusb_niu", "aclk_pdusb", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(19), 2, GFLAGS),
	GATE(0, "hclk_pdusb_niu", "hclk_pdusb", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(19), 3, GFLAGS),

	/* PD_GMAC */
	GATE(0, "aclk_pdgmac_niu", "aclk_pdgmac", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(20), 2, GFLAGS),
	GATE(0, "pclk_pdgmac_niu", "pclk_pdgmac", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(20), 3, GFLAGS),

	/*
	 * Clock-Architecture Diagram 13
	 */
	/* PD_DDR */
	COMPOSITE_NOMUX(0, "pclk_pdddr_pre", "gpll", CLK_IGNORE_UNUSED,
			RV1126_CLKSEL_CON(64), 0, 5, DFLAGS,
			RV1126_CLKGATE_CON(21), 0, GFLAGS),
	GATE(PCLK_PDDDR, "pclk_pdddr", "pclk_pdddr_pre", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(21), 15, GFLAGS),
	GATE(0, "pclk_ddr_msch", "pclk_pdddr", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(21), 6, GFLAGS),
	COMPOSITE_NOGATE(SCLK_DDRCLK, "sclk_ddrc", mux_dpll_gpll_p, CLK_IGNORE_UNUSED,
			 RV1126_CLKSEL_CON(64), 15, 1, MFLAGS, 8, 5, DFLAGS |
			 CLK_DIVIDER_POWER_OF_TWO),
	COMPOSITE(CLK_DDRPHY, "clk_ddrphy", mux_dpll_gpll_p, CLK_IGNORE_UNUSED,
			RV1126_CLKSEL_CON(64), 15, 1, MFLAGS, 8, 5, DFLAGS,
			RV1126_CLKGATE_CON(21), 8, GFLAGS),
	GATE(0, "clk1x_phy", "clk_ddrphy", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(23), 1, GFLAGS),
	GATE(0, "clk_ddr_msch", "clk_ddrphy", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(21), 10, GFLAGS),
	GATE(0, "pclk_ddr_dfictl", "pclk_pdddr", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(21), 2, GFLAGS),
	GATE(0, "clk_ddr_dfictl", "clk_ddrphy", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(21), 13, GFLAGS),
	GATE(0, "pclk_ddr_standby", "pclk_pdddr", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(21), 4, GFLAGS),
	GATE(0, "clk_ddr_standby", "clk_ddrphy", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(21), 14, GFLAGS),
	GATE(0, "aclk_ddr_split", "clk_ddrphy", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(21), 9, GFLAGS),
	GATE(0, "pclk_ddr_grf", "pclk_pdddr", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(21), 5, GFLAGS),
	GATE(PCLK_DDR_MON, "pclk_ddr_mon", "pclk_pdddr", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(21), 3, GFLAGS),
	GATE(CLK_DDR_MON, "clk_ddr_mon", "clk_ddrphy", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(20), 15, GFLAGS),
	GATE(TMCLK_DDR_MON, "tmclk_ddr_mon", "xin24m", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(21), 7, GFLAGS),

	/*
	 * Clock-Architecture Diagram 15
	 */
	GATE(0, "pclk_topniu", "pclk_pdtop", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(23), 9, GFLAGS),
	GATE(PCLK_TOPCRU, "pclk_topcru", "pclk_pdtop", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(23), 10, GFLAGS),
	GATE(PCLK_TOPGRF, "pclk_topgrf", "pclk_pdtop", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(23), 11, GFLAGS),
	GATE(PCLK_CPUEMADET, "pclk_cpuemadet", "pclk_pdtop", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(23), 12, GFLAGS),
	GATE(PCLK_DDRPHY, "pclk_ddrphy", "pclk_pdtop", CLK_IGNORE_UNUSED,
			RV1126_CLKGATE_CON(23), 0, GFLAGS),
};

static const char *const rv1126_cru_critical_clocks[] __initconst = {
	"gpll",
	"cpll",
	"hpll",
	"armclk",
	"pclk_dbg",
	"pclk_pdpmu",
	"aclk_pdbus",
	"hclk_pdbus",
	"pclk_pdbus",
	"aclk_pdphp",
	"hclk_pdphp",
	"clk_ddrphy",
	"pclk_pdddr",
	"pclk_pdtop",
	"clk_usbhost_utmi_ohci",
	"aclk_pdjpeg_niu",
	"hclk_pdjpeg_niu",
	"aclk_pdvdec_niu",
	"hclk_pdvdec_niu",
};

static void __init rv1126_pmu_clk_init(struct device_node *np)
{
	struct rockchip_clk_provider *ctx;
	void __iomem *reg_base;

	reg_base = of_iomap(np, 0);
	if (!reg_base) {
		pr_err("%s: could not map cru pmu region\n", __func__);
		return;
	}

	ctx = rockchip_clk_init(np, reg_base, CLKPMU_NR_CLKS);
	if (IS_ERR(ctx)) {
		pr_err("%s: rockchip pmu clk init failed\n", __func__);
		return;
	}

	rockchip_clk_register_plls(ctx, rv1126_pmu_pll_clks,
				   ARRAY_SIZE(rv1126_pmu_pll_clks),
				   RV1126_GRF_SOC_STATUS0);

	rockchip_clk_register_branches(ctx, rv1126_clk_pmu_branches,
				       ARRAY_SIZE(rv1126_clk_pmu_branches));

	rockchip_register_softrst(np, 2, reg_base + RV1126_PMU_SOFTRST_CON(0),
				  ROCKCHIP_SOFTRST_HIWORD_MASK);

	rockchip_clk_of_add_provider(np, ctx);
}

static void __init rv1126_clk_init(struct device_node *np)
{
	struct rockchip_clk_provider *ctx;
	void __iomem *reg_base;

	reg_base = of_iomap(np, 0);
	if (!reg_base) {
		pr_err("%s: could not map cru region\n", __func__);
		return;
	}

	ctx = rockchip_clk_init(np, reg_base, CLK_NR_CLKS);
	if (IS_ERR(ctx)) {
		pr_err("%s: rockchip clk init failed\n", __func__);
		iounmap(reg_base);
		return;
	}

	rockchip_clk_register_plls(ctx, rv1126_pll_clks,
				   ARRAY_SIZE(rv1126_pll_clks),
				   RV1126_GRF_SOC_STATUS0);

	rockchip_clk_register_armclk(ctx, ARMCLK, "armclk",
				     mux_armclk_p, ARRAY_SIZE(mux_armclk_p),
				     &rv1126_cpuclk_data, rv1126_cpuclk_rates,
				     ARRAY_SIZE(rv1126_cpuclk_rates));

	rockchip_clk_register_branches(ctx, rv1126_clk_branches,
				       ARRAY_SIZE(rv1126_clk_branches));

	rockchip_register_softrst(np, 15, reg_base + RV1126_SOFTRST_CON(0),
				  ROCKCHIP_SOFTRST_HIWORD_MASK);

	rockchip_register_restart_notifier(ctx, RV1126_GLB_SRST_FST, NULL);

	rockchip_clk_protect_critical(rv1126_cru_critical_clocks,
				      ARRAY_SIZE(rv1126_cru_critical_clocks));

	rockchip_clk_of_add_provider(np, ctx);
}

struct clk_rv1126_inits {
	void (*inits)(struct device_node *np);
};

static const struct clk_rv1126_inits clk_rv1126_pmucru_init = {
	.inits = rv1126_pmu_clk_init,
};

static const struct clk_rv1126_inits clk_rv1126_cru_init = {
	.inits = rv1126_clk_init,
};

static const struct of_device_id clk_rv1126_match_table[] = {
	{
		.compatible = "rockchip,rv1126-cru",
		.data = &clk_rv1126_cru_init,
	},  {
		.compatible = "rockchip,rv1126-pmucru",
		.data = &clk_rv1126_pmucru_init,
	},
	{ }
};

static int __init clk_rv1126_probe(struct platform_device *pdev)
{
	struct device_node *np = pdev->dev.of_node;
	const struct clk_rv1126_inits *init_data;

	init_data = (struct clk_rv1126_inits *)of_device_get_match_data(&pdev->dev);
	if (!init_data)
		return -EINVAL;

	if (init_data->inits)
		init_data->inits(np);

	return 0;
}

static struct platform_driver clk_rv1126_driver = {
	.driver		= {
		.name	= "clk-rv1126",
		.of_match_table = clk_rv1126_match_table,
		.suppress_bind_attrs = true,
	},
};
builtin_platform_driver_probe(clk_rv1126_driver, clk_rv1126_probe);
