xref: /linux/drivers/clk/mediatek/clk-mt8196-topckgen.c (revision 522ba450b56fff29f868b1552bdc2965f55de7ed)
1*895ab013SLaura Nao // SPDX-License-Identifier: GPL-2.0-only
2*895ab013SLaura Nao /*
3*895ab013SLaura Nao  * Copyright (c) 2025 MediaTek Inc.
4*895ab013SLaura Nao  *                    Guangjie Song <guangjie.song@mediatek.com>
5*895ab013SLaura Nao  * Copyright (c) 2025 Collabora Ltd.
6*895ab013SLaura Nao  *                    Laura Nao <laura.nao@collabora.com>
7*895ab013SLaura Nao  */
8*895ab013SLaura Nao #include <dt-bindings/clock/mediatek,mt8196-clock.h>
9*895ab013SLaura Nao 
10*895ab013SLaura Nao #include <linux/clk.h>
11*895ab013SLaura Nao #include <linux/module.h>
12*895ab013SLaura Nao #include <linux/of.h>
13*895ab013SLaura Nao #include <linux/of_address.h>
14*895ab013SLaura Nao #include <linux/of_device.h>
15*895ab013SLaura Nao #include <linux/platform_device.h>
16*895ab013SLaura Nao 
17*895ab013SLaura Nao #include "clk-mtk.h"
18*895ab013SLaura Nao #include "clk-mux.h"
19*895ab013SLaura Nao 
20*895ab013SLaura Nao /* MUX SEL REG */
21*895ab013SLaura Nao #define CLK_CFG_UPDATE		0x0004
22*895ab013SLaura Nao #define CLK_CFG_UPDATE1		0x0008
23*895ab013SLaura Nao #define CLK_CFG_UPDATE2		0x000c
24*895ab013SLaura Nao #define CLK_CFG_0		0x0010
25*895ab013SLaura Nao #define CLK_CFG_0_SET		0x0014
26*895ab013SLaura Nao #define CLK_CFG_0_CLR		0x0018
27*895ab013SLaura Nao #define CLK_CFG_1		0x0020
28*895ab013SLaura Nao #define CLK_CFG_1_SET		0x0024
29*895ab013SLaura Nao #define CLK_CFG_1_CLR		0x0028
30*895ab013SLaura Nao #define CLK_CFG_2		0x0030
31*895ab013SLaura Nao #define CLK_CFG_2_SET		0x0034
32*895ab013SLaura Nao #define CLK_CFG_2_CLR		0x0038
33*895ab013SLaura Nao #define CLK_CFG_3		0x0040
34*895ab013SLaura Nao #define CLK_CFG_3_SET		0x0044
35*895ab013SLaura Nao #define CLK_CFG_3_CLR		0x0048
36*895ab013SLaura Nao #define CLK_CFG_4		0x0050
37*895ab013SLaura Nao #define CLK_CFG_4_SET		0x0054
38*895ab013SLaura Nao #define CLK_CFG_4_CLR		0x0058
39*895ab013SLaura Nao #define CLK_CFG_5		0x0060
40*895ab013SLaura Nao #define CLK_CFG_5_SET		0x0064
41*895ab013SLaura Nao #define CLK_CFG_5_CLR		0x0068
42*895ab013SLaura Nao #define CLK_CFG_6		0x0070
43*895ab013SLaura Nao #define CLK_CFG_6_SET		0x0074
44*895ab013SLaura Nao #define CLK_CFG_6_CLR		0x0078
45*895ab013SLaura Nao #define CLK_CFG_7		0x0080
46*895ab013SLaura Nao #define CLK_CFG_7_SET		0x0084
47*895ab013SLaura Nao #define CLK_CFG_7_CLR		0x0088
48*895ab013SLaura Nao #define CLK_CFG_8		0x0090
49*895ab013SLaura Nao #define CLK_CFG_8_SET		0x0094
50*895ab013SLaura Nao #define CLK_CFG_8_CLR		0x0098
51*895ab013SLaura Nao #define CLK_CFG_9		0x00a0
52*895ab013SLaura Nao #define CLK_CFG_9_SET		0x00a4
53*895ab013SLaura Nao #define CLK_CFG_9_CLR		0x00a8
54*895ab013SLaura Nao #define CLK_CFG_10		0x00b0
55*895ab013SLaura Nao #define CLK_CFG_10_SET		0x00b4
56*895ab013SLaura Nao #define CLK_CFG_10_CLR		0x00b8
57*895ab013SLaura Nao #define CLK_CFG_11		0x00c0
58*895ab013SLaura Nao #define CLK_CFG_11_SET		0x00c4
59*895ab013SLaura Nao #define CLK_CFG_11_CLR		0x00c8
60*895ab013SLaura Nao #define CLK_CFG_12		0x00d0
61*895ab013SLaura Nao #define CLK_CFG_12_SET		0x00d4
62*895ab013SLaura Nao #define CLK_CFG_12_CLR		0x00d8
63*895ab013SLaura Nao #define CLK_CFG_13		0x00e0
64*895ab013SLaura Nao #define CLK_CFG_13_SET		0x00e4
65*895ab013SLaura Nao #define CLK_CFG_13_CLR		0x00e8
66*895ab013SLaura Nao #define CLK_CFG_14		0x00f0
67*895ab013SLaura Nao #define CLK_CFG_14_SET		0x00f4
68*895ab013SLaura Nao #define CLK_CFG_14_CLR		0x00f8
69*895ab013SLaura Nao #define CLK_CFG_15		0x0100
70*895ab013SLaura Nao #define CLK_CFG_15_SET		0x0104
71*895ab013SLaura Nao #define CLK_CFG_15_CLR		0x0108
72*895ab013SLaura Nao #define CLK_CFG_16		0x0110
73*895ab013SLaura Nao #define CLK_CFG_16_SET		0x0114
74*895ab013SLaura Nao #define CLK_CFG_16_CLR		0x0118
75*895ab013SLaura Nao #define CLK_CFG_17		0x0120
76*895ab013SLaura Nao #define CLK_CFG_17_SET		0x0124
77*895ab013SLaura Nao #define CLK_CFG_17_CLR		0x0128
78*895ab013SLaura Nao #define CLK_CFG_18		0x0130
79*895ab013SLaura Nao #define CLK_CFG_18_SET		0x0134
80*895ab013SLaura Nao #define CLK_CFG_18_CLR		0x0138
81*895ab013SLaura Nao #define CLK_CFG_19		0x0140
82*895ab013SLaura Nao #define CLK_CFG_19_SET		0x0144
83*895ab013SLaura Nao #define CLK_CFG_19_CLR		0x0148
84*895ab013SLaura Nao #define CLK_AUDDIV_0		0x020c
85*895ab013SLaura Nao #define CLK_FENC_STATUS_MON_0	0x0270
86*895ab013SLaura Nao #define CLK_FENC_STATUS_MON_1	0x0274
87*895ab013SLaura Nao #define CLK_FENC_STATUS_MON_2	0x0278
88*895ab013SLaura Nao 
89*895ab013SLaura Nao /* MUX SHIFT */
90*895ab013SLaura Nao #define TOP_MUX_AXI_SHIFT			0
91*895ab013SLaura Nao #define TOP_MUX_MEM_SUB_SHIFT			1
92*895ab013SLaura Nao #define TOP_MUX_IO_NOC_SHIFT			2
93*895ab013SLaura Nao #define TOP_MUX_PERI_AXI_SHIFT			3
94*895ab013SLaura Nao #define TOP_MUX_UFS_PEXTP0_AXI_SHIFT		4
95*895ab013SLaura Nao #define TOP_MUX_PEXTP1_USB_AXI_SHIFT		5
96*895ab013SLaura Nao #define TOP_MUX_PERI_FMEM_SUB_SHIFT		6
97*895ab013SLaura Nao #define TOP_MUX_UFS_PEXPT0_MEM_SUB_SHIFT	7
98*895ab013SLaura Nao #define TOP_MUX_PEXTP1_USB_MEM_SUB_SHIFT	8
99*895ab013SLaura Nao #define TOP_MUX_PERI_NOC_SHIFT			9
100*895ab013SLaura Nao #define TOP_MUX_EMI_N_SHIFT			10
101*895ab013SLaura Nao #define TOP_MUX_EMI_S_SHIFT			11
102*895ab013SLaura Nao #define TOP_MUX_AP2CONN_HOST_SHIFT		14
103*895ab013SLaura Nao #define TOP_MUX_ATB_SHIFT			15
104*895ab013SLaura Nao #define TOP_MUX_CIRQ_SHIFT			16
105*895ab013SLaura Nao #define TOP_MUX_PBUS_156M_SHIFT			17
106*895ab013SLaura Nao #define TOP_MUX_EFUSE_SHIFT			20
107*895ab013SLaura Nao #define TOP_MUX_MCU_L3GIC_SHIFT			21
108*895ab013SLaura Nao #define TOP_MUX_MCU_INFRA_SHIFT			22
109*895ab013SLaura Nao #define TOP_MUX_DSP_SHIFT			23
110*895ab013SLaura Nao #define TOP_MUX_MFG_REF_SHIFT			24
111*895ab013SLaura Nao #define TOP_MUX_MFG_EB_SHIFT			26
112*895ab013SLaura Nao #define TOP_MUX_UART_SHIFT			27
113*895ab013SLaura Nao #define TOP_MUX_SPI0_BCLK_SHIFT			28
114*895ab013SLaura Nao #define TOP_MUX_SPI1_BCLK_SHIFT			29
115*895ab013SLaura Nao #define TOP_MUX_SPI2_BCLK_SHIFT			30
116*895ab013SLaura Nao #define TOP_MUX_SPI3_BCLK_SHIFT			0
117*895ab013SLaura Nao #define TOP_MUX_SPI4_BCLK_SHIFT			1
118*895ab013SLaura Nao #define TOP_MUX_SPI5_BCLK_SHIFT			2
119*895ab013SLaura Nao #define TOP_MUX_SPI6_BCLK_SHIFT			3
120*895ab013SLaura Nao #define TOP_MUX_SPI7_BCLK_SHIFT			4
121*895ab013SLaura Nao #define TOP_MUX_MSDC30_1_SHIFT			7
122*895ab013SLaura Nao #define TOP_MUX_MSDC30_2_SHIFT			8
123*895ab013SLaura Nao #define TOP_MUX_DISP_PWM_SHIFT			9
124*895ab013SLaura Nao #define TOP_MUX_USB_TOP_1P_SHIFT		10
125*895ab013SLaura Nao #define TOP_MUX_SSUSB_XHCI_1P_SHIFT		11
126*895ab013SLaura Nao #define TOP_MUX_SSUSB_FMCNT_P1_SHIFT		12
127*895ab013SLaura Nao #define TOP_MUX_I2C_PERI_SHIFT			13
128*895ab013SLaura Nao #define TOP_MUX_I2C_EAST_SHIFT			14
129*895ab013SLaura Nao #define TOP_MUX_I2C_WEST_SHIFT			15
130*895ab013SLaura Nao #define TOP_MUX_I2C_NORTH_SHIFT			16
131*895ab013SLaura Nao #define TOP_MUX_AES_UFSFDE_SHIFT		17
132*895ab013SLaura Nao #define TOP_MUX_UFS_SHIFT			18
133*895ab013SLaura Nao #define TOP_MUX_AUD_1_SHIFT			21
134*895ab013SLaura Nao #define TOP_MUX_AUD_2_SHIFT			22
135*895ab013SLaura Nao #define TOP_MUX_ADSP_SHIFT			23
136*895ab013SLaura Nao #define TOP_MUX_ADSP_UARTHUB_B_SHIFT		24
137*895ab013SLaura Nao #define TOP_MUX_DPMAIF_MAIN_SHIFT		25
138*895ab013SLaura Nao #define TOP_MUX_PWM_SHIFT			26
139*895ab013SLaura Nao #define TOP_MUX_MCUPM_SHIFT			27
140*895ab013SLaura Nao #define TOP_MUX_SFLASH_SHIFT			28
141*895ab013SLaura Nao #define TOP_MUX_IPSEAST_SHIFT			29
142*895ab013SLaura Nao #define TOP_MUX_TL_SHIFT			0
143*895ab013SLaura Nao #define TOP_MUX_TL_P1_SHIFT			1
144*895ab013SLaura Nao #define TOP_MUX_TL_P2_SHIFT			2
145*895ab013SLaura Nao #define TOP_MUX_EMI_INTERFACE_546_SHIFT		3
146*895ab013SLaura Nao #define TOP_MUX_SDF_SHIFT			4
147*895ab013SLaura Nao #define TOP_MUX_UARTHUB_BCLK_SHIFT		5
148*895ab013SLaura Nao #define TOP_MUX_DPSW_CMP_26M_SHIFT		6
149*895ab013SLaura Nao #define TOP_MUX_SMAPCK_SHIFT			7
150*895ab013SLaura Nao #define TOP_MUX_SSR_PKA_SHIFT			8
151*895ab013SLaura Nao #define TOP_MUX_SSR_DMA_SHIFT			9
152*895ab013SLaura Nao #define TOP_MUX_SSR_KDF_SHIFT			10
153*895ab013SLaura Nao #define TOP_MUX_SSR_RNG_SHIFT			11
154*895ab013SLaura Nao #define TOP_MUX_SPU0_SHIFT			12
155*895ab013SLaura Nao #define TOP_MUX_SPU1_SHIFT			13
156*895ab013SLaura Nao #define TOP_MUX_DXCC_SHIFT			14
157*895ab013SLaura Nao 
158*895ab013SLaura Nao /* CKSTA REG */
159*895ab013SLaura Nao #define CKSTA_REG	0x01c8
160*895ab013SLaura Nao #define CKSTA_REG1	0x01cc
161*895ab013SLaura Nao #define CKSTA_REG2	0x01d0
162*895ab013SLaura Nao 
163*895ab013SLaura Nao /* DIVIDER REG */
164*895ab013SLaura Nao #define CLK_AUDDIV_2	0x0214
165*895ab013SLaura Nao #define CLK_AUDDIV_3	0x0220
166*895ab013SLaura Nao #define CLK_AUDDIV_4	0x0224
167*895ab013SLaura Nao #define CLK_AUDDIV_5	0x0228
168*895ab013SLaura Nao 
169*895ab013SLaura Nao /* HW Voter REG */
170*895ab013SLaura Nao #define HWV_CG_0_SET	0x0000
171*895ab013SLaura Nao #define HWV_CG_0_CLR	0x0004
172*895ab013SLaura Nao #define HWV_CG_0_DONE	0x2c00
173*895ab013SLaura Nao #define HWV_CG_1_SET	0x0008
174*895ab013SLaura Nao #define HWV_CG_1_CLR	0x000c
175*895ab013SLaura Nao #define HWV_CG_1_DONE	0x2c04
176*895ab013SLaura Nao #define HWV_CG_2_SET	0x0010
177*895ab013SLaura Nao #define HWV_CG_2_CLR	0x0014
178*895ab013SLaura Nao #define HWV_CG_2_DONE	0x2c08
179*895ab013SLaura Nao #define HWV_CG_3_SET	0x0018
180*895ab013SLaura Nao #define HWV_CG_3_CLR	0x001c
181*895ab013SLaura Nao #define HWV_CG_3_DONE	0x2c0c
182*895ab013SLaura Nao #define HWV_CG_4_SET	0x0020
183*895ab013SLaura Nao #define HWV_CG_4_CLR	0x0024
184*895ab013SLaura Nao #define HWV_CG_4_DONE	0x2c10
185*895ab013SLaura Nao #define HWV_CG_5_SET	0x0028
186*895ab013SLaura Nao #define HWV_CG_5_CLR	0x002c
187*895ab013SLaura Nao #define HWV_CG_5_DONE	0x2c14
188*895ab013SLaura Nao #define HWV_CG_6_SET	0x0030
189*895ab013SLaura Nao #define HWV_CG_6_CLR	0x0034
190*895ab013SLaura Nao #define HWV_CG_6_DONE	0x2c18
191*895ab013SLaura Nao #define HWV_CG_7_SET	0x0038
192*895ab013SLaura Nao #define HWV_CG_7_CLR	0x003c
193*895ab013SLaura Nao #define HWV_CG_7_DONE	0x2c1c
194*895ab013SLaura Nao #define HWV_CG_8_SET	0x0040
195*895ab013SLaura Nao #define HWV_CG_8_CLR	0x0044
196*895ab013SLaura Nao #define HWV_CG_8_DONE	0x2c20
197*895ab013SLaura Nao 
198*895ab013SLaura Nao static const struct mtk_fixed_factor top_divs[] = {
199*895ab013SLaura Nao 	FACTOR(CLK_TOP_MAINPLL_D3, "mainpll_d3", "mainpll", 1, 3),
200*895ab013SLaura Nao 	FACTOR(CLK_TOP_MAINPLL_D4, "mainpll_d4", "mainpll", 1, 4),
201*895ab013SLaura Nao 	FACTOR(CLK_TOP_MAINPLL_D4_D2, "mainpll_d4_d2", "mainpll", 1, 8),
202*895ab013SLaura Nao 	FACTOR(CLK_TOP_MAINPLL_D4_D4, "mainpll_d4_d4", "mainpll", 1, 16),
203*895ab013SLaura Nao 	FACTOR(CLK_TOP_MAINPLL_D4_D8, "mainpll_d4_d8", "mainpll", 1, 32),
204*895ab013SLaura Nao 	FACTOR(CLK_TOP_MAINPLL_D5, "mainpll_d5", "mainpll", 1, 5),
205*895ab013SLaura Nao 	FACTOR(CLK_TOP_MAINPLL_D5_D2, "mainpll_d5_d2", "mainpll", 1, 10),
206*895ab013SLaura Nao 	FACTOR(CLK_TOP_MAINPLL_D5_D4, "mainpll_d5_d4", "mainpll", 1, 20),
207*895ab013SLaura Nao 	FACTOR(CLK_TOP_MAINPLL_D5_D8, "mainpll_d5_d8", "mainpll", 1, 40),
208*895ab013SLaura Nao 	FACTOR(CLK_TOP_MAINPLL_D6, "mainpll_d6", "mainpll", 1, 6),
209*895ab013SLaura Nao 	FACTOR(CLK_TOP_MAINPLL_D6_D2, "mainpll_d6_d2", "mainpll", 1, 12),
210*895ab013SLaura Nao 	FACTOR(CLK_TOP_MAINPLL_D7, "mainpll_d7", "mainpll", 1, 7),
211*895ab013SLaura Nao 	FACTOR(CLK_TOP_MAINPLL_D7_D2, "mainpll_d7_d2", "mainpll", 1, 14),
212*895ab013SLaura Nao 	FACTOR(CLK_TOP_MAINPLL_D7_D4, "mainpll_d7_d4", "mainpll", 1, 28),
213*895ab013SLaura Nao 	FACTOR(CLK_TOP_MAINPLL_D7_D8, "mainpll_d7_d8", "mainpll", 1, 56),
214*895ab013SLaura Nao 	FACTOR(CLK_TOP_MAINPLL_D9, "mainpll_d9", "mainpll", 1, 9),
215*895ab013SLaura Nao 	FACTOR(CLK_TOP_UNIVPLL_D4, "univpll_d4", "univpll", 1, 4),
216*895ab013SLaura Nao 	FACTOR(CLK_TOP_UNIVPLL_D4_D2, "univpll_d4_d2", "univpll", 1, 8),
217*895ab013SLaura Nao 	FACTOR(CLK_TOP_UNIVPLL_D4_D4, "univpll_d4_d4", "univpll", 1, 16),
218*895ab013SLaura Nao 	FACTOR(CLK_TOP_UNIVPLL_D4_D8, "univpll_d4_d8", "univpll", 1, 32),
219*895ab013SLaura Nao 	FACTOR(CLK_TOP_UNIVPLL_D5, "univpll_d5", "univpll", 1, 5),
220*895ab013SLaura Nao 	FACTOR(CLK_TOP_UNIVPLL_D5_D2, "univpll_d5_d2", "univpll", 1, 10),
221*895ab013SLaura Nao 	FACTOR(CLK_TOP_UNIVPLL_D5_D4, "univpll_d5_d4", "univpll", 1, 20),
222*895ab013SLaura Nao 	FACTOR(CLK_TOP_UNIVPLL_D6, "univpll_d6", "univpll", 1, 6),
223*895ab013SLaura Nao 	FACTOR(CLK_TOP_UNIVPLL_D6_D2, "univpll_d6_d2", "univpll", 1, 12),
224*895ab013SLaura Nao 	FACTOR(CLK_TOP_UNIVPLL_D6_D4, "univpll_d6_d4", "univpll", 1, 24),
225*895ab013SLaura Nao 	FACTOR(CLK_TOP_UNIVPLL_D6_D8, "univpll_d6_d8", "univpll", 1, 48),
226*895ab013SLaura Nao 	FACTOR(CLK_TOP_UNIVPLL_D6_D16, "univpll_d6_d16", "univpll", 1, 96),
227*895ab013SLaura Nao 	FACTOR(CLK_TOP_UNIVPLL_192M, "univpll_192m", "univpll", 1, 13),
228*895ab013SLaura Nao 	FACTOR(CLK_TOP_UNIVPLL_192M_D4, "univpll_192m_d4", "univpll", 1, 52),
229*895ab013SLaura Nao 	FACTOR(CLK_TOP_UNIVPLL_192M_D8, "univpll_192m_d8", "univpll", 1, 104),
230*895ab013SLaura Nao 	FACTOR(CLK_TOP_UNIVPLL_192M_D16, "univpll_192m_d16", "univpll", 1, 208),
231*895ab013SLaura Nao 	FACTOR(CLK_TOP_UNIVPLL_192M_D32, "univpll_192m_d32", "univpll", 1, 416),
232*895ab013SLaura Nao 	FACTOR(CLK_TOP_UNIVPLL_192M_D10, "univpll_192m_d10", "univpll", 1, 130),
233*895ab013SLaura Nao 	FACTOR(CLK_TOP_TVDPLL1_D2, "tvdpll1_d2", "tvdpll1", 1, 2),
234*895ab013SLaura Nao 	FACTOR(CLK_TOP_MSDCPLL_D2, "msdcpll_d2", "msdcpll", 1, 2),
235*895ab013SLaura Nao 	FACTOR(CLK_TOP_OSC_D2, "osc_d2", "ulposc", 1, 2),
236*895ab013SLaura Nao 	FACTOR(CLK_TOP_OSC_D3, "osc_d3", "ulposc", 1, 3),
237*895ab013SLaura Nao 	FACTOR(CLK_TOP_OSC_D4, "osc_d4", "ulposc", 1, 4),
238*895ab013SLaura Nao 	FACTOR(CLK_TOP_OSC_D5, "osc_d5", "ulposc", 1, 5),
239*895ab013SLaura Nao 	FACTOR(CLK_TOP_OSC_D7, "osc_d7", "ulposc", 1, 7),
240*895ab013SLaura Nao 	FACTOR(CLK_TOP_OSC_D8, "osc_d8", "ulposc", 1, 8),
241*895ab013SLaura Nao 	FACTOR(CLK_TOP_OSC_D10, "osc_d10", "ulposc", 1, 10),
242*895ab013SLaura Nao 	FACTOR(CLK_TOP_OSC_D14, "osc_d14", "ulposc", 1, 14),
243*895ab013SLaura Nao 	FACTOR(CLK_TOP_OSC_D20, "osc_d20", "ulposc", 1, 20),
244*895ab013SLaura Nao 	FACTOR(CLK_TOP_OSC_D32, "osc_d32", "ulposc", 1, 32),
245*895ab013SLaura Nao 	FACTOR(CLK_TOP_OSC_D40, "osc_d40", "ulposc", 1, 40),
246*895ab013SLaura Nao };
247*895ab013SLaura Nao 
248*895ab013SLaura Nao static const char * const axi_parents[] = {
249*895ab013SLaura Nao 	"clk26m",
250*895ab013SLaura Nao 	"osc_d20",
251*895ab013SLaura Nao 	"osc_d8",
252*895ab013SLaura Nao 	"osc_d4",
253*895ab013SLaura Nao 	"mainpll_d4_d4",
254*895ab013SLaura Nao 	"mainpll_d7_d2"
255*895ab013SLaura Nao };
256*895ab013SLaura Nao 
257*895ab013SLaura Nao static const char * const mem_sub_parents[] = {
258*895ab013SLaura Nao 	"clk26m",
259*895ab013SLaura Nao 	"osc_d20",
260*895ab013SLaura Nao 	"osc_d4",
261*895ab013SLaura Nao 	"univpll_d4_d4",
262*895ab013SLaura Nao 	"osc_d3",
263*895ab013SLaura Nao 	"mainpll_d5_d2",
264*895ab013SLaura Nao 	"mainpll_d4_d2",
265*895ab013SLaura Nao 	"mainpll_d6",
266*895ab013SLaura Nao 	"mainpll_d5",
267*895ab013SLaura Nao 	"univpll_d5",
268*895ab013SLaura Nao 	"mainpll_d4",
269*895ab013SLaura Nao 	"mainpll_d3"
270*895ab013SLaura Nao };
271*895ab013SLaura Nao 
272*895ab013SLaura Nao static const char * const io_noc_parents[] = {
273*895ab013SLaura Nao 	"clk26m",
274*895ab013SLaura Nao 	"osc_d20",
275*895ab013SLaura Nao 	"osc_d8",
276*895ab013SLaura Nao 	"osc_d4",
277*895ab013SLaura Nao 	"mainpll_d6_d2",
278*895ab013SLaura Nao 	"mainpll_d9"
279*895ab013SLaura Nao };
280*895ab013SLaura Nao 
281*895ab013SLaura Nao static const char * const shared_axi_parents[] = {
282*895ab013SLaura Nao 	"clk26m",
283*895ab013SLaura Nao 	"mainpll_d7_d8",
284*895ab013SLaura Nao 	"mainpll_d5_d8",
285*895ab013SLaura Nao 	"osc_d8",
286*895ab013SLaura Nao 	"mainpll_d7_d4",
287*895ab013SLaura Nao 	"mainpll_d5_d4",
288*895ab013SLaura Nao 	"mainpll_d4_d4",
289*895ab013SLaura Nao 	"mainpll_d7_d2"
290*895ab013SLaura Nao };
291*895ab013SLaura Nao 
292*895ab013SLaura Nao static const char * const shared_sub_parents[] = {
293*895ab013SLaura Nao 	"clk26m",
294*895ab013SLaura Nao 	"mainpll_d5_d8",
295*895ab013SLaura Nao 	"mainpll_d5_d4",
296*895ab013SLaura Nao 	"osc_d4",
297*895ab013SLaura Nao 	"univpll_d4_d4",
298*895ab013SLaura Nao 	"mainpll_d5_d2",
299*895ab013SLaura Nao 	"mainpll_d4_d2",
300*895ab013SLaura Nao 	"mainpll_d6",
301*895ab013SLaura Nao 	"mainpll_d5",
302*895ab013SLaura Nao 	"univpll_d5",
303*895ab013SLaura Nao 	"mainpll_d4"
304*895ab013SLaura Nao };
305*895ab013SLaura Nao 
306*895ab013SLaura Nao static const char * const p_noc_parents[] = {
307*895ab013SLaura Nao 	"clk26m",
308*895ab013SLaura Nao 	"mainpll_d5_d8",
309*895ab013SLaura Nao 	"mainpll_d5_d4",
310*895ab013SLaura Nao 	"osc_d4",
311*895ab013SLaura Nao 	"univpll_d4_d4",
312*895ab013SLaura Nao 	"mainpll_d5_d2",
313*895ab013SLaura Nao 	"mainpll_d4_d2",
314*895ab013SLaura Nao 	"mainpll_d6",
315*895ab013SLaura Nao 	"mainpll_d5",
316*895ab013SLaura Nao 	"univpll_d5",
317*895ab013SLaura Nao 	"mainpll_d4",
318*895ab013SLaura Nao 	"mainpll_d3"
319*895ab013SLaura Nao };
320*895ab013SLaura Nao 
321*895ab013SLaura Nao static const char * const emi_parents[] = {
322*895ab013SLaura Nao 	"clk26m",
323*895ab013SLaura Nao 	"osc_d4",
324*895ab013SLaura Nao 	"mainpll_d5_d8",
325*895ab013SLaura Nao 	"mainpll_d5_d4",
326*895ab013SLaura Nao 	"mainpll_d4_d4",
327*895ab013SLaura Nao 	"emipll1_ck"
328*895ab013SLaura Nao };
329*895ab013SLaura Nao 
330*895ab013SLaura Nao static const char * const ap2conn_host_parents[] = {
331*895ab013SLaura Nao 	"clk26m",
332*895ab013SLaura Nao 	"mainpll_d7_d4"
333*895ab013SLaura Nao };
334*895ab013SLaura Nao 
335*895ab013SLaura Nao static const char * const atb_parents[] = {
336*895ab013SLaura Nao 	"clk26m",
337*895ab013SLaura Nao 	"mainpll_d5_d2",
338*895ab013SLaura Nao 	"mainpll_d4_d2",
339*895ab013SLaura Nao 	"mainpll_d6"
340*895ab013SLaura Nao };
341*895ab013SLaura Nao 
342*895ab013SLaura Nao static const char * const cirq_parents[] = {
343*895ab013SLaura Nao 	"clk26m",
344*895ab013SLaura Nao 	"osc_d20",
345*895ab013SLaura Nao 	"mainpll_d7_d4"
346*895ab013SLaura Nao };
347*895ab013SLaura Nao 
348*895ab013SLaura Nao static const char * const pbus_156m_parents[] = {
349*895ab013SLaura Nao 	"clk26m",
350*895ab013SLaura Nao 	"mainpll_d7_d2",
351*895ab013SLaura Nao 	"osc_d2",
352*895ab013SLaura Nao 	"mainpll_d7"
353*895ab013SLaura Nao };
354*895ab013SLaura Nao 
355*895ab013SLaura Nao static const char * const efuse_parents[] = {
356*895ab013SLaura Nao 	"clk26m",
357*895ab013SLaura Nao 	"osc_d20"
358*895ab013SLaura Nao };
359*895ab013SLaura Nao 
360*895ab013SLaura Nao static const char * const mcu_l3gic_parents[] = {
361*895ab013SLaura Nao 	"clk26m",
362*895ab013SLaura Nao 	"osc_d8",
363*895ab013SLaura Nao 	"mainpll_d4_d4",
364*895ab013SLaura Nao 	"mainpll_d7_d2"
365*895ab013SLaura Nao };
366*895ab013SLaura Nao 
367*895ab013SLaura Nao static const char * const mcu_infra_parents[] = {
368*895ab013SLaura Nao 	"clk26m",
369*895ab013SLaura Nao 	"osc_d20",
370*895ab013SLaura Nao 	"mainpll_d7_d2",
371*895ab013SLaura Nao 	"mainpll_d5_d2",
372*895ab013SLaura Nao 	"mainpll_d4_d2",
373*895ab013SLaura Nao 	"mainpll_d9",
374*895ab013SLaura Nao 	"mainpll_d6"
375*895ab013SLaura Nao };
376*895ab013SLaura Nao 
377*895ab013SLaura Nao static const char * const dsp_parents[] = {
378*895ab013SLaura Nao 	"clk26m",
379*895ab013SLaura Nao 	"osc_d5",
380*895ab013SLaura Nao 	"osc_d4",
381*895ab013SLaura Nao 	"osc_d3",
382*895ab013SLaura Nao 	"univpll_d6_d2",
383*895ab013SLaura Nao 	"osc_d2",
384*895ab013SLaura Nao 	"univpll_d5",
385*895ab013SLaura Nao 	"osc"
386*895ab013SLaura Nao };
387*895ab013SLaura Nao 
388*895ab013SLaura Nao static const char * const mfg_ref_parents[] = {
389*895ab013SLaura Nao 	"clk26m",
390*895ab013SLaura Nao 	"mainpll_d7_d2"
391*895ab013SLaura Nao };
392*895ab013SLaura Nao 
393*895ab013SLaura Nao static const char * const mfg_eb_parents[] = {
394*895ab013SLaura Nao 	"clk26m",
395*895ab013SLaura Nao 	"mainpll_d7_d2",
396*895ab013SLaura Nao 	"mainpll_d6_d2",
397*895ab013SLaura Nao 	"mainpll_d5_d2"
398*895ab013SLaura Nao };
399*895ab013SLaura Nao 
400*895ab013SLaura Nao static const char * const uart_parents[] = {
401*895ab013SLaura Nao 	"clk26m",
402*895ab013SLaura Nao 	"univpll_d6_d8",
403*895ab013SLaura Nao 	"univpll_d6_d4",
404*895ab013SLaura Nao 	"univpll_d6_d2"
405*895ab013SLaura Nao };
406*895ab013SLaura Nao 
407*895ab013SLaura Nao static const char * const spi_b_parents[] = {
408*895ab013SLaura Nao 	"clk26m",
409*895ab013SLaura Nao 	"univpll_d6_d4",
410*895ab013SLaura Nao 	"univpll_d5_d4",
411*895ab013SLaura Nao 	"mainpll_d4_d4",
412*895ab013SLaura Nao 	"univpll_d4_d4",
413*895ab013SLaura Nao 	"mainpll_d6_d2",
414*895ab013SLaura Nao 	"univpll_192m",
415*895ab013SLaura Nao 	"univpll_d6_d2"
416*895ab013SLaura Nao };
417*895ab013SLaura Nao 
418*895ab013SLaura Nao static const char * const msdc30_parents[] = {
419*895ab013SLaura Nao 	"clk26m",
420*895ab013SLaura Nao 	"univpll_d6_d4",
421*895ab013SLaura Nao 	"mainpll_d6_d2",
422*895ab013SLaura Nao 	"univpll_d6_d2",
423*895ab013SLaura Nao 	"msdcpll_d2"
424*895ab013SLaura Nao };
425*895ab013SLaura Nao 
426*895ab013SLaura Nao static const char * const disp_pwm_parents[] = {
427*895ab013SLaura Nao 	"clk26m",
428*895ab013SLaura Nao 	"osc_d32",
429*895ab013SLaura Nao 	"osc_d8",
430*895ab013SLaura Nao 	"univpll_d6_d4",
431*895ab013SLaura Nao 	"univpll_d5_d4",
432*895ab013SLaura Nao 	"osc_d4",
433*895ab013SLaura Nao 	"mainpll_d4_d4"
434*895ab013SLaura Nao };
435*895ab013SLaura Nao 
436*895ab013SLaura Nao static const char * const usb_1p_parents[] = {
437*895ab013SLaura Nao 	"clk26m",
438*895ab013SLaura Nao 	"univpll_d5_d4"
439*895ab013SLaura Nao };
440*895ab013SLaura Nao 
441*895ab013SLaura Nao static const char * const usb_fmcnt_p1_parents[] = {
442*895ab013SLaura Nao 	"clk26m",
443*895ab013SLaura Nao 	"univpll_192m_d4"
444*895ab013SLaura Nao };
445*895ab013SLaura Nao 
446*895ab013SLaura Nao static const char * const i2c_parents[] = {
447*895ab013SLaura Nao 	"clk26m",
448*895ab013SLaura Nao 	"mainpll_d4_d8",
449*895ab013SLaura Nao 	"univpll_d5_d4",
450*895ab013SLaura Nao 	"mainpll_d4_d4",
451*895ab013SLaura Nao 	"univpll_d5_d2"
452*895ab013SLaura Nao };
453*895ab013SLaura Nao 
454*895ab013SLaura Nao static const char * const aes_ufsfde_parents[] = {
455*895ab013SLaura Nao 	"clk26m",
456*895ab013SLaura Nao 	"mainpll_d4_d4",
457*895ab013SLaura Nao 	"univpll_d6_d2",
458*895ab013SLaura Nao 	"mainpll_d4_d2",
459*895ab013SLaura Nao 	"univpll_d6",
460*895ab013SLaura Nao 	"mainpll_d4"
461*895ab013SLaura Nao };
462*895ab013SLaura Nao 
463*895ab013SLaura Nao static const char * const ufs_parents[] = {
464*895ab013SLaura Nao 	"clk26m",
465*895ab013SLaura Nao 	"mainpll_d4_d4",
466*895ab013SLaura Nao 	"univpll_d6_d2",
467*895ab013SLaura Nao 	"mainpll_d4_d2",
468*895ab013SLaura Nao 	"univpll_d6",
469*895ab013SLaura Nao 	"mainpll_d5",
470*895ab013SLaura Nao 	"univpll_d5"
471*895ab013SLaura Nao };
472*895ab013SLaura Nao 
473*895ab013SLaura Nao static const char * const aud_1_parents[] = {
474*895ab013SLaura Nao 	"clk26m",
475*895ab013SLaura Nao 	"vlp_apll1"
476*895ab013SLaura Nao };
477*895ab013SLaura Nao 
478*895ab013SLaura Nao static const char * const aud_2_parents[] = {
479*895ab013SLaura Nao 	"clk26m",
480*895ab013SLaura Nao 	"vlp_apll2"
481*895ab013SLaura Nao };
482*895ab013SLaura Nao 
483*895ab013SLaura Nao static const char * const adsp_parents[] = {
484*895ab013SLaura Nao 	"clk26m",
485*895ab013SLaura Nao 	"adsppll"
486*895ab013SLaura Nao };
487*895ab013SLaura Nao 
488*895ab013SLaura Nao static const char * const adsp_uarthub_b_parents[] = {
489*895ab013SLaura Nao 	"clk26m",
490*895ab013SLaura Nao 	"univpll_d6_d4",
491*895ab013SLaura Nao 	"univpll_d6_d2"
492*895ab013SLaura Nao };
493*895ab013SLaura Nao 
494*895ab013SLaura Nao static const char * const dpmaif_main_parents[] = {
495*895ab013SLaura Nao 	"clk26m",
496*895ab013SLaura Nao 	"univpll_d4_d4",
497*895ab013SLaura Nao 	"univpll_d5_d2",
498*895ab013SLaura Nao 	"mainpll_d4_d2",
499*895ab013SLaura Nao 	"univpll_d4_d2",
500*895ab013SLaura Nao 	"mainpll_d6",
501*895ab013SLaura Nao 	"univpll_d6",
502*895ab013SLaura Nao 	"mainpll_d5",
503*895ab013SLaura Nao 	"univpll_d5"
504*895ab013SLaura Nao };
505*895ab013SLaura Nao 
506*895ab013SLaura Nao static const char * const pwm_parents[] = {
507*895ab013SLaura Nao 	"clk26m",
508*895ab013SLaura Nao 	"mainpll_d7_d4",
509*895ab013SLaura Nao 	"univpll_d4_d8"
510*895ab013SLaura Nao };
511*895ab013SLaura Nao 
512*895ab013SLaura Nao static const char * const mcupm_parents[] = {
513*895ab013SLaura Nao 	"clk26m",
514*895ab013SLaura Nao 	"mainpll_d7_d2",
515*895ab013SLaura Nao 	"mainpll_d6_d2",
516*895ab013SLaura Nao 	"univpll_d6_d2",
517*895ab013SLaura Nao 	"mainpll_d5_d2"
518*895ab013SLaura Nao };
519*895ab013SLaura Nao 
520*895ab013SLaura Nao static const char * const ipseast_parents[] = {
521*895ab013SLaura Nao 	"clk26m",
522*895ab013SLaura Nao 	"mainpll_d6",
523*895ab013SLaura Nao 	"mainpll_d5",
524*895ab013SLaura Nao 	"mainpll_d4",
525*895ab013SLaura Nao 	"mainpll_d3"
526*895ab013SLaura Nao };
527*895ab013SLaura Nao 
528*895ab013SLaura Nao static const char * const tl_parents[] = {
529*895ab013SLaura Nao 	"clk26m",
530*895ab013SLaura Nao 	"mainpll_d7_d4",
531*895ab013SLaura Nao 	"mainpll_d4_d4",
532*895ab013SLaura Nao 	"mainpll_d5_d2"
533*895ab013SLaura Nao };
534*895ab013SLaura Nao 
535*895ab013SLaura Nao static const char * const md_emi_parents[] = {
536*895ab013SLaura Nao 	"clk26m",
537*895ab013SLaura Nao 	"mainpll_d4"
538*895ab013SLaura Nao };
539*895ab013SLaura Nao 
540*895ab013SLaura Nao static const char * const sdf_parents[] = {
541*895ab013SLaura Nao 	"clk26m",
542*895ab013SLaura Nao 	"mainpll_d5_d2",
543*895ab013SLaura Nao 	"mainpll_d4_d2",
544*895ab013SLaura Nao 	"mainpll_d6",
545*895ab013SLaura Nao 	"mainpll_d4",
546*895ab013SLaura Nao 	"univpll_d4"
547*895ab013SLaura Nao };
548*895ab013SLaura Nao 
549*895ab013SLaura Nao static const char * const uarthub_b_parents[] = {
550*895ab013SLaura Nao 	"clk26m",
551*895ab013SLaura Nao 	"univpll_d6_d4",
552*895ab013SLaura Nao 	"univpll_d6_d2"
553*895ab013SLaura Nao };
554*895ab013SLaura Nao 
555*895ab013SLaura Nao static const char * const dpsw_cmp_26m_parents[] = {
556*895ab013SLaura Nao 	"clk26m",
557*895ab013SLaura Nao 	"osc_d20"
558*895ab013SLaura Nao };
559*895ab013SLaura Nao 
560*895ab013SLaura Nao static const char * const smapparents[] = {
561*895ab013SLaura Nao 	"clk26m",
562*895ab013SLaura Nao 	"mainpll_d4_d8"
563*895ab013SLaura Nao };
564*895ab013SLaura Nao 
565*895ab013SLaura Nao static const char * const ssr_parents[] = {
566*895ab013SLaura Nao 	"clk26m",
567*895ab013SLaura Nao 	"mainpll_d4_d4",
568*895ab013SLaura Nao 	"mainpll_d4_d2",
569*895ab013SLaura Nao 	"mainpll_d7",
570*895ab013SLaura Nao 	"mainpll_d6",
571*895ab013SLaura Nao 	"mainpll_d5"
572*895ab013SLaura Nao };
573*895ab013SLaura Nao 
574*895ab013SLaura Nao static const char * const ssr_kdf_parents[] = {
575*895ab013SLaura Nao 	"clk26m",
576*895ab013SLaura Nao 	"mainpll_d4_d4",
577*895ab013SLaura Nao 	"mainpll_d4_d2",
578*895ab013SLaura Nao 	"mainpll_d7"
579*895ab013SLaura Nao };
580*895ab013SLaura Nao 
581*895ab013SLaura Nao static const char * const ssr_rng_parents[] = {
582*895ab013SLaura Nao 	"clk26m",
583*895ab013SLaura Nao 	"mainpll_d4_d4",
584*895ab013SLaura Nao 	"mainpll_d5_d2",
585*895ab013SLaura Nao 	"mainpll_d4_d2"
586*895ab013SLaura Nao };
587*895ab013SLaura Nao 
588*895ab013SLaura Nao static const char * const spu_parents[] = {
589*895ab013SLaura Nao 	"clk26m",
590*895ab013SLaura Nao 	"mainpll_d4_d4",
591*895ab013SLaura Nao 	"mainpll_d4_d2",
592*895ab013SLaura Nao 	"mainpll_d7",
593*895ab013SLaura Nao 	"mainpll_d6",
594*895ab013SLaura Nao 	"mainpll_d5"
595*895ab013SLaura Nao };
596*895ab013SLaura Nao 
597*895ab013SLaura Nao static const char * const dxcc_parents[] = {
598*895ab013SLaura Nao 	"clk26m",
599*895ab013SLaura Nao 	"mainpll_d4_d8",
600*895ab013SLaura Nao 	"mainpll_d4_d4",
601*895ab013SLaura Nao 	"mainpll_d4_d2"
602*895ab013SLaura Nao };
603*895ab013SLaura Nao 
604*895ab013SLaura Nao static const char * const apll_m_parents[] = {
605*895ab013SLaura Nao 	"aud_1",
606*895ab013SLaura Nao 	"aud_2"
607*895ab013SLaura Nao };
608*895ab013SLaura Nao 
609*895ab013SLaura Nao static const char * const sflash_parents[] = {
610*895ab013SLaura Nao 	"clk26m",
611*895ab013SLaura Nao 	"mainpll_d7_d8",
612*895ab013SLaura Nao 	"univpll_d6_d8"
613*895ab013SLaura Nao };
614*895ab013SLaura Nao 
615*895ab013SLaura Nao static const struct mtk_mux top_muxes[] = {
616*895ab013SLaura Nao 	/* CLK_CFG_0 */
617*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_AXI, "axi",
618*895ab013SLaura Nao 		axi_parents, CLK_CFG_0, CLK_CFG_0_SET,
619*895ab013SLaura Nao 		CLK_CFG_0_CLR, 0, 3,
620*895ab013SLaura Nao 		CLK_CFG_UPDATE, TOP_MUX_AXI_SHIFT),
621*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_MEM_SUB, "mem_sub",
622*895ab013SLaura Nao 		mem_sub_parents, CLK_CFG_0, CLK_CFG_0_SET,
623*895ab013SLaura Nao 		CLK_CFG_0_CLR, 8, 4,
624*895ab013SLaura Nao 		CLK_CFG_UPDATE, TOP_MUX_MEM_SUB_SHIFT),
625*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_IO_NOC, "io_noc",
626*895ab013SLaura Nao 		io_noc_parents, CLK_CFG_0, CLK_CFG_0_SET,
627*895ab013SLaura Nao 		CLK_CFG_0_CLR, 16, 3,
628*895ab013SLaura Nao 		CLK_CFG_UPDATE, TOP_MUX_IO_NOC_SHIFT),
629*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_P_AXI, "p_axi",
630*895ab013SLaura Nao 		shared_axi_parents, CLK_CFG_0, CLK_CFG_0_SET,
631*895ab013SLaura Nao 		CLK_CFG_0_CLR, 24, 3,
632*895ab013SLaura Nao 		CLK_CFG_UPDATE, TOP_MUX_PERI_AXI_SHIFT),
633*895ab013SLaura Nao 	/* CLK_CFG_1 */
634*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_UFS_PEXTP0_AXI, "ufs_pextp0_axi",
635*895ab013SLaura Nao 		shared_axi_parents, CLK_CFG_1, CLK_CFG_1_SET,
636*895ab013SLaura Nao 		CLK_CFG_1_CLR, 0, 3,
637*895ab013SLaura Nao 		CLK_CFG_UPDATE, TOP_MUX_UFS_PEXTP0_AXI_SHIFT),
638*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_PEXTP1_USB_AXI, "pextp1_usb_axi",
639*895ab013SLaura Nao 		shared_axi_parents, CLK_CFG_1, CLK_CFG_1_SET,
640*895ab013SLaura Nao 		CLK_CFG_1_CLR, 8, 3,
641*895ab013SLaura Nao 		CLK_CFG_UPDATE, TOP_MUX_PEXTP1_USB_AXI_SHIFT),
642*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_P_FMEM_SUB, "p_fmem_sub",
643*895ab013SLaura Nao 		shared_sub_parents, CLK_CFG_1, CLK_CFG_1_SET,
644*895ab013SLaura Nao 		CLK_CFG_1_CLR, 16, 4,
645*895ab013SLaura Nao 		CLK_CFG_UPDATE, TOP_MUX_PERI_FMEM_SUB_SHIFT),
646*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_PEXPT0_MEM_SUB, "ufs_pexpt0_mem_sub",
647*895ab013SLaura Nao 		shared_sub_parents, CLK_CFG_1, CLK_CFG_1_SET,
648*895ab013SLaura Nao 		CLK_CFG_1_CLR, 24, 4,
649*895ab013SLaura Nao 		CLK_CFG_UPDATE, TOP_MUX_UFS_PEXPT0_MEM_SUB_SHIFT),
650*895ab013SLaura Nao 	/* CLK_CFG_2 */
651*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_PEXTP1_USB_MEM_SUB, "pextp1_usb_mem_sub",
652*895ab013SLaura Nao 		shared_sub_parents, CLK_CFG_2, CLK_CFG_2_SET,
653*895ab013SLaura Nao 		CLK_CFG_2_CLR, 0, 4,
654*895ab013SLaura Nao 		CLK_CFG_UPDATE, TOP_MUX_PEXTP1_USB_MEM_SUB_SHIFT),
655*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_P_NOC, "p_noc",
656*895ab013SLaura Nao 		p_noc_parents, CLK_CFG_2, CLK_CFG_2_SET,
657*895ab013SLaura Nao 		CLK_CFG_2_CLR, 8, 4,
658*895ab013SLaura Nao 		CLK_CFG_UPDATE, TOP_MUX_PERI_NOC_SHIFT),
659*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_EMI_N, "emi_n",
660*895ab013SLaura Nao 		emi_parents, CLK_CFG_2, CLK_CFG_2_SET,
661*895ab013SLaura Nao 		CLK_CFG_2_CLR, 16, 3,
662*895ab013SLaura Nao 		CLK_CFG_UPDATE, TOP_MUX_EMI_N_SHIFT),
663*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_EMI_S, "emi_s",
664*895ab013SLaura Nao 		emi_parents, CLK_CFG_2, CLK_CFG_2_SET,
665*895ab013SLaura Nao 		CLK_CFG_2_CLR, 24, 3,
666*895ab013SLaura Nao 		CLK_CFG_UPDATE, TOP_MUX_EMI_S_SHIFT),
667*895ab013SLaura Nao 	/* CLK_CFG_3 */
668*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_AP2CONN_HOST, "ap2conn_host",
669*895ab013SLaura Nao 		ap2conn_host_parents, CLK_CFG_3, CLK_CFG_3_SET,
670*895ab013SLaura Nao 		CLK_CFG_3_CLR, 16, 1,
671*895ab013SLaura Nao 		CLK_CFG_UPDATE, TOP_MUX_AP2CONN_HOST_SHIFT),
672*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_ATB, "atb",
673*895ab013SLaura Nao 		atb_parents, CLK_CFG_3, CLK_CFG_3_SET,
674*895ab013SLaura Nao 		CLK_CFG_3_CLR, 24, 2,
675*895ab013SLaura Nao 		CLK_CFG_UPDATE, TOP_MUX_ATB_SHIFT),
676*895ab013SLaura Nao 	/* CLK_CFG_4 */
677*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_CIRQ, "cirq",
678*895ab013SLaura Nao 		cirq_parents, CLK_CFG_4, CLK_CFG_4_SET,
679*895ab013SLaura Nao 		CLK_CFG_4_CLR, 0, 2,
680*895ab013SLaura Nao 		CLK_CFG_UPDATE, TOP_MUX_CIRQ_SHIFT),
681*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_PBUS_156M, "pbus_156m",
682*895ab013SLaura Nao 		pbus_156m_parents, CLK_CFG_4, CLK_CFG_4_SET,
683*895ab013SLaura Nao 		CLK_CFG_4_CLR, 8, 2,
684*895ab013SLaura Nao 		CLK_CFG_UPDATE, TOP_MUX_PBUS_156M_SHIFT),
685*895ab013SLaura Nao 	/* CLK_CFG_5 */
686*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_EFUSE, "efuse",
687*895ab013SLaura Nao 		efuse_parents, CLK_CFG_5, CLK_CFG_5_SET,
688*895ab013SLaura Nao 		CLK_CFG_5_CLR, 0, 1,
689*895ab013SLaura Nao 		CLK_CFG_UPDATE, TOP_MUX_EFUSE_SHIFT),
690*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_MCL3GIC, "mcu_l3gic",
691*895ab013SLaura Nao 		mcu_l3gic_parents, CLK_CFG_5, CLK_CFG_5_SET,
692*895ab013SLaura Nao 		CLK_CFG_5_CLR, 8, 2,
693*895ab013SLaura Nao 		CLK_CFG_UPDATE, TOP_MUX_MCU_L3GIC_SHIFT),
694*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_MCINFRA, "mcu_infra",
695*895ab013SLaura Nao 		mcu_infra_parents, CLK_CFG_5, CLK_CFG_5_SET,
696*895ab013SLaura Nao 		CLK_CFG_5_CLR, 16, 3,
697*895ab013SLaura Nao 		CLK_CFG_UPDATE, TOP_MUX_MCU_INFRA_SHIFT),
698*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_DSP, "dsp",
699*895ab013SLaura Nao 		dsp_parents, CLK_CFG_5, CLK_CFG_5_SET,
700*895ab013SLaura Nao 		CLK_CFG_5_CLR, 24, 3,
701*895ab013SLaura Nao 		CLK_CFG_UPDATE, TOP_MUX_DSP_SHIFT),
702*895ab013SLaura Nao 	/* CLK_CFG_6 */
703*895ab013SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD_FLAGS(CLK_TOP_MFG_REF, "mfg_ref", mfg_ref_parents,
704*895ab013SLaura Nao 		NULL, ARRAY_SIZE(mfg_ref_parents),
705*895ab013SLaura Nao 		CLK_CFG_6, CLK_CFG_6_SET, CLK_CFG_6_CLR,
706*895ab013SLaura Nao 		0, 1, 7, CLK_CFG_UPDATE, TOP_MUX_MFG_REF_SHIFT,
707*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_0, 7, CLK_IGNORE_UNUSED),
708*895ab013SLaura Nao 	MUX_GATE_CLR_SET_UPD(CLK_TOP_MFG_EB, "mfg_eb",
709*895ab013SLaura Nao 		mfg_eb_parents, CLK_CFG_6, CLK_CFG_6_SET,
710*895ab013SLaura Nao 		CLK_CFG_6_CLR, 16, 2,
711*895ab013SLaura Nao 		23, CLK_CFG_UPDATE, TOP_MUX_MFG_EB_SHIFT),
712*895ab013SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP_UART, "uart", uart_parents,
713*895ab013SLaura Nao 		CLK_CFG_6, CLK_CFG_6_SET, CLK_CFG_6_CLR,
714*895ab013SLaura Nao 		HWV_CG_3_DONE, HWV_CG_3_SET, HWV_CG_3_CLR,
715*895ab013SLaura Nao 		24, 2, 31, CLK_CFG_UPDATE, TOP_MUX_UART_SHIFT,
716*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_0, 4),
717*895ab013SLaura Nao 	/* CLK_CFG_7 */
718*895ab013SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP_SPI0_BCLK, "spi0_b", spi_b_parents,
719*895ab013SLaura Nao 		CLK_CFG_7, CLK_CFG_7_SET, CLK_CFG_7_CLR,
720*895ab013SLaura Nao 		HWV_CG_4_DONE, HWV_CG_4_SET, HWV_CG_4_CLR,
721*895ab013SLaura Nao 		0, 3, 7, CLK_CFG_UPDATE, TOP_MUX_SPI0_BCLK_SHIFT,
722*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_0, 3),
723*895ab013SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP_SPI1_BCLK, "spi1_b", spi_b_parents,
724*895ab013SLaura Nao 		CLK_CFG_7, CLK_CFG_7_SET, CLK_CFG_7_CLR,
725*895ab013SLaura Nao 		HWV_CG_4_DONE, HWV_CG_4_SET, HWV_CG_4_CLR,
726*895ab013SLaura Nao 		8, 3, 15, CLK_CFG_UPDATE, TOP_MUX_SPI1_BCLK_SHIFT,
727*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_0, 2),
728*895ab013SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP_SPI2_BCLK, "spi2_b", spi_b_parents,
729*895ab013SLaura Nao 		CLK_CFG_7, CLK_CFG_7_SET, CLK_CFG_7_CLR,
730*895ab013SLaura Nao 		HWV_CG_4_DONE, HWV_CG_4_SET, HWV_CG_4_CLR,
731*895ab013SLaura Nao 		16, 3, 23, CLK_CFG_UPDATE, TOP_MUX_SPI2_BCLK_SHIFT,
732*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_0, 1),
733*895ab013SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP_SPI3_BCLK, "spi3_b", spi_b_parents,
734*895ab013SLaura Nao 		CLK_CFG_7, CLK_CFG_7_SET, CLK_CFG_7_CLR,
735*895ab013SLaura Nao 		HWV_CG_4_DONE, HWV_CG_4_SET, HWV_CG_4_CLR,
736*895ab013SLaura Nao 		24, 3, 31, CLK_CFG_UPDATE1, TOP_MUX_SPI3_BCLK_SHIFT,
737*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_0, 0),
738*895ab013SLaura Nao 	/* CLK_CFG_8 */
739*895ab013SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP_SPI4_BCLK, "spi4_b", spi_b_parents,
740*895ab013SLaura Nao 		CLK_CFG_8, CLK_CFG_8_SET, CLK_CFG_8_CLR,
741*895ab013SLaura Nao 		HWV_CG_5_DONE, HWV_CG_5_SET, HWV_CG_5_CLR,
742*895ab013SLaura Nao 		0, 3, 7, CLK_CFG_UPDATE1, TOP_MUX_SPI4_BCLK_SHIFT,
743*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 31),
744*895ab013SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP_SPI5_BCLK, "spi5_b", spi_b_parents,
745*895ab013SLaura Nao 		CLK_CFG_8, CLK_CFG_8_SET, CLK_CFG_8_CLR,
746*895ab013SLaura Nao 		HWV_CG_5_DONE, HWV_CG_5_SET, HWV_CG_5_CLR,
747*895ab013SLaura Nao 		8, 3, 15, CLK_CFG_UPDATE1, TOP_MUX_SPI5_BCLK_SHIFT,
748*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 30),
749*895ab013SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP_SPI6_BCLK, "spi6_b", spi_b_parents,
750*895ab013SLaura Nao 		CLK_CFG_8, CLK_CFG_8_SET, CLK_CFG_8_CLR,
751*895ab013SLaura Nao 		HWV_CG_5_DONE, HWV_CG_5_SET, HWV_CG_5_CLR,
752*895ab013SLaura Nao 		16, 3, 23, CLK_CFG_UPDATE1, TOP_MUX_SPI6_BCLK_SHIFT,
753*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 29),
754*895ab013SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP_SPI7_BCLK, "spi7_b", spi_b_parents,
755*895ab013SLaura Nao 		CLK_CFG_8, CLK_CFG_8_SET, CLK_CFG_8_CLR,
756*895ab013SLaura Nao 		HWV_CG_5_DONE, HWV_CG_5_SET, HWV_CG_5_CLR,
757*895ab013SLaura Nao 		24, 3, 31, CLK_CFG_UPDATE1, TOP_MUX_SPI7_BCLK_SHIFT,
758*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 28),
759*895ab013SLaura Nao 	/* CLK_CFG_9 */
760*895ab013SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_MSDC30_1, "msdc30_1", msdc30_parents,
761*895ab013SLaura Nao 		CLK_CFG_9, CLK_CFG_9_SET, CLK_CFG_9_CLR,
762*895ab013SLaura Nao 		16, 3, 23, CLK_CFG_UPDATE1, TOP_MUX_MSDC30_1_SHIFT,
763*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 25),
764*895ab013SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_MSDC30_2, "msdc30_2", msdc30_parents,
765*895ab013SLaura Nao 		CLK_CFG_9, CLK_CFG_9_SET, CLK_CFG_9_CLR,
766*895ab013SLaura Nao 		24, 3, 31, CLK_CFG_UPDATE1, TOP_MUX_MSDC30_2_SHIFT,
767*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 24),
768*895ab013SLaura Nao 	/* CLK_CFG_10 */
769*895ab013SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_DISP_PWM, "disp_pwm", disp_pwm_parents,
770*895ab013SLaura Nao 		CLK_CFG_10, CLK_CFG_10_SET, CLK_CFG_10_CLR,
771*895ab013SLaura Nao 		0, 3, 7, CLK_CFG_UPDATE1, TOP_MUX_DISP_PWM_SHIFT,
772*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 23),
773*895ab013SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_USB_TOP_1P, "usb_1p", usb_1p_parents,
774*895ab013SLaura Nao 		CLK_CFG_10, CLK_CFG_10_SET, CLK_CFG_10_CLR,
775*895ab013SLaura Nao 		8, 1, 15, CLK_CFG_UPDATE1, TOP_MUX_USB_TOP_1P_SHIFT,
776*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 22),
777*895ab013SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_USB_XHCI_1P, "usb_xhci_1p", usb_1p_parents,
778*895ab013SLaura Nao 		CLK_CFG_10, CLK_CFG_10_SET, CLK_CFG_10_CLR,
779*895ab013SLaura Nao 		16, 1, 23, CLK_CFG_UPDATE1, TOP_MUX_SSUSB_XHCI_1P_SHIFT,
780*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 21),
781*895ab013SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_USB_FMCNT_P1, "usb_fmcnt_p1", usb_fmcnt_p1_parents,
782*895ab013SLaura Nao 		CLK_CFG_10, CLK_CFG_10_SET, CLK_CFG_10_CLR,
783*895ab013SLaura Nao 		24, 1, 31, CLK_CFG_UPDATE1, TOP_MUX_SSUSB_FMCNT_P1_SHIFT,
784*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 20),
785*895ab013SLaura Nao 	/* CLK_CFG_11 */
786*895ab013SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_I2C_P, "i2c_p", i2c_parents,
787*895ab013SLaura Nao 		CLK_CFG_11, CLK_CFG_11_SET, CLK_CFG_11_CLR,
788*895ab013SLaura Nao 		0, 3, 7, CLK_CFG_UPDATE1, TOP_MUX_I2C_PERI_SHIFT,
789*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 19),
790*895ab013SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_I2C_EAST, "i2c_east", i2c_parents,
791*895ab013SLaura Nao 		CLK_CFG_11, CLK_CFG_11_SET, CLK_CFG_11_CLR,
792*895ab013SLaura Nao 		8, 3, 15, CLK_CFG_UPDATE1, TOP_MUX_I2C_EAST_SHIFT,
793*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 18),
794*895ab013SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_I2C_WEST, "i2c_west", i2c_parents,
795*895ab013SLaura Nao 		CLK_CFG_11, CLK_CFG_11_SET, CLK_CFG_11_CLR,
796*895ab013SLaura Nao 		16, 3, 23, CLK_CFG_UPDATE1, TOP_MUX_I2C_WEST_SHIFT,
797*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 17),
798*895ab013SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP_I2C_NORTH, "i2c_north", i2c_parents,
799*895ab013SLaura Nao 		CLK_CFG_11, CLK_CFG_11_SET, CLK_CFG_11_CLR,
800*895ab013SLaura Nao 		HWV_CG_6_DONE, HWV_CG_6_SET, HWV_CG_6_CLR,
801*895ab013SLaura Nao 		24, 3, 31, CLK_CFG_UPDATE1, TOP_MUX_I2C_NORTH_SHIFT,
802*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 16),
803*895ab013SLaura Nao 	/* CLK_CFG_12 */
804*895ab013SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_AES_UFSFDE, "aes_ufsfde", aes_ufsfde_parents,
805*895ab013SLaura Nao 		CLK_CFG_12, CLK_CFG_12_SET, CLK_CFG_12_CLR,
806*895ab013SLaura Nao 		0, 3, 7, CLK_CFG_UPDATE1, TOP_MUX_AES_UFSFDE_SHIFT,
807*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 15),
808*895ab013SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_UFS, "ufs", ufs_parents,
809*895ab013SLaura Nao 		CLK_CFG_12, CLK_CFG_12_SET, CLK_CFG_12_CLR,
810*895ab013SLaura Nao 		8, 3, 15, CLK_CFG_UPDATE1, TOP_MUX_UFS_SHIFT,
811*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 14),
812*895ab013SLaura Nao 	/* CLK_CFG_13 */
813*895ab013SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_AUD_1, "aud_1", aud_1_parents,
814*895ab013SLaura Nao 		CLK_CFG_13, CLK_CFG_13_SET, CLK_CFG_13_CLR,
815*895ab013SLaura Nao 		0, 1, 7, CLK_CFG_UPDATE1, TOP_MUX_AUD_1_SHIFT,
816*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 11),
817*895ab013SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_AUD_2, "aud_2", aud_2_parents,
818*895ab013SLaura Nao 		CLK_CFG_13, CLK_CFG_13_SET, CLK_CFG_13_CLR,
819*895ab013SLaura Nao 		8, 1, 15, CLK_CFG_UPDATE1, TOP_MUX_AUD_2_SHIFT,
820*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 10),
821*895ab013SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_ADSP, "adsp", adsp_parents,
822*895ab013SLaura Nao 		CLK_CFG_13, CLK_CFG_13_SET, CLK_CFG_13_CLR,
823*895ab013SLaura Nao 		16, 1, 23, CLK_CFG_UPDATE1, TOP_MUX_ADSP_SHIFT,
824*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 9),
825*895ab013SLaura Nao 	MUX_GATE_CLR_SET_UPD(CLK_TOP_ADSP_UARTHUB_B, "adsp_uarthub_b",
826*895ab013SLaura Nao 		adsp_uarthub_b_parents, CLK_CFG_13, CLK_CFG_13_SET,
827*895ab013SLaura Nao 		CLK_CFG_13_CLR, 24, 2, 31,
828*895ab013SLaura Nao 		CLK_CFG_UPDATE1, TOP_MUX_ADSP_UARTHUB_B_SHIFT),
829*895ab013SLaura Nao 	/* CLK_CFG_14 */
830*895ab013SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_DPMAIF_MAIN, "dpmaif_main", dpmaif_main_parents,
831*895ab013SLaura Nao 		CLK_CFG_14, CLK_CFG_14_SET, CLK_CFG_14_CLR,
832*895ab013SLaura Nao 		0, 4, 7, CLK_CFG_UPDATE1, TOP_MUX_DPMAIF_MAIN_SHIFT,
833*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 7),
834*895ab013SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_PWM, "pwm", pwm_parents,
835*895ab013SLaura Nao 		CLK_CFG_14, CLK_CFG_14_SET, CLK_CFG_14_CLR,
836*895ab013SLaura Nao 		8, 2, 15, CLK_CFG_UPDATE1, TOP_MUX_PWM_SHIFT,
837*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 6),
838*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_MCUPM, "mcupm",
839*895ab013SLaura Nao 		mcupm_parents, CLK_CFG_14, CLK_CFG_14_SET,
840*895ab013SLaura Nao 		CLK_CFG_14_CLR, 16, 3,
841*895ab013SLaura Nao 		CLK_CFG_UPDATE1, TOP_MUX_MCUPM_SHIFT),
842*895ab013SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_SFLASH, "sflash", sflash_parents,
843*895ab013SLaura Nao 		CLK_CFG_14, CLK_CFG_14_SET, CLK_CFG_14_CLR,
844*895ab013SLaura Nao 		24, 2, 31, CLK_CFG_UPDATE1, TOP_MUX_SFLASH_SHIFT,
845*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 4),
846*895ab013SLaura Nao 	/* CLK_CFG_15 */
847*895ab013SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_IPSEAST, "ipseast", ipseast_parents,
848*895ab013SLaura Nao 		CLK_CFG_15, CLK_CFG_15_SET, CLK_CFG_15_CLR,
849*895ab013SLaura Nao 		0, 3, 7, CLK_CFG_UPDATE1, TOP_MUX_IPSEAST_SHIFT,
850*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 3),
851*895ab013SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_TL, "tl", tl_parents,
852*895ab013SLaura Nao 		CLK_CFG_15, CLK_CFG_15_SET, CLK_CFG_15_CLR,
853*895ab013SLaura Nao 		16, 2, 23, CLK_CFG_UPDATE2, TOP_MUX_TL_SHIFT,
854*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 1),
855*895ab013SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_TL_P1, "tl_p1", tl_parents,
856*895ab013SLaura Nao 		CLK_CFG_15, CLK_CFG_15_SET, CLK_CFG_15_CLR,
857*895ab013SLaura Nao 		24, 2, 31, CLK_CFG_UPDATE2, TOP_MUX_TL_P1_SHIFT,
858*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_1, 0),
859*895ab013SLaura Nao 	/* CLK_CFG_16 */
860*895ab013SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP_TL_P2, "tl_p2", tl_parents,
861*895ab013SLaura Nao 		CLK_CFG_16, CLK_CFG_16_SET, CLK_CFG_16_CLR,
862*895ab013SLaura Nao 		0, 2, 7, CLK_CFG_UPDATE2, TOP_MUX_TL_P2_SHIFT,
863*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_2, 31),
864*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_EMI_INTERFACE_546, "emi_interface_546",
865*895ab013SLaura Nao 		md_emi_parents, CLK_CFG_16, CLK_CFG_16_SET,
866*895ab013SLaura Nao 		CLK_CFG_16_CLR, 8, 1,
867*895ab013SLaura Nao 		CLK_CFG_UPDATE2, TOP_MUX_EMI_INTERFACE_546_SHIFT),
868*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_SDF, "sdf",
869*895ab013SLaura Nao 		sdf_parents, CLK_CFG_16, CLK_CFG_16_SET,
870*895ab013SLaura Nao 		CLK_CFG_16_CLR, 16, 3,
871*895ab013SLaura Nao 		CLK_CFG_UPDATE2, TOP_MUX_SDF_SHIFT),
872*895ab013SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP_UARTHUB_BCLK, "uarthub_b", uarthub_b_parents,
873*895ab013SLaura Nao 		CLK_CFG_16, CLK_CFG_16_SET, CLK_CFG_16_CLR,
874*895ab013SLaura Nao 		HWV_CG_7_DONE, HWV_CG_7_SET, HWV_CG_7_CLR,
875*895ab013SLaura Nao 		24, 2, 31, CLK_CFG_UPDATE2, TOP_MUX_UARTHUB_BCLK_SHIFT,
876*895ab013SLaura Nao 		CLK_FENC_STATUS_MON_2, 28),
877*895ab013SLaura Nao 	/* CLK_CFG_17 */
878*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_DPSW_CMP_26M, "dpsw_cmp_26m",
879*895ab013SLaura Nao 		dpsw_cmp_26m_parents, CLK_CFG_17, CLK_CFG_17_SET,
880*895ab013SLaura Nao 		CLK_CFG_17_CLR, 0, 1,
881*895ab013SLaura Nao 		CLK_CFG_UPDATE2, TOP_MUX_DPSW_CMP_26M_SHIFT),
882*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_SMAP, "smap",
883*895ab013SLaura Nao 		smapparents, CLK_CFG_17, CLK_CFG_17_SET,
884*895ab013SLaura Nao 		CLK_CFG_17_CLR, 8, 1,
885*895ab013SLaura Nao 		CLK_CFG_UPDATE2, TOP_MUX_SMAPCK_SHIFT),
886*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_SSR_PKA, "ssr_pka",
887*895ab013SLaura Nao 		ssr_parents, CLK_CFG_17, CLK_CFG_17_SET,
888*895ab013SLaura Nao 		CLK_CFG_17_CLR, 16, 3,
889*895ab013SLaura Nao 		CLK_CFG_UPDATE2, TOP_MUX_SSR_PKA_SHIFT),
890*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_SSR_DMA, "ssr_dma",
891*895ab013SLaura Nao 		ssr_parents, CLK_CFG_17, CLK_CFG_17_SET,
892*895ab013SLaura Nao 		CLK_CFG_17_CLR, 24, 3,
893*895ab013SLaura Nao 		CLK_CFG_UPDATE2, TOP_MUX_SSR_DMA_SHIFT),
894*895ab013SLaura Nao 	/* CLK_CFG_18 */
895*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_SSR_KDF, "ssr_kdf",
896*895ab013SLaura Nao 		ssr_kdf_parents, CLK_CFG_18, CLK_CFG_18_SET,
897*895ab013SLaura Nao 		CLK_CFG_18_CLR, 0, 2,
898*895ab013SLaura Nao 		CLK_CFG_UPDATE2, TOP_MUX_SSR_KDF_SHIFT),
899*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_SSR_RNG, "ssr_rng",
900*895ab013SLaura Nao 		ssr_rng_parents, CLK_CFG_18, CLK_CFG_18_SET,
901*895ab013SLaura Nao 		CLK_CFG_18_CLR, 8, 2,
902*895ab013SLaura Nao 		CLK_CFG_UPDATE2, TOP_MUX_SSR_RNG_SHIFT),
903*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_SPU0, "spu0",
904*895ab013SLaura Nao 		spu_parents, CLK_CFG_18, CLK_CFG_18_SET,
905*895ab013SLaura Nao 		CLK_CFG_18_CLR, 16, 3,
906*895ab013SLaura Nao 		CLK_CFG_UPDATE2, TOP_MUX_SPU0_SHIFT),
907*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_SPU1, "spu1",
908*895ab013SLaura Nao 		spu_parents, CLK_CFG_18, CLK_CFG_18_SET,
909*895ab013SLaura Nao 		CLK_CFG_18_CLR, 24, 3,
910*895ab013SLaura Nao 		CLK_CFG_UPDATE2, TOP_MUX_SPU1_SHIFT),
911*895ab013SLaura Nao 	/* CLK_CFG_19 */
912*895ab013SLaura Nao 	MUX_CLR_SET_UPD(CLK_TOP_DXCC, "dxcc",
913*895ab013SLaura Nao 		dxcc_parents, CLK_CFG_19, CLK_CFG_19_SET,
914*895ab013SLaura Nao 		CLK_CFG_19_CLR, 0, 2,
915*895ab013SLaura Nao 		CLK_CFG_UPDATE2, TOP_MUX_DXCC_SHIFT),
916*895ab013SLaura Nao };
917*895ab013SLaura Nao 
918*895ab013SLaura Nao static const struct mtk_composite top_aud_divs[] = {
919*895ab013SLaura Nao 	/* CLK_AUDDIV_2 */
920*895ab013SLaura Nao 	MUX_DIV_GATE(CLK_TOP_APLL_I2SIN0, "apll_i2sin0_m", apll_m_parents,
921*895ab013SLaura Nao 		CLK_AUDDIV_0, 16, 1, CLK_AUDDIV_2, 0, 8, CLK_AUDDIV_0, 0),
922*895ab013SLaura Nao 	MUX_DIV_GATE(CLK_TOP_APLL_I2SIN1, "apll_i2sin1_m", apll_m_parents,
923*895ab013SLaura Nao 		CLK_AUDDIV_0, 17, 1, CLK_AUDDIV_2, 8, 8, CLK_AUDDIV_0, 1),
924*895ab013SLaura Nao 	MUX_DIV_GATE(CLK_TOP_APLL_I2SIN2, "apll_i2sin2_m", apll_m_parents,
925*895ab013SLaura Nao 		CLK_AUDDIV_0, 18, 1, CLK_AUDDIV_2, 16, 8, CLK_AUDDIV_0, 2),
926*895ab013SLaura Nao 	MUX_DIV_GATE(CLK_TOP_APLL_I2SIN3, "apll_i2sin3_m", apll_m_parents,
927*895ab013SLaura Nao 		CLK_AUDDIV_0, 19, 1, CLK_AUDDIV_2, 24, 8, CLK_AUDDIV_0, 3),
928*895ab013SLaura Nao 	/* CLK_AUDDIV_3 */
929*895ab013SLaura Nao 	MUX_DIV_GATE(CLK_TOP_APLL_I2SIN4, "apll_i2sin4_m", apll_m_parents,
930*895ab013SLaura Nao 		CLK_AUDDIV_0, 20, 1, CLK_AUDDIV_3, 0, 8, CLK_AUDDIV_0, 4),
931*895ab013SLaura Nao 	MUX_DIV_GATE(CLK_TOP_APLL_I2SIN6, "apll_i2sin6_m", apll_m_parents,
932*895ab013SLaura Nao 		CLK_AUDDIV_0, 21, 1, CLK_AUDDIV_3, 8, 8, CLK_AUDDIV_0, 5),
933*895ab013SLaura Nao 	MUX_DIV_GATE(CLK_TOP_APLL_I2SOUT0, "apll_i2sout0_m", apll_m_parents,
934*895ab013SLaura Nao 		CLK_AUDDIV_0, 22, 1, CLK_AUDDIV_3, 16, 8, CLK_AUDDIV_0, 6),
935*895ab013SLaura Nao 	MUX_DIV_GATE(CLK_TOP_APLL_I2SOUT1, "apll_i2sout1_m", apll_m_parents,
936*895ab013SLaura Nao 		CLK_AUDDIV_0, 23, 1, CLK_AUDDIV_3, 24, 8, CLK_AUDDIV_0, 7),
937*895ab013SLaura Nao 	/* CLK_AUDDIV_4 */
938*895ab013SLaura Nao 	MUX_DIV_GATE(CLK_TOP_APLL_I2SOUT2, "apll_i2sout2_m", apll_m_parents,
939*895ab013SLaura Nao 		CLK_AUDDIV_0, 24, 1, CLK_AUDDIV_4, 0, 8, CLK_AUDDIV_0, 8),
940*895ab013SLaura Nao 	MUX_DIV_GATE(CLK_TOP_APLL_I2SOUT3, "apll_i2sout3_m", apll_m_parents,
941*895ab013SLaura Nao 		CLK_AUDDIV_0, 25, 1, CLK_AUDDIV_4, 8, 8, CLK_AUDDIV_0, 9),
942*895ab013SLaura Nao 	MUX_DIV_GATE(CLK_TOP_APLL_I2SOUT4, "apll_i2sout4_m", apll_m_parents,
943*895ab013SLaura Nao 		CLK_AUDDIV_0, 26, 1, CLK_AUDDIV_4, 16, 8, CLK_AUDDIV_0, 10),
944*895ab013SLaura Nao 	MUX_DIV_GATE(CLK_TOP_APLL_I2SOUT6, "apll_i2sout6_m", apll_m_parents,
945*895ab013SLaura Nao 		CLK_AUDDIV_0, 27, 1, CLK_AUDDIV_4, 24, 8, CLK_AUDDIV_0, 11),
946*895ab013SLaura Nao 	/* CLK_AUDDIV_5 */
947*895ab013SLaura Nao 	MUX_DIV_GATE(CLK_TOP_APLL_FMI2S, "apll_fmi2s_m", apll_m_parents,
948*895ab013SLaura Nao 		CLK_AUDDIV_0, 28, 1, CLK_AUDDIV_5, 0, 8, CLK_AUDDIV_0, 12),
949*895ab013SLaura Nao 	MUX(CLK_TOP_APLL_TDMOUT, "apll_tdmout_m",
950*895ab013SLaura Nao 	    apll_m_parents, CLK_AUDDIV_0, 29, 1),
951*895ab013SLaura Nao 	DIV_GATE(CLK_TOP_APLL12_DIV_TDMOUT_M, "apll12_div_tdmout_m",
952*895ab013SLaura Nao 		"apll_tdmout_m", CLK_AUDDIV_0,
953*895ab013SLaura Nao 		13, CLK_AUDDIV_5, 8, 8),
954*895ab013SLaura Nao 	DIV_GATE(CLK_TOP_APLL12_DIV_TDMOUT_B, "apll12_div_tdmout_b",
955*895ab013SLaura Nao 		"apll_tdmout_m", CLK_AUDDIV_0,
956*895ab013SLaura Nao 		14, CLK_AUDDIV_5, 8, 16),
957*895ab013SLaura Nao };
958*895ab013SLaura Nao 
959*895ab013SLaura Nao static const struct mtk_clk_desc topck_desc = {
960*895ab013SLaura Nao 	.factor_clks = top_divs,
961*895ab013SLaura Nao 	.num_factor_clks = ARRAY_SIZE(top_divs),
962*895ab013SLaura Nao 	.mux_clks = top_muxes,
963*895ab013SLaura Nao 	.num_mux_clks = ARRAY_SIZE(top_muxes),
964*895ab013SLaura Nao 	.composite_clks = top_aud_divs,
965*895ab013SLaura Nao 	.num_composite_clks = ARRAY_SIZE(top_aud_divs)
966*895ab013SLaura Nao };
967*895ab013SLaura Nao 
968*895ab013SLaura Nao static const struct of_device_id of_match_clk_mt8196_ck[] = {
969*895ab013SLaura Nao 	{ .compatible = "mediatek,mt8196-topckgen", .data = &topck_desc },
970*895ab013SLaura Nao 	{ /* sentinel */ }
971*895ab013SLaura Nao };
972*895ab013SLaura Nao MODULE_DEVICE_TABLE(of, of_match_clk_mt8196_ck);
973*895ab013SLaura Nao 
974*895ab013SLaura Nao static struct platform_driver clk_mt8196_topck_drv = {
975*895ab013SLaura Nao 	.probe = mtk_clk_simple_probe,
976*895ab013SLaura Nao 	.remove = mtk_clk_simple_remove,
977*895ab013SLaura Nao 	.driver = {
978*895ab013SLaura Nao 		.name = "clk-mt8196-topck",
979*895ab013SLaura Nao 		.of_match_table = of_match_clk_mt8196_ck,
980*895ab013SLaura Nao 	},
981*895ab013SLaura Nao };
982*895ab013SLaura Nao 
983*895ab013SLaura Nao MODULE_DESCRIPTION("MediaTek MT8196 top clock generators driver");
984*895ab013SLaura Nao module_platform_driver(clk_mt8196_topck_drv);
985*895ab013SLaura Nao MODULE_LICENSE("GPL");
986