// SPDX-License-Identifier: GPL-2.0-or-later
/*
 * Clock tree for CSR SiRFAtlas7
 *
 * Copyright (c) 2014 Cambridge Silicon Radio Limited, a CSR plc group company.
 */

#include <linux/bitops.h>
#include <linux/io.h>
#include <linux/clk-provider.h>
#include <linux/delay.h>
#include <linux/of_address.h>
#include <linux/reset-controller.h>
#include <linux/slab.h>

#define SIRFSOC_CLKC_MEMPLL_AB_FREQ          0x0000
#define SIRFSOC_CLKC_MEMPLL_AB_SSC           0x0004
#define SIRFSOC_CLKC_MEMPLL_AB_CTRL0         0x0008
#define SIRFSOC_CLKC_MEMPLL_AB_CTRL1         0x000c
#define SIRFSOC_CLKC_MEMPLL_AB_STATUS        0x0010
#define SIRFSOC_CLKC_MEMPLL_AB_SSRAM_ADDR    0x0014
#define SIRFSOC_CLKC_MEMPLL_AB_SSRAM_DATA    0x0018

#define SIRFSOC_CLKC_CPUPLL_AB_FREQ          0x001c
#define SIRFSOC_CLKC_CPUPLL_AB_SSC           0x0020
#define SIRFSOC_CLKC_CPUPLL_AB_CTRL0         0x0024
#define SIRFSOC_CLKC_CPUPLL_AB_CTRL1         0x0028
#define SIRFSOC_CLKC_CPUPLL_AB_STATUS        0x002c

#define SIRFSOC_CLKC_SYS0PLL_AB_FREQ         0x0030
#define SIRFSOC_CLKC_SYS0PLL_AB_SSC          0x0034
#define SIRFSOC_CLKC_SYS0PLL_AB_CTRL0        0x0038
#define SIRFSOC_CLKC_SYS0PLL_AB_CTRL1        0x003c
#define SIRFSOC_CLKC_SYS0PLL_AB_STATUS       0x0040

#define SIRFSOC_CLKC_SYS1PLL_AB_FREQ         0x0044
#define SIRFSOC_CLKC_SYS1PLL_AB_SSC          0x0048
#define SIRFSOC_CLKC_SYS1PLL_AB_CTRL0        0x004c
#define SIRFSOC_CLKC_SYS1PLL_AB_CTRL1        0x0050
#define SIRFSOC_CLKC_SYS1PLL_AB_STATUS       0x0054

#define SIRFSOC_CLKC_SYS2PLL_AB_FREQ         0x0058
#define SIRFSOC_CLKC_SYS2PLL_AB_SSC          0x005c
#define SIRFSOC_CLKC_SYS2PLL_AB_CTRL0        0x0060
#define SIRFSOC_CLKC_SYS2PLL_AB_CTRL1        0x0064
#define SIRFSOC_CLKC_SYS2PLL_AB_STATUS       0x0068

#define SIRFSOC_CLKC_SYS3PLL_AB_FREQ         0x006c
#define SIRFSOC_CLKC_SYS3PLL_AB_SSC          0x0070
#define SIRFSOC_CLKC_SYS3PLL_AB_CTRL0        0x0074
#define SIRFSOC_CLKC_SYS3PLL_AB_CTRL1        0x0078
#define SIRFSOC_CLKC_SYS3PLL_AB_STATUS       0x007c

#define SIRFSOC_ABPLL_CTRL0_SSEN     0x00001000
#define SIRFSOC_ABPLL_CTRL0_BYPASS   0x00000010
#define SIRFSOC_ABPLL_CTRL0_RESET    0x00000001

#define SIRFSOC_CLKC_AUDIO_DTO_INC           0x0088
#define SIRFSOC_CLKC_DISP0_DTO_INC           0x008c
#define SIRFSOC_CLKC_DISP1_DTO_INC           0x0090

#define SIRFSOC_CLKC_AUDIO_DTO_SRC           0x0094
#define SIRFSOC_CLKC_AUDIO_DTO_ENA           0x0098
#define SIRFSOC_CLKC_AUDIO_DTO_DROFF         0x009c

#define SIRFSOC_CLKC_DISP0_DTO_SRC           0x00a0
#define SIRFSOC_CLKC_DISP0_DTO_ENA           0x00a4
#define SIRFSOC_CLKC_DISP0_DTO_DROFF         0x00a8

#define SIRFSOC_CLKC_DISP1_DTO_SRC           0x00ac
#define SIRFSOC_CLKC_DISP1_DTO_ENA           0x00b0
#define SIRFSOC_CLKC_DISP1_DTO_DROFF         0x00b4

#define SIRFSOC_CLKC_I2S_CLK_SEL             0x00b8
#define SIRFSOC_CLKC_I2S_SEL_STAT            0x00bc

#define SIRFSOC_CLKC_USBPHY_CLKDIV_CFG       0x00c0
#define SIRFSOC_CLKC_USBPHY_CLKDIV_ENA       0x00c4
#define SIRFSOC_CLKC_USBPHY_CLK_SEL          0x00c8
#define SIRFSOC_CLKC_USBPHY_CLK_SEL_STAT     0x00cc

#define SIRFSOC_CLKC_BTSS_CLKDIV_CFG         0x00d0
#define SIRFSOC_CLKC_BTSS_CLKDIV_ENA         0x00d4
#define SIRFSOC_CLKC_BTSS_CLK_SEL            0x00d8
#define SIRFSOC_CLKC_BTSS_CLK_SEL_STAT       0x00dc

#define SIRFSOC_CLKC_RGMII_CLKDIV_CFG        0x00e0
#define SIRFSOC_CLKC_RGMII_CLKDIV_ENA        0x00e4
#define SIRFSOC_CLKC_RGMII_CLK_SEL           0x00e8
#define SIRFSOC_CLKC_RGMII_CLK_SEL_STAT      0x00ec

#define SIRFSOC_CLKC_CPU_CLKDIV_CFG          0x00f0
#define SIRFSOC_CLKC_CPU_CLKDIV_ENA          0x00f4
#define SIRFSOC_CLKC_CPU_CLK_SEL             0x00f8
#define SIRFSOC_CLKC_CPU_CLK_SEL_STAT        0x00fc

#define SIRFSOC_CLKC_SDPHY01_CLKDIV_CFG      0x0100
#define SIRFSOC_CLKC_SDPHY01_CLKDIV_ENA      0x0104
#define SIRFSOC_CLKC_SDPHY01_CLK_SEL         0x0108
#define SIRFSOC_CLKC_SDPHY01_CLK_SEL_STAT    0x010c

#define SIRFSOC_CLKC_SDPHY23_CLKDIV_CFG      0x0110
#define SIRFSOC_CLKC_SDPHY23_CLKDIV_ENA      0x0114
#define SIRFSOC_CLKC_SDPHY23_CLK_SEL         0x0118
#define SIRFSOC_CLKC_SDPHY23_CLK_SEL_STAT    0x011c

#define SIRFSOC_CLKC_SDPHY45_CLKDIV_CFG      0x0120
#define SIRFSOC_CLKC_SDPHY45_CLKDIV_ENA      0x0124
#define SIRFSOC_CLKC_SDPHY45_CLK_SEL         0x0128
#define SIRFSOC_CLKC_SDPHY45_CLK_SEL_STAT    0x012c

#define SIRFSOC_CLKC_SDPHY67_CLKDIV_CFG      0x0130
#define SIRFSOC_CLKC_SDPHY67_CLKDIV_ENA      0x0134
#define SIRFSOC_CLKC_SDPHY67_CLK_SEL         0x0138
#define SIRFSOC_CLKC_SDPHY67_CLK_SEL_STAT    0x013c

#define SIRFSOC_CLKC_CAN_CLKDIV_CFG          0x0140
#define SIRFSOC_CLKC_CAN_CLKDIV_ENA          0x0144
#define SIRFSOC_CLKC_CAN_CLK_SEL             0x0148
#define SIRFSOC_CLKC_CAN_CLK_SEL_STAT        0x014c

#define SIRFSOC_CLKC_DEINT_CLKDIV_CFG        0x0150
#define SIRFSOC_CLKC_DEINT_CLKDIV_ENA        0x0154
#define SIRFSOC_CLKC_DEINT_CLK_SEL           0x0158
#define SIRFSOC_CLKC_DEINT_CLK_SEL_STAT      0x015c

#define SIRFSOC_CLKC_NAND_CLKDIV_CFG         0x0160
#define SIRFSOC_CLKC_NAND_CLKDIV_ENA         0x0164
#define SIRFSOC_CLKC_NAND_CLK_SEL            0x0168
#define SIRFSOC_CLKC_NAND_CLK_SEL_STAT       0x016c

#define SIRFSOC_CLKC_DISP0_CLKDIV_CFG        0x0170
#define SIRFSOC_CLKC_DISP0_CLKDIV_ENA        0x0174
#define SIRFSOC_CLKC_DISP0_CLK_SEL           0x0178
#define SIRFSOC_CLKC_DISP0_CLK_SEL_STAT      0x017c

#define SIRFSOC_CLKC_DISP1_CLKDIV_CFG        0x0180
#define SIRFSOC_CLKC_DISP1_CLKDIV_ENA        0x0184
#define SIRFSOC_CLKC_DISP1_CLK_SEL           0x0188
#define SIRFSOC_CLKC_DISP1_CLK_SEL_STAT      0x018c

#define SIRFSOC_CLKC_GPU_CLKDIV_CFG          0x0190
#define SIRFSOC_CLKC_GPU_CLKDIV_ENA          0x0194
#define SIRFSOC_CLKC_GPU_CLK_SEL             0x0198
#define SIRFSOC_CLKC_GPU_CLK_SEL_STAT        0x019c

#define SIRFSOC_CLKC_GNSS_CLKDIV_CFG         0x01a0
#define SIRFSOC_CLKC_GNSS_CLKDIV_ENA         0x01a4
#define SIRFSOC_CLKC_GNSS_CLK_SEL            0x01a8
#define SIRFSOC_CLKC_GNSS_CLK_SEL_STAT       0x01ac

#define SIRFSOC_CLKC_SHARED_DIVIDER_CFG0     0x01b0
#define SIRFSOC_CLKC_SHARED_DIVIDER_CFG1     0x01b4
#define SIRFSOC_CLKC_SHARED_DIVIDER_ENA      0x01b8

#define SIRFSOC_CLKC_SYS_CLK_SEL             0x01bc
#define SIRFSOC_CLKC_SYS_CLK_SEL_STAT        0x01c0
#define SIRFSOC_CLKC_IO_CLK_SEL              0x01c4
#define SIRFSOC_CLKC_IO_CLK_SEL_STAT         0x01c8
#define SIRFSOC_CLKC_G2D_CLK_SEL             0x01cc
#define SIRFSOC_CLKC_G2D_CLK_SEL_STAT        0x01d0
#define SIRFSOC_CLKC_JPENC_CLK_SEL           0x01d4
#define SIRFSOC_CLKC_JPENC_CLK_SEL_STAT      0x01d8
#define SIRFSOC_CLKC_VDEC_CLK_SEL            0x01dc
#define SIRFSOC_CLKC_VDEC_CLK_SEL_STAT       0x01e0
#define SIRFSOC_CLKC_GMAC_CLK_SEL            0x01e4
#define SIRFSOC_CLKC_GMAC_CLK_SEL_STAT       0x01e8
#define SIRFSOC_CLKC_USB_CLK_SEL             0x01ec
#define SIRFSOC_CLKC_USB_CLK_SEL_STAT        0x01f0
#define SIRFSOC_CLKC_KAS_CLK_SEL             0x01f4
#define SIRFSOC_CLKC_KAS_CLK_SEL_STAT        0x01f8
#define SIRFSOC_CLKC_SEC_CLK_SEL             0x01fc
#define SIRFSOC_CLKC_SEC_CLK_SEL_STAT        0x0200
#define SIRFSOC_CLKC_SDR_CLK_SEL             0x0204
#define SIRFSOC_CLKC_SDR_CLK_SEL_STAT        0x0208
#define SIRFSOC_CLKC_VIP_CLK_SEL             0x020c
#define SIRFSOC_CLKC_VIP_CLK_SEL_STAT        0x0210
#define SIRFSOC_CLKC_NOCD_CLK_SEL            0x0214
#define SIRFSOC_CLKC_NOCD_CLK_SEL_STAT       0x0218
#define SIRFSOC_CLKC_NOCR_CLK_SEL            0x021c
#define SIRFSOC_CLKC_NOCR_CLK_SEL_STAT       0x0220
#define SIRFSOC_CLKC_TPIU_CLK_SEL            0x0224
#define SIRFSOC_CLKC_TPIU_CLK_SEL_STAT       0x0228

#define SIRFSOC_CLKC_ROOT_CLK_EN0_SET        0x022c
#define SIRFSOC_CLKC_ROOT_CLK_EN0_CLR        0x0230
#define SIRFSOC_CLKC_ROOT_CLK_EN0_STAT       0x0234
#define SIRFSOC_CLKC_ROOT_CLK_EN1_SET        0x0238
#define SIRFSOC_CLKC_ROOT_CLK_EN1_CLR        0x023c
#define SIRFSOC_CLKC_ROOT_CLK_EN1_STAT       0x0240

#define SIRFSOC_CLKC_LEAF_CLK_EN0_SET        0x0244
#define SIRFSOC_CLKC_LEAF_CLK_EN0_CLR        0x0248
#define SIRFSOC_CLKC_LEAF_CLK_EN0_STAT       0x024c

#define SIRFSOC_CLKC_RSTC_A7_SW_RST          0x0308

#define SIRFSOC_CLKC_LEAF_CLK_EN1_SET        0x04a0
#define SIRFSOC_CLKC_LEAF_CLK_EN2_SET        0x04b8
#define SIRFSOC_CLKC_LEAF_CLK_EN3_SET        0x04d0
#define SIRFSOC_CLKC_LEAF_CLK_EN4_SET        0x04e8
#define SIRFSOC_CLKC_LEAF_CLK_EN5_SET        0x0500
#define SIRFSOC_CLKC_LEAF_CLK_EN6_SET        0x0518
#define SIRFSOC_CLKC_LEAF_CLK_EN7_SET        0x0530
#define SIRFSOC_CLKC_LEAF_CLK_EN8_SET        0x0548

