xref: /linux/drivers/clk/mediatek/clk-mt8196-topckgen2.c (revision 522ba450b56fff29f868b1552bdc2965f55de7ed)
1*b093e0f1SLaura Nao // SPDX-License-Identifier: GPL-2.0-only
2*b093e0f1SLaura Nao /*
3*b093e0f1SLaura Nao  * Copyright (c) 2025 MediaTek Inc.
4*b093e0f1SLaura Nao  *                    Guangjie Song <guangjie.song@mediatek.com>
5*b093e0f1SLaura Nao  * Copyright (c) 2025 Collabora Ltd.
6*b093e0f1SLaura Nao  *                    Laura Nao <laura.nao@collabora.com>
7*b093e0f1SLaura Nao  */
8*b093e0f1SLaura Nao #include <dt-bindings/clock/mediatek,mt8196-clock.h>
9*b093e0f1SLaura Nao 
10*b093e0f1SLaura Nao #include <linux/clk.h>
11*b093e0f1SLaura Nao #include <linux/module.h>
12*b093e0f1SLaura Nao #include <linux/of.h>
13*b093e0f1SLaura Nao #include <linux/of_address.h>
14*b093e0f1SLaura Nao #include <linux/of_device.h>
15*b093e0f1SLaura Nao #include <linux/platform_device.h>
16*b093e0f1SLaura Nao 
17*b093e0f1SLaura Nao #include "clk-mtk.h"
18*b093e0f1SLaura Nao #include "clk-mux.h"
19*b093e0f1SLaura Nao 
20*b093e0f1SLaura Nao /* MUX SEL REG */
21*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_UPDATE		0x0004
22*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_0		0x0010
23*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_0_SET		0x0014
24*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_0_CLR		0x0018
25*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_1		0x0020
26*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_1_SET		0x0024
27*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_1_CLR		0x0028
28*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_2		0x0030
29*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_2_SET		0x0034
30*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_2_CLR		0x0038
31*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_3		0x0040
32*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_3_SET		0x0044
33*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_3_CLR		0x0048
34*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_4		0x0050
35*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_4_SET		0x0054
36*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_4_CLR		0x0058
37*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_5		0x0060
38*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_5_SET		0x0064
39*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_5_CLR		0x0068
40*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_6		0x0070
41*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_6_SET		0x0074
42*b093e0f1SLaura Nao #define CKSYS2_CLK_CFG_6_CLR		0x0078
43*b093e0f1SLaura Nao #define CKSYS2_CLK_FENC_STATUS_MON_0	0x0174
44*b093e0f1SLaura Nao 
45*b093e0f1SLaura Nao /* MUX SHIFT */
46*b093e0f1SLaura Nao #define TOP_MUX_SENINF0_SHIFT		0
47*b093e0f1SLaura Nao #define TOP_MUX_SENINF1_SHIFT		1
48*b093e0f1SLaura Nao #define TOP_MUX_SENINF2_SHIFT		2
49*b093e0f1SLaura Nao #define TOP_MUX_SENINF3_SHIFT		3
50*b093e0f1SLaura Nao #define TOP_MUX_SENINF4_SHIFT		4
51*b093e0f1SLaura Nao #define TOP_MUX_SENINF5_SHIFT		5
52*b093e0f1SLaura Nao #define TOP_MUX_IMG1_SHIFT		6
53*b093e0f1SLaura Nao #define TOP_MUX_IPE_SHIFT		7
54*b093e0f1SLaura Nao #define TOP_MUX_CAM_SHIFT		8
55*b093e0f1SLaura Nao #define TOP_MUX_CAMTM_SHIFT		9
56*b093e0f1SLaura Nao #define TOP_MUX_DPE_SHIFT		10
57*b093e0f1SLaura Nao #define TOP_MUX_VDEC_SHIFT		11
58*b093e0f1SLaura Nao #define TOP_MUX_CCUSYS_SHIFT		12
59*b093e0f1SLaura Nao #define TOP_MUX_CCUTM_SHIFT		13
60*b093e0f1SLaura Nao #define TOP_MUX_VENC_SHIFT		14
61*b093e0f1SLaura Nao #define TOP_MUX_DVO_SHIFT		15
62*b093e0f1SLaura Nao #define TOP_MUX_DVO_FAVT_SHIFT		16
63*b093e0f1SLaura Nao #define TOP_MUX_DP1_SHIFT		17
64*b093e0f1SLaura Nao #define TOP_MUX_DP0_SHIFT		18
65*b093e0f1SLaura Nao #define TOP_MUX_DISP_SHIFT		19
66*b093e0f1SLaura Nao #define TOP_MUX_MDP_SHIFT		20
67*b093e0f1SLaura Nao #define TOP_MUX_MMINFRA_SHIFT		21
68*b093e0f1SLaura Nao #define TOP_MUX_MMINFRA_SNOC_SHIFT	22
69*b093e0f1SLaura Nao #define TOP_MUX_MMUP_SHIFT		23
70*b093e0f1SLaura Nao #define TOP_MUX_MMINFRA_AO_SHIFT	26
71*b093e0f1SLaura Nao 
72*b093e0f1SLaura Nao /* HW Voter REG */
73*b093e0f1SLaura Nao #define HWV_CG_30_SET		0x0058
74*b093e0f1SLaura Nao #define HWV_CG_30_CLR		0x005c
75*b093e0f1SLaura Nao #define HWV_CG_30_DONE		0x2c2c
76*b093e0f1SLaura Nao 
77*b093e0f1SLaura Nao #define MM_HWV_CG_30_SET	0x00f0
78*b093e0f1SLaura Nao #define MM_HWV_CG_30_CLR	0x00f4
79*b093e0f1SLaura Nao #define MM_HWV_CG_30_DONE	0x2c78
80*b093e0f1SLaura Nao #define MM_HWV_CG_31_SET	0x00f8
81*b093e0f1SLaura Nao #define MM_HWV_CG_31_CLR	0x00fc
82*b093e0f1SLaura Nao #define MM_HWV_CG_31_DONE	0x2c7c
83*b093e0f1SLaura Nao #define MM_HWV_CG_32_SET	0x0100
84*b093e0f1SLaura Nao #define MM_HWV_CG_32_CLR	0x0104
85*b093e0f1SLaura Nao #define MM_HWV_CG_32_DONE	0x2c80
86*b093e0f1SLaura Nao #define MM_HWV_CG_33_SET	0x0108
87*b093e0f1SLaura Nao #define MM_HWV_CG_33_CLR	0x010c
88*b093e0f1SLaura Nao #define MM_HWV_CG_33_DONE	0x2c84
89*b093e0f1SLaura Nao #define MM_HWV_CG_34_SET	0x0110
90*b093e0f1SLaura Nao #define MM_HWV_CG_34_CLR	0x0114
91*b093e0f1SLaura Nao #define MM_HWV_CG_34_DONE	0x2c88
92*b093e0f1SLaura Nao #define MM_HWV_CG_35_SET	0x0118
93*b093e0f1SLaura Nao #define MM_HWV_CG_35_CLR	0x011c
94*b093e0f1SLaura Nao #define MM_HWV_CG_35_DONE	0x2c8c
95*b093e0f1SLaura Nao #define MM_HWV_CG_36_SET	0x0120
96*b093e0f1SLaura Nao #define MM_HWV_CG_36_CLR	0x0124
97*b093e0f1SLaura Nao #define MM_HWV_CG_36_DONE	0x2c90
98*b093e0f1SLaura Nao #define MM_HWV_MUX_UPDATE_31_0	0x0240
99*b093e0f1SLaura Nao 
100*b093e0f1SLaura Nao static const struct mtk_fixed_factor top_divs[] = {
101*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_MAINPLL2_D2, "mainpll2_d2", "mainpll2", 1, 2),
102*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_MAINPLL2_D3, "mainpll2_d3", "mainpll2", 1, 3),
103*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_MAINPLL2_D4, "mainpll2_d4", "mainpll2", 1, 4),
104*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_MAINPLL2_D4_D2, "mainpll2_d4_d2", "mainpll2", 1, 8),
105*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_MAINPLL2_D4_D4, "mainpll2_d4_d4", "mainpll2", 1, 16),
106*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_MAINPLL2_D5, "mainpll2_d5", "mainpll2", 1, 5),
107*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_MAINPLL2_D5_D2, "mainpll2_d5_d2", "mainpll2", 1, 10),
108*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_MAINPLL2_D6, "mainpll2_d6", "mainpll2", 1, 6),
109*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_MAINPLL2_D6_D2, "mainpll2_d6_d2", "mainpll2", 1, 12),
110*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_MAINPLL2_D7, "mainpll2_d7", "mainpll2", 1, 7),
111*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_MAINPLL2_D7_D2, "mainpll2_d7_d2", "mainpll2", 1, 14),
112*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_MAINPLL2_D9, "mainpll2_d9", "mainpll2", 1, 9),
113*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_UNIVPLL2_D3, "univpll2_d3", "univpll2", 1, 3),
114*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_UNIVPLL2_D4, "univpll2_d4", "univpll2", 1, 4),
115*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_UNIVPLL2_D4_D2, "univpll2_d4_d2", "univpll2", 1, 8),
116*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_UNIVPLL2_D5, "univpll2_d5", "univpll2", 1, 5),
117*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_UNIVPLL2_D5_D2, "univpll2_d5_d2", "univpll2", 1, 10),
118*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_UNIVPLL2_D6, "univpll2_d6", "univpll2", 1, 6),
119*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_UNIVPLL2_D6_D2, "univpll2_d6_d2", "univpll2", 1, 12),
120*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_UNIVPLL2_D6_D4, "univpll2_d6_d4", "univpll2", 1, 24),
121*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_UNIVPLL2_D7, "univpll2_d7", "univpll2", 1, 7),
122*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_IMGPLL_D2, "imgpll_d2", "imgpll", 1, 2),
123*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_IMGPLL_D4, "imgpll_d4", "imgpll", 1, 4),
124*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_IMGPLL_D5, "imgpll_d5", "imgpll", 1, 5),
125*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_IMGPLL_D5_D2, "imgpll_d5_d2", "imgpll", 1, 10),
126*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_MMPLL2_D3, "mmpll2_d3", "mmpll2", 1, 3),
127*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_MMPLL2_D4, "mmpll2_d4", "mmpll2", 1, 4),
128*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_MMPLL2_D4_D2, "mmpll2_d4_d2", "mmpll2", 1, 8),
129*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_MMPLL2_D5, "mmpll2_d5", "mmpll2", 1, 5),
130*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_MMPLL2_D5_D2, "mmpll2_d5_d2", "mmpll2", 1, 10),
131*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_MMPLL2_D6, "mmpll2_d6", "mmpll2", 1, 6),
132*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_MMPLL2_D6_D2, "mmpll2_d6_d2", "mmpll2", 1, 12),
133*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_MMPLL2_D7, "mmpll2_d7", "mmpll2", 1, 7),
134*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_MMPLL2_D9, "mmpll2_d9", "mmpll2", 1, 9),
135*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_TVDPLL1_D4, "tvdpll1_d4", "tvdpll1", 1, 4),
136*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_TVDPLL1_D8, "tvdpll1_d8", "tvdpll1", 1, 8),
137*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_TVDPLL1_D16, "tvdpll1_d16", "tvdpll1", 1, 16),
138*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_TVDPLL2_D2, "tvdpll2_d2", "tvdpll2", 1, 2),
139*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_TVDPLL2_D4, "tvdpll2_d4", "tvdpll2", 1, 4),
140*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_TVDPLL2_D8, "tvdpll2_d8", "tvdpll2", 1, 8),
141*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_TVDPLL2_D16, "tvdpll2_d16", "tvdpll2", 92, 1473),
142*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_TVDPLL3_D2, "tvdpll3_d2", "tvdpll3", 1, 2),
143*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_TVDPLL3_D4, "tvdpll3_d4", "tvdpll3", 1, 4),
144*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_TVDPLL3_D8, "tvdpll3_d8", "tvdpll3", 1, 8),
145*b093e0f1SLaura Nao 	FACTOR(CLK_TOP2_TVDPLL3_D16, "tvdpll3_d16", "tvdpll3", 92, 1473),
146*b093e0f1SLaura Nao };
147*b093e0f1SLaura Nao 
148*b093e0f1SLaura Nao static const char * const seninf_parents[] = {
149*b093e0f1SLaura Nao 	"clk26m",
150*b093e0f1SLaura Nao 	"ck_osc_d10",
151*b093e0f1SLaura Nao 	"ck_osc_d8",
152*b093e0f1SLaura Nao 	"ck_osc_d5",
153*b093e0f1SLaura Nao 	"ck_osc_d4",
154*b093e0f1SLaura Nao 	"univpll2_d6_d2",
155*b093e0f1SLaura Nao 	"mainpll2_d9",
156*b093e0f1SLaura Nao 	"ck_osc_d2",
157*b093e0f1SLaura Nao 	"mainpll2_d4_d2",
158*b093e0f1SLaura Nao 	"univpll2_d4_d2",
159*b093e0f1SLaura Nao 	"mmpll2_d4_d2",
160*b093e0f1SLaura Nao 	"univpll2_d7",
161*b093e0f1SLaura Nao 	"mainpll2_d6",
162*b093e0f1SLaura Nao 	"mmpll2_d7",
163*b093e0f1SLaura Nao 	"univpll2_d6",
164*b093e0f1SLaura Nao 	"univpll2_d5"
165*b093e0f1SLaura Nao };
166*b093e0f1SLaura Nao 
167*b093e0f1SLaura Nao static const char * const img1_parents[] = {
168*b093e0f1SLaura Nao 	"clk26m",
169*b093e0f1SLaura Nao 	"ck_osc_d4",
170*b093e0f1SLaura Nao 	"ck_osc_d3",
171*b093e0f1SLaura Nao 	"mmpll2_d6_d2",
172*b093e0f1SLaura Nao 	"ck_osc_d2",
173*b093e0f1SLaura Nao 	"imgpll_d5_d2",
174*b093e0f1SLaura Nao 	"mmpll2_d5_d2",
175*b093e0f1SLaura Nao 	"univpll2_d4_d2",
176*b093e0f1SLaura Nao 	"mmpll2_d4_d2",
177*b093e0f1SLaura Nao 	"mmpll2_d7",
178*b093e0f1SLaura Nao 	"univpll2_d6",
179*b093e0f1SLaura Nao 	"mmpll2_d6",
180*b093e0f1SLaura Nao 	"univpll2_d5",
181*b093e0f1SLaura Nao 	"mmpll2_d5",
182*b093e0f1SLaura Nao 	"univpll2_d4",
183*b093e0f1SLaura Nao 	"imgpll_d4"
184*b093e0f1SLaura Nao };
185*b093e0f1SLaura Nao 
186*b093e0f1SLaura Nao static const char * const ipe_parents[] = {
187*b093e0f1SLaura Nao 	"clk26m",
188*b093e0f1SLaura Nao 	"ck_osc_d4",
189*b093e0f1SLaura Nao 	"ck_osc_d3",
190*b093e0f1SLaura Nao 	"ck_osc_d2",
191*b093e0f1SLaura Nao 	"univpll2_d6",
192*b093e0f1SLaura Nao 	"mmpll2_d6",
193*b093e0f1SLaura Nao 	"univpll2_d5",
194*b093e0f1SLaura Nao 	"imgpll_d5",
195*b093e0f1SLaura Nao 	"ck_mainpll_d4",
196*b093e0f1SLaura Nao 	"mmpll2_d5",
197*b093e0f1SLaura Nao 	"imgpll_d4"
198*b093e0f1SLaura Nao };
199*b093e0f1SLaura Nao 
200*b093e0f1SLaura Nao static const char * const cam_parents[] = {
201*b093e0f1SLaura Nao 	"clk26m",
202*b093e0f1SLaura Nao 	"ck_osc_d10",
203*b093e0f1SLaura Nao 	"ck_osc_d4",
204*b093e0f1SLaura Nao 	"ck_osc_d3",
205*b093e0f1SLaura Nao 	"ck_osc_d2",
206*b093e0f1SLaura Nao 	"mmpll2_d5_d2",
207*b093e0f1SLaura Nao 	"univpll2_d4_d2",
208*b093e0f1SLaura Nao 	"univpll2_d7",
209*b093e0f1SLaura Nao 	"mmpll2_d7",
210*b093e0f1SLaura Nao 	"univpll2_d6",
211*b093e0f1SLaura Nao 	"mmpll2_d6",
212*b093e0f1SLaura Nao 	"univpll2_d5",
213*b093e0f1SLaura Nao 	"mmpll2_d5",
214*b093e0f1SLaura Nao 	"univpll2_d4",
215*b093e0f1SLaura Nao 	"imgpll_d4",
216*b093e0f1SLaura Nao 	"mmpll2_d4"
217*b093e0f1SLaura Nao };
218*b093e0f1SLaura Nao 
219*b093e0f1SLaura Nao static const char * const camtm_parents[] = {
220*b093e0f1SLaura Nao 	"clk26m",
221*b093e0f1SLaura Nao 	"univpll2_d6_d4",
222*b093e0f1SLaura Nao 	"ck_osc_d4",
223*b093e0f1SLaura Nao 	"ck_osc_d3",
224*b093e0f1SLaura Nao 	"univpll2_d6_d2"
225*b093e0f1SLaura Nao };
226*b093e0f1SLaura Nao 
227*b093e0f1SLaura Nao static const char * const dpe_parents[] = {
228*b093e0f1SLaura Nao 	"clk26m",
229*b093e0f1SLaura Nao 	"mmpll2_d5_d2",
230*b093e0f1SLaura Nao 	"univpll2_d4_d2",
231*b093e0f1SLaura Nao 	"mmpll2_d7",
232*b093e0f1SLaura Nao 	"univpll2_d6",
233*b093e0f1SLaura Nao 	"mmpll2_d6",
234*b093e0f1SLaura Nao 	"univpll2_d5",
235*b093e0f1SLaura Nao 	"mmpll2_d5",
236*b093e0f1SLaura Nao 	"imgpll_d4",
237*b093e0f1SLaura Nao 	"mmpll2_d4"
238*b093e0f1SLaura Nao };
239*b093e0f1SLaura Nao 
240*b093e0f1SLaura Nao static const char * const vdec_parents[] = {
241*b093e0f1SLaura Nao 	"clk26m",
242*b093e0f1SLaura Nao 	"ck_mainpll_d5_d2",
243*b093e0f1SLaura Nao 	"mainpll2_d4_d4",
244*b093e0f1SLaura Nao 	"mainpll2_d7_d2",
245*b093e0f1SLaura Nao 	"mainpll2_d6_d2",
246*b093e0f1SLaura Nao 	"mainpll2_d5_d2",
247*b093e0f1SLaura Nao 	"mainpll2_d9",
248*b093e0f1SLaura Nao 	"mainpll2_d4_d2",
249*b093e0f1SLaura Nao 	"mainpll2_d7",
250*b093e0f1SLaura Nao 	"mainpll2_d6",
251*b093e0f1SLaura Nao 	"univpll2_d6",
252*b093e0f1SLaura Nao 	"mainpll2_d5",
253*b093e0f1SLaura Nao 	"mainpll2_d4",
254*b093e0f1SLaura Nao 	"imgpll_d2"
255*b093e0f1SLaura Nao };
256*b093e0f1SLaura Nao 
257*b093e0f1SLaura Nao static const char * const ccusys_parents[] = {
258*b093e0f1SLaura Nao 	"clk26m",
259*b093e0f1SLaura Nao 	"ck_osc_d4",
260*b093e0f1SLaura Nao 	"ck_osc_d3",
261*b093e0f1SLaura Nao 	"ck_osc_d2",
262*b093e0f1SLaura Nao 	"mmpll2_d5_d2",
263*b093e0f1SLaura Nao 	"univpll2_d4_d2",
264*b093e0f1SLaura Nao 	"mmpll2_d7",
265*b093e0f1SLaura Nao 	"univpll2_d6",
266*b093e0f1SLaura Nao 	"mmpll2_d6",
267*b093e0f1SLaura Nao 	"univpll2_d5",
268*b093e0f1SLaura Nao 	"mainpll2_d4",
269*b093e0f1SLaura Nao 	"mainpll2_d3",
270*b093e0f1SLaura Nao 	"univpll2_d3"
271*b093e0f1SLaura Nao };
272*b093e0f1SLaura Nao 
273*b093e0f1SLaura Nao static const char * const ccutm_parents[] = {
274*b093e0f1SLaura Nao 	"clk26m",
275*b093e0f1SLaura Nao 	"univpll2_d6_d4",
276*b093e0f1SLaura Nao 	"ck_osc_d4",
277*b093e0f1SLaura Nao 	"ck_osc_d3",
278*b093e0f1SLaura Nao 	"univpll2_d6_d2"
279*b093e0f1SLaura Nao };
280*b093e0f1SLaura Nao 
281*b093e0f1SLaura Nao static const char * const venc_parents[] = {
282*b093e0f1SLaura Nao 	"clk26m",
283*b093e0f1SLaura Nao 	"mainpll2_d5_d2",
284*b093e0f1SLaura Nao 	"univpll2_d5_d2",
285*b093e0f1SLaura Nao 	"mainpll2_d4_d2",
286*b093e0f1SLaura Nao 	"mmpll2_d9",
287*b093e0f1SLaura Nao 	"univpll2_d4_d2",
288*b093e0f1SLaura Nao 	"mmpll2_d4_d2",
289*b093e0f1SLaura Nao 	"mainpll2_d6",
290*b093e0f1SLaura Nao 	"univpll2_d6",
291*b093e0f1SLaura Nao 	"mainpll2_d5",
292*b093e0f1SLaura Nao 	"mmpll2_d6",
293*b093e0f1SLaura Nao 	"univpll2_d5",
294*b093e0f1SLaura Nao 	"mainpll2_d4",
295*b093e0f1SLaura Nao 	"univpll2_d4",
296*b093e0f1SLaura Nao 	"univpll2_d3"
297*b093e0f1SLaura Nao };
298*b093e0f1SLaura Nao 
299*b093e0f1SLaura Nao static const char * const dp1_parents[] = {
300*b093e0f1SLaura Nao 	"clk26m",
301*b093e0f1SLaura Nao 	"tvdpll2_d16",
302*b093e0f1SLaura Nao 	"tvdpll2_d8",
303*b093e0f1SLaura Nao 	"tvdpll2_d4",
304*b093e0f1SLaura Nao 	"tvdpll2_d2"
305*b093e0f1SLaura Nao };
306*b093e0f1SLaura Nao 
307*b093e0f1SLaura Nao static const char * const dp0_parents[] = {
308*b093e0f1SLaura Nao 	"clk26m",
309*b093e0f1SLaura Nao 	"tvdpll1_d16",
310*b093e0f1SLaura Nao 	"tvdpll1_d8",
311*b093e0f1SLaura Nao 	"tvdpll1_d4",
312*b093e0f1SLaura Nao 	"ck_tvdpll1_d2"
313*b093e0f1SLaura Nao };
314*b093e0f1SLaura Nao 
315*b093e0f1SLaura Nao static const char * const disp_parents[] = {
316*b093e0f1SLaura Nao 	"clk26m",
317*b093e0f1SLaura Nao 	"ck_mainpll_d5_d2",
318*b093e0f1SLaura Nao 	"ck_mainpll_d4_d2",
319*b093e0f1SLaura Nao 	"ck_mainpll_d6",
320*b093e0f1SLaura Nao 	"mainpll2_d5",
321*b093e0f1SLaura Nao 	"mmpll2_d6",
322*b093e0f1SLaura Nao 	"mainpll2_d4",
323*b093e0f1SLaura Nao 	"univpll2_d4",
324*b093e0f1SLaura Nao 	"mainpll2_d3"
325*b093e0f1SLaura Nao };
326*b093e0f1SLaura Nao 
327*b093e0f1SLaura Nao static const char * const mdp_parents[] = {
328*b093e0f1SLaura Nao 	"clk26m",
329*b093e0f1SLaura Nao 	"ck_mainpll_d5_d2",
330*b093e0f1SLaura Nao 	"mainpll2_d5_d2",
331*b093e0f1SLaura Nao 	"mmpll2_d6_d2",
332*b093e0f1SLaura Nao 	"mainpll2_d9",
333*b093e0f1SLaura Nao 	"mainpll2_d4_d2",
334*b093e0f1SLaura Nao 	"mainpll2_d7",
335*b093e0f1SLaura Nao 	"mainpll2_d6",
336*b093e0f1SLaura Nao 	"mainpll2_d5",
337*b093e0f1SLaura Nao 	"mmpll2_d6",
338*b093e0f1SLaura Nao 	"mainpll2_d4",
339*b093e0f1SLaura Nao 	"univpll2_d4",
340*b093e0f1SLaura Nao 	"mainpll2_d3"
341*b093e0f1SLaura Nao };
342*b093e0f1SLaura Nao 
343*b093e0f1SLaura Nao static const char * const mminfra_parents[] = {
344*b093e0f1SLaura Nao 	"clk26m",
345*b093e0f1SLaura Nao 	"ck_osc_d4",
346*b093e0f1SLaura Nao 	"ck_mainpll_d7_d2",
347*b093e0f1SLaura Nao 	"ck_mainpll_d5_d2",
348*b093e0f1SLaura Nao 	"ck_mainpll_d9",
349*b093e0f1SLaura Nao 	"mmpll2_d6_d2",
350*b093e0f1SLaura Nao 	"mainpll2_d4_d2",
351*b093e0f1SLaura Nao 	"ck_mainpll_d6",
352*b093e0f1SLaura Nao 	"univpll2_d6",
353*b093e0f1SLaura Nao 	"mainpll2_d5",
354*b093e0f1SLaura Nao 	"mmpll2_d6",
355*b093e0f1SLaura Nao 	"univpll2_d5",
356*b093e0f1SLaura Nao 	"mainpll2_d4",
357*b093e0f1SLaura Nao 	"univpll2_d4",
358*b093e0f1SLaura Nao 	"mainpll2_d3",
359*b093e0f1SLaura Nao 	"univpll2_d3"
360*b093e0f1SLaura Nao };
361*b093e0f1SLaura Nao 
362*b093e0f1SLaura Nao static const char * const mminfra_snoc_parents[] = {
363*b093e0f1SLaura Nao 	"clk26m",
364*b093e0f1SLaura Nao 	"ck_osc_d4",
365*b093e0f1SLaura Nao 	"ck_mainpll_d7_d2",
366*b093e0f1SLaura Nao 	"ck_mainpll_d9",
367*b093e0f1SLaura Nao 	"ck_mainpll_d7",
368*b093e0f1SLaura Nao 	"ck_mainpll_d6",
369*b093e0f1SLaura Nao 	"mmpll2_d4_d2",
370*b093e0f1SLaura Nao 	"ck_mainpll_d5",
371*b093e0f1SLaura Nao 	"ck_mainpll_d4",
372*b093e0f1SLaura Nao 	"univpll2_d4",
373*b093e0f1SLaura Nao 	"mmpll2_d4",
374*b093e0f1SLaura Nao 	"mainpll2_d3",
375*b093e0f1SLaura Nao 	"univpll2_d3",
376*b093e0f1SLaura Nao 	"mmpll2_d3",
377*b093e0f1SLaura Nao 	"mainpll2_d2"
378*b093e0f1SLaura Nao };
379*b093e0f1SLaura Nao 
380*b093e0f1SLaura Nao static const char * const mmup_parents[] = {
381*b093e0f1SLaura Nao 	"clk26m",
382*b093e0f1SLaura Nao 	"mainpll2_d6",
383*b093e0f1SLaura Nao 	"mainpll2_d5",
384*b093e0f1SLaura Nao 	"ck_osc_d2",
385*b093e0f1SLaura Nao 	"ck_osc",
386*b093e0f1SLaura Nao 	"ck_mainpll_d4",
387*b093e0f1SLaura Nao 	"univpll2_d4",
388*b093e0f1SLaura Nao 	"mainpll2_d3"
389*b093e0f1SLaura Nao };
390*b093e0f1SLaura Nao 
391*b093e0f1SLaura Nao static const char * const mminfra_ao_parents[] = {
392*b093e0f1SLaura Nao 	"clk26m",
393*b093e0f1SLaura Nao 	"ck_osc_d4",
394*b093e0f1SLaura Nao 	"ck_mainpll_d3"
395*b093e0f1SLaura Nao };
396*b093e0f1SLaura Nao 
397*b093e0f1SLaura Nao static const char * const dvo_parents[] = {
398*b093e0f1SLaura Nao 	"clk26m",
399*b093e0f1SLaura Nao 	"tvdpll3_d16",
400*b093e0f1SLaura Nao 	"tvdpll3_d8",
401*b093e0f1SLaura Nao 	"tvdpll3_d4",
402*b093e0f1SLaura Nao 	"tvdpll3_d2"
403*b093e0f1SLaura Nao };
404*b093e0f1SLaura Nao 
405*b093e0f1SLaura Nao static const char * const dvo_favt_parents[] = {
406*b093e0f1SLaura Nao 	"clk26m",
407*b093e0f1SLaura Nao 	"tvdpll3_d16",
408*b093e0f1SLaura Nao 	"tvdpll3_d8",
409*b093e0f1SLaura Nao 	"tvdpll3_d4",
410*b093e0f1SLaura Nao 	"vlp_apll1",
411*b093e0f1SLaura Nao 	"vlp_apll2",
412*b093e0f1SLaura Nao 	"tvdpll3_d2"
413*b093e0f1SLaura Nao };
414*b093e0f1SLaura Nao 
415*b093e0f1SLaura Nao static const struct mtk_mux top_muxes[] = {
416*b093e0f1SLaura Nao 	/* CKSYS2_CLK_CFG_0 */
417*b093e0f1SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_SENINF0, "seninf0", seninf_parents,
418*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_0, CKSYS2_CLK_CFG_0_SET, CKSYS2_CLK_CFG_0_CLR,
419*b093e0f1SLaura Nao 		MM_HWV_CG_30_DONE, MM_HWV_CG_30_SET, MM_HWV_CG_30_CLR,
420*b093e0f1SLaura Nao 		0, 4, 7, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_SENINF0_SHIFT,
421*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 31),
422*b093e0f1SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_SENINF1, "seninf1", seninf_parents,
423*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_0, CKSYS2_CLK_CFG_0_SET, CKSYS2_CLK_CFG_0_CLR,
424*b093e0f1SLaura Nao 		MM_HWV_CG_30_DONE, MM_HWV_CG_30_SET, MM_HWV_CG_30_CLR,
425*b093e0f1SLaura Nao 		8, 4, 15, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_SENINF1_SHIFT,
426*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 30),
427*b093e0f1SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_SENINF2, "seninf2", seninf_parents,
428*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_0, CKSYS2_CLK_CFG_0_SET, CKSYS2_CLK_CFG_0_CLR,
429*b093e0f1SLaura Nao 		MM_HWV_CG_30_DONE, MM_HWV_CG_30_SET, MM_HWV_CG_30_CLR,
430*b093e0f1SLaura Nao 		16, 4, 23, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_SENINF2_SHIFT,
431*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 29),
432*b093e0f1SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_SENINF3, "seninf3", seninf_parents,
433*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_0, CKSYS2_CLK_CFG_0_SET, CKSYS2_CLK_CFG_0_CLR,
434*b093e0f1SLaura Nao 		MM_HWV_CG_30_DONE, MM_HWV_CG_30_SET, MM_HWV_CG_30_CLR,
435*b093e0f1SLaura Nao 		24, 4, 31, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_SENINF3_SHIFT,
436*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 28),
437*b093e0f1SLaura Nao 	/* CKSYS2_CLK_CFG_1 */
438*b093e0f1SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_SENINF4, "seninf4", seninf_parents,
439*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_1, CKSYS2_CLK_CFG_1_SET, CKSYS2_CLK_CFG_1_CLR,
440*b093e0f1SLaura Nao 		MM_HWV_CG_31_DONE, MM_HWV_CG_31_SET, MM_HWV_CG_31_CLR,
441*b093e0f1SLaura Nao 		0, 4, 7, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_SENINF4_SHIFT,
442*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 27),
443*b093e0f1SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_SENINF5, "seninf5", seninf_parents,
444*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_1, CKSYS2_CLK_CFG_1_SET, CKSYS2_CLK_CFG_1_CLR,
445*b093e0f1SLaura Nao 		MM_HWV_CG_31_DONE, MM_HWV_CG_31_SET, MM_HWV_CG_31_CLR,
446*b093e0f1SLaura Nao 		8, 4, 15, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_SENINF5_SHIFT,
447*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 26),
448*b093e0f1SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_IMG1, "img1", img1_parents,
449*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_1, CKSYS2_CLK_CFG_1_SET, CKSYS2_CLK_CFG_1_CLR,
450*b093e0f1SLaura Nao 		MM_HWV_CG_31_DONE, MM_HWV_CG_31_SET, MM_HWV_CG_31_CLR,
451*b093e0f1SLaura Nao 		16, 4, 23, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_IMG1_SHIFT,
452*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 25),
453*b093e0f1SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_IPE, "ipe", ipe_parents,
454*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_1, CKSYS2_CLK_CFG_1_SET, CKSYS2_CLK_CFG_1_CLR,
455*b093e0f1SLaura Nao 		MM_HWV_CG_31_DONE, MM_HWV_CG_31_SET, MM_HWV_CG_31_CLR,
456*b093e0f1SLaura Nao 		24, 4, 31, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_IPE_SHIFT,
457*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 24),
458*b093e0f1SLaura Nao 	/* CKSYS2_CLK_CFG_2 */
459*b093e0f1SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_CAM, "cam", cam_parents,
460*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_2, CKSYS2_CLK_CFG_2_SET, CKSYS2_CLK_CFG_2_CLR,
461*b093e0f1SLaura Nao 		MM_HWV_CG_32_DONE, MM_HWV_CG_32_SET, MM_HWV_CG_32_CLR,
462*b093e0f1SLaura Nao 		0, 4, 7, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_CAM_SHIFT,
463*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 23),
464*b093e0f1SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_CAMTM, "camtm", camtm_parents,
465*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_2, CKSYS2_CLK_CFG_2_SET, CKSYS2_CLK_CFG_2_CLR,
466*b093e0f1SLaura Nao 		MM_HWV_CG_32_DONE, MM_HWV_CG_32_SET, MM_HWV_CG_32_CLR,
467*b093e0f1SLaura Nao 		8, 3, 15, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_CAMTM_SHIFT,
468*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 22),
469*b093e0f1SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_DPE, "dpe", dpe_parents,
470*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_2, CKSYS2_CLK_CFG_2_SET, CKSYS2_CLK_CFG_2_CLR,
471*b093e0f1SLaura Nao 		MM_HWV_CG_32_DONE, MM_HWV_CG_32_SET, MM_HWV_CG_32_CLR,
472*b093e0f1SLaura Nao 		16, 4, 23, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_DPE_SHIFT,
473*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 21),
474*b093e0f1SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_VDEC, "vdec", vdec_parents,
475*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_2, CKSYS2_CLK_CFG_2_SET, CKSYS2_CLK_CFG_2_CLR,
476*b093e0f1SLaura Nao 		MM_HWV_CG_32_DONE, MM_HWV_CG_32_SET, MM_HWV_CG_32_CLR,
477*b093e0f1SLaura Nao 		24, 4, 31, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_VDEC_SHIFT,
478*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 20),
479*b093e0f1SLaura Nao 	/* CKSYS2_CLK_CFG_3 */
480*b093e0f1SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_CCUSYS, "ccusys", ccusys_parents,
481*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_3, CKSYS2_CLK_CFG_3_SET, CKSYS2_CLK_CFG_3_CLR,
482*b093e0f1SLaura Nao 		MM_HWV_CG_33_DONE, MM_HWV_CG_33_SET, MM_HWV_CG_33_CLR,
483*b093e0f1SLaura Nao 		0, 4, 7, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_CCUSYS_SHIFT,
484*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 19),
485*b093e0f1SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_CCUTM, "ccutm", ccutm_parents,
486*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_3, CKSYS2_CLK_CFG_3_SET, CKSYS2_CLK_CFG_3_CLR,
487*b093e0f1SLaura Nao 		MM_HWV_CG_33_DONE, MM_HWV_CG_33_SET, MM_HWV_CG_33_CLR,
488*b093e0f1SLaura Nao 		8, 3, 15, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_CCUTM_SHIFT,
489*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 18),
490*b093e0f1SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_VENC, "venc", venc_parents,
491*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_3, CKSYS2_CLK_CFG_3_SET, CKSYS2_CLK_CFG_3_CLR,
492*b093e0f1SLaura Nao 		MM_HWV_CG_33_DONE, MM_HWV_CG_33_SET, MM_HWV_CG_33_CLR,
493*b093e0f1SLaura Nao 		16, 4, 23, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_VENC_SHIFT,
494*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 17),
495*b093e0f1SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP2_DVO, "dvo", dvo_parents,
496*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_3, CKSYS2_CLK_CFG_3_SET, CKSYS2_CLK_CFG_3_CLR,
497*b093e0f1SLaura Nao 		24, 3, 31, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_DVO_SHIFT,
498*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 16),
499*b093e0f1SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP2_DVO_FAVT, "dvo_favt", dvo_favt_parents,
500*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_4, CKSYS2_CLK_CFG_4_SET, CKSYS2_CLK_CFG_4_CLR,
501*b093e0f1SLaura Nao 		0, 3, 7, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_DVO_FAVT_SHIFT,
502*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 15),
503*b093e0f1SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP2_DP1, "dp1", dp1_parents,
504*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_4, CKSYS2_CLK_CFG_4_SET, CKSYS2_CLK_CFG_4_CLR,
505*b093e0f1SLaura Nao 		8, 3, 15, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_DP1_SHIFT,
506*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 14),
507*b093e0f1SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP2_DP0, "dp0", dp0_parents,
508*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_4, CKSYS2_CLK_CFG_4_SET, CKSYS2_CLK_CFG_4_CLR,
509*b093e0f1SLaura Nao 		16, 3, 23, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_DP0_SHIFT,
510*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 13),
511*b093e0f1SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_DISP, "disp", disp_parents,
512*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_4, CKSYS2_CLK_CFG_4_SET, CKSYS2_CLK_CFG_4_CLR,
513*b093e0f1SLaura Nao 		MM_HWV_CG_34_DONE, MM_HWV_CG_34_SET, MM_HWV_CG_34_CLR,
514*b093e0f1SLaura Nao 		24, 4, 31, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_DISP_SHIFT,
515*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 12),
516*b093e0f1SLaura Nao 	/* CKSYS2_CLK_CFG_5 */
517*b093e0f1SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_MDP, "mdp", mdp_parents,
518*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_5, CKSYS2_CLK_CFG_5_SET, CKSYS2_CLK_CFG_5_CLR,
519*b093e0f1SLaura Nao 		MM_HWV_CG_35_DONE, MM_HWV_CG_35_SET, MM_HWV_CG_35_CLR,
520*b093e0f1SLaura Nao 		0, 4, 7, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_MDP_SHIFT,
521*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 11),
522*b093e0f1SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_MMINFRA, "mminfra", mminfra_parents,
523*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_5, CKSYS2_CLK_CFG_5_SET, CKSYS2_CLK_CFG_5_CLR,
524*b093e0f1SLaura Nao 		MM_HWV_CG_35_DONE, MM_HWV_CG_35_SET, MM_HWV_CG_35_CLR,
525*b093e0f1SLaura Nao 		8, 4, 15, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_MMINFRA_SHIFT,
526*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 10),
527*b093e0f1SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_MMINFRA_SNOC, "mminfra_snoc", mminfra_snoc_parents,
528*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_5, CKSYS2_CLK_CFG_5_SET, CKSYS2_CLK_CFG_5_CLR,
529*b093e0f1SLaura Nao 		MM_HWV_CG_35_DONE, MM_HWV_CG_35_SET, MM_HWV_CG_35_CLR,
530*b093e0f1SLaura Nao 		16, 4, 23, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_MMINFRA_SNOC_SHIFT,
531*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 9),
532*b093e0f1SLaura Nao 	MUX_GATE_FENC_CLR_SET_UPD(CLK_TOP2_MMUP, "mmup", mmup_parents,
533*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_5, CKSYS2_CLK_CFG_5_SET, CKSYS2_CLK_CFG_5_CLR,
534*b093e0f1SLaura Nao 		24, 3, 31, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_MMUP_SHIFT,
535*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 8),
536*b093e0f1SLaura Nao 	/* CKSYS2_CLK_CFG_6 */
537*b093e0f1SLaura Nao 	MUX_GATE_HWV_FENC_CLR_SET_UPD(CLK_TOP2_MMINFRA_AO, "mminfra_ao", mminfra_ao_parents,
538*b093e0f1SLaura Nao 		CKSYS2_CLK_CFG_6, CKSYS2_CLK_CFG_6_SET, CKSYS2_CLK_CFG_6_CLR,
539*b093e0f1SLaura Nao 		MM_HWV_CG_36_DONE, MM_HWV_CG_36_SET, MM_HWV_CG_36_CLR,
540*b093e0f1SLaura Nao 		16, 2, 7, CKSYS2_CLK_CFG_UPDATE, TOP_MUX_MMINFRA_AO_SHIFT,
541*b093e0f1SLaura Nao 		CKSYS2_CLK_FENC_STATUS_MON_0, 5),
542*b093e0f1SLaura Nao };
543*b093e0f1SLaura Nao 
544*b093e0f1SLaura Nao static const struct mtk_clk_desc topck_desc = {
545*b093e0f1SLaura Nao 	.factor_clks = top_divs,
546*b093e0f1SLaura Nao 	.num_factor_clks = ARRAY_SIZE(top_divs),
547*b093e0f1SLaura Nao 	.mux_clks = top_muxes,
548*b093e0f1SLaura Nao 	.num_mux_clks = ARRAY_SIZE(top_muxes),
549*b093e0f1SLaura Nao };
550*b093e0f1SLaura Nao 
551*b093e0f1SLaura Nao static const struct of_device_id of_match_clk_mt8196_ck[] = {
552*b093e0f1SLaura Nao 	{ .compatible = "mediatek,mt8196-topckgen-gp2", .data = &topck_desc },
553*b093e0f1SLaura Nao 	{ /* sentinel */ }
554*b093e0f1SLaura Nao };
555*b093e0f1SLaura Nao MODULE_DEVICE_TABLE(of, of_match_clk_mt8196_ck);
556*b093e0f1SLaura Nao 
557*b093e0f1SLaura Nao static struct platform_driver clk_mt8196_topck_drv = {
558*b093e0f1SLaura Nao 	.probe = mtk_clk_simple_probe,
559*b093e0f1SLaura Nao 	.remove = mtk_clk_simple_remove,
560*b093e0f1SLaura Nao 	.driver = {
561*b093e0f1SLaura Nao 		.name = "clk-mt8196-topck2",
562*b093e0f1SLaura Nao 		.of_match_table = of_match_clk_mt8196_ck,
563*b093e0f1SLaura Nao 	},
564*b093e0f1SLaura Nao };
565*b093e0f1SLaura Nao 
566*b093e0f1SLaura Nao MODULE_DESCRIPTION("MediaTek MT8196 GP2 top clock generators driver");
567*b093e0f1SLaura Nao module_platform_driver(clk_mt8196_topck_drv);
568*b093e0f1SLaura Nao MODULE_LICENSE("GPL");
569