xref: /freebsd/sys/dev/clk/rockchip/rk3328_cru.c (revision be82b3a0)
177f22241SEmmanuel Vadot /*-
277f22241SEmmanuel Vadot  * SPDX-License-Identifier: BSD-2-Clause
377f22241SEmmanuel Vadot  *
477f22241SEmmanuel Vadot  * Copyright (c) 2018-2021 Emmanuel Vadot <manu@freebsd.org>
577f22241SEmmanuel Vadot  *
677f22241SEmmanuel Vadot  * Redistribution and use in source and binary forms, with or without
777f22241SEmmanuel Vadot  * modification, are permitted provided that the following conditions
877f22241SEmmanuel Vadot  * are met:
977f22241SEmmanuel Vadot  * 1. Redistributions of source code must retain the above copyright
1077f22241SEmmanuel Vadot  *    notice, this list of conditions and the following disclaimer.
1177f22241SEmmanuel Vadot  * 2. Redistributions in binary form must reproduce the above copyright
1277f22241SEmmanuel Vadot  *    notice, this list of conditions and the following disclaimer in the
1377f22241SEmmanuel Vadot  *    documentation and/or other materials provided with the distribution.
1477f22241SEmmanuel Vadot  *
1577f22241SEmmanuel Vadot  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1677f22241SEmmanuel Vadot  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
1777f22241SEmmanuel Vadot  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
1877f22241SEmmanuel Vadot  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
1977f22241SEmmanuel Vadot  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
2077f22241SEmmanuel Vadot  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
2177f22241SEmmanuel Vadot  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
2277f22241SEmmanuel Vadot  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
2377f22241SEmmanuel Vadot  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2477f22241SEmmanuel Vadot  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2577f22241SEmmanuel Vadot  * SUCH DAMAGE.
2677f22241SEmmanuel Vadot  */
2777f22241SEmmanuel Vadot 
2877f22241SEmmanuel Vadot #include <sys/param.h>
2977f22241SEmmanuel Vadot #include <sys/systm.h>
3077f22241SEmmanuel Vadot #include <sys/bus.h>
3177f22241SEmmanuel Vadot #include <sys/rman.h>
3277f22241SEmmanuel Vadot #include <sys/kernel.h>
3377f22241SEmmanuel Vadot #include <sys/module.h>
3477f22241SEmmanuel Vadot #include <machine/bus.h>
3577f22241SEmmanuel Vadot 
3677f22241SEmmanuel Vadot #include <dev/fdt/simplebus.h>
3777f22241SEmmanuel Vadot 
3877f22241SEmmanuel Vadot #include <dev/ofw/ofw_bus.h>
3977f22241SEmmanuel Vadot #include <dev/ofw/ofw_bus_subr.h>
4077f22241SEmmanuel Vadot 
41be82b3a0SEmmanuel Vadot #include <dev/clk/clk_div.h>
42be82b3a0SEmmanuel Vadot #include <dev/clk/clk_fixed.h>
43be82b3a0SEmmanuel Vadot #include <dev/clk/clk_mux.h>
4477f22241SEmmanuel Vadot 
4577f22241SEmmanuel Vadot #include <dev/clk/rockchip/rk_cru.h>
4677f22241SEmmanuel Vadot 
4777f22241SEmmanuel Vadot #define	CRU_CLKSEL_CON(x)	(0x100 + (x) * 0x4)
4877f22241SEmmanuel Vadot #define	CRU_CLKGATE_CON(x)	(0x200 + (x) * 0x4)
4977f22241SEmmanuel Vadot 
5077f22241SEmmanuel Vadot /* Registers */
5177f22241SEmmanuel Vadot #define	RK3328_GRF_SOC_CON4	0x410
5277f22241SEmmanuel Vadot #define	RK3328_GRF_MAC_CON1	0x904
5377f22241SEmmanuel Vadot #define	RK3328_GRF_MAC_CON2	0x908
5477f22241SEmmanuel Vadot 
5577f22241SEmmanuel Vadot /* Exported clocks */
5677f22241SEmmanuel Vadot 
5777f22241SEmmanuel Vadot #define	PLL_APLL		1
5877f22241SEmmanuel Vadot #define	PLL_DPLL		2
5977f22241SEmmanuel Vadot #define	PLL_CPLL		3
6077f22241SEmmanuel Vadot #define	PLL_GPLL		4
6177f22241SEmmanuel Vadot #define	PLL_NPLL		5
6277f22241SEmmanuel Vadot #define	ARMCLK			6
6377f22241SEmmanuel Vadot 
6477f22241SEmmanuel Vadot /* SCLK */
6577f22241SEmmanuel Vadot #define	SCLK_RTC32K		30
6677f22241SEmmanuel Vadot #define	SCLK_SDMMC_EXT		31
6777f22241SEmmanuel Vadot #define	SCLK_SPI		32
6877f22241SEmmanuel Vadot #define	SCLK_SDMMC		33
6977f22241SEmmanuel Vadot #define	SCLK_SDIO		34
7077f22241SEmmanuel Vadot #define	SCLK_EMMC		35
7177f22241SEmmanuel Vadot #define	SCLK_TSADC		36
7277f22241SEmmanuel Vadot #define	SCLK_SARADC		37
7377f22241SEmmanuel Vadot #define	SCLK_UART0		38
7477f22241SEmmanuel Vadot #define	SCLK_UART1		39
7577f22241SEmmanuel Vadot #define	SCLK_UART2		40
7677f22241SEmmanuel Vadot #define	SCLK_I2S0		41
7777f22241SEmmanuel Vadot #define	SCLK_I2S1		42
7877f22241SEmmanuel Vadot #define	SCLK_I2S2		43
7977f22241SEmmanuel Vadot #define	SCLK_I2S1_OUT		44
8077f22241SEmmanuel Vadot #define	SCLK_I2S2_OUT		45
8177f22241SEmmanuel Vadot #define	SCLK_SPDIF		46
8277f22241SEmmanuel Vadot #define	SCLK_TIMER0		47
8377f22241SEmmanuel Vadot #define	SCLK_TIMER1		48
8477f22241SEmmanuel Vadot #define	SCLK_TIMER2		49
8577f22241SEmmanuel Vadot #define	SCLK_TIMER3		50
8677f22241SEmmanuel Vadot #define	SCLK_TIMER4		51
8777f22241SEmmanuel Vadot #define	SCLK_TIMER5		52
8877f22241SEmmanuel Vadot #define	SCLK_WIFI		53
8977f22241SEmmanuel Vadot #define	SCLK_CIF_OUT		54
9077f22241SEmmanuel Vadot #define	SCLK_I2C0		55
9177f22241SEmmanuel Vadot #define	SCLK_I2C1		56
9277f22241SEmmanuel Vadot #define	SCLK_I2C2		57
9377f22241SEmmanuel Vadot #define	SCLK_I2C3		58
9477f22241SEmmanuel Vadot #define	SCLK_CRYPTO		59
9577f22241SEmmanuel Vadot #define	SCLK_PWM		60
9677f22241SEmmanuel Vadot #define	SCLK_PDM		61
9777f22241SEmmanuel Vadot #define	SCLK_EFUSE		62
9877f22241SEmmanuel Vadot #define	SCLK_OTP		63
9977f22241SEmmanuel Vadot #define	SCLK_DDRCLK		64
10077f22241SEmmanuel Vadot #define	SCLK_VDEC_CABAC		65
10177f22241SEmmanuel Vadot #define	SCLK_VDEC_CORE		66
10277f22241SEmmanuel Vadot #define	SCLK_VENC_DSP		67
10377f22241SEmmanuel Vadot #define	SCLK_VENC_CORE		68
10477f22241SEmmanuel Vadot #define	SCLK_RGA		69
10577f22241SEmmanuel Vadot #define	SCLK_HDMI_SFC		70
10677f22241SEmmanuel Vadot #define	SCLK_HDMI_CEC		71	/* Unused ? */
10777f22241SEmmanuel Vadot #define	SCLK_USB3_REF		72
10877f22241SEmmanuel Vadot #define	SCLK_USB3_SUSPEND	73
10977f22241SEmmanuel Vadot #define	SCLK_SDMMC_DRV		74
11077f22241SEmmanuel Vadot #define	SCLK_SDIO_DRV		75
11177f22241SEmmanuel Vadot #define	SCLK_EMMC_DRV		76
11277f22241SEmmanuel Vadot #define	SCLK_SDMMC_EXT_DRV	77
11377f22241SEmmanuel Vadot #define	SCLK_SDMMC_SAMPLE	78
11477f22241SEmmanuel Vadot #define	SCLK_SDIO_SAMPLE	79
11577f22241SEmmanuel Vadot #define	SCLK_EMMC_SAMPLE	80
11677f22241SEmmanuel Vadot #define	SCLK_SDMMC_EXT_SAMPLE	81
11777f22241SEmmanuel Vadot #define	SCLK_VOP		82
11877f22241SEmmanuel Vadot #define	SCLK_MAC2PHY_RXTX	83
11977f22241SEmmanuel Vadot #define	SCLK_MAC2PHY_SRC	84
12077f22241SEmmanuel Vadot #define	SCLK_MAC2PHY_REF	85
12177f22241SEmmanuel Vadot #define	SCLK_MAC2PHY_OUT	86
12277f22241SEmmanuel Vadot #define	SCLK_MAC2IO_RX		87
12377f22241SEmmanuel Vadot #define	SCLK_MAC2IO_TX		88
12477f22241SEmmanuel Vadot #define	SCLK_MAC2IO_REFOUT	89
12577f22241SEmmanuel Vadot #define	SCLK_MAC2IO_REF		90
12677f22241SEmmanuel Vadot #define	SCLK_MAC2IO_OUT		91
12777f22241SEmmanuel Vadot #define	SCLK_TSP		92
12877f22241SEmmanuel Vadot #define	SCLK_HSADC_TSP		93
12977f22241SEmmanuel Vadot #define	SCLK_USB3PHY_REF	94
13077f22241SEmmanuel Vadot #define	SCLK_REF_USB3OTG	95
13177f22241SEmmanuel Vadot #define	SCLK_USB3OTG_REF	96
13277f22241SEmmanuel Vadot #define	SCLK_USB3OTG_SUSPEND	97
13377f22241SEmmanuel Vadot #define	SCLK_REF_USB3OTG_SRC	98
13477f22241SEmmanuel Vadot #define	SCLK_MAC2IO_SRC		99
13577f22241SEmmanuel Vadot #define	SCLK_MAC2IO		100
13677f22241SEmmanuel Vadot #define	SCLK_MAC2PHY		101
13777f22241SEmmanuel Vadot #define	SCLK_MAC2IO_EXT		102
13877f22241SEmmanuel Vadot 
13977f22241SEmmanuel Vadot /* DCLK */
14077f22241SEmmanuel Vadot #define	DCLK_LCDC		120
14177f22241SEmmanuel Vadot #define	DCLK_HDMIPHY		121
14277f22241SEmmanuel Vadot #define	HDMIPHY			122
14377f22241SEmmanuel Vadot #define	USB480M			123
14477f22241SEmmanuel Vadot #define	DCLK_LCDC_SRC		124
14577f22241SEmmanuel Vadot 
14677f22241SEmmanuel Vadot /* ACLK */
14777f22241SEmmanuel Vadot #define	ACLK_AXISRAM		130	/* Unused */
14877f22241SEmmanuel Vadot #define	ACLK_VOP_PRE		131
14977f22241SEmmanuel Vadot #define	ACLK_USB3OTG		132
15077f22241SEmmanuel Vadot #define	ACLK_RGA_PRE		133
15177f22241SEmmanuel Vadot #define	ACLK_DMAC		134	/* Unused */
15277f22241SEmmanuel Vadot #define	ACLK_GPU		135
15377f22241SEmmanuel Vadot #define	ACLK_BUS_PRE		136
15477f22241SEmmanuel Vadot #define	ACLK_PERI_PRE		137
15577f22241SEmmanuel Vadot #define	ACLK_RKVDEC_PRE		138
15677f22241SEmmanuel Vadot #define	ACLK_RKVDEC		139
15777f22241SEmmanuel Vadot #define	ACLK_RKVENC		140
15877f22241SEmmanuel Vadot #define	ACLK_VPU_PRE		141
15977f22241SEmmanuel Vadot #define	ACLK_VIO_PRE		142
16077f22241SEmmanuel Vadot #define	ACLK_VPU		143
16177f22241SEmmanuel Vadot #define	ACLK_VIO		144
16277f22241SEmmanuel Vadot #define	ACLK_VOP		145
16377f22241SEmmanuel Vadot #define	ACLK_GMAC		146
16477f22241SEmmanuel Vadot #define	ACLK_H265		147
16577f22241SEmmanuel Vadot #define	ACLK_H264		148
16677f22241SEmmanuel Vadot #define	ACLK_MAC2PHY		149
16777f22241SEmmanuel Vadot #define	ACLK_MAC2IO		150
16877f22241SEmmanuel Vadot #define	ACLK_DCF		151
16977f22241SEmmanuel Vadot #define	ACLK_TSP		152
17077f22241SEmmanuel Vadot #define	ACLK_PERI		153
17177f22241SEmmanuel Vadot #define	ACLK_RGA		154
17277f22241SEmmanuel Vadot #define	ACLK_IEP		155
17377f22241SEmmanuel Vadot #define	ACLK_CIF		156
17477f22241SEmmanuel Vadot #define	ACLK_HDCP		157
17577f22241SEmmanuel Vadot 
17677f22241SEmmanuel Vadot /* PCLK */
17777f22241SEmmanuel Vadot #define	PCLK_GPIO0		200
17877f22241SEmmanuel Vadot #define	PCLK_GPIO1		201
17977f22241SEmmanuel Vadot #define	PCLK_GPIO2		202
18077f22241SEmmanuel Vadot #define	PCLK_GPIO3		203
18177f22241SEmmanuel Vadot #define	PCLK_GRF		204
18277f22241SEmmanuel Vadot #define	PCLK_I2C0		205
18377f22241SEmmanuel Vadot #define	PCLK_I2C1		206
18477f22241SEmmanuel Vadot #define	PCLK_I2C2		207
18577f22241SEmmanuel Vadot #define	PCLK_I2C3		208
18677f22241SEmmanuel Vadot #define	PCLK_SPI		209
18777f22241SEmmanuel Vadot #define	PCLK_UART0		210
18877f22241SEmmanuel Vadot #define	PCLK_UART1		211
18977f22241SEmmanuel Vadot #define	PCLK_UART2		212
19077f22241SEmmanuel Vadot #define	PCLK_TSADC		213
19177f22241SEmmanuel Vadot #define	PCLK_PWM		214
19277f22241SEmmanuel Vadot #define	PCLK_TIMER		215
19377f22241SEmmanuel Vadot #define	PCLK_BUS_PRE		216
19477f22241SEmmanuel Vadot #define	PCLK_PERI_PRE		217	/* Unused */
19577f22241SEmmanuel Vadot #define	PCLK_HDMI_CTRL		218	/* Unused */
19677f22241SEmmanuel Vadot #define	PCLK_HDMI_PHY		219	/* Unused */
19777f22241SEmmanuel Vadot #define	PCLK_GMAC		220
19877f22241SEmmanuel Vadot #define	PCLK_H265		221
19977f22241SEmmanuel Vadot #define	PCLK_MAC2PHY		222
20077f22241SEmmanuel Vadot #define	PCLK_MAC2IO		223
20177f22241SEmmanuel Vadot #define	PCLK_USB3PHY_OTG	224
20277f22241SEmmanuel Vadot #define	PCLK_USB3PHY_PIPE	225
20377f22241SEmmanuel Vadot #define	PCLK_USB3_GRF		226
20477f22241SEmmanuel Vadot #define	PCLK_USB2_GRF		227
20577f22241SEmmanuel Vadot #define	PCLK_HDMIPHY		228
20677f22241SEmmanuel Vadot #define	PCLK_DDR		229
20777f22241SEmmanuel Vadot #define	PCLK_PERI		230
20877f22241SEmmanuel Vadot #define	PCLK_HDMI		231
20977f22241SEmmanuel Vadot #define	PCLK_HDCP		232
21077f22241SEmmanuel Vadot #define	PCLK_DCF		233
21177f22241SEmmanuel Vadot #define	PCLK_SARADC		234
21277f22241SEmmanuel Vadot #define	PCLK_ACODECPHY		235
21377f22241SEmmanuel Vadot #define	PCLK_WDT		236	/* Controlled from the secure GRF */
21477f22241SEmmanuel Vadot 
21577f22241SEmmanuel Vadot /* HCLK */
21677f22241SEmmanuel Vadot #define	HCLK_PERI		308
21777f22241SEmmanuel Vadot #define	HCLK_TSP		309
21877f22241SEmmanuel Vadot #define	HCLK_GMAC		310	/* Unused */
21977f22241SEmmanuel Vadot #define	HCLK_I2S0_8CH		311
22077f22241SEmmanuel Vadot #define	HCLK_I2S1_8CH		312
22177f22241SEmmanuel Vadot #define	HCLK_I2S2_2CH		313
22277f22241SEmmanuel Vadot #define	HCLK_SPDIF_8CH		314
22377f22241SEmmanuel Vadot #define	HCLK_VOP		315
22477f22241SEmmanuel Vadot #define	HCLK_NANDC		316	/* Unused */
22577f22241SEmmanuel Vadot #define	HCLK_SDMMC		317
22677f22241SEmmanuel Vadot #define	HCLK_SDIO		318
22777f22241SEmmanuel Vadot #define	HCLK_EMMC		319
22877f22241SEmmanuel Vadot #define	HCLK_SDMMC_EXT		320
22977f22241SEmmanuel Vadot #define	HCLK_RKVDEC_PRE		321
23077f22241SEmmanuel Vadot #define	HCLK_RKVDEC		322
23177f22241SEmmanuel Vadot #define	HCLK_RKVENC		323
23277f22241SEmmanuel Vadot #define	HCLK_VPU_PRE		324
23377f22241SEmmanuel Vadot #define	HCLK_VIO_PRE		325
23477f22241SEmmanuel Vadot #define	HCLK_VPU		326
23577f22241SEmmanuel Vadot /* 327 doesn't exists */
23677f22241SEmmanuel Vadot #define	HCLK_BUS_PRE		328
23777f22241SEmmanuel Vadot #define	HCLK_PERI_PRE		329	/* Unused */
23877f22241SEmmanuel Vadot #define	HCLK_H264		330
23977f22241SEmmanuel Vadot #define	HCLK_CIF		331
24077f22241SEmmanuel Vadot #define	HCLK_OTG_PMU		332
24177f22241SEmmanuel Vadot #define	HCLK_OTG		333
24277f22241SEmmanuel Vadot #define	HCLK_HOST0		334
24377f22241SEmmanuel Vadot #define	HCLK_HOST0_ARB		335
24477f22241SEmmanuel Vadot #define	HCLK_CRYPTO_MST		336
24577f22241SEmmanuel Vadot #define	HCLK_CRYPTO_SLV		337
24677f22241SEmmanuel Vadot #define	HCLK_PDM		338
24777f22241SEmmanuel Vadot #define	HCLK_IEP		339
24877f22241SEmmanuel Vadot #define	HCLK_RGA		340
24977f22241SEmmanuel Vadot #define	HCLK_HDCP		341
25077f22241SEmmanuel Vadot 
25177f22241SEmmanuel Vadot static struct rk_cru_gate rk3328_gates[] = {
25277f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON0 */
25377f22241SEmmanuel Vadot 	GATE(0, "core_apll_clk", "apll", 0, 0),
25477f22241SEmmanuel Vadot 	GATE(0, "core_dpll_clk", "dpll", 0, 1),
25577f22241SEmmanuel Vadot 	GATE(0, "core_gpll_clk", "gpll", 0, 2),
25677f22241SEmmanuel Vadot 	/* Bit 3 bus_src_clk_en */
25777f22241SEmmanuel Vadot 	/* Bit 4 clk_ddrphy_src_en */
25877f22241SEmmanuel Vadot 	/* Bit 5 clk_ddrpd_src_en */
25977f22241SEmmanuel Vadot 	/* Bit 6 clk_ddrmon_en */
26077f22241SEmmanuel Vadot 	/* Bit 7-8 unused */
26177f22241SEmmanuel Vadot 	/* Bit 9 testclk_en */
26277f22241SEmmanuel Vadot 	GATE(SCLK_WIFI, "sclk_wifi", "sclk_wifi_c", 0, 10),
26377f22241SEmmanuel Vadot 	GATE(SCLK_RTC32K, "clk_rtc32k", "clk_rtc32k_c", 0, 11),
26477f22241SEmmanuel Vadot 	GATE(0, "core_npll_clk", "npll", 0, 12),
26577f22241SEmmanuel Vadot 	/* Bit 13-15 unused */
26677f22241SEmmanuel Vadot 
26777f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON1 */
26877f22241SEmmanuel Vadot 	/* Bit 0 unused */
26977f22241SEmmanuel Vadot 	GATE(0, "clk_i2s0_div", "clk_i2s0_div_c", 1, 1),
27077f22241SEmmanuel Vadot 	GATE(0, "clk_i2s0_frac", "clk_i2s0_frac_f", 1, 2),
27177f22241SEmmanuel Vadot 	GATE(SCLK_I2S0, "clk_i2s0", "clk_i2s0_mux", 1, 3),
27277f22241SEmmanuel Vadot 	GATE(0, "clk_i2s1_div", "clk_i2s1_div_c", 1, 4),
27377f22241SEmmanuel Vadot 	GATE(0, "clk_i2s1_frac", "clk_i2s1_frac_f", 1, 5),
27477f22241SEmmanuel Vadot 	GATE(SCLK_I2S1, "clk_i2s1", "clk_i2s1_mux", 1, 6),
27577f22241SEmmanuel Vadot 	GATE(0, "clk_i2s1_out", "clk_i2s1_mux", 1, 7),
27677f22241SEmmanuel Vadot 	GATE(0, "clk_i2s2_div", "clk_i2s2_div_c", 1, 8),
27777f22241SEmmanuel Vadot 	GATE(0, "clk_i2s2_frac", "clk_i2s2_frac_f", 1, 9),
27877f22241SEmmanuel Vadot 	GATE(SCLK_I2S2, "clk_i2s2", "clk_i2s2_mux", 1, 10),
27977f22241SEmmanuel Vadot 	GATE(0, "clk_i2s2_out", "clk_i2s2_mux", 1, 11),
28077f22241SEmmanuel Vadot 	GATE(0, "clk_spdif_div", "clk_spdif_div_c", 1, 12),
28177f22241SEmmanuel Vadot 	GATE(0, "clk_spdif_frac", "clk_spdif_frac_f", 1, 13),
28277f22241SEmmanuel Vadot 	GATE(0, "clk_uart0_div", "clk_uart0_div_c", 1, 14),
28377f22241SEmmanuel Vadot 	GATE(0, "clk_uart0_frac", "clk_uart0_frac_f", 1, 15),
28477f22241SEmmanuel Vadot 
28577f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON2 */
28677f22241SEmmanuel Vadot 	GATE(0, "clk_uart1_div", "clk_uart1_div_c", 2, 0),
28777f22241SEmmanuel Vadot 	GATE(0, "clk_uart1_frac", "clk_uart1_frac_f", 2, 1),
28877f22241SEmmanuel Vadot 	GATE(0, "clk_uart2_div", "clk_uart2_div_c", 2, 2),
28977f22241SEmmanuel Vadot 	GATE(0, "clk_uart2_frac", "clk_uart2_frac_f", 2, 3),
29077f22241SEmmanuel Vadot 	GATE(SCLK_CRYPTO, "clk_crypto", "clk_crypto_c", 2, 4),
29177f22241SEmmanuel Vadot 	GATE(SCLK_TSP, "clk_tsp", "clk_tsp_c", 2, 5),
29277f22241SEmmanuel Vadot 	GATE(SCLK_TSADC, "clk_tsadc_src", "clk_tsadc_c", 2, 6),
29377f22241SEmmanuel Vadot 	GATE(SCLK_SPI, "clk_spi", "clk_spi_c", 2, 7),
29477f22241SEmmanuel Vadot 	GATE(SCLK_PWM, "clk_pwm", "clk_pwm_c", 2, 8),
29577f22241SEmmanuel Vadot 	GATE(SCLK_I2C0, "clk_i2c0_src", "clk_i2c0_c", 2, 9),
29677f22241SEmmanuel Vadot 	GATE(SCLK_I2C1, "clk_i2c1_src", "clk_i2c1_c", 2, 10),
29777f22241SEmmanuel Vadot 	GATE(SCLK_I2C2, "clk_i2c2_src", "clk_i2c2_c", 2, 11),
29877f22241SEmmanuel Vadot 	GATE(SCLK_I2C3, "clk_i2c3_src", "clk_i2c3_c", 2, 12),
29977f22241SEmmanuel Vadot 	GATE(SCLK_EFUSE, "clk_efuse", "clk_efuse_c", 2, 13),
30077f22241SEmmanuel Vadot 	GATE(SCLK_SARADC, "clk_saradc", "clk_saradc_c", 2, 14),
30177f22241SEmmanuel Vadot 	GATE(SCLK_PDM, "clk_pdm", "clk_pdm_c", 2, 15),
30277f22241SEmmanuel Vadot 
30377f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON3 */
30477f22241SEmmanuel Vadot 	GATE(SCLK_MAC2PHY_SRC, "clk_mac2phy_src", "clk_mac2phy_src_c", 3, 0),
30577f22241SEmmanuel Vadot 	GATE(SCLK_MAC2IO_SRC, "clk_mac2io_src", "clk_mac2io_src_c", 3, 1),
30677f22241SEmmanuel Vadot 	GATE(ACLK_GMAC, "aclk_gmac", "aclk_gmac_c", 3, 2),
30777f22241SEmmanuel Vadot 	/* Bit 3 gmac_gpll_src_en Unused ? */
30877f22241SEmmanuel Vadot 	/* Bit 4 gmac_vpll_src_en Unused ? */
30977f22241SEmmanuel Vadot 	GATE(SCLK_MAC2IO_OUT, "clk_mac2io_out", "clk_mac2io_out_c", 3, 5),
31077f22241SEmmanuel Vadot 	/* Bit 6-7 unused */
31177f22241SEmmanuel Vadot 	GATE(SCLK_OTP, "clk_otp", "clk_otp_c", 3, 8),
31277f22241SEmmanuel Vadot 	/* Bit 9-15 unused */
31377f22241SEmmanuel Vadot 
31477f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON4 */
31577f22241SEmmanuel Vadot 	GATE(0, "periph_gclk_src", "gpll", 4, 0),
31677f22241SEmmanuel Vadot 	GATE(0, "periph_cclk_src", "cpll", 4, 1),
31777f22241SEmmanuel Vadot 	GATE(0, "hdmiphy_peri", "hdmiphy", 4, 2),
31877f22241SEmmanuel Vadot 	GATE(SCLK_SDMMC, "clk_mmc0_src", "clk_sdmmc_c", 4, 3),
31977f22241SEmmanuel Vadot 	GATE(SCLK_SDIO, "clk_sdio_src", "clk_sdio_c", 4, 4),
32077f22241SEmmanuel Vadot 	GATE(SCLK_EMMC, "clk_emmc_src", "clk_emmc_c", 4, 5),
32177f22241SEmmanuel Vadot 	GATE(SCLK_REF_USB3OTG_SRC, "clk_ref_usb3otg_src", "clk_ref_usb3otg_src_c", 4, 6),
32277f22241SEmmanuel Vadot 	GATE(SCLK_USB3OTG_REF, "clk_usb3_otg0_ref", "xin24m", 4, 7),
32377f22241SEmmanuel Vadot 	GATE(SCLK_USB3OTG_SUSPEND, "clk_usb3otg_suspend", "clk_usb3otg_suspend_c", 4, 8),
32477f22241SEmmanuel Vadot 	/* Bit 9 clk_usb3phy_ref_25m_en */
32577f22241SEmmanuel Vadot 	GATE(SCLK_SDMMC_EXT, "clk_sdmmc_ext", "clk_sdmmc_ext_c", 4, 10),
32677f22241SEmmanuel Vadot 	/* Bit 11-15 unused */
32777f22241SEmmanuel Vadot 
32877f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON5 */
32977f22241SEmmanuel Vadot 	GATE(ACLK_RGA_PRE, "aclk_rga_pre", "aclk_rga_pre_c", 5, 0),
33077f22241SEmmanuel Vadot 	GATE(SCLK_RGA, "sclk_rga", "sclk_rga_c", 5, 0),
33177f22241SEmmanuel Vadot 	GATE(ACLK_VIO_PRE, "aclk_vio_pre", "aclk_vio_pre_c", 5, 2),
33277f22241SEmmanuel Vadot 	GATE(SCLK_CIF_OUT, "clk_cif_src", "clk_cif_src_c", 5, 3),
33377f22241SEmmanuel Vadot 	GATE(SCLK_HDMI_SFC, "clk_hdmi_sfc", "xin24m", 5, 4),
33477f22241SEmmanuel Vadot 	GATE(ACLK_VOP_PRE, "aclk_vop_pre", "aclk_vop_pre_c", 5, 5),
33577f22241SEmmanuel Vadot 	GATE(DCLK_LCDC_SRC, "vop_dclk_src", "vop_dclk_src_c", 5, 6),
33677f22241SEmmanuel Vadot 	/* Bit 7-15 unused */
33777f22241SEmmanuel Vadot 
33877f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON6 */
33977f22241SEmmanuel Vadot 	GATE(ACLK_RKVDEC_PRE, "aclk_rkvdec_pre", "aclk_rkvdec_c", 6, 0),
34077f22241SEmmanuel Vadot 	GATE(SCLK_VDEC_CABAC, "sclk_cabac", "sclk_cabac_c", 6, 1),
34177f22241SEmmanuel Vadot 	GATE(SCLK_VDEC_CORE, "sclk_vdec_core", "sclk_vdec_core_c", 6, 2),
34277f22241SEmmanuel Vadot 	GATE(ACLK_RKVENC, "aclk_rkvenc", "aclk_rkvenc_c", 6, 3),
34377f22241SEmmanuel Vadot 	GATE(SCLK_VENC_CORE, "sclk_venc", "sclk_venc_c", 6, 4),
34477f22241SEmmanuel Vadot 	GATE(ACLK_VPU_PRE, "aclk_vpu_pre", "aclk_vpu_pre_c", 6, 5),
34577f22241SEmmanuel Vadot 	GATE(0, "aclk_gpu_pre", "aclk_gpu_pre_c", 6, 6),
34677f22241SEmmanuel Vadot 	GATE(SCLK_VENC_DSP, "sclk_venc_dsp", "sclk_venc_dsp_c", 6, 7),
34777f22241SEmmanuel Vadot 	/* Bit 8-15 unused */
34877f22241SEmmanuel Vadot 
34977f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON7 */
35077f22241SEmmanuel Vadot 	/* Bit 0 aclk_core_en */
35177f22241SEmmanuel Vadot 	/* Bit 1 clk_core_periph_en */
35277f22241SEmmanuel Vadot 	/* Bit 2 clk_jtag_en */
35377f22241SEmmanuel Vadot 	/* Bit 3 unused */
35477f22241SEmmanuel Vadot 	/* Bit 4 pclk_ddr_en */
35577f22241SEmmanuel Vadot 	/* Bit 5-15 unused */
35677f22241SEmmanuel Vadot 
35777f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON8 */
35877f22241SEmmanuel Vadot 	GATE(ACLK_BUS_PRE, "aclk_bus_pre", "aclk_bus_pre_c", 8, 0),
35977f22241SEmmanuel Vadot 	GATE(HCLK_BUS_PRE, "hclk_bus_pre", "hclk_bus_pre_c", 8, 1),
36077f22241SEmmanuel Vadot 	GATE(PCLK_BUS_PRE, "pclk_bus_pre", "pclk_bus_pre_c", 8, 2),
36177f22241SEmmanuel Vadot 	GATE(0, "pclk_bus", "pclk_bus_pre", 8, 3),
36277f22241SEmmanuel Vadot 	GATE(0, "pclk_phy", "pclk_bus_pre", 8, 4),
36377f22241SEmmanuel Vadot 	GATE(SCLK_TIMER0, "sclk_timer0", "xin24m", 8, 5),
36477f22241SEmmanuel Vadot 	GATE(SCLK_TIMER1, "sclk_timer1", "xin24m", 8, 6),
36577f22241SEmmanuel Vadot 	GATE(SCLK_TIMER2, "sclk_timer2", "xin24m", 8, 7),
36677f22241SEmmanuel Vadot 	GATE(SCLK_TIMER3, "sclk_timer3", "xin24m", 8, 8),
36777f22241SEmmanuel Vadot 	GATE(SCLK_TIMER4, "sclk_timer4", "xin24m", 8, 9),
36877f22241SEmmanuel Vadot 	GATE(SCLK_TIMER5, "sclk_timer5", "xin24m", 8, 10),
36977f22241SEmmanuel Vadot 	/* Bit 11-15 unused */
37077f22241SEmmanuel Vadot 
37177f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON9 */
37277f22241SEmmanuel Vadot 	GATE(PCLK_GMAC, "pclk_gmac", "aclk_gmac", 9, 0),
37377f22241SEmmanuel Vadot 	GATE(SCLK_MAC2PHY_RXTX, "clk_gmac2phy_rx", "clk_mac2phy", 9, 1),
37477f22241SEmmanuel Vadot 	GATE(SCLK_MAC2PHY_OUT, "clk_mac2phy_out", "clk_mac2phy_out_c", 9, 2),
37577f22241SEmmanuel Vadot 	GATE(SCLK_MAC2PHY_REF, "clk_gmac2phy_ref", "clk_mac2phy", 9, 3),
37677f22241SEmmanuel Vadot 	GATE(SCLK_MAC2IO_RX, "clk_gmac2io_rx", "clk_mac2io", 9, 4),
37777f22241SEmmanuel Vadot 	GATE(SCLK_MAC2IO_TX, "clk_gmac2io_tx", "clk_mac2io", 9, 5),
37877f22241SEmmanuel Vadot 	GATE(SCLK_MAC2IO_REFOUT, "clk_gmac2io_refout", "clk_mac2io", 9, 6),
37977f22241SEmmanuel Vadot 	GATE(SCLK_MAC2IO_REF, "clk_gmac2io_ref", "clk_mac2io", 9, 7),
38077f22241SEmmanuel Vadot 	/* Bit 8-15 unused */
38177f22241SEmmanuel Vadot 
38277f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON10 */
38377f22241SEmmanuel Vadot 	GATE(ACLK_PERI, "aclk_peri", "aclk_peri_pre", 10, 0),
38477f22241SEmmanuel Vadot 	GATE(HCLK_PERI, "hclk_peri", "hclk_peri_c", 10, 1),
38577f22241SEmmanuel Vadot 	GATE(PCLK_PERI, "pclk_peri", "pclk_peri_c", 10, 2),
38677f22241SEmmanuel Vadot 	/* Bit 3-15 unused */
38777f22241SEmmanuel Vadot 
38877f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON11 */
38977f22241SEmmanuel Vadot 	GATE(HCLK_RKVDEC_PRE, "hclk_rkvdec_pre", "aclk_rkvdec_pre", 11, 0),
39077f22241SEmmanuel Vadot 	/* Bit 1-3 unused */
39177f22241SEmmanuel Vadot 	GATE(HCLK_RKVENC, "hclk_rkvenc", "aclk_rkvenc", 11, 4),
39277f22241SEmmanuel Vadot 	/* Bit 5-7 unused */
39377f22241SEmmanuel Vadot 	GATE(HCLK_VPU_PRE, "hclk_vpu_pre", "aclk_vpu_pre", 11, 8),
39477f22241SEmmanuel Vadot 	/* Bit 9-15 unused */
39577f22241SEmmanuel Vadot 
39677f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON12 */
39777f22241SEmmanuel Vadot 	/* unused */
39877f22241SEmmanuel Vadot 
39977f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON13 */
40077f22241SEmmanuel Vadot 	/* Bit 0 aclk_core_niu_en */
40177f22241SEmmanuel Vadot 	/* Bit 1 aclk_gic400_en */
40277f22241SEmmanuel Vadot 	/* Bit 2-15 unused */
40377f22241SEmmanuel Vadot 
40477f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON14 */
40577f22241SEmmanuel Vadot 	GATE(ACLK_GPU, "aclk_gpu", "aclk_gpu_pre", 14, 0),
40677f22241SEmmanuel Vadot 	GATE(0, "aclk_gpu_niu", "aclk_gpu_pre", 14, 1),
40777f22241SEmmanuel Vadot 	/* Bit 2-15 unused */
40877f22241SEmmanuel Vadot 
40977f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON15*/
41077f22241SEmmanuel Vadot 	/* Bit 0 aclk_intmem_en Unused */
41177f22241SEmmanuel Vadot 	/* Bit 1 aclk_dmac_bus_en Unused */
41277f22241SEmmanuel Vadot 	/* Bit 2 hclk_rom_en Unused */
41377f22241SEmmanuel Vadot 	GATE(HCLK_I2S0_8CH, "hclk_i2s0_8ch", "hclk_bus_pre", 15, 3),
41477f22241SEmmanuel Vadot 	GATE(HCLK_I2S1_8CH, "hclk_i2s1_8ch", "hclk_bus_pre", 15, 4),
41577f22241SEmmanuel Vadot 	GATE(HCLK_I2S2_2CH, "hclk_i2s2_2ch", "hclk_bus_pre", 15, 5),
41677f22241SEmmanuel Vadot 	GATE(HCLK_SPDIF_8CH, "hclk_spdif_8ch", "hclk_bus_pre", 15, 6),
41777f22241SEmmanuel Vadot 	GATE(HCLK_CRYPTO_MST, "hclk_crypto_mst", "hclk_bus_pre", 15, 7),
41877f22241SEmmanuel Vadot 	GATE(HCLK_CRYPTO_SLV, "hclk_crypto_slv", "hclk_bus_pre", 15, 8),
41977f22241SEmmanuel Vadot 	GATE(0, "pclk_efuse", "pclk_bus", 15, 9),
42077f22241SEmmanuel Vadot 	GATE(PCLK_I2C0, "pclk_i2c0", "pclk_bus", 15, 10),
42177f22241SEmmanuel Vadot 	GATE(ACLK_DCF, "aclk_dcf", "aclk_bus_pre", 15, 11),
42277f22241SEmmanuel Vadot 	GATE(0, "aclk_bus_niu", "aclk_bus_pre", 15, 12),
42377f22241SEmmanuel Vadot 	GATE(0, "hclk_bus_niu", "hclk_bus_pre", 15, 13),
42477f22241SEmmanuel Vadot 	GATE(0, "pclk_bus_niu", "pclk_bus_pre", 15, 14),
42577f22241SEmmanuel Vadot 	GATE(0, "pclk_phy_niu", "pclk_phy", 15, 14),
42677f22241SEmmanuel Vadot 	/* Bit 15 pclk_phy_niu_en */
42777f22241SEmmanuel Vadot 
42877f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON16 */
42977f22241SEmmanuel Vadot 	GATE(PCLK_I2C1, "pclk_i2c1", "pclk_bus", 16, 0),
43077f22241SEmmanuel Vadot 	GATE(PCLK_I2C2, "pclk_i2c2", "pclk_bus", 16, 1),
43177f22241SEmmanuel Vadot 	GATE(PCLK_I2C3, "pclk_i2c3", "pclk_bus", 16, 2),
43277f22241SEmmanuel Vadot 	GATE(PCLK_TIMER, "pclk_timer0", "pclk_bus", 16, 3),
43377f22241SEmmanuel Vadot 	GATE(0, "pclk_stimer", "pclk_bus", 16, 4),
43477f22241SEmmanuel Vadot 	GATE(PCLK_SPI, "pclk_spi", "pclk_bus", 16, 5),
43577f22241SEmmanuel Vadot 	GATE(PCLK_PWM, "pclk_pwm", "pclk_bus", 16, 6),
43677f22241SEmmanuel Vadot 	GATE(PCLK_GPIO0, "pclk_gpio0", "pclk_bus", 16, 7),
43777f22241SEmmanuel Vadot 	GATE(PCLK_GPIO1, "pclk_gpio1", "pclk_bus", 16, 8),
43877f22241SEmmanuel Vadot 	GATE(PCLK_GPIO2, "pclk_gpio2", "pclk_bus", 16, 9),
43977f22241SEmmanuel Vadot 	GATE(PCLK_GPIO3, "pclk_gpio3", "pclk_bus", 16, 10),
44077f22241SEmmanuel Vadot 	GATE(PCLK_UART0, "pclk_uart0", "pclk_bus", 16, 11),
44177f22241SEmmanuel Vadot 	GATE(PCLK_UART1, "pclk_uart1", "pclk_bus", 16, 12),
44277f22241SEmmanuel Vadot 	GATE(PCLK_UART2, "pclk_uart2", "pclk_bus", 16, 13),
44377f22241SEmmanuel Vadot 	GATE(PCLK_TSADC, "pclk_tsadc", "pclk_bus", 16, 14),
44477f22241SEmmanuel Vadot 	GATE(PCLK_DCF, "pclk_dcf", "pclk_bus", 16, 15),
44577f22241SEmmanuel Vadot 
44677f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON17 */
44777f22241SEmmanuel Vadot 	GATE(PCLK_GRF, "pclk_grf", "pclk_bus", 17, 0),
44877f22241SEmmanuel Vadot 	/* Bit 1 unused */
44977f22241SEmmanuel Vadot 	GATE(PCLK_USB3_GRF, "pclk_usb3grf", "pclk_phy", 17, 2),
45077f22241SEmmanuel Vadot 	GATE(0, "pclk_ddrphy", "pclk_phy", 17, 3),
45177f22241SEmmanuel Vadot 	GATE(0, "pclk_cru", "pclk_bus", 17, 4),
45277f22241SEmmanuel Vadot 	GATE(PCLK_ACODECPHY, "pclk_acodecphy", "pclk_phy", 17, 5),
45377f22241SEmmanuel Vadot 	GATE(0, "pclk_sgrf", "pclk_bus", 17, 6),
45477f22241SEmmanuel Vadot 	GATE(PCLK_HDMIPHY, "pclk_hdmiphy", "pclk_phy", 17, 7),
45577f22241SEmmanuel Vadot 	GATE(0, "pclk_vdacphy", "pclk_bus", 17, 8),
45677f22241SEmmanuel Vadot 	/* Bit 9 unused */
45777f22241SEmmanuel Vadot 	GATE(0, "pclk_sim", "pclk_bus", 17, 10),
45877f22241SEmmanuel Vadot 	GATE(HCLK_TSP, "hclk_tsp", "hclk_bus_pre", 17, 11),
45977f22241SEmmanuel Vadot 	GATE(ACLK_TSP, "aclk_tsp", "aclk_bus_pre", 17, 12),
46077f22241SEmmanuel Vadot 	/* Bit 13 clk_hsadc_0_tsp_en Depend on a gpio clock ? */
46177f22241SEmmanuel Vadot 	GATE(PCLK_USB2_GRF, "pclk_usb2grf", "pclk_phy", 17, 14),
46277f22241SEmmanuel Vadot 	GATE(PCLK_SARADC, "pclk_saradc", "pclk_bus", 17, 15),
46377f22241SEmmanuel Vadot 
46477f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON18 */
46577f22241SEmmanuel Vadot 	/* Bit 0 unused */
46677f22241SEmmanuel Vadot 	/* Bit 1 pclk_ddr_upctl_en */
46777f22241SEmmanuel Vadot 	/* Bit 2 pclk_ddr_msch_en */
46877f22241SEmmanuel Vadot 	/* Bit 3 pclk_ddr_mon_en */
46977f22241SEmmanuel Vadot 	/* Bit 4 aclk_ddr_upctl_en */
47077f22241SEmmanuel Vadot 	/* Bit 5 clk_ddr_upctl_en */
47177f22241SEmmanuel Vadot 	/* Bit 6 clk_ddr_msch_en */
47277f22241SEmmanuel Vadot 	/* Bit 7 pclk_ddrstdby_en */
47377f22241SEmmanuel Vadot 	/* Bit 8-15 unused */
47477f22241SEmmanuel Vadot 
47577f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON19 */
47677f22241SEmmanuel Vadot 	GATE(HCLK_SDMMC, "hclk_sdmmc", "hclk_peri", 19, 0),
47777f22241SEmmanuel Vadot 	GATE(HCLK_SDIO, "hclk_sdio", "hclk_peri", 19, 1),
47877f22241SEmmanuel Vadot 	GATE(HCLK_EMMC, "hclk_emmc", "hclk_peri", 19, 2),
47977f22241SEmmanuel Vadot 	/* Bit 3-5 unused */
48077f22241SEmmanuel Vadot 	GATE(HCLK_HOST0, "hclk_host0", "hclk_peri", 19, 6),
48177f22241SEmmanuel Vadot 	GATE(HCLK_HOST0_ARB, "hclk_host0_arg", "hclk_peri", 19, 7),
48277f22241SEmmanuel Vadot 	GATE(HCLK_OTG, "hclk_otg", "hclk_peri", 19, 8),
48377f22241SEmmanuel Vadot 	GATE(HCLK_OTG_PMU, "hclk_otg_pmu", "hclk_peri", 19, 9),
48477f22241SEmmanuel Vadot 	/* Bit 10 unused */
48577f22241SEmmanuel Vadot 	GATE(0, "aclk_peri_niu", "aclk_peri", 19, 11),
48677f22241SEmmanuel Vadot 	GATE(0, "hclk_peri_niu", "hclk_peri", 19, 12),
48777f22241SEmmanuel Vadot 	GATE(0, "pclk_peri_niu", "hclk_peri", 19, 13),
48877f22241SEmmanuel Vadot 	GATE(ACLK_USB3OTG, "aclk_usb3otg", "aclk_peri", 19, 14),
48977f22241SEmmanuel Vadot 	GATE(HCLK_SDMMC_EXT, "hclk_sdmmc_ext", "hclk_peri", 19, 15),
49077f22241SEmmanuel Vadot 
49177f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON20 */
49277f22241SEmmanuel Vadot 	/* unused */
49377f22241SEmmanuel Vadot 
49477f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON21 */
49577f22241SEmmanuel Vadot 	/* Bit 0-1 unused */
49677f22241SEmmanuel Vadot 	GATE(ACLK_VOP, "aclk_vop", "aclk_vop_pre", 21, 2),
49777f22241SEmmanuel Vadot 	GATE(HCLK_VOP, "hclk_vop", "hclk_vio_pre", 21, 3),
49877f22241SEmmanuel Vadot 	GATE(0, "aclk_vop_niu", "aclk_vop_pre", 21, 4),
49977f22241SEmmanuel Vadot 	GATE(0, "hclk_vop_niu", "hclk_vio_pre", 21, 5),
50077f22241SEmmanuel Vadot 	GATE(ACLK_IEP, "aclk_iep", "aclk_vio_pre", 21, 6),
50177f22241SEmmanuel Vadot 	GATE(HCLK_IEP, "hclk_iep", "hclk_vio_pre", 21, 7),
50277f22241SEmmanuel Vadot 	GATE(ACLK_CIF, "aclk_cif", "aclk_vio_pre", 21, 8),
50377f22241SEmmanuel Vadot 	GATE(HCLK_CIF, "hclk_cif", "hclk_vio_pre", 21, 9),
50477f22241SEmmanuel Vadot 	GATE(ACLK_RGA, "aclk_rga", "aclk_rga_pre", 21, 10),
50577f22241SEmmanuel Vadot 	GATE(HCLK_RGA, "hclk_rga", "hclk_vio_pre", 21, 11),
50677f22241SEmmanuel Vadot 	GATE(0, "hclk_ahb1tom", "hclk_vio_pre", 21, 12),
50777f22241SEmmanuel Vadot 	GATE(0, "pclk_vio_h2p", "hclk_vio_pre", 21, 13),
50877f22241SEmmanuel Vadot 	GATE(0, "hclk_vio_h2p", "hclk_vio_pre", 21, 14),
50977f22241SEmmanuel Vadot 	GATE(ACLK_HDCP, "aclk_hdcp", "aclk_vio_pre", 21, 15),
51077f22241SEmmanuel Vadot 
51177f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON22 */
51277f22241SEmmanuel Vadot 	GATE(HCLK_HDCP, "hclk_hdcp", "hclk_vio_pre", 22, 0),
51377f22241SEmmanuel Vadot 	GATE(0, "hclk_vio_niu", "hclk_vio_pre", 22, 1),
51477f22241SEmmanuel Vadot 	GATE(0, "aclk_vio_niu", "aclk_vio_pre", 22, 2),
51577f22241SEmmanuel Vadot 	GATE(0, "aclk_rga_niu", "aclk_rga_pre", 22, 3),
51677f22241SEmmanuel Vadot 	GATE(PCLK_HDMI, "pclk_hdmi", "hclk_vio_pre", 22, 4),
51777f22241SEmmanuel Vadot 	GATE(PCLK_HDCP, "pclk_hdcp", "hclk_vio_pre", 22, 5),
51877f22241SEmmanuel Vadot 	/* Bit 6-15 unused */
51977f22241SEmmanuel Vadot 
52077f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON23 */
52177f22241SEmmanuel Vadot 	GATE(ACLK_VPU, "aclk_vpu", "aclk_vpu_pre", 23, 0),
52277f22241SEmmanuel Vadot 	GATE(HCLK_VPU, "hclk_vpu", "hclk_vpu_pre", 23, 1),
52377f22241SEmmanuel Vadot 	GATE(0, "aclk_vpu_niu", "aclk_vpu_pre", 23, 2),
52477f22241SEmmanuel Vadot 	GATE(0, "hclk_vpu_niu", "hclk_vpu_pre", 23, 3),
52577f22241SEmmanuel Vadot 	/* Bit 4-15 unused */
52677f22241SEmmanuel Vadot 
52777f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON24 */
52877f22241SEmmanuel Vadot 	GATE(ACLK_RKVDEC, "aclk_rkvdec", "aclk_rkvdec_pre", 24, 0),
52977f22241SEmmanuel Vadot 	GATE(HCLK_RKVDEC, "hclk_rkvdec", "hclk_rkvdec_pre", 24, 1),
53077f22241SEmmanuel Vadot 	GATE(0, "aclk_rkvdec_niu", "aclk_rkvdec_pre", 24, 2),
53177f22241SEmmanuel Vadot 	GATE(0, "hclk_rkvdec_niu", "hclk_rkvdec_pre", 24, 3),
53277f22241SEmmanuel Vadot 	/* Bit 4-15 unused */
53377f22241SEmmanuel Vadot 
53477f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON25 */
53577f22241SEmmanuel Vadot 	GATE(0, "aclk_rkvenc_niu", "aclk_rkvenc", 25, 0),
53677f22241SEmmanuel Vadot 	GATE(0, "hclk_rkvenc_niu", "hclk_rkvenc", 25, 1),
53777f22241SEmmanuel Vadot 	GATE(ACLK_H265, "aclk_h265", "aclk_rkvenc", 25, 2),
53877f22241SEmmanuel Vadot 	GATE(PCLK_H265, "pclk_h265", "hclk_rkvenc", 25, 3),
53977f22241SEmmanuel Vadot 	GATE(ACLK_H264, "aclk_h264", "aclk_rkvenc", 25, 4),
54077f22241SEmmanuel Vadot 	GATE(HCLK_H264, "hclk_h264", "hclk_rkvenc", 25, 5),
54177f22241SEmmanuel Vadot 	GATE(0, "aclk_axisram", "hclk_rkvenc", 25, 6),
54277f22241SEmmanuel Vadot 	/* Bit 7-15 unused */
54377f22241SEmmanuel Vadot 
54477f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON26 */
54577f22241SEmmanuel Vadot 	GATE(ACLK_MAC2PHY, "aclk_gmac2phy", "aclk_gmac", 26, 0),
54677f22241SEmmanuel Vadot 	GATE(PCLK_MAC2PHY, "pclk_gmac2phy", "pclk_gmac", 26, 1),
54777f22241SEmmanuel Vadot 	GATE(ACLK_MAC2IO, "aclk_gmac2io", "aclk_gmac", 26, 2),
54877f22241SEmmanuel Vadot 	GATE(PCLK_MAC2IO, "pclk_gmac2io", "pclk_gmac", 26, 3),
54977f22241SEmmanuel Vadot 	GATE(0, "aclk_gmac_niu", "aclk_gmac", 26, 4),
55077f22241SEmmanuel Vadot 	GATE(0, "pclk_gmac_niu", "pclk_gmac", 26, 5),
55177f22241SEmmanuel Vadot 	/* Bit 6-15 unused */
55277f22241SEmmanuel Vadot 
55377f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON27 */
55477f22241SEmmanuel Vadot 	/* Bit 0 clk_ddrphy_en */
55577f22241SEmmanuel Vadot 	/* Bit 1 clk4x_ddrphy_en */
55677f22241SEmmanuel Vadot 
55777f22241SEmmanuel Vadot 	/* CRU_CLKGATE_CON28 */
55877f22241SEmmanuel Vadot 	GATE(HCLK_PDM, "hclk_pdm", "hclk_bus_pre", 28, 0),
55977f22241SEmmanuel Vadot 	GATE(PCLK_USB3PHY_OTG, "pclk_usb3phy_otg", "pclk_phy", 28, 1),
56077f22241SEmmanuel Vadot 	GATE(PCLK_USB3PHY_PIPE, "pclk_usb3phy_pipe", "pclk_phy", 28, 2),
56177f22241SEmmanuel Vadot 	GATE(0, "pclk_pmu", "pclk_bus", 28, 3),
56277f22241SEmmanuel Vadot 	GATE(0, "pclk_otp", "pclk_bus", 28, 4)
56377f22241SEmmanuel Vadot 	/* Bit 5-15 unused */
56477f22241SEmmanuel Vadot };
56577f22241SEmmanuel Vadot 
56677f22241SEmmanuel Vadot /*
56777f22241SEmmanuel Vadot  * PLLs
56877f22241SEmmanuel Vadot  */
56977f22241SEmmanuel Vadot 
57077f22241SEmmanuel Vadot #define PLL_RATE(_hz, _ref, _fb, _post1, _post2, _dspd, _frac)		\
57177f22241SEmmanuel Vadot {									\
57277f22241SEmmanuel Vadot 	.freq = _hz,							\
57377f22241SEmmanuel Vadot 	.refdiv = _ref,							\
57477f22241SEmmanuel Vadot 	.fbdiv = _fb,							\
57577f22241SEmmanuel Vadot 	.postdiv1 = _post1,						\
57677f22241SEmmanuel Vadot 	.postdiv2 = _post2,						\
57777f22241SEmmanuel Vadot 	.dsmpd = _dspd,							\
57877f22241SEmmanuel Vadot 	.frac = _frac,							\
57977f22241SEmmanuel Vadot }
58077f22241SEmmanuel Vadot 
58177f22241SEmmanuel Vadot static struct rk_clk_pll_rate rk3328_pll_rates[] = {
58277f22241SEmmanuel Vadot 	/* _mhz, _refdiv, _fbdiv, _postdiv1, _postdiv2, _dsmpd, _frac */
58377f22241SEmmanuel Vadot 	PLL_RATE(1608000000, 1, 67, 1, 1, 1, 0),
58477f22241SEmmanuel Vadot 	PLL_RATE(1584000000, 1, 66, 1, 1, 1, 0),
58577f22241SEmmanuel Vadot 	PLL_RATE(1560000000, 1, 65, 1, 1, 1, 0),
58677f22241SEmmanuel Vadot 	PLL_RATE(1536000000, 1, 64, 1, 1, 1, 0),
58777f22241SEmmanuel Vadot 	PLL_RATE(1512000000, 1, 63, 1, 1, 1, 0),
58877f22241SEmmanuel Vadot 	PLL_RATE(1488000000, 1, 62, 1, 1, 1, 0),
58977f22241SEmmanuel Vadot 	PLL_RATE(1464000000, 1, 61, 1, 1, 1, 0),
59077f22241SEmmanuel Vadot 	PLL_RATE(1440000000, 1, 60, 1, 1, 1, 0),
59177f22241SEmmanuel Vadot 	PLL_RATE(1416000000, 1, 59, 1, 1, 1, 0),
59277f22241SEmmanuel Vadot 	PLL_RATE(1392000000, 1, 58, 1, 1, 1, 0),
59377f22241SEmmanuel Vadot 	PLL_RATE(1368000000, 1, 57, 1, 1, 1, 0),
59477f22241SEmmanuel Vadot 	PLL_RATE(1344000000, 1, 56, 1, 1, 1, 0),
59577f22241SEmmanuel Vadot 	PLL_RATE(1320000000, 1, 55, 1, 1, 1, 0),
59677f22241SEmmanuel Vadot 	PLL_RATE(1296000000, 1, 54, 1, 1, 1, 0),
59777f22241SEmmanuel Vadot 	PLL_RATE(1272000000, 1, 53, 1, 1, 1, 0),
59877f22241SEmmanuel Vadot 	PLL_RATE(1248000000, 1, 52, 1, 1, 1, 0),
59977f22241SEmmanuel Vadot 	PLL_RATE(1200000000, 1, 50, 1, 1, 1, 0),
60077f22241SEmmanuel Vadot 	PLL_RATE(1188000000, 2, 99, 1, 1, 1, 0),
60177f22241SEmmanuel Vadot 	PLL_RATE(1104000000, 1, 46, 1, 1, 1, 0),
60277f22241SEmmanuel Vadot 	PLL_RATE(1100000000, 12, 550, 1, 1, 1, 0),
60377f22241SEmmanuel Vadot 	PLL_RATE(1008000000, 1, 84, 2, 1, 1, 0),
60477f22241SEmmanuel Vadot 	PLL_RATE(1000000000, 6, 500, 2, 1, 1, 0),
60577f22241SEmmanuel Vadot 	PLL_RATE(984000000, 1, 82, 2, 1, 1, 0),
60677f22241SEmmanuel Vadot 	PLL_RATE(960000000, 1, 80, 2, 1, 1, 0),
60777f22241SEmmanuel Vadot 	PLL_RATE(936000000, 1, 78, 2, 1, 1, 0),
60877f22241SEmmanuel Vadot 	PLL_RATE(912000000, 1, 76, 2, 1, 1, 0),
60977f22241SEmmanuel Vadot 	PLL_RATE(900000000, 4, 300, 2, 1, 1, 0),
61077f22241SEmmanuel Vadot 	PLL_RATE(888000000, 1, 74, 2, 1, 1, 0),
61177f22241SEmmanuel Vadot 	PLL_RATE(864000000, 1, 72, 2, 1, 1, 0),
61277f22241SEmmanuel Vadot 	PLL_RATE(840000000, 1, 70, 2, 1, 1, 0),
61377f22241SEmmanuel Vadot 	PLL_RATE(816000000, 1, 68, 2, 1, 1, 0),
61477f22241SEmmanuel Vadot 	PLL_RATE(800000000, 6, 400, 2, 1, 1, 0),
61577f22241SEmmanuel Vadot 	PLL_RATE(700000000, 6, 350, 2, 1, 1, 0),
61677f22241SEmmanuel Vadot 	PLL_RATE(696000000, 1, 58, 2, 1, 1, 0),
61777f22241SEmmanuel Vadot 	PLL_RATE(600000000, 1, 75, 3, 1, 1, 0),
61877f22241SEmmanuel Vadot 	PLL_RATE(594000000, 2, 99, 2, 1, 1, 0),
61977f22241SEmmanuel Vadot 	PLL_RATE(504000000, 1, 63, 3, 1, 1, 0),
62077f22241SEmmanuel Vadot 	PLL_RATE(500000000, 6, 250, 2, 1, 1, 0),
62177f22241SEmmanuel Vadot 	PLL_RATE(408000000, 1, 68, 2, 2, 1, 0),
62277f22241SEmmanuel Vadot 	PLL_RATE(312000000, 1, 52, 2, 2, 1, 0),
62377f22241SEmmanuel Vadot 	PLL_RATE(216000000, 1, 72, 4, 2, 1, 0),
62477f22241SEmmanuel Vadot 	PLL_RATE(96000000, 1, 64, 4, 4, 1, 0),
62577f22241SEmmanuel Vadot 	{},
62677f22241SEmmanuel Vadot };
62777f22241SEmmanuel Vadot 
62877f22241SEmmanuel Vadot static struct rk_clk_pll_rate rk3328_pll_frac_rates[] = {
62977f22241SEmmanuel Vadot 	PLL_RATE(1016064000, 3, 127, 1, 1, 0, 134217),
63077f22241SEmmanuel Vadot 	PLL_RATE(983040000, 24, 983, 1, 1, 0, 671088),
63177f22241SEmmanuel Vadot 	PLL_RATE(491520000, 24, 983, 2, 1, 0, 671088),
63277f22241SEmmanuel Vadot 	PLL_RATE(61440000, 6, 215, 7, 2, 0, 671088),
63377f22241SEmmanuel Vadot 	PLL_RATE(56448000, 12, 451, 4, 4, 0, 9797894),
63477f22241SEmmanuel Vadot 	PLL_RATE(40960000, 12, 409, 4, 5, 0, 10066329),
63577f22241SEmmanuel Vadot 	{},
63677f22241SEmmanuel Vadot };
63777f22241SEmmanuel Vadot 
63877f22241SEmmanuel Vadot /* Clock parents */
63977f22241SEmmanuel Vadot PLIST(pll_src_p) = {"xin24m"};
64077f22241SEmmanuel Vadot PLIST(xin24m_rtc32k_p) = {"xin24m", "clk_rtc32k"};
64177f22241SEmmanuel Vadot 
64277f22241SEmmanuel Vadot PLIST(pll_src_cpll_gpll_p) = {"cpll", "gpll"};
64377f22241SEmmanuel Vadot PLIST(pll_src_cpll_gpll_apll_p) = {"cpll", "gpll", "apll"};
64477f22241SEmmanuel Vadot PLIST(pll_src_cpll_gpll_xin24m_p) = {"cpll", "gpll", "xin24m", "xin24m" /* Dummy */};
64577f22241SEmmanuel Vadot PLIST(pll_src_cpll_gpll_usb480m_p) = {"cpll", "gpll", "usb480m"};
64677f22241SEmmanuel Vadot PLIST(pll_src_cpll_gpll_hdmiphy_p) = {"cpll", "gpll", "hdmi_phy"};
64777f22241SEmmanuel Vadot PLIST(pll_src_cpll_gpll_hdmiphy_usb480m_p) = {"cpll", "gpll", "hdmi_phy", "usb480m"};
64877f22241SEmmanuel Vadot PLIST(pll_src_apll_gpll_dpll_npll_p) = {"apll", "gpll", "dpll", "npll"};
64977f22241SEmmanuel Vadot PLIST(pll_src_cpll_gpll_xin24m_usb480m_p) = {"cpll", "gpll", "xin24m", "usb480m"};
65077f22241SEmmanuel Vadot PLIST(mux_ref_usb3otg_p) = { "xin24m", "clk_usb3_otg0_ref" };
65177f22241SEmmanuel Vadot PLIST(mux_mac2io_p) = { "clk_mac2io_src", "gmac_clkin" };
65277f22241SEmmanuel Vadot PLIST(mux_mac2io_ext_p) = { "clk_mac2io", "gmac_clkin" };
65377f22241SEmmanuel Vadot PLIST(mux_mac2phy_p) = { "clk_mac2phy_src", "phy_50m_out" };
65477f22241SEmmanuel Vadot PLIST(mux_i2s0_p) = { "clk_i2s0_div", "clk_i2s0_frac", "xin12m", "xin12m" };
65577f22241SEmmanuel Vadot PLIST(mux_i2s1_p) = { "clk_i2s1_div", "clk_i2s1_frac", "clkin_i2s1", "xin12m" };
65677f22241SEmmanuel Vadot PLIST(mux_i2s2_p) = { "clk_i2s2_div", "clk_i2s2_frac", "clkin_i2s2", "xin12m" };
65777f22241SEmmanuel Vadot PLIST(mux_dclk_lcdc_p) = {"hdmiphy", "vop_dclk_src"};
65877f22241SEmmanuel Vadot PLIST(mux_hdmiphy_p) = {"hdmi_phy", "xin24m"};
65977f22241SEmmanuel Vadot PLIST(mux_usb480m_p) = {"usb480m_phy", "xin24m"};
66077f22241SEmmanuel Vadot PLIST(mux_uart0_p) = {"clk_uart0_div", "clk_uart0_frac", "xin24m", "xin24m"};
66177f22241SEmmanuel Vadot PLIST(mux_uart1_p) = {"clk_uart1_div", "clk_uart1_frac", "xin24m", "xin24m"};
66277f22241SEmmanuel Vadot PLIST(mux_uart2_p) = {"clk_uart2_div", "clk_uart2_frac", "xin24m", "xin24m"};
66377f22241SEmmanuel Vadot PLIST(mux_spdif_p) = {"clk_spdif_div", "clk_spdif_frac", "xin12m", "xin12m"};
66477f22241SEmmanuel Vadot PLIST(mux_cif_p) = {"clk_cif_pll", "xin24m"};
66577f22241SEmmanuel Vadot 
66677f22241SEmmanuel Vadot static struct rk_clk_pll_def apll = {
66777f22241SEmmanuel Vadot 	.clkdef = {
66877f22241SEmmanuel Vadot 		.id = PLL_APLL,
66977f22241SEmmanuel Vadot 		.name = "apll",
67077f22241SEmmanuel Vadot 		.parent_names = pll_src_p,
67177f22241SEmmanuel Vadot 		.parent_cnt = nitems(pll_src_p),
67277f22241SEmmanuel Vadot 	},
67377f22241SEmmanuel Vadot 	.base_offset = 0x00,
67477f22241SEmmanuel Vadot 	.gate_offset = 0x200,
67577f22241SEmmanuel Vadot 	.gate_shift = 0,
67677f22241SEmmanuel Vadot 	.mode_reg = 0x80,
67777f22241SEmmanuel Vadot 	.mode_shift = 1,
67877f22241SEmmanuel Vadot 	.flags = RK_CLK_PLL_HAVE_GATE,
67977f22241SEmmanuel Vadot 	.frac_rates = rk3328_pll_frac_rates,
68077f22241SEmmanuel Vadot };
68177f22241SEmmanuel Vadot 
68277f22241SEmmanuel Vadot static struct rk_clk_pll_def dpll = {
68377f22241SEmmanuel Vadot 	.clkdef = {
68477f22241SEmmanuel Vadot 		.id = PLL_DPLL,
68577f22241SEmmanuel Vadot 		.name = "dpll",
68677f22241SEmmanuel Vadot 		.parent_names = pll_src_p,
68777f22241SEmmanuel Vadot 		.parent_cnt = nitems(pll_src_p),
68877f22241SEmmanuel Vadot 	},
68977f22241SEmmanuel Vadot 	.base_offset = 0x20,
69077f22241SEmmanuel Vadot 	.gate_offset = 0x200,
69177f22241SEmmanuel Vadot 	.gate_shift = 1,
69277f22241SEmmanuel Vadot 	.mode_reg = 0x80,
69377f22241SEmmanuel Vadot 	.mode_shift = 4,
69477f22241SEmmanuel Vadot 	.flags = RK_CLK_PLL_HAVE_GATE,
69577f22241SEmmanuel Vadot };
69677f22241SEmmanuel Vadot 
69777f22241SEmmanuel Vadot static struct rk_clk_pll_def cpll = {
69877f22241SEmmanuel Vadot 	.clkdef = {
69977f22241SEmmanuel Vadot 		.id = PLL_CPLL,
70077f22241SEmmanuel Vadot 		.name = "cpll",
70177f22241SEmmanuel Vadot 		.parent_names = pll_src_p,
70277f22241SEmmanuel Vadot 		.parent_cnt = nitems(pll_src_p),
70377f22241SEmmanuel Vadot 	},
70477f22241SEmmanuel Vadot 	.base_offset = 0x40,
70577f22241SEmmanuel Vadot 	.mode_reg = 0x80,
70677f22241SEmmanuel Vadot 	.mode_shift = 8,
70777f22241SEmmanuel Vadot 	.rates = rk3328_pll_rates,
70877f22241SEmmanuel Vadot };
70977f22241SEmmanuel Vadot 
71077f22241SEmmanuel Vadot static struct rk_clk_pll_def gpll = {
71177f22241SEmmanuel Vadot 	.clkdef = {
71277f22241SEmmanuel Vadot 		.id = PLL_GPLL,
71377f22241SEmmanuel Vadot 		.name = "gpll",
71477f22241SEmmanuel Vadot 		.parent_names = pll_src_p,
71577f22241SEmmanuel Vadot 		.parent_cnt = nitems(pll_src_p),
71677f22241SEmmanuel Vadot 	},
71777f22241SEmmanuel Vadot 	.base_offset = 0x60,
71877f22241SEmmanuel Vadot 	.gate_offset = 0x200,
71977f22241SEmmanuel Vadot 	.gate_shift = 2,
72077f22241SEmmanuel Vadot 	.mode_reg = 0x80,
72177f22241SEmmanuel Vadot 	.mode_shift = 12,
72277f22241SEmmanuel Vadot 	.flags = RK_CLK_PLL_HAVE_GATE,
72377f22241SEmmanuel Vadot 	.frac_rates = rk3328_pll_frac_rates,
72477f22241SEmmanuel Vadot };
72577f22241SEmmanuel Vadot 
72677f22241SEmmanuel Vadot static struct rk_clk_pll_def npll = {
72777f22241SEmmanuel Vadot 	.clkdef = {
72877f22241SEmmanuel Vadot 		.id = PLL_NPLL,
72977f22241SEmmanuel Vadot 		.name = "npll",
73077f22241SEmmanuel Vadot 		.parent_names = pll_src_p,
73177f22241SEmmanuel Vadot 		.parent_cnt = nitems(pll_src_p),
73277f22241SEmmanuel Vadot 	},
73377f22241SEmmanuel Vadot 	.base_offset = 0xa0,
73477f22241SEmmanuel Vadot 	.gate_offset = 0x200,
73577f22241SEmmanuel Vadot 	.gate_shift = 12,
73677f22241SEmmanuel Vadot 	.mode_reg = 0x80,
73777f22241SEmmanuel Vadot 	.mode_shift = 1,
73877f22241SEmmanuel Vadot 	.flags = RK_CLK_PLL_HAVE_GATE,
73977f22241SEmmanuel Vadot 	.rates = rk3328_pll_rates,
74077f22241SEmmanuel Vadot };
74177f22241SEmmanuel Vadot 
74277f22241SEmmanuel Vadot static struct rk_clk_armclk_rates rk3328_armclk_rates[] = {
74377f22241SEmmanuel Vadot 	{
74477f22241SEmmanuel Vadot 		.freq = 1296000000,
74577f22241SEmmanuel Vadot 		.div = 1,
74677f22241SEmmanuel Vadot 	},
74777f22241SEmmanuel Vadot 	{
74877f22241SEmmanuel Vadot 		.freq = 1200000000,
74977f22241SEmmanuel Vadot 		.div = 1,
75077f22241SEmmanuel Vadot 	},
75177f22241SEmmanuel Vadot 	{
75277f22241SEmmanuel Vadot 		.freq = 1104000000,
75377f22241SEmmanuel Vadot 		.div = 1,
75477f22241SEmmanuel Vadot 	},
75577f22241SEmmanuel Vadot 	{
75677f22241SEmmanuel Vadot 		.freq = 1008000000,
75777f22241SEmmanuel Vadot 		.div = 1,
75877f22241SEmmanuel Vadot 	},
75977f22241SEmmanuel Vadot 	{
76077f22241SEmmanuel Vadot 		.freq = 912000000,
76177f22241SEmmanuel Vadot 		.div = 1,
76277f22241SEmmanuel Vadot 	},
76377f22241SEmmanuel Vadot 	{
76477f22241SEmmanuel Vadot 		.freq = 816000000,
76577f22241SEmmanuel Vadot 		.div = 1,
76677f22241SEmmanuel Vadot 	},
76777f22241SEmmanuel Vadot 	{
76877f22241SEmmanuel Vadot 		.freq = 696000000,
76977f22241SEmmanuel Vadot 		.div = 1,
77077f22241SEmmanuel Vadot 	},
77177f22241SEmmanuel Vadot 	{
77277f22241SEmmanuel Vadot 		.freq = 600000000,
77377f22241SEmmanuel Vadot 		.div = 1,
77477f22241SEmmanuel Vadot 	},
77577f22241SEmmanuel Vadot 	{
77677f22241SEmmanuel Vadot 		.freq = 408000000,
77777f22241SEmmanuel Vadot 		.div = 1,
77877f22241SEmmanuel Vadot 	},
77977f22241SEmmanuel Vadot 	{
78077f22241SEmmanuel Vadot 		.freq = 312000000,
78177f22241SEmmanuel Vadot 		.div = 1,
78277f22241SEmmanuel Vadot 	},
78377f22241SEmmanuel Vadot 	{
78477f22241SEmmanuel Vadot 		.freq = 216000000,
78577f22241SEmmanuel Vadot 		.div = 1,
78677f22241SEmmanuel Vadot 	},
78777f22241SEmmanuel Vadot 	{
78877f22241SEmmanuel Vadot 		.freq = 96000000,
78977f22241SEmmanuel Vadot 		.div = 1,
79077f22241SEmmanuel Vadot 	},
79177f22241SEmmanuel Vadot };
79277f22241SEmmanuel Vadot 
79377f22241SEmmanuel Vadot static struct rk_clk_armclk_def armclk = {
79477f22241SEmmanuel Vadot 	.clkdef = {
79577f22241SEmmanuel Vadot 		.id = ARMCLK,
79677f22241SEmmanuel Vadot 		.name = "armclk",
79777f22241SEmmanuel Vadot 		.parent_names = pll_src_apll_gpll_dpll_npll_p,
79877f22241SEmmanuel Vadot 		.parent_cnt = nitems(pll_src_apll_gpll_dpll_npll_p),
79977f22241SEmmanuel Vadot 	},
80077f22241SEmmanuel Vadot 	.muxdiv_offset = 0x100,
80177f22241SEmmanuel Vadot 	.mux_shift = 6,
80277f22241SEmmanuel Vadot 	.mux_width = 2,
80377f22241SEmmanuel Vadot 
80477f22241SEmmanuel Vadot 	.div_shift = 0,
80577f22241SEmmanuel Vadot 	.div_width = 5,
80677f22241SEmmanuel Vadot 
80777f22241SEmmanuel Vadot 	.flags = RK_CLK_COMPOSITE_HAVE_MUX,
80877f22241SEmmanuel Vadot 	.main_parent = 3, /* npll */
80977f22241SEmmanuel Vadot 	.alt_parent = 0, /* apll */
81077f22241SEmmanuel Vadot 
81177f22241SEmmanuel Vadot 	.rates = rk3328_armclk_rates,
81277f22241SEmmanuel Vadot 	.nrates = nitems(rk3328_armclk_rates),
81377f22241SEmmanuel Vadot };
81477f22241SEmmanuel Vadot 
81577f22241SEmmanuel Vadot static struct rk_clk rk3328_clks[] = {
81677f22241SEmmanuel Vadot 	/* External clocks */
81777f22241SEmmanuel Vadot 	LINK("xin24m"),
81877f22241SEmmanuel Vadot 	LINK("gmac_clkin"),
81977f22241SEmmanuel Vadot 	LINK("hdmi_phy"),
82077f22241SEmmanuel Vadot 	LINK("usb480m_phy"),
82177f22241SEmmanuel Vadot 	FRATE(0, "xin12m", 12000000),
82277f22241SEmmanuel Vadot 	FRATE(0, "phy_50m_out", 50000000),
82377f22241SEmmanuel Vadot 	FRATE(0, "clkin_i2s1", 0),
82477f22241SEmmanuel Vadot 	FRATE(0, "clkin_i2s2", 0),
82577f22241SEmmanuel Vadot 
82677f22241SEmmanuel Vadot 	/* PLLs */
82777f22241SEmmanuel Vadot 	{
82877f22241SEmmanuel Vadot 		.type = RK3328_CLK_PLL,
82977f22241SEmmanuel Vadot 		.clk.pll = &apll
83077f22241SEmmanuel Vadot 	},
83177f22241SEmmanuel Vadot 	{
83277f22241SEmmanuel Vadot 		.type = RK3328_CLK_PLL,
83377f22241SEmmanuel Vadot 		.clk.pll = &dpll
83477f22241SEmmanuel Vadot 	},
83577f22241SEmmanuel Vadot 	{
83677f22241SEmmanuel Vadot 		.type = RK3328_CLK_PLL,
83777f22241SEmmanuel Vadot 		.clk.pll = &cpll
83877f22241SEmmanuel Vadot 	},
83977f22241SEmmanuel Vadot 	{
84077f22241SEmmanuel Vadot 		.type = RK3328_CLK_PLL,
84177f22241SEmmanuel Vadot 		.clk.pll = &gpll
84277f22241SEmmanuel Vadot 	},
84377f22241SEmmanuel Vadot 	{
84477f22241SEmmanuel Vadot 		.type = RK3328_CLK_PLL,
84577f22241SEmmanuel Vadot 		.clk.pll = &npll
84677f22241SEmmanuel Vadot 	},
84777f22241SEmmanuel Vadot 
84877f22241SEmmanuel Vadot 	{
84977f22241SEmmanuel Vadot 		.type = RK_CLK_ARMCLK,
85077f22241SEmmanuel Vadot 		.clk.armclk = &armclk,
85177f22241SEmmanuel Vadot 	},
85277f22241SEmmanuel Vadot 
85377f22241SEmmanuel Vadot 	/* CRU_CRU_MISC */
85477f22241SEmmanuel Vadot 	MUXRAW(HDMIPHY, "hdmiphy", mux_hdmiphy_p, 0, 0x84, 13, 1),
85577f22241SEmmanuel Vadot 	MUXRAW(USB480M, "usb480m", mux_usb480m_p, 0, 0x84, 15, 1),
85677f22241SEmmanuel Vadot 
85777f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON0 */
85877f22241SEmmanuel Vadot 	/* COMP clk_core_div_con core_clk_pll_sel */
85977f22241SEmmanuel Vadot 	COMP(0, "aclk_bus_pre_c", pll_src_cpll_gpll_hdmiphy_p, 0, 0, 8, 5, 13, 2),
86077f22241SEmmanuel Vadot 
86177f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON1 */
86277f22241SEmmanuel Vadot 	/* CDIV clk_core_dbg_div_con */
86377f22241SEmmanuel Vadot 	/* CDIV aclk_core_div_con */
86477f22241SEmmanuel Vadot 	CDIV(0, "hclk_bus_pre_c", "aclk_bus_pre", 0, 1, 8, 2),
86577f22241SEmmanuel Vadot 	CDIV(0, "pclk_bus_pre_c", "aclk_bus_pre", 0, 1, 12, 2),
86677f22241SEmmanuel Vadot 
86777f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON2 */
86877f22241SEmmanuel Vadot 	/* CDIV test_div_con */
86977f22241SEmmanuel Vadot 	/* CDIV func_24m_div_con */
87077f22241SEmmanuel Vadot 
87177f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON3 */
87277f22241SEmmanuel Vadot 	/* COMP ddr_div_cnt ddr_clk_pll_sel */
87377f22241SEmmanuel Vadot 
87477f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON4 */
87577f22241SEmmanuel Vadot 	COMP(0, "clk_otp_c", pll_src_cpll_gpll_xin24m_p, 0, 4, 0, 6, 6, 2),
87677f22241SEmmanuel Vadot 	/* COMP pd_ddr_div_con ddrpdclk_clk_pll_sel */
87777f22241SEmmanuel Vadot 
87877f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON5 */
87977f22241SEmmanuel Vadot 	COMP(0, "clk_efuse_c", pll_src_cpll_gpll_xin24m_p, 0, 5, 8, 5, 14, 2),
88077f22241SEmmanuel Vadot 
88177f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON6 */
88277f22241SEmmanuel Vadot 	MUX(0, "clk_i2s0_mux", mux_i2s0_p, RK_CLK_MUX_REPARENT, 6, 8, 2),
88377f22241SEmmanuel Vadot 	COMP(0, "clk_i2s0_div_c", pll_src_cpll_gpll_p, 0, 6, 0, 7, 15, 1),
88477f22241SEmmanuel Vadot 
88577f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON7 */
88677f22241SEmmanuel Vadot 	FRACT(0, "clk_i2s0_frac_f", "clk_i2s0_div", 0, 7),
88777f22241SEmmanuel Vadot 
88877f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON8 */
88977f22241SEmmanuel Vadot 	MUX(0, "clk_i2s1_mux", mux_i2s1_p, RK_CLK_MUX_REPARENT, 8, 8, 2),
89077f22241SEmmanuel Vadot 	COMP(0, "clk_i2s1_div_c", pll_src_cpll_gpll_p, 0, 8, 0, 7, 15, 1),
89177f22241SEmmanuel Vadot 	/* MUX i2s1_out_sel */
89277f22241SEmmanuel Vadot 
89377f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON9 */
89477f22241SEmmanuel Vadot 	FRACT(0, "clk_i2s1_frac_f", "clk_i2s1_div", 0, 9),
89577f22241SEmmanuel Vadot 
89677f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON10 */
89777f22241SEmmanuel Vadot 	MUX(0, "clk_i2s2_mux", mux_i2s2_p, RK_CLK_MUX_REPARENT, 10, 8, 2),
89877f22241SEmmanuel Vadot 	COMP(0, "clk_i2s2_div_c", pll_src_cpll_gpll_p, 0, 10, 0, 7, 15, 1),
89977f22241SEmmanuel Vadot 	/* MUX i2s2_out_sel */
90077f22241SEmmanuel Vadot 
90177f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON11 */
90277f22241SEmmanuel Vadot 	FRACT(0, "clk_i2s2_frac_f", "clk_i2s2_div", 0, 11),
90377f22241SEmmanuel Vadot 
90477f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON12 */
90577f22241SEmmanuel Vadot 	MUX(0, "clk_spdif_pll", pll_src_cpll_gpll_p, 0, 12, 15, 1),
90677f22241SEmmanuel Vadot 	MUX(SCLK_SPDIF, "clk_spdif", mux_spdif_p, 0, 12, 8, 2),
90777f22241SEmmanuel Vadot 	CDIV(0, "clk_spdif_div_c", "clk_spdif_pll", 0, 12, 0, 7),
90877f22241SEmmanuel Vadot 
90977f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON13 */
91077f22241SEmmanuel Vadot 	FRACT(0, "clk_spdif_frac_f", "clk_spdif", 0, 13),
91177f22241SEmmanuel Vadot 
91277f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON14 */
91377f22241SEmmanuel Vadot 	MUX(0, "clk_uart0_pll", pll_src_cpll_gpll_usb480m_p, 0, 14, 12, 2),
91477f22241SEmmanuel Vadot 	MUX(SCLK_UART0, "clk_uart0", mux_uart0_p, 0, 14, 8, 2),
91577f22241SEmmanuel Vadot 	CDIV(0, "clk_uart0_div_c", "clk_uart0_pll", 0, 14, 0, 7),
91677f22241SEmmanuel Vadot 
91777f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON15 */
91877f22241SEmmanuel Vadot 	FRACT(0, "clk_uart0_frac_f", "clk_uart0_pll", 0, 15),
91977f22241SEmmanuel Vadot 
92077f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON16 */
92177f22241SEmmanuel Vadot 	MUX(0, "clk_uart1_pll", pll_src_cpll_gpll_usb480m_p, 0, 16, 12, 2),
92277f22241SEmmanuel Vadot 	MUX(SCLK_UART1, "clk_uart1", mux_uart1_p, 0, 16, 8, 2),
92377f22241SEmmanuel Vadot 	CDIV(0, "clk_uart1_div_c", "clk_uart1_pll", 0, 16, 0, 7),
92477f22241SEmmanuel Vadot 
92577f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON17 */
92677f22241SEmmanuel Vadot 	FRACT(0, "clk_uart1_frac_f", "clk_uart1_pll", 0, 17),
92777f22241SEmmanuel Vadot 
92877f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON18 */
92977f22241SEmmanuel Vadot 	MUX(0, "clk_uart2_pll", pll_src_cpll_gpll_usb480m_p, 0, 18, 12, 2),
93077f22241SEmmanuel Vadot 	MUX(SCLK_UART2, "clk_uart2", mux_uart2_p, 0, 18, 8, 2),
93177f22241SEmmanuel Vadot 	CDIV(0, "clk_uart2_div_c", "clk_uart2_pll", 0, 18, 0, 7),
93277f22241SEmmanuel Vadot 
93377f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON19 */
93477f22241SEmmanuel Vadot 	FRACT(0, "clk_uart2_frac_f", "clk_uart2_pll", 0, 19),
93577f22241SEmmanuel Vadot 
93677f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON20 */
93777f22241SEmmanuel Vadot 	COMP(0, "clk_pdm_c", pll_src_cpll_gpll_apll_p, 0, 20, 8, 5, 14, 2),
93877f22241SEmmanuel Vadot 	COMP(0, "clk_crypto_c", pll_src_cpll_gpll_p, 0, 20, 0, 5, 7, 1),
93977f22241SEmmanuel Vadot 
94077f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON21 */
94177f22241SEmmanuel Vadot 	COMP(0, "clk_tsp_c", pll_src_cpll_gpll_p, 0, 21, 8, 5, 15, 1),
94277f22241SEmmanuel Vadot 
94377f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON22 */
94477f22241SEmmanuel Vadot 	CDIV(0, "clk_tsadc_c", "xin24m", 0, 22, 0, 10),
94577f22241SEmmanuel Vadot 
94677f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON23 */
94777f22241SEmmanuel Vadot 	CDIV(0, "clk_saradc_c", "xin24m", 0, 23, 0, 10),
94877f22241SEmmanuel Vadot 
94977f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON24 */
95077f22241SEmmanuel Vadot 	COMP(0, "clk_pwm_c", pll_src_cpll_gpll_p, 0, 24, 8, 7, 15, 1),
95177f22241SEmmanuel Vadot 	COMP(0, "clk_spi_c", pll_src_cpll_gpll_p, 0, 24, 0, 7, 7, 1),
95277f22241SEmmanuel Vadot 
95377f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON25 */
95477f22241SEmmanuel Vadot 	COMP(0, "aclk_gmac_c", pll_src_cpll_gpll_p, 0, 35, 0, 5, 6, 2),
95577f22241SEmmanuel Vadot 	CDIV(0, "pclk_gmac_c", "pclk_gmac", 0, 25, 8, 3),
95677f22241SEmmanuel Vadot 
95777f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON26 */
95877f22241SEmmanuel Vadot 	CDIV(0, "clk_mac2phy_out_c", "clk_mac2phy", 0, 26, 8, 2),
95977f22241SEmmanuel Vadot 	COMP(0, "clk_mac2phy_src_c", pll_src_cpll_gpll_p, 0, 26, 0, 5, 7, 1),
96077f22241SEmmanuel Vadot 
96177f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON27 */
96277f22241SEmmanuel Vadot 	COMP(0, "clk_mac2io_src_c", pll_src_cpll_gpll_p, 0, 27, 0, 5, 7, 1),
96377f22241SEmmanuel Vadot 	COMP(0, "clk_mac2io_out_c", pll_src_cpll_gpll_p, 0, 27, 8, 5, 15, 1),
96477f22241SEmmanuel Vadot 
96577f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON28 */
96677f22241SEmmanuel Vadot 	COMP(ACLK_PERI_PRE, "aclk_peri_pre", pll_src_cpll_gpll_hdmiphy_p, 0, 28, 0, 5, 6, 2),
96777f22241SEmmanuel Vadot 
96877f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON29 */
96977f22241SEmmanuel Vadot 	CDIV(0, "pclk_peri_c", "aclk_peri_pre", 0, 29, 0, 2),
97077f22241SEmmanuel Vadot 	CDIV(0, "hclk_peri_c", "aclk_peri_pre", 0, 29, 4, 3),
97177f22241SEmmanuel Vadot 
97277f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON30 */
97377f22241SEmmanuel Vadot 	COMP(0, "clk_sdmmc_c", pll_src_cpll_gpll_xin24m_usb480m_p, 0, 30, 0, 8, 8, 2),
97477f22241SEmmanuel Vadot 
97577f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON31 */
97677f22241SEmmanuel Vadot 	COMP(0, "clk_sdio_c", pll_src_cpll_gpll_xin24m_usb480m_p, 0, 31, 0, 8, 8, 2),
97777f22241SEmmanuel Vadot 
97877f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON32 */
97977f22241SEmmanuel Vadot 	COMP(0, "clk_emmc_c", pll_src_cpll_gpll_xin24m_usb480m_p, 0, 32, 0, 8, 8, 2),
98077f22241SEmmanuel Vadot 
98177f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON33 */
98277f22241SEmmanuel Vadot 	COMP(0, "clk_usb3otg_suspend_c", xin24m_rtc32k_p, 0, 33, 0, 10, 15, 1),
98377f22241SEmmanuel Vadot 
98477f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON34 */
98577f22241SEmmanuel Vadot 	COMP(0, "clk_i2c0_c", pll_src_cpll_gpll_p, 0, 34, 0, 7, 7, 1),
98677f22241SEmmanuel Vadot 	COMP(0, "clk_i2c1_c", pll_src_cpll_gpll_p, 0, 34, 8, 7, 15, 1),
98777f22241SEmmanuel Vadot 
98877f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON35 */
98977f22241SEmmanuel Vadot 	COMP(0, "clk_i2c2_c", pll_src_cpll_gpll_p, 0, 35, 0, 7, 7, 1),
99077f22241SEmmanuel Vadot 	COMP(0, "clk_i2c3_c", pll_src_cpll_gpll_p, 0, 35, 8, 7, 15, 1),
99177f22241SEmmanuel Vadot 
99277f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON36 */
99377f22241SEmmanuel Vadot 	COMP(0, "aclk_rga_pre_c", pll_src_cpll_gpll_hdmiphy_usb480m_p, 0, 36, 8, 5, 14, 2),
99477f22241SEmmanuel Vadot 	COMP(0, "sclk_rga_c", pll_src_cpll_gpll_hdmiphy_usb480m_p, 0, 36, 0, 5, 6, 2),
99577f22241SEmmanuel Vadot 
99677f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON37 */
99777f22241SEmmanuel Vadot 	COMP(0, "aclk_vio_pre_c", pll_src_cpll_gpll_hdmiphy_usb480m_p, 0, 37, 0, 5, 6, 2),
99877f22241SEmmanuel Vadot 	CDIV(HCLK_VIO_PRE, "hclk_vio_pre", "aclk_vio_pre", 0, 37, 8, 5),
99977f22241SEmmanuel Vadot 
100077f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON38 */
100177f22241SEmmanuel Vadot 	COMP(0, "clk_rtc32k_c", pll_src_cpll_gpll_xin24m_p, 0, 38, 0, 14, 14, 2),
100277f22241SEmmanuel Vadot 
100377f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON39 */
100477f22241SEmmanuel Vadot 	COMP(0, "aclk_vop_pre_c", pll_src_cpll_gpll_hdmiphy_usb480m_p, 0, 39, 0, 5, 6, 2),
100577f22241SEmmanuel Vadot 
100677f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON40 */
100777f22241SEmmanuel Vadot 	COMP(0, "vop_dclk_src_c", pll_src_cpll_gpll_p, 0, 40, 8, 8, 0, 1),
100877f22241SEmmanuel Vadot 	CDIV(DCLK_HDMIPHY, "hdmiphy_div", "vop_dclk_src", 0, 40, 3, 3),
100977f22241SEmmanuel Vadot 	/* MUX vop_dclk_frac_sel */
101077f22241SEmmanuel Vadot 	MUX(DCLK_LCDC, "vop_dclk", mux_dclk_lcdc_p, 0, 40, 1, 1),
101177f22241SEmmanuel Vadot 
101277f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON41 */
101377f22241SEmmanuel Vadot 	/* FRACT dclk_vop_frac_div_con */
101477f22241SEmmanuel Vadot 
101577f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON42 */
101677f22241SEmmanuel Vadot 	MUX(0, "clk_cif_pll", pll_src_cpll_gpll_p, 0, 42, 7, 1),
101777f22241SEmmanuel Vadot 	COMP(0, "clk_cif_src_c", mux_cif_p, 0, 42, 0, 5, 5, 1),
101877f22241SEmmanuel Vadot 
101977f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON43 */
102077f22241SEmmanuel Vadot 	COMP(0, "clk_sdmmc_ext_c", pll_src_cpll_gpll_xin24m_usb480m_p, 0, 43, 0, 8, 8, 2),
102177f22241SEmmanuel Vadot 
102277f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON44 */
102377f22241SEmmanuel Vadot 	COMP(0, "aclk_gpu_pre_c", pll_src_cpll_gpll_hdmiphy_usb480m_p, 0, 44, 0, 5, 6, 2),
102477f22241SEmmanuel Vadot 
102577f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON45 */
102677f22241SEmmanuel Vadot 	MUX(SCLK_REF_USB3OTG, "clk_ref_usb3otg", mux_ref_usb3otg_p, 0, 45, 8, 1),
102777f22241SEmmanuel Vadot 	COMP(0, "clk_ref_usb3otg_src_c", pll_src_cpll_gpll_p, 0, 45, 0, 7, 7, 1),
102877f22241SEmmanuel Vadot 
102977f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON46 */
103077f22241SEmmanuel Vadot 	/* Unused */
103177f22241SEmmanuel Vadot 
103277f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON47 */
103377f22241SEmmanuel Vadot 	/* Unused */
103477f22241SEmmanuel Vadot 
103577f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON48 */
103677f22241SEmmanuel Vadot 	COMP(0, "sclk_cabac_c", pll_src_cpll_gpll_hdmiphy_usb480m_p, 0, 48, 8, 5, 14, 2),
103777f22241SEmmanuel Vadot 	COMP(0, "aclk_rkvdec_c", pll_src_cpll_gpll_hdmiphy_usb480m_p, 0, 48, 0, 5, 6, 2),
103877f22241SEmmanuel Vadot 
103977f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON49 */
104077f22241SEmmanuel Vadot 	COMP(0, "sclk_vdec_core_c", pll_src_cpll_gpll_hdmiphy_usb480m_p, 0, 49, 0, 5, 6, 2),
104177f22241SEmmanuel Vadot 
104277f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON50 */
104377f22241SEmmanuel Vadot 	COMP(0, "aclk_vpu_pre_c", pll_src_cpll_gpll_hdmiphy_usb480m_p, 0, 50, 0, 5, 6, 2),
104477f22241SEmmanuel Vadot 
104577f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON51 */
104677f22241SEmmanuel Vadot 	COMP(0, "sclk_venc_c", pll_src_cpll_gpll_hdmiphy_usb480m_p, 0, 51, 8, 5, 14, 2),
104777f22241SEmmanuel Vadot 	COMP(0, "aclk_rkvenc_c", pll_src_cpll_gpll_hdmiphy_usb480m_p, 0, 51, 0, 5, 6, 2),
104877f22241SEmmanuel Vadot 
104977f22241SEmmanuel Vadot 	/* CRU_CLKSEL_CON52 */
105077f22241SEmmanuel Vadot 	COMP(0, "sclk_venc_dsp_c", pll_src_cpll_gpll_hdmiphy_usb480m_p, 0, 51, 8, 5, 14, 2),
105177f22241SEmmanuel Vadot 	COMP(0, "sclk_wifi_c", pll_src_cpll_gpll_usb480m_p, 0, 51, 0, 6, 6, 2),
105277f22241SEmmanuel Vadot 
105377f22241SEmmanuel Vadot 	/* GRF_SOC_CON4 */
105477f22241SEmmanuel Vadot 	MUXGRF(SCLK_MAC2IO_EXT, "clk_mac2io_ext", mux_mac2io_ext_p, 0, RK3328_GRF_SOC_CON4, 14, 1),
105577f22241SEmmanuel Vadot 
105677f22241SEmmanuel Vadot 	/* GRF_MAC_CON1 */
105777f22241SEmmanuel Vadot 	MUXGRF(SCLK_MAC2IO, "clk_mac2io", mux_mac2io_p, 0, RK3328_GRF_MAC_CON1, 10, 1),
105877f22241SEmmanuel Vadot 
105977f22241SEmmanuel Vadot 	/* GRF_MAC_CON2 */
106077f22241SEmmanuel Vadot 	MUXGRF(SCLK_MAC2PHY, "clk_mac2phy", mux_mac2phy_p, 0, RK3328_GRF_MAC_CON2, 10, 1),
106177f22241SEmmanuel Vadot 
106277f22241SEmmanuel Vadot 	/*
106377f22241SEmmanuel Vadot 	 * This clock is controlled in the secure world
106477f22241SEmmanuel Vadot 	 */
106577f22241SEmmanuel Vadot 	FFACT(PCLK_WDT, "pclk_wdt", "pclk_bus", 1, 1),
106677f22241SEmmanuel Vadot };
106777f22241SEmmanuel Vadot 
106877f22241SEmmanuel Vadot static int
rk3328_cru_probe(device_t dev)106977f22241SEmmanuel Vadot rk3328_cru_probe(device_t dev)
107077f22241SEmmanuel Vadot {
107177f22241SEmmanuel Vadot 
107277f22241SEmmanuel Vadot 	if (!ofw_bus_status_okay(dev))
107377f22241SEmmanuel Vadot 		return (ENXIO);
107477f22241SEmmanuel Vadot 
107577f22241SEmmanuel Vadot 	if (ofw_bus_is_compatible(dev, "rockchip,rk3328-cru")) {
107677f22241SEmmanuel Vadot 		device_set_desc(dev, "Rockchip RK3328 Clock and Reset Unit");
107777f22241SEmmanuel Vadot 		return (BUS_PROBE_DEFAULT);
107877f22241SEmmanuel Vadot 	}
107977f22241SEmmanuel Vadot 
108077f22241SEmmanuel Vadot 	return (ENXIO);
108177f22241SEmmanuel Vadot }
108277f22241SEmmanuel Vadot 
108377f22241SEmmanuel Vadot static int
rk3328_cru_attach(device_t dev)108477f22241SEmmanuel Vadot rk3328_cru_attach(device_t dev)
108577f22241SEmmanuel Vadot {
108677f22241SEmmanuel Vadot 	struct rk_cru_softc *sc;
108777f22241SEmmanuel Vadot 
108877f22241SEmmanuel Vadot 	sc = device_get_softc(dev);
108977f22241SEmmanuel Vadot 	sc->dev = dev;
109077f22241SEmmanuel Vadot 
109177f22241SEmmanuel Vadot 	sc->gates = rk3328_gates;
109277f22241SEmmanuel Vadot 	sc->ngates = nitems(rk3328_gates);
109377f22241SEmmanuel Vadot 
109477f22241SEmmanuel Vadot 	sc->clks = rk3328_clks;
109577f22241SEmmanuel Vadot 	sc->nclks = nitems(rk3328_clks);
109677f22241SEmmanuel Vadot 
109777f22241SEmmanuel Vadot 	sc->reset_offset = 0x300;
109877f22241SEmmanuel Vadot 	sc->reset_num = 184;
109977f22241SEmmanuel Vadot 
110077f22241SEmmanuel Vadot 	return (rk_cru_attach(dev));
110177f22241SEmmanuel Vadot }
110277f22241SEmmanuel Vadot 
110377f22241SEmmanuel Vadot static device_method_t rk3328_cru_methods[] = {
110477f22241SEmmanuel Vadot 	/* Device interface */
110577f22241SEmmanuel Vadot 	DEVMETHOD(device_probe,		rk3328_cru_probe),
110677f22241SEmmanuel Vadot 	DEVMETHOD(device_attach,	rk3328_cru_attach),
110777f22241SEmmanuel Vadot 
110877f22241SEmmanuel Vadot 	DEVMETHOD_END
110977f22241SEmmanuel Vadot };
111077f22241SEmmanuel Vadot 
111177f22241SEmmanuel Vadot DEFINE_CLASS_1(rk3328_cru, rk3328_cru_driver, rk3328_cru_methods,
111277f22241SEmmanuel Vadot   sizeof(struct rk_cru_softc), rk_cru_driver);
111377f22241SEmmanuel Vadot 
111477f22241SEmmanuel Vadot EARLY_DRIVER_MODULE(rk3328_cru, simplebus, rk3328_cru_driver, 0, 0,
111577f22241SEmmanuel Vadot     BUS_PASS_BUS + BUS_PASS_ORDER_MIDDLE);
1116