#define SIRFSOC_NOC_CLK_IDLEREQ_SET		0x02D0
#define SIRFSOC_NOC_CLK_IDLEREQ_CLR		0x02D4
#define SIRFSOC_NOC_CLK_SLVRDY_SET		0x02E8
#define SIRFSOC_NOC_CLK_SLVRDY_CLR		0x02EC
#define SIRFSOC_NOC_CLK_IDLE_STATUS		0x02F4

struct clk_pll {
	struct clk_hw hw;
	u16 regofs;  /* register offset */
};
#define to_pllclk(_hw) container_of(_hw, struct clk_pll, hw)

struct clk_dto {
	struct clk_hw hw;
	u16 inc_offset;  /* dto increment offset */
	u16 src_offset;  /* dto src offset */
};
#define to_dtoclk(_hw) container_of(_hw, struct clk_dto, hw)

enum clk_unit_type {
	CLK_UNIT_NOC_OTHER,
	CLK_UNIT_NOC_CLOCK,
	CLK_UNIT_NOC_SOCKET,
};

struct clk_unit {
	struct clk_hw hw;
	u16 regofs;
	u16 bit;
	u32 type;
	u8 idle_bit;
	spinlock_t *lock;
};
#define to_unitclk(_hw) container_of(_hw, struct clk_unit, hw)

struct atlas7_div_init_data {
	const char *div_name;
	const char *parent_name;
	const char *gate_name;
	unsigned long flags;
	u8 divider_flags;
	u8 gate_flags;
	u32 div_offset;
	u8 shift;
	u8 width;
	u32 gate_offset;
	u8 gate_bit;
	spinlock_t *lock;
};

struct atlas7_mux_init_data {
	const char *mux_name;
	const char * const *parent_names;
	u8 parent_num;
	unsigned long flags;
	u8 mux_flags;
	u32 mux_offset;
	u8 shift;
	u8 width;
};

struct atlas7_unit_init_data {
	u32 index;
	const char *unit_name;
	const char *parent_name;
	unsigned long flags;
	u32 regofs;
	u8 bit;
	u32 type;
	u8 idle_bit;
	spinlock_t *lock;
};

struct atlas7_reset_desc {
	const char *name;
	u32 clk_ofs;
	u8  clk_bit;
	u32 rst_ofs;
	u8  rst_bit;
	spinlock_t *lock;
};

static void __iomem *sirfsoc_clk_vbase;
static struct clk_onecell_data clk_data;

static const struct clk_div_table pll_div_table[] = {
	{ .val = 0, .div = 1 },
	{ .val = 1, .div = 2 },
	{ .val = 2, .div = 4 },
	{ .val = 3, .div = 8 },
	{ .val = 4, .div = 16 },
	{ .val = 5, .div = 32 },
};

static DEFINE_SPINLOCK(cpupll_ctrl1_lock);
static DEFINE_SPINLOCK(mempll_ctrl1_lock);
static DEFINE_SPINLOCK(sys0pll_ctrl1_lock);
static DEFINE_SPINLOCK(sys1pll_ctrl1_lock);
static DEFINE_SPINLOCK(sys2pll_ctrl1_lock);
static DEFINE_SPINLOCK(sys3pll_ctrl1_lock);
static DEFINE_SPINLOCK(usbphy_div_lock);
static DEFINE_SPINLOCK(btss_div_lock);
static DEFINE_SPINLOCK(rgmii_div_lock);
static DEFINE_SPINLOCK(cpu_div_lock);
static DEFINE_SPINLOCK(sdphy01_div_lock);
static DEFINE_SPINLOCK(sdphy23_div_lock);
static DEFINE_SPINLOCK(sdphy45_div_lock);
static DEFINE_SPINLOCK(sdphy67_div_lock);
static DEFINE_SPINLOCK(can_div_lock);
static DEFINE_SPINLOCK(deint_div_lock);
static DEFINE_SPINLOCK(nand_div_lock);
static DEFINE_SPINLOCK(disp0_div_lock);
static DEFINE_SPINLOCK(disp1_div_lock);
static DEFINE_SPINLOCK(gpu_div_lock);
static DEFINE_SPINLOCK(gnss_div_lock);
/* gate register shared */
static DEFINE_SPINLOCK(share_div_lock);
static DEFINE_SPINLOCK(root0_gate_lock);
static DEFINE_SPINLOCK(root1_gate_lock);
static DEFINE_SPINLOCK(leaf0_gate_lock);
static DEFINE_SPINLOCK(leaf1_gate_lock);
static DEFINE_SPINLOCK(leaf2_gate_lock);
static DEFINE_SPINLOCK(leaf3_gate_lock);
static DEFINE_SPINLOCK(leaf4_gate_lock);
static DEFINE_SPINLOCK(leaf5_gate_lock);
static DEFINE_SPINLOCK(leaf6_gate_lock);
static DEFINE_SPINLOCK(leaf7_gate_lock);
static DEFINE_SPINLOCK(leaf8_gate_lock);

static inline unsigned long clkc_readl(unsigned reg)
{
	return readl(sirfsoc_clk_vbase + reg);
}

static inline void clkc_writel(u32 val, unsigned reg)
{
	writel(val, sirfsoc_clk_vbase + reg);
}

/*
*  ABPLL
*  integer mode: Fvco = Fin * 2 * NF / NR
*  Spread Spectrum mode: Fvco = Fin * SSN / NR
*  SSN = 2^24 / (256 * ((ssdiv >> ssdepth) << ssdepth) + (ssmod << ssdepth))
*/
static unsigned long pll_clk_recalc_rate(struct clk_hw *hw,
	unsigned long parent_rate)
{
	unsigned long fin = parent_rate;
	struct clk_pll *clk = to_pllclk(hw);
	u64 rate;
	u32 regctrl0 = clkc_readl(clk->regofs + SIRFSOC_CLKC_MEMPLL_AB_CTRL0 -
			SIRFSOC_CLKC_MEMPLL_AB_FREQ);
	u32 regfreq = clkc_readl(clk->regofs);
	u32 regssc = clkc_readl(clk->regofs + SIRFSOC_CLKC_MEMPLL_AB_SSC -
			SIRFSOC_CLKC_MEMPLL_AB_FREQ);
	u32 nr = (regfreq  >> 16 & (BIT(3) - 1)) + 1;
	u32 nf = (regfreq & (BIT(9) - 1)) + 1;
	u32 ssdiv = regssc >> 8 & (BIT(12) - 1);
	u32 ssdepth = regssc >> 20 & (BIT(2) - 1);
	u32 ssmod = regssc & (BIT(8) - 1);

	if (regctrl0 & SIRFSOC_ABPLL_CTRL0_BYPASS)
		return fin;

	if (regctrl0 & SIRFSOC_ABPLL_CTRL0_SSEN) {
		rate = fin;
		rate *= 1 << 24;
		do_div(rate, nr);
		do_div(rate, (256 * ((ssdiv >> ssdepth) << ssdepth)
			+ (ssmod << ssdepth)));
	} else {
		rate = 2 * fin;
		rate *= nf;
		do_div(rate, nr);
	}
	return rate;
}

static const struct clk_ops ab_pll_ops = {
	.recalc_rate = pll_clk_recalc_rate,
};

static const char * const pll_clk_parents[] = {
	"xin",
};

static const struct clk_init_data clk_cpupll_init = {
	.name = "cpupll_vco",
	.ops = &ab_pll_ops,
	.parent_names = pll_clk_parents,
	.num_parents = ARRAY_SIZE(pll_clk_parents),
};

static struct clk_pll clk_cpupll = {
	.regofs = SIRFSOC_CLKC_CPUPLL_AB_FREQ,
	.hw = {
		.init = &clk_cpupll_init,
	},
};

static const struct clk_init_data clk_mempll_init = {
	.name = "mempll_vco",
	.ops = &ab_pll_ops,
	.parent_names = pll_clk_parents,
	.num_parents = ARRAY_SIZE(pll_clk_parents),
};

static struct clk_pll clk_mempll = {
	.regofs = SIRFSOC_CLKC_MEMPLL_AB_FREQ,
	.hw = {
		.init = &clk_mempll_init,
	},
};

static const struct clk_init_data clk_sys0pll_init = {
	.name = "sys0pll_vco",
	.ops = &ab_pll_ops,
	.parent_names = pll_clk_parents,
	.num_parents = ARRAY_SIZE(pll_clk_parents),
};

static struct clk_pll clk_sys0pll = {
	.regofs = SIRFSOC_CLKC_SYS0PLL_AB_FREQ,
	.hw = {
		.init = &clk_sys0pll_init,
	},
};

static const struct clk_init_data clk_sys1pll_init = {
	.name = "sys1pll_vco",
	.ops = &ab_pll_ops,
	.parent_names = pll_clk_parents,
	.num_parents = ARRAY_SIZE(pll_clk_parents),
};

static struct clk_pll clk_sys1pll = {
	.regofs = SIRFSOC_CLKC_SYS1PLL_AB_FREQ,
	.hw = {
		.init = &clk_sys1pll_init,
	},
};

static const struct clk_init_data clk_sys2pll_init = {
	.name = "sys2pll_vco",
	.ops = &ab_pll_ops,
	.parent_names = pll_clk_parents,
	.num_parents = ARRAY_SIZE(pll_clk_parents),
};

static struct clk_pll clk_sys2pll = {
	.regofs = SIRFSOC_CLKC_SYS2PLL_AB_FREQ,
	.hw = {
		.init = &clk_sys2pll_init,
	},
};

static const struct clk_init_data clk_sys3pll_init = {
	.name = "sys3pll_vco",
	.ops = &ab_pll_ops,
	.parent_names = pll_clk_parents,
	.num_parents = ARRAY_SIZE(pll_clk_parents),
};

static struct clk_pll clk_sys3pll = {
	.regofs = SIRFSOC_CLKC_SYS3PLL_AB_FREQ,
	.hw = {
		.init = &clk_sys3pll_init,
	},
};

/*
 *  DTO in clkc, default enable double resolution mode
 *  double resolution mode:fout = fin * finc / 2^29
 *  normal mode:fout = fin * finc / 2^28
 */
#define DTO_RESL_DOUBLE	(1ULL << 29)
#define DTO_RESL_NORMAL	(1ULL << 28)

static int dto_clk_is_enabled(struct clk_hw *hw)
{
	struct clk_dto *clk = to_dtoclk(hw);
	int reg;

	reg = clk->src_offset + SIRFSOC_CLKC_AUDIO_DTO_ENA - SIRFSOC_CLKC_AUDIO_DTO_SRC;

	return !!(clkc_readl(reg) & BIT(0));
}

static int dto_clk_enable(struct clk_hw *hw)
{
	u32 val, reg;
	struct clk_dto *clk = to_dtoclk(hw);

	reg = clk->src_offset + SIRFSOC_CLKC_AUDIO_DTO_ENA - SIRFSOC_CLKC_AUDIO_DTO_SRC;

	val = clkc_readl(reg) | BIT(0);
	clkc_writel(val, reg);
	return 0;
}

static void dto_clk_disable(struct clk_hw *hw)
{
	u32 val, reg;
	struct clk_dto *clk = to_dtoclk(hw);

	reg = clk->src_offset + SIRFSOC_CLKC_AUDIO_DTO_ENA - SIRFSOC_CLKC_AUDIO_DTO_SRC;

	val = clkc_readl(reg) & ~BIT(0);
	clkc_writel(val, reg);
}

static unsigned long dto_clk_recalc_rate(struct clk_hw *hw,
	unsigned long parent_rate)
{
	u64 rate = parent_rate;
	struct clk_dto *clk = to_dtoclk(hw);
	u32 finc = clkc_readl(clk->inc_offset);
	u32 droff = clkc_readl(clk->src_offset + SIRFSOC_CLKC_AUDIO_DTO_DROFF - SIRFSOC_CLKC_AUDIO_DTO_SRC);

	rate *= finc;
	if (droff & BIT(0))
		/* Double resolution off */
		do_div(rate, DTO_RESL_NORMAL);
	else
		do_div(rate, DTO_RESL_DOUBLE);

	return rate;
}

static long dto_clk_round_rate(struct clk_hw *hw, unsigned long rate,
	unsigned long *parent_rate)
{
	u64 dividend = rate * DTO_RESL_DOUBLE;

	do_div(dividend, *parent_rate);
	dividend *= *parent_rate;
	do_div(dividend, DTO_RESL_DOUBLE);

	return dividend;
}

static int dto_clk_set_rate(struct clk_hw *hw, unsigned long rate,
	unsigned long parent_rate)
{
	u64 dividend = rate * DTO_RESL_DOUBLE;
	struct clk_dto *clk = to_dtoclk(hw);

	do_div(dividend, parent_rate);
	clkc_writel(0, clk->src_offset + SIRFSOC_CLKC_AUDIO_DTO_DROFF - SIRFSOC_CLKC_AUDIO_DTO_SRC);
	clkc_writel(dividend, clk->inc_offset);

	return 0;
}

static u8 dto_clk_get_parent(struct clk_hw *hw)
{
	struct clk_dto *clk = to_dtoclk(hw);

	return clkc_readl(clk->src_offset);
}

/*
 *   dto need CLK_SET_PARENT_GATE
 */
static int dto_clk_set_parent(struct clk_hw *hw, u8 index)
{
	struct clk_dto *clk = to_dtoclk(hw);

	clkc_writel(index, clk->src_offset);
	return 0;
}

static const struct clk_ops dto_ops = {
	.is_enabled = dto_clk_is_enabled,
	.enable = dto_clk_enable,
	.disable = dto_clk_disable,
	.recalc_rate = dto_clk_recalc_rate,
	.round_rate = dto_clk_round_rate,
	.set_rate = dto_clk_set_rate,
	.get_parent = dto_clk_get_parent,
	.set_parent = dto_clk_set_parent,
};

/* dto parent clock as syspllvco/clk1 */
static const char * const audiodto_clk_parents[] = {
	"sys0pll_clk1",
	"sys1pll_clk1",
	"sys3pll_clk1",
};

static const struct clk_init_data clk_audiodto_init = {
	.name = "audio_dto",
	.ops = &dto_ops,
	.parent_names = audiodto_clk_parents,
	.num_parents = ARRAY_SIZE(audiodto_clk_parents),
};

static struct clk_dto clk_audio_dto = {
	.inc_offset = SIRFSOC_CLKC_AUDIO_DTO_INC,
	.src_offset = SIRFSOC_CLKC_AUDIO_DTO_SRC,
	.hw = {
		.init = &clk_audiodto_init,
	},
};

static const char * const disp0dto_clk_parents[] = {
	"sys0pll_clk1",
	"sys1pll_clk1",
	"sys3pll_clk1",
};

static const struct clk_init_data clk_disp0dto_init = {
	.name = "disp0_dto",
	.ops = &dto_ops,
	.parent_names = disp0dto_clk_parents,
	.num_parents = ARRAY_SIZE(disp0dto_clk_parents),
};

static struct clk_dto clk_disp0_dto = {
	.inc_offset = SIRFSOC_CLKC_DISP0_DTO_INC,
	.src_offset = SIRFSOC_CLKC_DISP0_DTO_SRC,
	.hw = {
		.init = &clk_disp0dto_init,
	},
};

static const char * const disp1dto_clk_parents[] = {
	"sys0pll_clk1",
	"sys1pll_clk1",
	"sys3pll_clk1",
};

static const struct clk_init_data clk_disp1dto_init = {
	.name = "disp1_dto",
	.ops = &dto_ops,
	.parent_names = disp1dto_clk_parents,
	.num_parents = ARRAY_SIZE(disp1dto_clk_parents),
};

static struct clk_dto clk_disp1_dto = {
	.inc_offset = SIRFSOC_CLKC_DISP1_DTO_INC,
	.src_offset = SIRFSOC_CLKC_DISP1_DTO_SRC,
	.hw = {
		.init = &clk_disp1dto_init,
	},
};

static struct atlas7_div_init_data divider_list[] __initdata = {
	/* div_name, parent_name, gate_name, clk_flag, divider_flag, gate_flag, div_offset, shift, wdith, gate_offset, bit_enable, lock */
	{ "sys0pll_qa1", "sys0pll_fixdiv", "sys0pll_a1", 0, 0, 0, SIRFSOC_CLKC_USBPHY_CLKDIV_CFG, 0, 6, SIRFSOC_CLKC_USBPHY_CLKDIV_ENA, 0, &usbphy_div_lock },
	{ "sys1pll_qa1", "sys1pll_fixdiv", "sys1pll_a1", 0, 0, 0, SIRFSOC_CLKC_USBPHY_CLKDIV_CFG, 8, 6, SIRFSOC_CLKC_USBPHY_CLKDIV_ENA, 4, &usbphy_div_lock },
	{ "sys2pll_qa1", "sys2pll_fixdiv", "sys2pll_a1", 0, 0, 0, SIRFSOC_CLKC_USBPHY_CLKDIV_CFG, 16, 6, SIRFSOC_CLKC_USBPHY_CLKDIV_ENA, 8, &usbphy_div_lock },
	{ "sys3pll_qa1", "sys3pll_fixdiv", "sys3pll_a1", 0, 0, 0, SIRFSOC_CLKC_USBPHY_CLKDIV_CFG, 24, 6, SIRFSOC_CLKC_USBPHY_CLKDIV_ENA, 12, &usbphy_div_lock },
	{ "sys0pll_qa2", "sys0pll_fixdiv", "sys0pll_a2", 0, 0, 0, SIRFSOC_CLKC_BTSS_CLKDIV_CFG, 0, 6, SIRFSOC_CLKC_BTSS_CLKDIV_ENA, 0, &btss_div_lock },
	{ "sys1pll_qa2", "sys1pll_fixdiv", "sys1pll_a2", 0, 0, 0, SIRFSOC_CLKC_BTSS_CLKDIV_CFG, 8, 6, SIRFSOC_CLKC_BTSS_CLKDIV_ENA, 4, &btss_div_lock },
	{ "sys2pll_qa2", "sys2pll_fixdiv", "sys2pll_a2", 0, 0, 0, SIRFSOC_CLKC_BTSS_CLKDIV_CFG, 16, 6, SIRFSOC_CLKC_BTSS_CLKDIV_ENA, 8, &btss_div_lock },
	{ "sys3pll_qa2", "sys3pll_fixdiv", "sys3pll_a2", 0, 0, 0, SIRFSOC_CLKC_BTSS_CLKDIV_CFG, 24, 6, SIRFSOC_CLKC_BTSS_CLKDIV_ENA, 12, &btss_div_lock },
	{ "sys0pll_qa3", "sys0pll_fixdiv", "sys0pll_a3", 0, 0, 0, SIRFSOC_CLKC_RGMII_CLKDIV_CFG, 0, 6, SIRFSOC_CLKC_RGMII_CLKDIV_ENA, 0, &rgmii_div_lock },
	{ "sys1pll_qa3", "sys1pll_fixdiv", "sys1pll_a3", 0, 0, 0, SIRFSOC_CLKC_RGMII_CLKDIV_CFG, 8, 6, SIRFSOC_CLKC_RGMII_CLKDIV_ENA, 4, &rgmii_div_lock },
	{ "sys2pll_qa3", "sys2pll_fixdiv", "sys2pll_a3", 0, 0, 0, SIRFSOC_CLKC_RGMII_CLKDIV_CFG, 16, 6, SIRFSOC_CLKC_RGMII_CLKDIV_ENA, 8, &rgmii_div_lock },
	{ "sys3pll_qa3", "sys3pll_fixdiv", "sys3pll_a3", 0, 0, 0, SIRFSOC_CLKC_RGMII_CLKDIV_CFG, 24, 6, SIRFSOC_CLKC_RGMII_CLKDIV_ENA, 12, &rgmii_div_lock },
	{ "sys0pll_qa4", "sys0pll_fixdiv", "sys0pll_a4", 0, 0, 0, SIRFSOC_CLKC_CPU_CLKDIV_CFG, 0, 6, SIRFSOC_CLKC_CPU_CLKDIV_ENA, 0, &cpu_div_lock },
	{ "sys1pll_qa4", "sys1pll_fixdiv", "sys1pll_a4", 0, 0, CLK_IGNORE_UNUSED, SIRFSOC_CLKC_CPU_CLKDIV_CFG, 8, 6, SIRFSOC_CLKC_CPU_CLKDIV_ENA, 4, &cpu_div_lock },
	{ "sys0pll_qa5", "sys0pll_fixdiv", "sys0pll_a5", 0, 0, 0, SIRFSOC_CLKC_SDPHY01_CLKDIV_CFG, 0, 6, SIRFSOC_CLKC_SDPHY01_CLKDIV_ENA, 0, &sdphy01_div_lock },
	{ "sys1pll_qa5", "sys1pll_fixdiv", "sys1pll_a5", 0, 0, 0, SIRFSOC_CLKC_SDPHY01_CLKDIV_CFG, 8, 6, SIRFSOC_CLKC_SDPHY01_CLKDIV_ENA, 4, &sdphy01_div_lock },
	{ "sys2pll_qa5", "sys2pll_fixdiv", "sys2pll_a5", 0, 0, 0, SIRFSOC_CLKC_SDPHY01_CLKDIV_CFG, 16, 6, SIRFSOC_CLKC_SDPHY01_CLKDIV_ENA, 8, &sdphy01_div_lock },
	{ "sys3pll_qa5", "sys3pll_fixdiv", "sys3pll_a5", 0, 0, 0, SIRFSOC_CLKC_SDPHY01_CLKDIV_CFG, 24, 6, SIRFSOC_CLKC_SDPHY01_CLKDIV_ENA, 12, &sdphy01_div_lock },
	{ "sys0pll_qa6", "sys0pll_fixdiv", "sys0pll_a6", 0, 0, 0, SIRFSOC_CLKC_SDPHY23_CLKDIV_CFG, 0, 6, SIRFSOC_CLKC_SDPHY23_CLKDIV_ENA, 0, &sdphy23_div_lock },
	{ "sys1pll_qa6", "sys1pll_fixdiv", "sys1pll_a6", 0, 0, 0, SIRFSOC_CLKC_SDPHY23_CLKDIV_CFG, 8, 6, SIRFSOC_CLKC_SDPHY23_CLKDIV_ENA, 4, &sdphy23_div_lock },
	{ "sys2pll_qa6", "sys2pll_fixdiv", "sys2pll_a6", 0, 0, 0, SIRFSOC_CLKC_SDPHY23_CLKDIV_CFG, 16, 6, SIRFSOC_CLKC_SDPHY23_CLKDIV_ENA, 8, &sdphy23_div_lock },
	{ "sys3pll_qa6", "sys3pll_fixdiv", "sys3pll_a6", 0, 0, 0, SIRFSOC_CLKC_SDPHY23_CLKDIV_CFG, 24, 6, SIRFSOC_CLKC_SDPHY23_CLKDIV_ENA, 12, &sdphy23_div_lock },
	{ "sys0pll_qa7", "sys0pll_fixdiv", "sys0pll_a7", 0, 0, 0, SIRFSOC_CLKC_SDPHY45_CLKDIV_CFG, 0, 6, SIRFSOC_CLKC_SDPHY45_CLKDIV_ENA, 0, &sdphy45_div_lock },
	{ "sys1pll_qa7", "sys1pll_fixdiv", "sys1pll_a7", 0, 0, 0, SIRFSOC_CLKC_SDPHY45_CLKDIV_CFG, 8, 6, SIRFSOC_CLKC_SDPHY45_CLKDIV_ENA, 4, &sdphy45_div_lock },
	{ "sys2pll_qa7", "sys2pll_fixdiv", "sys2pll_a7", 0, 0, 0, SIRFSOC_CLKC_SDPHY45_CLKDIV_CFG, 16, 6, SIRFSOC_CLKC_SDPHY45_CLKDIV_ENA, 8, &sdphy45_div_lock },
	{ "sys3pll_qa7", "sys3pll_fixdiv", "sys3pll_a7", 0, 0, 0, SIRFSOC_CLKC_SDPHY45_CLKDIV_CFG, 24, 6, SIRFSOC_CLKC_SDPHY45_CLKDIV_ENA, 12, &sdphy45_div_lock },
	{ "sys0pll_qa8", "sys0pll_fixdiv", "sys0pll_a8", 0, 0, 0, SIRFSOC_CLKC_SDPHY67_CLKDIV_CFG, 0, 6, SIRFSOC_CLKC_SDPHY67_CLKDIV_ENA, 0, &sdphy67_div_lock },
	{ "sys1pll_qa8", "sys1pll_fixdiv", "sys1pll_a8", 0, 0, 0, SIRFSOC_CLKC_SDPHY67_CLKDIV_CFG, 8, 6, SIRFSOC_CLKC_SDPHY67_CLKDIV_ENA, 4, &sdphy67_div_lock },
	{ "sys2pll_qa8", "sys2pll_fixdiv", "sys2pll_a8", 0, 0, 0, SIRFSOC_CLKC_SDPHY67_CLKDIV_CFG, 16, 6, SIRFSOC_CLKC_SDPHY67_CLKDIV_ENA, 8, &sdphy67_div_lock },
	{ "sys3pll_qa8", "sys3pll_fixdiv", "sys3pll_a8", 0, 0, 0, SIRFSOC_CLKC_SDPHY67_CLKDIV_CFG, 24, 6, SIRFSOC_CLKC_SDPHY67_CLKDIV_ENA, 12, &sdphy67_div_lock },
	{ "sys0pll_qa9", "sys0pll_fixdiv", "sys0pll_a9", 0, 0, 0, SIRFSOC_CLKC_CAN_CLKDIV_CFG, 0, 6, SIRFSOC_CLKC_CAN_CLKDIV_ENA, 0, &can_div_lock },
	{ "sys1pll_qa9", "sys1pll_fixdiv", "sys1pll_a9", 0, 0, 0, SIRFSOC_CLKC_CAN_CLKDIV_CFG, 8, 6, SIRFSOC_CLKC_CAN_CLKDIV_ENA, 4, &can_div_lock },
	{ "sys2pll_qa9", "sys2pll_fixdiv", "sys2pll_a9", 0, 0, 0, SIRFSOC_CLKC_CAN_CLKDIV_CFG, 16, 6, SIRFSOC_CLKC_CAN_CLKDIV_ENA, 8, &can_div_lock },
	{ "sys3pll_qa9", "sys3pll_fixdiv", "sys3pll_a9", 0, 0, 0, SIRFSOC_CLKC_CAN_CLKDIV_CFG, 24, 6, SIRFSOC_CLKC_CAN_CLKDIV_ENA, 12, &can_div_lock },
	{ "sys0pll_qa10", "sys0pll_fixdiv", "sys0pll_a10", 0, 0, 0, SIRFSOC_CLKC_DEINT_CLKDIV_CFG, 0, 6, SIRFSOC_CLKC_DEINT_CLKDIV_ENA, 0, &deint_div_lock },
	{ "sys1pll_qa10", "sys1pll_fixdiv", "sys1pll_a10", 0, 0, 0, SIRFSOC_CLKC_DEINT_CLKDIV_CFG, 8, 6, SIRFSOC_CLKC_DEINT_CLKDIV_ENA, 4, &deint_div_lock },
	{ "sys2pll_qa10", "sys2pll_fixdiv", "sys2pll_a10", 0, 0, 0, SIRFSOC_CLKC_DEINT_CLKDIV_CFG, 16, 6, SIRFSOC_CLKC_DEINT_CLKDIV_ENA, 8, &deint_div_lock },
	{ "sys3pll_qa10", "sys3pll_fixdiv", "sys3pll_a10", 0, 0, 0, SIRFSOC_CLKC_DEINT_CLKDIV_CFG, 24, 6, SIRFSOC_CLKC_DEINT_CLKDIV_ENA, 12, &deint_div_lock },
	{ "sys0pll_qa11", "sys0pll_fixdiv", "sys0pll_a11", 0, 0, 0, SIRFSOC_CLKC_NAND_CLKDIV_CFG, 0, 6, SIRFSOC_CLKC_NAND_CLKDIV_ENA, 0, &nand_div_lock },
	{ "sys1pll_qa11", "sys1pll_fixdiv", "sys1pll_a11", 0, 0, 0, SIRFSOC_CLKC_NAND_CLKDIV_CFG, 8, 6, SIRFSOC_CLKC_NAND_CLKDIV_ENA, 4, &nand_div_lock },
	{ "sys2pll_qa11", "sys2pll_fixdiv", "sys2pll_a11", 0, 0, 0, SIRFSOC_CLKC_NAND_CLKDIV_CFG, 16, 6, SIRFSOC_CLKC_NAND_CLKDIV_ENA, 8, &nand_div_lock },
	{ "sys3pll_qa11", "sys3pll_fixdiv", "sys3pll_a11", 0, 0, 0, SIRFSOC_CLKC_NAND_CLKDIV_CFG, 24, 6, SIRFSOC_CLKC_NAND_CLKDIV_ENA, 12, &nand_div_lock },
	{ "sys0pll_qa12", "sys0pll_fixdiv", "sys0pll_a12", 0, 0, 0, SIRFSOC_CLKC_DISP0_CLKDIV_CFG, 0, 6, SIRFSOC_CLKC_DISP0_CLKDIV_ENA, 0, &disp0_div_lock },
	{ "sys1pll_qa12", "sys1pll_fixdiv", "sys1pll_a12", 0, 0, 0, SIRFSOC_CLKC_DISP0_CLKDIV_CFG, 8, 6, SIRFSOC_CLKC_DISP0_CLKDIV_ENA, 4, &disp0_div_lock },
	{ "sys2pll_qa12", "sys2pll_fixdiv", "sys2pll_a12", 0, 0, 0, SIRFSOC_CLKC_DISP0_CLKDIV_CFG, 16, 6, SIRFSOC_CLKC_DISP0_CLKDIV_ENA, 8, &disp0_div_lock },
	{ "sys3pll_qa12", "sys3pll_fixdiv", "sys3pll_a12", 0, 0, 0, SIRFSOC_CLKC_DISP0_CLKDIV_CFG, 24, 6, SIRFSOC_CLKC_DISP0_CLKDIV_ENA, 12, &disp0_div_lock },
	{ "sys0pll_qa13", "sys0pll_fixdiv", "sys0pll_a13", 0, 0, 0, SIRFSOC_CLKC_DISP1_CLKDIV_CFG, 0, 6, SIRFSOC_CLKC_DISP1_CLKDIV_ENA, 0, &disp1_div_lock },
	{ "sys1pll_qa13", "sys1pll_fixdiv", "sys1pll_a13", 0, 0, 0, SIRFSOC_CLKC_DISP1_CLKDIV_CFG, 8, 6, SIRFSOC_CLKC_DISP1_CLKDIV_ENA, 4, &disp1_div_lock },
	{ "sys2pll_qa13", "sys2pll_fixdiv", "sys2pll_a13", 0, 0, 0, SIRFSOC_CLKC_DISP1_CLKDIV_CFG, 16, 6, SIRFSOC_CLKC_DISP1_CLKDIV_ENA, 8, &disp1_div_lock },
	{ "sys3pll_qa13", "sys3pll_fixdiv", "sys3pll_a13", 0, 0, 0, SIRFSOC_CLKC_DISP1_CLKDIV_CFG, 24, 6, SIRFSOC_CLKC_DISP1_CLKDIV_ENA, 12, &disp1_div_lock },
	{ "sys0pll_qa14", "sys0pll_fixdiv", "sys0pll_a14", 0, 0, 0, SIRFSOC_CLKC_GPU_CLKDIV_CFG, 0, 6, SIRFSOC_CLKC_GPU_CLKDIV_ENA, 0, &gpu_div_lock },
	{ "sys1pll_qa14", "sys1pll_fixdiv", "sys1pll_a14", 0, 0, 0, SIRFSOC_CLKC_GPU_CLKDIV_CFG, 8, 6, SIRFSOC_CLKC_GPU_CLKDIV_ENA, 4, &gpu_div_lock },
	{ "sys2pll_qa14", "sys2pll_fixdiv", "sys2pll_a14", 0, 0, 0, SIRFSOC_CLKC_GPU_CLKDIV_CFG, 16, 6, SIRFSOC_CLKC_GPU_CLKDIV_ENA, 8, &gpu_div_lock },
	{ "sys3pll_qa14", "sys3pll_fixdiv", "sys3pll_a14", 0, 0, 0, SIRFSOC_CLKC_GPU_CLKDIV_CFG, 24, 6, SIRFSOC_CLKC_GPU_CLKDIV_ENA, 12, &gpu_div_lock },
	{ "sys0pll_qa15", "sys0pll_fixdiv", "sys0pll_a15", 0, 0, 0, SIRFSOC_CLKC_GNSS_CLKDIV_CFG, 0, 6, SIRFSOC_CLKC_GNSS_CLKDIV_ENA, 0, &gnss_div_lock },
	{ "sys1pll_qa15", "sys1pll_fixdiv", "sys1pll_a15", 0, 0, 0, SIRFSOC_CLKC_GNSS_CLKDIV_CFG, 8, 6, SIRFSOC_CLKC_GNSS_CLKDIV_ENA, 4, &gnss_div_lock },
	{ "sys2pll_qa15", "sys2pll_fixdiv", "sys2pll_a15", 0, 0, 0, SIRFSOC_CLKC_GNSS_CLKDIV_CFG, 16, 6, SIRFSOC_CLKC_GNSS_CLKDIV_ENA, 8, &gnss_div_lock },
	{ "sys3pll_qa15", "sys3pll_fixdiv", "sys3pll_a15", 0, 0, 0, SIRFSOC_CLKC_GNSS_CLKDIV_CFG, 24, 6, SIRFSOC_CLKC_GNSS_CLKDIV_ENA, 12, &gnss_div_lock },
	{ "sys1pll_qa18", "sys1pll_fixdiv", "sys1pll_a18", 0, 0, 0, SIRFSOC_CLKC_SHARED_DIVIDER_CFG0, 24, 6, SIRFSOC_CLKC_SHARED_DIVIDER_ENA, 12, &share_div_lock },
	{ "sys1pll_qa19", "sys1pll_fixdiv", "sys1pll_a19", 0, 0, CLK_IGNORE_UNUSED, SIRFSOC_CLKC_SHARED_DIVIDER_CFG0, 16, 6, SIRFSOC_CLKC_SHARED_DIVIDER_ENA, 8, &share_div_lock },
	{ "sys1pll_qa20", "sys1pll_fixdiv", "sys1pll_a20", 0, 0, 0, SIRFSOC_CLKC_SHARED_DIVIDER_CFG0, 8, 6, SIRFSOC_CLKC_SHARED_DIVIDER_ENA, 4, &share_div_lock },
	{ "sys2pll_qa20", "sys2pll_fixdiv", "sys2pll_a20", 0, 0, 0, SIRFSOC_CLKC_SHARED_DIVIDER_CFG0, 0, 6, SIRFSOC_CLKC_SHARED_DIVIDER_ENA, 0, &share_div_lock },
	{ "sys1pll_qa17", "sys1pll_fixdiv", "sys1pll_a17", 0, 0, CLK_IGNORE_UNUSED, SIRFSOC_CLKC_SHARED_DIVIDER_CFG1, 8, 6, SIRFSOC_CLKC_SHARED_DIVIDER_ENA, 20, &share_div_lock },
	{ "sys0pll_qa20", "sys0pll_fixdiv", "sys0pll_a20", 0, 0, 0, SIRFSOC_CLKC_SHARED_DIVIDER_CFG1, 0, 6, SIRFSOC_CLKC_SHARED_DIVIDER_ENA, 16, &share_div_lock },
};

static const char * const i2s_clk_parents[] = {
	"xin",
	"xinw",
	"audio_dto",
	/* "pwm_i2s01" */
};

static const char * const usbphy_clk_parents[] = {
	"xin",
	"xinw",
	"sys0pll_a1",
	"sys1pll_a1",
	"sys2pll_a1",
	"sys3pll_a1",
};

static const char * const btss_clk_parents[] = {
	"xin",
	"xinw",
	"sys0pll_a2",
	"sys1pll_a2",
	"sys2pll_a2",
	"sys3pll_a2",
};

static const char * const rgmii_clk_parents[] = {
	"xin",
	"xinw",
	"sys0pll_a3",
	"sys1pll_a3",
	"sys2pll_a3",
	"sys3pll_a3",
};

static const char * const cpu_clk_parents[] = {
	"xin",
	"xinw",
	"sys0pll_a4",
	"sys1pll_a4",
	"cpupll_clk1",
};

static const char * const sdphy01_clk_parents[] = {
	"xin",
	"xinw",
	"sys0pll_a5",
	"sys1pll_a5",
	"sys2pll_a5",
	"sys3pll_a5",
};

static const char * const sdphy23_clk_parents[] = {
	"xin",
	"xinw",
	"sys0pll_a6",
	"sys1pll_a6",
	"sys2pll_a6",
	"sys3pll_a6",
};

static const char * const sdphy45_clk_parents[] = {
	"xin",
	"xinw",
	"sys0pll_a7",
	"sys1pll_a7",
	"sys2pll_a7",
	"sys3pll_a7",
};

static const char * const sdphy67_clk_parents[] = {
	"xin",
	"xinw",
	"sys0pll_a8",
	"sys1pll_a8",
	"sys2pll_a8",
	"sys3pll_a8",
};

static const char * const can_clk_parents[] = {
	"xin",
	"xinw",
	"sys0pll_a9",
	"sys1pll_a9",
	"sys2pll_a9",
	"sys3pll_a9",
};

static const char * const deint_clk_parents[] = {
	"xin",
	"xinw",
	"sys0pll_a10",
	"sys1pll_a10",
	"sys2pll_a10",
	"sys3pll_a10",
};

static const char * const nand_clk_parents[] = {
	"xin",
	"xinw",
	"sys0pll_a11",
	"sys1pll_a11",
	"sys2pll_a11",
	"sys3pll_a11",
};

static const char * const disp0_clk_parents[] = {
	"xin",
	"xinw",
	"sys0pll_a12",
	"sys1pll_a12",
	"sys2pll_a12",
	"sys3pll_a12",
	"disp0_dto",
};

static const char * const disp1_clk_parents[] = {
	"xin",
	"xinw",
	"sys0pll_a13",
	"sys1pll_a13",
	"sys2pll_a13",
	"sys3pll_a13",
	"disp1_dto",
};

static const char * const gpu_clk_parents[] = {
	"xin",
	"xinw",
	"sys0pll_a14",
	"sys1pll_a14",
	"sys2pll_a14",
	"sys3pll_a14",
};

static const char * const gnss_clk_parents[] = {
	"xin",
	"xinw",
	"sys0pll_a15",
	"sys1pll_a15",
	"sys2pll_a15",
	"sys3pll_a15",
};

static const char * const sys_clk_parents[] = {
	"xin",
	"xinw",
	"sys2pll_a20",
	"sys1pll_a20",
	"sys1pll_a19",
	"sys1pll_a18",
	"sys0pll_a20",
	"sys1pll_a17",
};

static const char * const io_clk_parents[] = {
	"xin",
	"xinw",
	"sys2pll_a20",
	"sys1pll_a20",
	"sys1pll_a19",
	"sys1pll_a18",
	"sys0pll_a20",
	"sys1pll_a17",
};

static const char * const g2d_clk_parents[] = {
	"xin",
	"xinw",
	"sys2pll_a20",
	"sys1pll_a20",
	"sys1pll_a19",
	"sys1pll_a18",
	"sys0pll_a20",
	"sys1pll_a17",
};

static const char * const jpenc_clk_parents[] = {
	"xin",
	"xinw",
	"sys2pll_a20",
	"sys1pll_a20",
	"sys1pll_a19",
	"sys1pll_a18",
	"sys0pll_a20",
	"sys1pll_a17",
};

static const char * const vdec_clk_parents[] = {
	"xin",
	"xinw",
	"sys2pll_a20",
	"sys1pll_a20",
	"sys1pll_a19",
	"sys1pll_a18",
	"sys0pll_a20",
	"sys1pll_a17",
};

static const char * const gmac_clk_parents[] = {
	"xin",
	"xinw",
	"sys2pll_a20",
	"sys1pll_a20",
	"sys1pll_a19",
	"sys1pll_a18",
	"sys0pll_a20",
	"sys1pll_a17",
};

static const char * const usb_clk_parents[] = {
	"xin",
	"xinw",
	"sys2pll_a20",
	"sys1pll_a20",
	"sys1pll_a19",
	"sys1pll_a18",
	"sys0pll_a20",
	"sys1pll_a17",
};

static const char * const kas_clk_parents[] = {
	"xin",
	"xinw",
	"sys2pll_a20",
	"sys1pll_a20",
	"sys1pll_a19",
	"sys1pll_a18",
	"sys0pll_a20",
	"sys1pll_a17",
};

static const char * const sec_clk_parents[] = {
	"xin",
	"xinw",
	"sys2pll_a20",
	"sys1pll_a20",
	"sys1pll_a19",
	"sys1pll_a18",
	"sys0pll_a20",
	"sys1pll_a17",
};

static const char * const sdr_clk_parents[] = {
	"xin",
	"xinw",
	"sys2pll_a20",
	"sys1pll_a20",
	"sys1pll_a19",
	"sys1pll_a18",
	"sys0pll_a20",
	"sys1pll_a17",
};

static const char * const vip_clk_parents[] = {
	"xin",
	"xinw",
	"sys2pll_a20",
	"sys1pll_a20",
	"sys1pll_a19",
	"sys1pll_a18",
	"sys0pll_a20",
	"sys1pll_a17",
};

static const char * const nocd_clk_parents[] = {
	"xin",
	"xinw",
	"sys2pll_a20",
	"sys1pll_a20",
	"sys1pll_a19",
	"sys1pll_a18",
	"sys0pll_a20",
	"sys1pll_a17",
};

static const char * const nocr_clk_parents[] = {
	"xin",
	"xinw",
	"sys2pll_a20",
	"sys1pll_a20",
	"sys1pll_a19",
	"sys1pll_a18",
	"sys0pll_a20",
	"sys1pll_a17",
};

static const char * const tpiu_clk_parents[] = {
	"xin",
	"xinw",
	"sys2pll_a20",
	"sys1pll_a20",
	"sys1pll_a19",
	"sys1pll_a18",
	"sys0pll_a20",
	"sys1pll_a17",
};

static struct atlas7_mux_init_data mux_list[] __initdata = {
	/* mux_name, parent_names, parent_num, flags, mux_flags, mux_offset, shift, width */
	{ "i2s_mux", i2s_clk_parents, ARRAY_SIZE(i2s_clk_parents), 0, 0, SIRFSOC_CLKC_I2S_CLK_SEL, 0, 2 },
	{ "usbphy_mux", usbphy_clk_parents, ARRAY_SIZE(usbphy_clk_parents), 0, 0, SIRFSOC_CLKC_I2S_CLK_SEL, 0, 3 },
	{ "btss_mux", btss_clk_parents, ARRAY_SIZE(btss_clk_parents), 0, 0, SIRFSOC_CLKC_BTSS_CLK_SEL, 0, 3 },
	{ "rgmii_mux", rgmii_clk_parents, ARRAY_SIZE(rgmii_clk_parents), 0, 0, SIRFSOC_CLKC_RGMII_CLK_SEL, 0, 3 },
	{ "cpu_mux", cpu_clk_parents, ARRAY_SIZE(cpu_clk_parents), 0, 0, SIRFSOC_CLKC_CPU_CLK_SEL, 0, 3 },
	{ "sdphy01_mux", sdphy01_clk_parents, ARRAY_SIZE(sdphy01_clk_parents), 0, 0, SIRFSOC_CLKC_SDPHY01_CLK_SEL, 0, 3 },
	{ "sdphy23_mux", sdphy23_clk_parents, ARRAY_SIZE(sdphy23_clk_parents), 0, 0, SIRFSOC_CLKC_SDPHY23_CLK_SEL, 0, 3 },
	{ "sdphy45_mux", sdphy45_clk_parents, ARRAY_SIZE(sdphy45_clk_parents), 0, 0, SIRFSOC_CLKC_SDPHY45_CLK_SEL, 0, 3 },
	{ "sdphy67_mux", sdphy67_clk_parents, ARRAY_SIZE(sdphy67_clk_parents), 0, 0, SIRFSOC_CLKC_SDPHY67_CLK_SEL, 0, 3 },
	{ "can_mux", can_clk_parents, ARRAY_SIZE(can_clk_parents), 0, 0, SIRFSOC_CLKC_CAN_CLK_SEL, 0, 3 },
	{ "deint_mux", deint_clk_parents, ARRAY_SIZE(deint_clk_parents), 0, 0, SIRFSOC_CLKC_DEINT_CLK_SEL, 0, 3 },
	{ "nand_mux", nand_clk_parents, ARRAY_SIZE(nand_clk_parents), 0, 0, SIRFSOC_CLKC_NAND_CLK_SEL, 0, 3 },
	{ "disp0_mux", disp0_clk_parents, ARRAY_SIZE(disp0_clk_parents), 0, 0, SIRFSOC_CLKC_DISP0_CLK_SEL, 0, 3 },
	{ "disp1_mux", disp1_clk_parents, ARRAY_SIZE(disp1_clk_parents), 0, 0, SIRFSOC_CLKC_DISP1_CLK_SEL, 0, 3 },
	{ "gpu_mux", gpu_clk_parents, ARRAY_SIZE(gpu_clk_parents), 0, 0, SIRFSOC_CLKC_GPU_CLK_SEL, 0, 3 },
	{ "gnss_mux", gnss_clk_parents, ARRAY_SIZE(gnss_clk_parents), 0, 0, SIRFSOC_CLKC_GNSS_CLK_SEL, 0, 3 },
	{ "sys_mux", sys_clk_parents, ARRAY_SIZE(sys_clk_parents), 0, 0, SIRFSOC_CLKC_SYS_CLK_SEL, 0, 3 },
	{ "io_mux", io_clk_parents, ARRAY_SIZE(io_clk_parents), 0, 0, SIRFSOC_CLKC_IO_CLK_SEL, 0, 3 },
	{ "g2d_mux", g2d_clk_parents, ARRAY_SIZE(g2d_clk_parents), 0, 0, SIRFSOC_CLKC_G2D_CLK_SEL, 0, 3 },
	{ "jpenc_mux", jpenc_clk_parents, ARRAY_SIZE(jpenc_clk_parents), 0, 0, SIRFSOC_CLKC_JPENC_CLK_SEL, 0, 3 },
	{ "vdec_mux", vdec_clk_parents, ARRAY_SIZE(vdec_clk_parents), 0, 0, SIRFSOC_CLKC_VDEC_CLK_SEL, 0, 3 },
	{ "gmac_mux", gmac_clk_parents, ARRAY_SIZE(gmac_clk_parents), 0, 0, SIRFSOC_CLKC_GMAC_CLK_SEL, 0, 3 },
	{ "usb_mux", usb_clk_parents, ARRAY_SIZE(usb_clk_parents), 0, 0, SIRFSOC_CLKC_USB_CLK_SEL, 0, 3 },
	{ "kas_mux", kas_clk_parents, ARRAY_SIZE(kas_clk_parents), 0, 0, SIRFSOC_CLKC_KAS_CLK_SEL, 0, 3 },
	{ "sec_mux", sec_clk_parents, ARRAY_SIZE(sec_clk_parents), 0, 0, SIRFSOC_CLKC_SEC_CLK_SEL, 0, 3 },
	{ "sdr_mux", sdr_clk_parents, ARRAY_SIZE(sdr_clk_parents), 0, 0, SIRFSOC_CLKC_SDR_CLK_SEL, 0, 3 },
	{ "vip_mux", vip_clk_parents, ARRAY_SIZE(vip_clk_parents), 0, 0, SIRFSOC_CLKC_VIP_CLK_SEL, 0, 3 },
	{ "nocd_mux", nocd_clk_parents, ARRAY_SIZE(nocd_clk_parents), 0, 0, SIRFSOC_CLKC_NOCD_CLK_SEL, 0, 3 },
	{ "nocr_mux", nocr_clk_parents, ARRAY_SIZE(nocr_clk_parents), 0, 0, SIRFSOC_CLKC_NOCR_CLK_SEL, 0, 3 },
	{ "tpiu_mux", tpiu_clk_parents, ARRAY_SIZE(tpiu_clk_parents), 0, 0, SIRFSOC_CLKC_TPIU_CLK_SEL, 0, 3 },
};

	/* new unit should add start from the tail of list */
static struct atlas7_unit_init_data unit_list[] __initdata = {
	/* unit_name, parent_name, flags, regofs, bit, lock */
	{ 0, "audmscm_kas", "kas_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN0_SET, 0, 0, 0, &root0_gate_lock },
	{ 1, "gnssm_gnss", "gnss_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN0_SET, 1, 0, 0, &root0_gate_lock },
	{ 2, "gpum_gpu", "gpu_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN0_SET, 2, 0, 0, &root0_gate_lock },
	{ 3, "mediam_g2d", "g2d_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN0_SET, 3, 0, 0, &root0_gate_lock },
	{ 4, "mediam_jpenc", "jpenc_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN0_SET, 4, 0, 0, &root0_gate_lock },
	{ 5, "vdifm_disp0", "disp0_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN0_SET, 5, 0, 0, &root0_gate_lock },
	{ 6, "vdifm_disp1", "disp1_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN0_SET, 6, 0, 0, &root0_gate_lock },
	{ 7, "audmscm_i2s", "i2s_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN0_SET, 8, 0, 0, &root0_gate_lock },
	{ 8, "audmscm_io", "io_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN0_SET, 11, 0, 0, &root0_gate_lock },
	{ 9, "vdifm_io", "io_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN0_SET, 12, 0, 0, &root0_gate_lock },
	{ 10, "gnssm_io", "io_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN0_SET, 13, 0, 0, &root0_gate_lock },
	{ 11, "mediam_io", "io_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN0_SET, 14, 0, 0, &root0_gate_lock },
	{ 12, "btm_io", "io_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN0_SET, 17, 0, 0, &root0_gate_lock },
	{ 13, "mediam_sdphy01", "sdphy01_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN0_SET, 18, 0, 0, &root0_gate_lock },
	{ 14, "vdifm_sdphy23", "sdphy23_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN0_SET, 19, 0, 0, &root0_gate_lock },
	{ 15, "vdifm_sdphy45", "sdphy45_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN0_SET, 20, 0, 0, &root0_gate_lock },
	{ 16, "vdifm_sdphy67", "sdphy67_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN0_SET, 21, 0, 0, &root0_gate_lock },
	{ 17, "audmscm_xin", "xin", 0, SIRFSOC_CLKC_ROOT_CLK_EN0_SET, 22, 0, 0, &root0_gate_lock },
	{ 18, "mediam_nand", "nand_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN0_SET, 27, 0, 0, &root0_gate_lock },
	{ 19, "gnssm_sec", "sec_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN0_SET, 28, 0, 0, &root0_gate_lock },
	{ 20, "cpum_cpu", "cpu_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN0_SET, 29, 0, 0, &root0_gate_lock },
	{ 21, "gnssm_xin", "xin", 0, SIRFSOC_CLKC_ROOT_CLK_EN0_SET, 30, 0, 0, &root0_gate_lock },
	{ 22, "vdifm_vip", "vip_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN0_SET, 31, 0, 0, &root0_gate_lock },
	{ 23, "btm_btss", "btss_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN1_SET, 0, 0, 0, &root1_gate_lock },
	{ 24, "mediam_usbphy", "usbphy_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN1_SET, 1, 0, 0, &root1_gate_lock },
	{ 25, "rtcm_kas", "kas_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN1_SET, 2, 0, 0, &root1_gate_lock },
	{ 26, "audmscm_nocd", "nocd_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN1_SET, 3, 0, 0, &root1_gate_lock },
	{ 27, "vdifm_nocd", "nocd_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN1_SET, 4, 0, 0, &root1_gate_lock },
	{ 28, "gnssm_nocd", "nocd_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN1_SET, 5, 0, 0, &root1_gate_lock },
	{ 29, "mediam_nocd", "nocd_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN1_SET, 6, 0, 0, &root1_gate_lock },
	{ 30, "cpum_nocd", "nocd_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN1_SET, 8, 0, 0, &root1_gate_lock },
	{ 31, "gpum_nocd", "nocd_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN1_SET, 9, 0, 0, &root1_gate_lock },
	{ 32, "audmscm_nocr", "nocr_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN1_SET, 11, 0, 0, &root1_gate_lock },
	{ 33, "vdifm_nocr", "nocr_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN1_SET, 12, 0, 0, &root1_gate_lock },
	{ 34, "gnssm_nocr", "nocr_mux", CLK_IGNORE_UNUSED, SIRFSOC_CLKC_ROOT_CLK_EN1_SET, 13, 0, 0, &root1_gate_lock },
	{ 35, "mediam_nocr", "nocr_mux", CLK_IGNORE_UNUSED, SIRFSOC_CLKC_ROOT_CLK_EN1_SET, 14, 0, 0, &root1_gate_lock },
	{ 36, "ddrm_nocr", "nocr_mux", CLK_IGNORE_UNUSED, SIRFSOC_CLKC_ROOT_CLK_EN1_SET, 15, 0, 0, &root1_gate_lock },
	{ 37, "cpum_tpiu", "tpiu_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN1_SET, 16, 0, 0, &root1_gate_lock },
	{ 38, "gpum_nocr", "nocr_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN1_SET, 17, 0, 0, &root1_gate_lock },
	{ 39, "gnssm_rgmii", "rgmii_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN1_SET, 20, 0, 0, &root1_gate_lock },
	{ 40, "mediam_vdec", "vdec_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN1_SET, 21, 0, 0, &root1_gate_lock },
	{ 41, "gpum_sdr", "sdr_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN1_SET, 22, 0, 0, &root1_gate_lock },
	{ 42, "vdifm_deint", "deint_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN1_SET, 23, 0, 0, &root1_gate_lock },
	{ 43, "gnssm_can", "can_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN1_SET, 26, 0, 0, &root1_gate_lock },
	{ 44, "mediam_usb", "usb_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN1_SET, 28, 0, 0, &root1_gate_lock },
	{ 45, "gnssm_gmac", "gmac_mux", 0, SIRFSOC_CLKC_ROOT_CLK_EN1_SET, 29, 0, 0, &root1_gate_lock },
	{ 46, "cvd_io", "audmscm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN1_SET, 0, CLK_UNIT_NOC_CLOCK, 4, &leaf1_gate_lock },
	{ 47, "timer_io", "audmscm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN1_SET, 1, 0, 0, &leaf1_gate_lock },
	{ 48, "pulse_io", "audmscm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN1_SET, 2, 0, 0, &leaf1_gate_lock },
	{ 49, "tsc_io", "audmscm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN1_SET, 3, 0, 0, &leaf1_gate_lock },
	{ 50, "tsc_xin", "audmscm_xin", 0, SIRFSOC_CLKC_LEAF_CLK_EN1_SET, 21, 0, 0, &leaf1_gate_lock },
	{ 51, "ioctop_io", "audmscm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN1_SET, 4, 0, 0, &leaf1_gate_lock },
	{ 52, "rsc_io", "audmscm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN1_SET, 5, 0, 0, &leaf1_gate_lock },
	{ 53, "dvm_io", "audmscm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN1_SET, 6, CLK_UNIT_NOC_SOCKET, 7, &leaf1_gate_lock },
	{ 54, "lvds_xin", "audmscm_xin", 0, SIRFSOC_CLKC_LEAF_CLK_EN1_SET, 7, CLK_UNIT_NOC_SOCKET, 8, &leaf1_gate_lock },
	{ 55, "kas_kas", "audmscm_kas", 0, SIRFSOC_CLKC_LEAF_CLK_EN1_SET, 8, CLK_UNIT_NOC_CLOCK, 2, &leaf1_gate_lock },
	{ 56, "ac97_kas", "audmscm_kas", 0, SIRFSOC_CLKC_LEAF_CLK_EN1_SET, 9, 0, 0, &leaf1_gate_lock },
	{ 57, "usp0_kas", "audmscm_kas", 0, SIRFSOC_CLKC_LEAF_CLK_EN1_SET, 10, CLK_UNIT_NOC_SOCKET, 4, &leaf1_gate_lock },
	{ 58, "usp1_kas", "audmscm_kas", 0, SIRFSOC_CLKC_LEAF_CLK_EN1_SET, 11, CLK_UNIT_NOC_SOCKET, 5, &leaf1_gate_lock },
	{ 59, "usp2_kas", "audmscm_kas", 0, SIRFSOC_CLKC_LEAF_CLK_EN1_SET, 12, CLK_UNIT_NOC_SOCKET, 6, &leaf1_gate_lock },
	{ 60, "dmac2_kas", "audmscm_kas", 0, SIRFSOC_CLKC_LEAF_CLK_EN1_SET, 13, CLK_UNIT_NOC_SOCKET, 1, &leaf1_gate_lock },
	{ 61, "dmac3_kas", "audmscm_kas", 0, SIRFSOC_CLKC_LEAF_CLK_EN1_SET, 14, CLK_UNIT_NOC_SOCKET, 2, &leaf1_gate_lock },
	{ 62, "audioif_kas", "audmscm_kas", 0, SIRFSOC_CLKC_LEAF_CLK_EN1_SET, 15, CLK_UNIT_NOC_SOCKET, 0, &leaf1_gate_lock },
	{ 63, "i2s1_kas", "audmscm_kas", 0, SIRFSOC_CLKC_LEAF_CLK_EN1_SET, 17, CLK_UNIT_NOC_CLOCK, 2, &leaf1_gate_lock },
	{ 64, "thaudmscm_io", "audmscm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN1_SET, 22, 0, 0, &leaf1_gate_lock },
	{ 65, "analogtest_xin", "audmscm_xin", 0, SIRFSOC_CLKC_LEAF_CLK_EN1_SET, 23, 0, 0, &leaf1_gate_lock },
	{ 66, "sys2pci_io", "vdifm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN2_SET, 0, CLK_UNIT_NOC_CLOCK, 20, &leaf2_gate_lock },
	{ 67, "pciarb_io", "vdifm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN2_SET, 1, 0, 0, &leaf2_gate_lock },
	{ 68, "pcicopy_io", "vdifm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN2_SET, 2, 0, 0, &leaf2_gate_lock },
	{ 69, "rom_io", "vdifm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN2_SET, 3, 0, 0, &leaf2_gate_lock },
	{ 70, "sdio23_io", "vdifm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN2_SET, 4, 0, 0, &leaf2_gate_lock },
	{ 71, "sdio45_io", "vdifm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN2_SET, 5, 0, 0, &leaf2_gate_lock },
	{ 72, "sdio67_io", "vdifm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN2_SET, 6, 0, 0, &leaf2_gate_lock },
	{ 73, "vip1_io", "vdifm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN2_SET, 7, 0, 0, &leaf2_gate_lock },
	{ 74, "vip1_vip", "vdifm_vip", 0, SIRFSOC_CLKC_LEAF_CLK_EN2_SET, 16, CLK_UNIT_NOC_CLOCK, 21, &leaf2_gate_lock },
	{ 75, "sdio23_sdphy23", "vdifm_sdphy23", 0, SIRFSOC_CLKC_LEAF_CLK_EN2_SET, 8, 0, 0, &leaf2_gate_lock },
	{ 76, "sdio45_sdphy45", "vdifm_sdphy45", 0, SIRFSOC_CLKC_LEAF_CLK_EN2_SET, 9, 0, 0, &leaf2_gate_lock },
	{ 77, "sdio67_sdphy67", "vdifm_sdphy67", 0, SIRFSOC_CLKC_LEAF_CLK_EN2_SET, 10, 0, 0, &leaf2_gate_lock },
	{ 78, "vpp0_disp0", "vdifm_disp0", 0, SIRFSOC_CLKC_LEAF_CLK_EN2_SET, 11, CLK_UNIT_NOC_CLOCK, 22, &leaf2_gate_lock },
	{ 79, "lcd0_disp0", "vdifm_disp0", 0, SIRFSOC_CLKC_LEAF_CLK_EN2_SET, 12, CLK_UNIT_NOC_CLOCK, 18, &leaf2_gate_lock },
	{ 80, "vpp1_disp1", "vdifm_disp1", 0, SIRFSOC_CLKC_LEAF_CLK_EN2_SET, 13, CLK_UNIT_NOC_CLOCK, 23, &leaf2_gate_lock },
	{ 81, "lcd1_disp1", "vdifm_disp1", 0, SIRFSOC_CLKC_LEAF_CLK_EN2_SET, 14, CLK_UNIT_NOC_CLOCK, 19, &leaf2_gate_lock },
	{ 82, "dcu_deint", "vdifm_deint", 0, SIRFSOC_CLKC_LEAF_CLK_EN2_SET, 15,  CLK_UNIT_NOC_CLOCK, 17, &leaf2_gate_lock },
	{ 83, "vdifm_dapa_r_nocr", "vdifm_nocr", 0, SIRFSOC_CLKC_LEAF_CLK_EN2_SET, 17, 0, 0, &leaf2_gate_lock },
	{ 84, "gpio1_io", "vdifm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN2_SET, 18, 0, 0, &leaf2_gate_lock },
	{ 85, "thvdifm_io", "vdifm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN2_SET, 19, 0, 0, &leaf2_gate_lock },
	{ 86, "gmac_rgmii", "gnssm_rgmii", 0, SIRFSOC_CLKC_LEAF_CLK_EN3_SET, 0, 0, 0, &leaf3_gate_lock },
	{ 87, "gmac_gmac", "gnssm_gmac", 0, SIRFSOC_CLKC_LEAF_CLK_EN3_SET, 1, CLK_UNIT_NOC_CLOCK, 10, &leaf3_gate_lock },
	{ 88, "uart1_io", "gnssm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN3_SET, 2, CLK_UNIT_NOC_SOCKET, 14, &leaf3_gate_lock },
	{ 89, "dmac0_io", "gnssm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN3_SET, 3, CLK_UNIT_NOC_SOCKET, 11, &leaf3_gate_lock },
	{ 90, "uart0_io", "gnssm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN3_SET, 4, CLK_UNIT_NOC_SOCKET, 13, &leaf3_gate_lock },
	{ 91, "uart2_io", "gnssm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN3_SET, 5, CLK_UNIT_NOC_SOCKET, 15, &leaf3_gate_lock },
	{ 92, "uart3_io", "gnssm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN3_SET, 6, CLK_UNIT_NOC_SOCKET, 16, &leaf3_gate_lock },
	{ 93, "uart4_io", "gnssm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN3_SET, 7, CLK_UNIT_NOC_SOCKET, 17, &leaf3_gate_lock },
	{ 94, "uart5_io", "gnssm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN3_SET, 8, CLK_UNIT_NOC_SOCKET, 18, &leaf3_gate_lock },
	{ 95, "spi1_io", "gnssm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN3_SET, 9, CLK_UNIT_NOC_SOCKET, 12, &leaf3_gate_lock },
	{ 96, "gnss_gnss", "gnssm_gnss", 0, SIRFSOC_CLKC_LEAF_CLK_EN3_SET, 10, 0, 0, &leaf3_gate_lock },
	{ 97, "canbus1_can", "gnssm_can", 0, SIRFSOC_CLKC_LEAF_CLK_EN3_SET, 12, CLK_UNIT_NOC_CLOCK, 7, &leaf3_gate_lock },
	{ 98, "ccsec_sec", "gnssm_sec", 0, SIRFSOC_CLKC_LEAF_CLK_EN3_SET, 15, CLK_UNIT_NOC_CLOCK, 9, &leaf3_gate_lock },
	{ 99,  "ccpub_sec", "gnssm_sec", 0, SIRFSOC_CLKC_LEAF_CLK_EN3_SET, 16, CLK_UNIT_NOC_CLOCK, 8, &leaf3_gate_lock },
	{ 100, "gnssm_dapa_r_nocr", "gnssm_nocr", 0, SIRFSOC_CLKC_LEAF_CLK_EN3_SET, 13, 0, 0, &leaf3_gate_lock },
	{ 101, "thgnssm_io", "gnssm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN3_SET, 14, 0, 0, &leaf3_gate_lock },
	{ 102, "media_vdec", "mediam_vdec", 0, SIRFSOC_CLKC_LEAF_CLK_EN4_SET, 0, CLK_UNIT_NOC_CLOCK, 3, &leaf4_gate_lock },
	{ 103, "media_jpenc", "mediam_jpenc", 0, SIRFSOC_CLKC_LEAF_CLK_EN4_SET, 1, CLK_UNIT_NOC_CLOCK, 1, &leaf4_gate_lock },
	{ 104, "g2d_g2d", "mediam_g2d", 0, SIRFSOC_CLKC_LEAF_CLK_EN4_SET, 2, CLK_UNIT_NOC_CLOCK, 12, &leaf4_gate_lock },
	{ 105, "i2c0_io", "mediam_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN4_SET, 3, CLK_UNIT_NOC_SOCKET, 21, &leaf4_gate_lock },
	{ 106, "i2c1_io", "mediam_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN4_SET, 4, CLK_UNIT_NOC_SOCKET, 20, &leaf4_gate_lock },
	{ 107, "gpio0_io", "mediam_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN4_SET, 5, CLK_UNIT_NOC_SOCKET, 19,  &leaf4_gate_lock },
	{ 108, "nand_io", "mediam_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN4_SET, 6, 0, 0, &leaf4_gate_lock },
	{ 109, "sdio01_io", "mediam_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN4_SET, 7, 0, 0, &leaf4_gate_lock },
	{ 110, "sys2pci2_io", "mediam_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN4_SET, 8, CLK_UNIT_NOC_CLOCK, 13, &leaf4_gate_lock },
	{ 111, "sdio01_sdphy01", "mediam_sdphy01", 0, SIRFSOC_CLKC_LEAF_CLK_EN4_SET, 9, 0, 0, &leaf4_gate_lock },
	{ 112, "nand_nand", "mediam_nand", 0, SIRFSOC_CLKC_LEAF_CLK_EN4_SET, 10, CLK_UNIT_NOC_CLOCK, 14, &leaf4_gate_lock },
	{ 113, "usb0_usb", "mediam_usb", 0, SIRFSOC_CLKC_LEAF_CLK_EN4_SET, 11, CLK_UNIT_NOC_CLOCK, 15, &leaf4_gate_lock },
	{ 114, "usb1_usb", "mediam_usb", 0, SIRFSOC_CLKC_LEAF_CLK_EN4_SET, 12,  CLK_UNIT_NOC_CLOCK, 16, &leaf4_gate_lock },
	{ 115, "usbphy0_usbphy", "mediam_usbphy", 0, SIRFSOC_CLKC_LEAF_CLK_EN4_SET, 13, 0, 0, &leaf4_gate_lock },
	{ 116, "usbphy1_usbphy", "mediam_usbphy", 0, SIRFSOC_CLKC_LEAF_CLK_EN4_SET, 14, 0, 0, &leaf4_gate_lock },
	{ 117, "thmediam_io", "mediam_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN4_SET, 15, 0, 0, &leaf4_gate_lock },
	{ 118, "memc_mem", "mempll_clk1", CLK_IGNORE_UNUSED, SIRFSOC_CLKC_LEAF_CLK_EN5_SET, 0, 0, 0, &leaf5_gate_lock },
	{ 119, "dapa_mem", "mempll_clk1", 0, SIRFSOC_CLKC_LEAF_CLK_EN5_SET, 1, 0, 0, &leaf5_gate_lock },
	{ 120, "nocddrm_nocr", "ddrm_nocr", 0, SIRFSOC_CLKC_LEAF_CLK_EN5_SET, 2, 0, 0, &leaf5_gate_lock },
	{ 121, "thddrm_nocr", "ddrm_nocr", 0, SIRFSOC_CLKC_LEAF_CLK_EN5_SET, 3, 0, 0, &leaf5_gate_lock },
	{ 122, "spram1_cpudiv2", "cpum_cpu", 0, SIRFSOC_CLKC_LEAF_CLK_EN6_SET, 0, CLK_UNIT_NOC_SOCKET, 9, &leaf6_gate_lock },
	{ 123, "spram2_cpudiv2", "cpum_cpu", 0, SIRFSOC_CLKC_LEAF_CLK_EN6_SET, 1, CLK_UNIT_NOC_SOCKET, 10, &leaf6_gate_lock },
	{ 124, "coresight_cpudiv2", "cpum_cpu", 0, SIRFSOC_CLKC_LEAF_CLK_EN6_SET, 2, 0, 0, &leaf6_gate_lock },
	{ 125, "coresight_tpiu", "cpum_tpiu", 0, SIRFSOC_CLKC_LEAF_CLK_EN6_SET, 3, 0, 0, &leaf6_gate_lock },
	{ 126, "graphic_gpu", "gpum_gpu", 0, SIRFSOC_CLKC_LEAF_CLK_EN7_SET, 0, CLK_UNIT_NOC_CLOCK, 0, &leaf7_gate_lock },
	{ 127, "vss_sdr", "gpum_sdr", 0, SIRFSOC_CLKC_LEAF_CLK_EN7_SET, 1, CLK_UNIT_NOC_CLOCK, 11, &leaf7_gate_lock },
	{ 128, "thgpum_nocr", "gpum_nocr", 0, SIRFSOC_CLKC_LEAF_CLK_EN7_SET, 2, 0, 0, &leaf7_gate_lock },
	{ 129, "a7ca_btss", "btm_btss", 0, SIRFSOC_CLKC_LEAF_CLK_EN8_SET, 1, 0, 0, &leaf8_gate_lock },
	{ 130, "dmac4_io", "a7ca_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN8_SET, 2, 0, 0, &leaf8_gate_lock },
	{ 131, "uart6_io", "dmac4_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN8_SET, 3, 0, 0, &leaf8_gate_lock },
	{ 132, "usp3_io", "dmac4_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN8_SET, 4, 0, 0, &leaf8_gate_lock },
	{ 133, "a7ca_io", "noc_btm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN8_SET, 5, 0, 0, &leaf8_gate_lock },
	{ 134, "noc_btm_io", "btm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN8_SET, 6, 0, 0, &leaf8_gate_lock },
	{ 135, "thbtm_io", "btm_io", 0, SIRFSOC_CLKC_LEAF_CLK_EN8_SET, 7, 0, 0, &leaf8_gate_lock },
	{ 136, "btslow", "xinw_fixdiv_btslow", 0, SIRFSOC_CLKC_ROOT_CLK_EN1_SET, 25, 0, 0, &root1_gate_lock },
	{ 137, "a7ca_btslow", "btslow", 0, SIRFSOC_CLKC_LEAF_CLK_EN8_SET, 0, 0, 0, &leaf8_gate_lock },
	{ 138, "pwm_io", "io_mux", 0, SIRFSOC_CLKC_LEAF_CLK_EN0_SET, 0, 0, 0, &leaf0_gate_lock },
	{ 139, "pwm_xin", "xin", 0, SIRFSOC_CLKC_LEAF_CLK_EN0_SET, 1, 0, 0, &leaf0_gate_lock },
	{ 140, "pwm_xinw", "xinw", 0, SIRFSOC_CLKC_LEAF_CLK_EN0_SET, 2, 0, 0, &leaf0_gate_lock },
	{ 141, "thcgum_sys", "sys_mux", 0, SIRFSOC_CLKC_LEAF_CLK_EN0_SET, 3, 0, 0, &leaf0_gate_lock },
};

static struct clk *atlas7_clks[ARRAY_SIZE(unit_list) + ARRAY_SIZE(mux_list)];

static int unit_clk_is_enabled(struct clk_hw *hw)
{
	struct clk_unit *clk = to_unitclk(hw);
	u32 reg;

	reg = clk->regofs + SIRFSOC_CLKC_ROOT_CLK_EN0_STAT - SIRFSOC_CLKC_ROOT_CLK_EN0_SET;

	return !!(clkc_readl(reg) & BIT(clk->bit));
}

static int unit_clk_enable(struct clk_hw *hw)
{
	u32 reg;
	struct clk_unit *clk = to_unitclk(hw);
	unsigned long flags;

	reg = clk->regofs;

	spin_lock_irqsave(clk->lock, flags);
	clkc_writel(BIT(clk->bit), reg);
	if (clk->type == CLK_UNIT_NOC_CLOCK)
		clkc_writel(BIT(clk->idle_bit), SIRFSOC_NOC_CLK_IDLEREQ_CLR);
	else if (clk->type == CLK_UNIT_NOC_SOCKET)
		clkc_writel(BIT(clk->idle_bit), SIRFSOC_NOC_CLK_SLVRDY_SET);

	spin_unlock_irqrestore(clk->lock, flags);
	return 0;
}

static void unit_clk_disable(struct clk_hw *hw)
{
	u32 reg;
	u32 i = 0;
	struct clk_unit *clk = to_unitclk(hw);
	unsigned long flags;

	reg = clk->regofs + SIRFSOC_CLKC_ROOT_CLK_EN0_CLR - SIRFSOC_CLKC_ROOT_CLK_EN0_SET;
	spin_lock_irqsave(clk->lock, flags);
	if (clk->type == CLK_UNIT_NOC_CLOCK) {
		clkc_writel(BIT(clk->idle_bit), SIRFSOC_NOC_CLK_IDLEREQ_SET);
		while (!(clkc_readl(SIRFSOC_NOC_CLK_IDLE_STATUS) &
				BIT(clk->idle_bit)) && (i++ < 100)) {
			cpu_relax();
			udelay(10);
		}

		if (i == 100) {
			pr_err("unit NoC Clock disconnect Error:timeout\n");
			/*once timeout, undo idlereq by CLR*/
			clkc_writel(BIT(clk->idle_bit), SIRFSOC_NOC_CLK_IDLEREQ_CLR);
			goto err;
		}

	} else if (clk->type == CLK_UNIT_NOC_SOCKET)
		clkc_writel(BIT(clk->idle_bit), SIRFSOC_NOC_CLK_SLVRDY_CLR);

	clkc_writel(BIT(clk->bit), reg);
err:
	spin_unlock_irqrestore(clk->lock, flags);
}

static const struct clk_ops unit_clk_ops = {
	.is_enabled = unit_clk_is_enabled,
	.enable = unit_clk_enable,
	.disable = unit_clk_disable,
};

static struct clk * __init
atlas7_unit_clk_register(struct device *dev, const char *name,
		 const char * const parent_name, unsigned long flags,
		 u32 regofs, u8 bit, u32 type, u8 idle_bit, spinlock_t *lock)
{
	struct clk *clk;
	struct clk_unit *unit;
	struct clk_init_data init;

	unit = kzalloc(sizeof(*unit), GFP_KERNEL);
	if (!unit)
		return ERR_PTR(-ENOMEM);

	init.name = name;
	init.parent_names = &parent_name;
	init.num_parents = 1;
	init.ops = &unit_clk_ops;
	init.flags = flags;

	unit->hw.init = &init;
	unit->regofs = regofs;
	unit->bit = bit;

	unit->type = type;
	unit->idle_bit = idle_bit;
	unit->lock = lock;

	clk = clk_register(dev, &unit->hw);
	if (IS_ERR(clk))
		kfree(unit);

	return clk;
}

static struct atlas7_reset_desc atlas7_reset_unit[] = {
	{ "PWM", 0x0244, 0, 0x0320, 0, &leaf0_gate_lock }, /* 0-5 */
	{ "THCGUM", 0x0244, 3, 0x0320, 1, &leaf0_gate_lock },
	{ "CVD", 0x04A0, 0, 0x032C, 0, &leaf1_gate_lock },
	{ "TIMER", 0x04A0, 1, 0x032C, 1, &leaf1_gate_lock },
	{ "PULSEC", 0x04A0, 2, 0x032C, 2, &leaf1_gate_lock },
	{ "TSC", 0x04A0, 3, 0x032C, 3, &leaf1_gate_lock },
	{ "IOCTOP", 0x04A0, 4, 0x032C, 4, &leaf1_gate_lock }, /* 6-10 */
	{ "RSC", 0x04A0, 5, 0x032C, 5, &leaf1_gate_lock },
	{ "DVM", 0x04A0, 6, 0x032C, 6, &leaf1_gate_lock },
	{ "LVDS", 0x04A0, 7, 0x032C, 7, &leaf1_gate_lock },
	{ "KAS", 0x04A0, 8, 0x032C, 8, &leaf1_gate_lock },
	{ "AC97", 0x04A0, 9, 0x032C, 9, &leaf1_gate_lock }, /* 11-15 */
	{ "USP0", 0x04A0, 10, 0x032C, 10, &leaf1_gate_lock },
	{ "USP1", 0x04A0, 11, 0x032C, 11, &leaf1_gate_lock },
	{ "USP2", 0x04A0, 12, 0x032C, 12, &leaf1_gate_lock },
	{ "DMAC2", 0x04A0, 13, 0x032C, 13, &leaf1_gate_lock },
	{ "DMAC3", 0x04A0, 14, 0x032C, 14, &leaf1_gate_lock }, /* 16-20 */
	{ "AUDIO", 0x04A0, 15, 0x032C, 15, &leaf1_gate_lock },
	{ "I2S1", 0x04A0, 17, 0x032C, 16, &leaf1_gate_lock },
	{ "PMU_AUDIO", 0x04A0, 22, 0x032C, 17, &leaf1_gate_lock },
	{ "THAUDMSCM", 0x04A0, 23, 0x032C, 18, &leaf1_gate_lock },
	{ "SYS2PCI", 0x04B8, 0, 0x0338, 0, &leaf2_gate_lock }, /* 21-25 */
	{ "PCIARB", 0x04B8, 1, 0x0338, 1, &leaf2_gate_lock },
	{ "PCICOPY", 0x04B8, 2, 0x0338, 2, &leaf2_gate_lock },
	{ "ROM", 0x04B8, 3, 0x0338, 3, &leaf2_gate_lock },
	{ "SDIO23", 0x04B8, 4, 0x0338, 4, &leaf2_gate_lock },
	{ "SDIO45", 0x04B8, 5, 0x0338, 5, &leaf2_gate_lock }, /* 26-30 */
	{ "SDIO67", 0x04B8, 6, 0x0338, 6, &leaf2_gate_lock },
	{ "VIP1", 0x04B8, 7, 0x0338, 7, &leaf2_gate_lock },
	{ "VPP0", 0x04B8, 11, 0x0338, 8, &leaf2_gate_lock },
	{ "LCD0", 0x04B8, 12, 0x0338, 9, &leaf2_gate_lock },
	{ "VPP1", 0x04B8, 13, 0x0338, 10, &leaf2_gate_lock }, /* 31-35 */
	{ "LCD1", 0x04B8, 14, 0x0338, 11, &leaf2_gate_lock },
	{ "DCU", 0x04B8, 15, 0x0338, 12, &leaf2_gate_lock },
	{ "GPIO", 0x04B8, 18, 0x0338, 13, &leaf2_gate_lock },
	{ "DAPA_VDIFM", 0x04B8, 17, 0x0338, 15, &leaf2_gate_lock },
	{ "THVDIFM", 0x04B8, 19, 0x0338, 16, &leaf2_gate_lock }, /* 36-40 */
	{ "RGMII", 0x04D0, 0, 0x0344, 0, &leaf3_gate_lock },
	{ "GMAC", 0x04D0, 1, 0x0344, 1, &leaf3_gate_lock },
	{ "UART1", 0x04D0, 2, 0x0344, 2, &leaf3_gate_lock },
	{ "DMAC0", 0x04D0, 3, 0x0344, 3, &leaf3_gate_lock },
	{ "UART0", 0x04D0, 4, 0x0344, 4, &leaf3_gate_lock }, /* 41-45 */
	{ "UART2", 0x04D0, 5, 0x0344, 5, &leaf3_gate_lock },
	{ "UART3", 0x04D0, 6, 0x0344, 6, &leaf3_gate_lock },
	{ "UART4", 0x04D0, 7, 0x0344, 7, &leaf3_gate_lock },
	{ "UART5", 0x04D0, 8, 0x0344, 8, &leaf3_gate_lock },
	{ "SPI1", 0x04D0, 9, 0x0344, 9, &leaf3_gate_lock }, /* 46-50 */
	{ "GNSS_SYS_M0", 0x04D0, 10, 0x0344, 10, &leaf3_gate_lock },
	{ "CANBUS1", 0x04D0, 12, 0x0344, 11, &leaf3_gate_lock },
	{ "CCSEC", 0x04D0, 15, 0x0344, 12, &leaf3_gate_lock },
	{ "CCPUB", 0x04D0, 16, 0x0344, 13, &leaf3_gate_lock },
	{ "DAPA_GNSSM", 0x04D0, 13, 0x0344, 14, &leaf3_gate_lock }, /* 51-55 */
	{ "THGNSSM", 0x04D0, 14, 0x0344, 15, &leaf3_gate_lock },
	{ "VDEC", 0x04E8, 0, 0x0350, 0, &leaf4_gate_lock },
	{ "JPENC", 0x04E8, 1, 0x0350, 1, &leaf4_gate_lock },
	{ "G2D", 0x04E8, 2, 0x0350, 2, &leaf4_gate_lock },
	{ "I2C0", 0x04E8, 3, 0x0350, 3, &leaf4_gate_lock }, /* 56-60 */
	{ "I2C1", 0x04E8, 4, 0x0350, 4, &leaf4_gate_lock },
	{ "GPIO0", 0x04E8, 5, 0x0350, 5, &leaf4_gate_lock },
	{ "NAND", 0x04E8, 6, 0x0350, 6, &leaf4_gate_lock },
	{ "SDIO01", 0x04E8, 7, 0x0350, 7, &leaf4_gate_lock },
	{ "SYS2PCI2", 0x04E8, 8, 0x0350, 8, &leaf4_gate_lock }, /* 61-65 */
	{ "USB0", 0x04E8, 11, 0x0350, 9, &leaf4_gate_lock },
	{ "USB1", 0x04E8, 12, 0x0350, 10, &leaf4_gate_lock },
	{ "THMEDIAM", 0x04E8, 15, 0x0350, 11, &leaf4_gate_lock },
	{ "MEMC_DDRPHY", 0x0500, 0, 0x035C, 0, &leaf5_gate_lock },
	{ "MEMC_UPCTL", 0x0500, 0, 0x035C, 1, &leaf5_gate_lock }, /* 66-70 */
	{ "DAPA_MEM", 0x0500, 1, 0x035C, 2, &leaf5_gate_lock },
	{ "MEMC_MEMDIV", 0x0500, 0, 0x035C, 3, &leaf5_gate_lock },
	{ "THDDRM", 0x0500, 3, 0x035C, 4, &leaf5_gate_lock },
	{ "CORESIGHT", 0x0518, 3, 0x0368, 13, &leaf6_gate_lock },
	{ "THCPUM", 0x0518, 4, 0x0368, 17, &leaf6_gate_lock }, /* 71-75 */
	{ "GRAPHIC", 0x0530, 0, 0x0374, 0, &leaf7_gate_lock },
	{ "VSS_SDR", 0x0530, 1, 0x0374, 1, &leaf7_gate_lock },
	{ "THGPUM", 0x0530, 2, 0x0374, 2, &leaf7_gate_lock },
	{ "DMAC4", 0x0548, 2, 0x0380, 1, &leaf8_gate_lock },
	{ "UART6", 0x0548, 3, 0x0380, 2, &leaf8_gate_lock }, /* 76- */
	{ "USP3", 0x0548, 4, 0x0380, 3, &leaf8_gate_lock },
	{ "THBTM", 0x0548, 5, 0x0380, 5, &leaf8_gate_lock },
	{ "A7CA", 0x0548, 1, 0x0380, 0, &leaf8_gate_lock },
	{ "A7CA_APB", 0x0548, 5, 0x0380, 4, &leaf8_gate_lock },
};

static int atlas7_reset_module(struct reset_controller_dev *rcdev,
					unsigned long reset_idx)
{
	struct atlas7_reset_desc *reset = &atlas7_reset_unit[reset_idx];
	unsigned long flags;

	/*
	 * HW suggest unit reset sequence:
	 * assert sw reset (0)
	 * setting sw clk_en to if the clock was disabled before reset
	 * delay 16 clocks
	 * disable clock (sw clk_en = 0)
	 * de-assert reset (1)
	 * after this sequence, restore clock or not is decided by SW
	 */

	spin_lock_irqsave(reset->lock, flags);
	/* clock enable or not */
	if (clkc_readl(reset->clk_ofs + 8) & (1 << reset->clk_bit)) {
		clkc_writel(1 << reset->rst_bit, reset->rst_ofs + 4);
		udelay(2);
		clkc_writel(1 << reset->clk_bit, reset->clk_ofs + 4);
		clkc_writel(1 << reset->rst_bit, reset->rst_ofs);
		/* restore clock enable */
		clkc_writel(1 << reset->clk_bit, reset->clk_ofs);
	} else {
		clkc_writel(1 << reset->rst_bit, reset->rst_ofs + 4);
		clkc_writel(1 << reset->clk_bit, reset->clk_ofs);
		udelay(2);
		clkc_writel(1 << reset->clk_bit, reset->clk_ofs + 4);
		clkc_writel(1 << reset->rst_bit, reset->rst_ofs);
	}
	spin_unlock_irqrestore(reset->lock, flags);

	return 0;
}

static const struct reset_control_ops atlas7_rst_ops = {
	.reset = atlas7_reset_module,
};

static struct reset_controller_dev atlas7_rst_ctlr = {
	.ops = &atlas7_rst_ops,
	.owner = THIS_MODULE,
	.of_reset_n_cells = 1,
};

static void __init atlas7_clk_init(struct device_node *np)
{
	struct clk *clk;
	struct atlas7_div_init_data *div;
	struct atlas7_mux_init_data *mux;
	struct atlas7_unit_init_data *unit;
	int i;
	int ret;

	sirfsoc_clk_vbase = of_iomap(np, 0);
	if (!sirfsoc_clk_vbase)
		panic("unable to map clkc registers\n");

	of_node_put(np);

	clk = clk_register(NULL, &clk_cpupll.hw);
	BUG_ON(!clk);
	clk = clk_register(NULL, &clk_mempll.hw);
	BUG_ON(!clk);
	clk = clk_register(NULL, &clk_sys0pll.hw);
	BUG_ON(!clk);
	clk = clk_register(NULL, &clk_sys1pll.hw);
	BUG_ON(!clk);
	clk = clk_register(NULL, &clk_sys2pll.hw);
	BUG_ON(!clk);
	clk = clk_register(NULL, &clk_sys3pll.hw);
	BUG_ON(!clk);

	clk = clk_register_divider_table(NULL, "cpupll_div1", "cpupll_vco", 0,
			 sirfsoc_clk_vbase + SIRFSOC_CLKC_CPUPLL_AB_CTRL1, 0, 3, 0,
			 pll_div_table, &cpupll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_divider_table(NULL, "cpupll_div2", "cpupll_vco", 0,
			 sirfsoc_clk_vbase + SIRFSOC_CLKC_CPUPLL_AB_CTRL1, 4, 3, 0,
			 pll_div_table, &cpupll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_divider_table(NULL, "cpupll_div3", "cpupll_vco", 0,
			 sirfsoc_clk_vbase + SIRFSOC_CLKC_CPUPLL_AB_CTRL1, 8, 3, 0,
			 pll_div_table, &cpupll_ctrl1_lock);
	BUG_ON(!clk);

	clk = clk_register_divider_table(NULL, "mempll_div1", "mempll_vco", 0,
			 sirfsoc_clk_vbase + SIRFSOC_CLKC_MEMPLL_AB_CTRL1, 0, 3, 0,
			 pll_div_table, &mempll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_divider_table(NULL, "mempll_div2", "mempll_vco", 0,
			 sirfsoc_clk_vbase + SIRFSOC_CLKC_MEMPLL_AB_CTRL1, 4, 3, 0,
			 pll_div_table, &mempll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_divider_table(NULL, "mempll_div3", "mempll_vco", 0,
			 sirfsoc_clk_vbase + SIRFSOC_CLKC_MEMPLL_AB_CTRL1, 8, 3, 0,
			 pll_div_table, &mempll_ctrl1_lock);
	BUG_ON(!clk);

	clk = clk_register_divider_table(NULL, "sys0pll_div1", "sys0pll_vco", 0,
			 sirfsoc_clk_vbase + SIRFSOC_CLKC_SYS0PLL_AB_CTRL1, 0, 3, 0,
			 pll_div_table, &sys0pll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_divider_table(NULL, "sys0pll_div2", "sys0pll_vco", 0,
			 sirfsoc_clk_vbase + SIRFSOC_CLKC_SYS0PLL_AB_CTRL1, 4, 3, 0,
			 pll_div_table, &sys0pll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_divider_table(NULL, "sys0pll_div3", "sys0pll_vco", 0,
			 sirfsoc_clk_vbase + SIRFSOC_CLKC_SYS0PLL_AB_CTRL1, 8, 3, 0,
			 pll_div_table, &sys0pll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_fixed_factor(NULL, "sys0pll_fixdiv", "sys0pll_vco",
					CLK_SET_RATE_PARENT, 1, 2);

	clk = clk_register_divider_table(NULL, "sys1pll_div1", "sys1pll_vco", 0,
			 sirfsoc_clk_vbase + SIRFSOC_CLKC_SYS1PLL_AB_CTRL1, 0, 3, 0,
			 pll_div_table, &sys1pll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_divider_table(NULL, "sys1pll_div2", "sys1pll_vco", 0,
			 sirfsoc_clk_vbase + SIRFSOC_CLKC_SYS1PLL_AB_CTRL1, 4, 3, 0,
			 pll_div_table, &sys1pll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_divider_table(NULL, "sys1pll_div3", "sys1pll_vco", 0,
			 sirfsoc_clk_vbase + SIRFSOC_CLKC_SYS1PLL_AB_CTRL1, 8, 3, 0,
			 pll_div_table, &sys1pll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_fixed_factor(NULL, "sys1pll_fixdiv", "sys1pll_vco",
					CLK_SET_RATE_PARENT, 1, 2);

	clk = clk_register_divider_table(NULL, "sys2pll_div1", "sys2pll_vco", 0,
			 sirfsoc_clk_vbase + SIRFSOC_CLKC_SYS2PLL_AB_CTRL1, 0, 3, 0,
			 pll_div_table, &sys2pll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_divider_table(NULL, "sys2pll_div2", "sys2pll_vco", 0,
			 sirfsoc_clk_vbase + SIRFSOC_CLKC_SYS2PLL_AB_CTRL1, 4, 3, 0,
			 pll_div_table, &sys2pll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_divider_table(NULL, "sys2pll_div3", "sys2pll_vco", 0,
			 sirfsoc_clk_vbase + SIRFSOC_CLKC_SYS2PLL_AB_CTRL1, 8, 3, 0,
			 pll_div_table, &sys2pll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_fixed_factor(NULL, "sys2pll_fixdiv", "sys2pll_vco",
					CLK_SET_RATE_PARENT, 1, 2);

	clk = clk_register_divider_table(NULL, "sys3pll_div1", "sys3pll_vco", 0,
			 sirfsoc_clk_vbase + SIRFSOC_CLKC_SYS3PLL_AB_CTRL1, 0, 3, 0,
			 pll_div_table, &sys3pll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_divider_table(NULL, "sys3pll_div2", "sys3pll_vco", 0,
			 sirfsoc_clk_vbase + SIRFSOC_CLKC_SYS3PLL_AB_CTRL1, 4, 3, 0,
			 pll_div_table, &sys3pll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_divider_table(NULL, "sys3pll_div3", "sys3pll_vco", 0,
			 sirfsoc_clk_vbase + SIRFSOC_CLKC_SYS3PLL_AB_CTRL1, 8, 3, 0,
			 pll_div_table, &sys3pll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_fixed_factor(NULL, "sys3pll_fixdiv", "sys3pll_vco",
					CLK_SET_RATE_PARENT, 1, 2);

	BUG_ON(!clk);
	clk = clk_register_fixed_factor(NULL, "xinw_fixdiv_btslow", "xinw",
					CLK_SET_RATE_PARENT, 1, 4);

	BUG_ON(!clk);
	clk = clk_register_gate(NULL, "cpupll_clk1", "cpupll_div1",
		CLK_SET_RATE_PARENT, sirfsoc_clk_vbase + SIRFSOC_CLKC_CPUPLL_AB_CTRL1,
				12, 0, &cpupll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_gate(NULL, "cpupll_clk2", "cpupll_div2",
		CLK_SET_RATE_PARENT, sirfsoc_clk_vbase + SIRFSOC_CLKC_CPUPLL_AB_CTRL1,
				13, 0, &cpupll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_gate(NULL, "cpupll_clk3", "cpupll_div3",
		CLK_SET_RATE_PARENT, sirfsoc_clk_vbase + SIRFSOC_CLKC_CPUPLL_AB_CTRL1,
				14, 0, &cpupll_ctrl1_lock);
	BUG_ON(!clk);

	clk = clk_register_gate(NULL, "mempll_clk1", "mempll_div1",
		CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
		sirfsoc_clk_vbase + SIRFSOC_CLKC_MEMPLL_AB_CTRL1,
		12, 0, &mempll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_gate(NULL, "mempll_clk2", "mempll_div2",
		CLK_SET_RATE_PARENT, sirfsoc_clk_vbase + SIRFSOC_CLKC_MEMPLL_AB_CTRL1,
				13, 0, &mempll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_gate(NULL, "mempll_clk3", "mempll_div3",
		CLK_SET_RATE_PARENT, sirfsoc_clk_vbase + SIRFSOC_CLKC_MEMPLL_AB_CTRL1,
				14, 0, &mempll_ctrl1_lock);
	BUG_ON(!clk);

	clk = clk_register_gate(NULL, "sys0pll_clk1", "sys0pll_div1",
		CLK_SET_RATE_PARENT, sirfsoc_clk_vbase + SIRFSOC_CLKC_SYS0PLL_AB_CTRL1,
				12, 0, &sys0pll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_gate(NULL, "sys0pll_clk2", "sys0pll_div2",
		CLK_SET_RATE_PARENT, sirfsoc_clk_vbase + SIRFSOC_CLKC_SYS0PLL_AB_CTRL1,
				13, 0, &sys0pll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_gate(NULL, "sys0pll_clk3", "sys0pll_div3",
		CLK_SET_RATE_PARENT, sirfsoc_clk_vbase + SIRFSOC_CLKC_SYS0PLL_AB_CTRL1,
				14, 0, &sys0pll_ctrl1_lock);
	BUG_ON(!clk);

	clk = clk_register_gate(NULL, "sys1pll_clk1", "sys1pll_div1",
		CLK_SET_RATE_PARENT, sirfsoc_clk_vbase + SIRFSOC_CLKC_SYS1PLL_AB_CTRL1,
				12, 0, &sys1pll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_gate(NULL, "sys1pll_clk2", "sys1pll_div2",
		CLK_SET_RATE_PARENT, sirfsoc_clk_vbase + SIRFSOC_CLKC_SYS1PLL_AB_CTRL1,
				13, 0, &sys1pll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_gate(NULL, "sys1pll_clk3", "sys1pll_div3",
		CLK_SET_RATE_PARENT, sirfsoc_clk_vbase + SIRFSOC_CLKC_SYS1PLL_AB_CTRL1,
				14, 0, &sys1pll_ctrl1_lock);
	BUG_ON(!clk);

	clk = clk_register_gate(NULL, "sys2pll_clk1", "sys2pll_div1",
		CLK_SET_RATE_PARENT, sirfsoc_clk_vbase + SIRFSOC_CLKC_SYS2PLL_AB_CTRL1,
				12, 0, &sys2pll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_gate(NULL, "sys2pll_clk2", "sys2pll_div2",
		CLK_SET_RATE_PARENT, sirfsoc_clk_vbase + SIRFSOC_CLKC_SYS2PLL_AB_CTRL1,
				13, 0, &sys2pll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_gate(NULL, "sys2pll_clk3", "sys2pll_div3",
		CLK_SET_RATE_PARENT, sirfsoc_clk_vbase + SIRFSOC_CLKC_SYS2PLL_AB_CTRL1,
				14, 0, &sys2pll_ctrl1_lock);
	BUG_ON(!clk);

	clk = clk_register_gate(NULL, "sys3pll_clk1", "sys3pll_div1",
		CLK_SET_RATE_PARENT, sirfsoc_clk_vbase + SIRFSOC_CLKC_SYS3PLL_AB_CTRL1,
				12, 0, &sys3pll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_gate(NULL, "sys3pll_clk2", "sys3pll_div2",
		CLK_SET_RATE_PARENT, sirfsoc_clk_vbase + SIRFSOC_CLKC_SYS3PLL_AB_CTRL1,
				13, 0, &sys3pll_ctrl1_lock);
	BUG_ON(!clk);
	clk = clk_register_gate(NULL, "sys3pll_clk3", "sys3pll_div3",
		CLK_SET_RATE_PARENT, sirfsoc_clk_vbase + SIRFSOC_CLKC_SYS3PLL_AB_CTRL1,
				14, 0, &sys3pll_ctrl1_lock);
	BUG_ON(!clk);

	clk = clk_register(NULL, &clk_audio_dto.hw);
	BUG_ON(!clk);

	clk = clk_register(NULL, &clk_disp0_dto.hw);
	BUG_ON(!clk);

	clk = clk_register(NULL, &clk_disp1_dto.hw);
	BUG_ON(!clk);

	for (i = 0; i < ARRAY_SIZE(divider_list); i++) {
		div = &divider_list[i];
		clk = clk_register_divider(NULL, div->div_name,
			div->parent_name, div->divider_flags, sirfsoc_clk_vbase + div->div_offset,
			div->shift, div->width, 0, div->lock);
		BUG_ON(!clk);
		clk = clk_register_gate(NULL, div->gate_name, div->div_name,
			div->gate_flags, sirfsoc_clk_vbase + div->gate_offset,
				div->gate_bit, 0, div->lock);
		BUG_ON(!clk);
	}
	/* ignore selector status register check */
	for (i = 0; i < ARRAY_SIZE(mux_list); i++) {
		mux = &mux_list[i];
		clk = clk_register_mux(NULL, mux->mux_name, mux->parent_names,
			       mux->parent_num, mux->flags,
			       sirfsoc_clk_vbase + mux->mux_offset,
			       mux->shift, mux->width,
			       mux->mux_flags, NULL);
		atlas7_clks[ARRAY_SIZE(unit_list) + i] = clk;
		BUG_ON(!clk);
	}

	for (i = 0; i < ARRAY_SIZE(unit_list); i++) {
		unit = &unit_list[i];
		atlas7_clks[i] = atlas7_unit_clk_register(NULL, unit->unit_name, unit->parent_name,
				unit->flags, unit->regofs, unit->bit, unit->type, unit->idle_bit, unit->lock);
		BUG_ON(!atlas7_clks[i]);
	}

	clk_data.clks = atlas7_clks;
	clk_data.clk_num = ARRAY_SIZE(unit_list) + ARRAY_SIZE(mux_list);

	ret = of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data);
	BUG_ON(ret);

	atlas7_rst_ctlr.of_node = np;
	atlas7_rst_ctlr.nr_resets = ARRAY_SIZE(atlas7_reset_unit);
	reset_controller_register(&atlas7_rst_ctlr);
}
CLK_OF_DECLARE(atlas7_clk, "sirf,atlas7-car", atlas7_clk_init);
