blob: de820bcd782718aa079ee9447927112f241ef64f [file] [log] [blame]
xjb04a4022021-11-25 15:01:52 +08001// SPDX-License-Identifier: GPL-2.0
2
3/*
4
5 * Copyright (c) 2019 MediaTek Inc.
6
7 */
8
9
10#include <linux/clk.h>
11#include <linux/delay.h>
12#include <linux/mfd/syscon.h>
13#include <linux/of.h>
14#include <linux/of_address.h>
15#include <linux/of_device.h>
16#include <linux/of_platform.h>
17#include <linux/platform_device.h>
18#include <linux/pm_domain.h>
19#include <linux/pm_runtime.h>
20#include <linux/slab.h>
21#include <linux/seq_file.h>
22
23#include "clk-mtk.h"
24#include "clk-mux.h"
25#include "clk-gate.h"
26#include "clkdbg.h"
27#include "clkdbg-mt6890.h"
28
29#include <dt-bindings/clock/mt6890-clk.h>
30
31/* bringup config */
32#define MT_CCF_BRINGUP 1
33#define MT_CCF_MUX_DISABLE 0
34#define MT_CCF_PLL_DISABLE 0
35
36/* Regular Number Definition */
37#define INV_OFS -1
38#define INV_BIT -1
39
40/* TOPCK MUX SEL REG */
41#define CLK_CFG_UPDATE 0x0004
42#define CLK_CFG_UPDATE1 0x0008
43#define CLK_CFG_0 0x0010
44#define CLK_CFG_0_SET 0x0014
45#define CLK_CFG_0_CLR 0x0018
46#define CLK_CFG_1 0x0020
47#define CLK_CFG_1_SET 0x0024
48#define CLK_CFG_1_CLR 0x0028
49#define CLK_CFG_2 0x0030
50#define CLK_CFG_2_SET 0x0034
51#define CLK_CFG_2_CLR 0x0038
52#define CLK_CFG_3 0x0040
53#define CLK_CFG_3_SET 0x0044
54#define CLK_CFG_3_CLR 0x0048
55#define CLK_CFG_4 0x0050
56#define CLK_CFG_4_SET 0x0054
57#define CLK_CFG_4_CLR 0x0058
58#define CLK_CFG_5 0x0060
59#define CLK_CFG_5_SET 0x0064
60#define CLK_CFG_5_CLR 0x0068
61#define CLK_CFG_6 0x0070
62#define CLK_CFG_6_SET 0x0074
63#define CLK_CFG_6_CLR 0x0078
64#define CLK_CFG_7 0x0080
65#define CLK_CFG_7_SET 0x0084
66#define CLK_CFG_7_CLR 0x0088
67#define CLK_CFG_8 0x0090
68#define CLK_CFG_8_SET 0x0094
69#define CLK_CFG_8_CLR 0x0098
70#define CLK_CFG_9 0x00A0
71#define CLK_CFG_9_SET 0x00A4
72#define CLK_CFG_9_CLR 0x00A8
73#define CLK_CFG_10 0x00B0
74#define CLK_CFG_10_SET 0x00B4
75#define CLK_CFG_10_CLR 0x00B8
76#define CLK_CFG_11 0x00C0
77#define CLK_CFG_11_SET 0x00C4
78#define CLK_CFG_11_CLR 0x00C8
79#define CLK_CFG_12 0x00D0
80#define CLK_CFG_12_SET 0x00D4
81#define CLK_CFG_12_CLR 0x00D8
82#define CLK_AUDDIV_0 0x0320
83
84/* TOPCK MUX SHIFT */
85#define TOP_MUX_AXI_SHIFT 0
86#define TOP_MUX_SPM_SHIFT 1
87#define TOP_MUX_BUS_AXIMEM_SHIFT 2
88#define TOP_MUX_MM_SHIFT 3
89#define TOP_MUX_MFG_REF_SHIFT 4
90#define TOP_MUX_UART_SHIFT 5
91#define TOP_MUX_MSDC50_0_HCLK_SHIFT 6
92#define TOP_MUX_MSDC50_0_SHIFT 7
93#define TOP_MUX_MSDC30_1_SHIFT 8
94#define TOP_MUX_AUDIO_SHIFT 9
95#define TOP_MUX_AUD_INTBUS_SHIFT 10
96#define TOP_MUX_AUD_ENGEN1_SHIFT 11
97#define TOP_MUX_AUD_ENGEN2_SHIFT 12
98#define TOP_MUX_AUD_1_SHIFT 13
99#define TOP_MUX_AUD_2_SHIFT 14
100#define TOP_MUX_PWRAP_ULPOSC_SHIFT 15
101#define TOP_MUX_ATB_SHIFT 16
102#define TOP_MUX_PWRMCU_SHIFT 17
103#define TOP_MUX_DBI_SHIFT 18
104#define TOP_MUX_DISP_PWM_SHIFT 19
105#define TOP_MUX_USB_TOP_SHIFT 20
106#define TOP_MUX_SSUSB_XHCI_SHIFT 21
107#define TOP_MUX_I2C_SHIFT 22
108#define TOP_MUX_TL_SHIFT 23
109#define TOP_MUX_DPMAIF_MAIN_SHIFT 24
110#define TOP_MUX_PWM_SHIFT 25
111#define TOP_MUX_SPMI_M_MST_SHIFT 26
112#define TOP_MUX_SPMI_P_MST_SHIFT 27
113#define TOP_MUX_DVFSRC_SHIFT 28
114#define TOP_MUX_MCUPM_SHIFT 29
115#define TOP_MUX_SFLASH_SHIFT 30
116#define TOP_MUX_GCPU_SHIFT 0
117#define TOP_MUX_SPI_SHIFT 1
118#define TOP_MUX_SPIS_SHIFT 2
119#define TOP_MUX_ECC_SHIFT 3
120#define TOP_MUX_NFI1X_SHIFT 4
121#define TOP_MUX_SPINFI_BCLK_SHIFT 5
122#define TOP_MUX_NETSYS_SHIFT 6
123#define TOP_MUX_MEDSYS_SHIFT 7
124#define TOP_MUX_HSM_CRYPTO_SHIFT 8
125#define TOP_MUX_HSM_ARC_SHIFT 9
126#define TOP_MUX_EIP97_SHIFT 10
127#define TOP_MUX_SNPS_ETH_312P5M_SHIFT 11
128#define TOP_MUX_SNPS_ETH_250M_SHIFT 12
129#define TOP_MUX_SNPS_ETH_62P4M_PTP_SHIFT 13
130#define TOP_MUX_SNPS_ETH_50M_RMII_SHIFT 14
131#define TOP_MUX_NETSYS_500M_SHIFT 15
132#define TOP_MUX_NETSYS_MED_MCU_SHIFT 16
133#define TOP_MUX_NETSYS_WED_MCU_SHIFT 17
134#define TOP_MUX_NETSYS_2X_SHIFT 18
135#define TOP_MUX_SGMII_SHIFT 19
136#define TOP_MUX_SGMII_SBUS_SHIFT 20
137
138/* TOPCK DIVIDER REG */
139#define CLK_AUDDIV_2 0x0328
140#define CLK_AUDDIV_3 0x0334
141
142/* APMIXED PLL REG */
143#define ARMPLL_LL_CON0 0x204
144#define ARMPLL_LL_CON1 0x208
145#define ARMPLL_LL_CON2 0x20c
146#define ARMPLL_LL_CON3 0x210
147#define ARMPLL_LL_CON4 0x214
148#define CCIPLL_CON0 0x218
149#define CCIPLL_CON1 0x21c
150#define CCIPLL_CON2 0x220
151#define CCIPLL_CON3 0x224
152#define CCIPLL_CON4 0x228
153#define MPLL_CON0 0x604
154#define MPLL_CON1 0x608
155#define MPLL_CON2 0x60c
156#define MPLL_CON3 0x610
157#define MPLL_CON4 0x614
158#define MAINPLL_CON0 0x404
159#define MAINPLL_CON1 0x408
160#define MAINPLL_CON2 0x40c
161#define MAINPLL_CON3 0x410
162#define MAINPLL_CON4 0x414
163#define UNIVPLL_CON0 0x418
164#define UNIVPLL_CON1 0x41c
165#define UNIVPLL_CON2 0x420
166#define UNIVPLL_CON3 0x424
167#define UNIVPLL_CON4 0x428
168#define MSDCPLL_CON0 0x22c
169#define MSDCPLL_CON1 0x230
170#define MSDCPLL_CON2 0x234
171#define MSDCPLL_CON3 0x238
172#define MSDCPLL_CON4 0x23c
173#define MMPLL_CON0 0x42c
174#define MMPLL_CON1 0x430
175#define MMPLL_CON2 0x434
176#define MMPLL_CON3 0x438
177#define MMPLL_CON4 0x43c
178#define MFGPLL_CON0 0x618
179#define MFGPLL_CON1 0x61c
180#define MFGPLL_CON2 0x620
181#define MFGPLL_CON3 0x624
182#define MFGPLL_CON4 0x628
183#define APLL1_CON0 0x454
184#define APLL1_CON1 0x458
185#define APLL1_CON2 0x45c
186#define APLL1_CON3 0x460
187#define APLL1_CON4 0x464
188#define APLL1_CON5 0x468
189#define APLL2_CON0 0x46c
190#define APLL2_CON1 0x470
191#define APLL2_CON2 0x474
192#define APLL2_CON3 0x478
193#define APLL2_CON4 0x47c
194#define APLL2_CON5 0x480
195#define NET1PLL_CON0 0x804
196#define NET1PLL_CON1 0x808
197#define NET1PLL_CON2 0x80c
198#define NET1PLL_CON3 0x810
199#define NET1PLL_CON4 0x814
200#define NET2PLL_CON0 0x818
201#define NET2PLL_CON1 0x81c
202#define NET2PLL_CON2 0x820
203#define NET2PLL_CON3 0x824
204#define NET2PLL_CON4 0x828
205#define WEDMCUPLL_CON0 0x82c
206#define WEDMCUPLL_CON1 0x830
207#define WEDMCUPLL_CON2 0x834
208#define WEDMCUPLL_CON3 0x838
209#define WEDMCUPLL_CON4 0x83c
210#define MEDMCUPLL_CON0 0x840
211#define MEDMCUPLL_CON1 0x844
212#define MEDMCUPLL_CON2 0x848
213#define MEDMCUPLL_CON3 0x84c
214#define MEDMCUPLL_CON4 0x850
215#define SGMIIPLL_CON0 0x240
216#define SGMIIPLL_CON1 0x244
217#define SGMIIPLL_CON2 0x248
218#define SGMIIPLL_CON3 0x24c
219#define SGMIIPLL_CON4 0x250
220#define APLL1_TUNER_CON0 0x0054
221#define APLL2_TUNER_CON0 0x0058
222#define AP_PLL_CON0 0x0
223
224static DEFINE_SPINLOCK(mt6890_clk_lock);
225
226static void __iomem *apmixed_base;
227
228static const struct mtk_fixed_factor top_divs[] = {
229 FACTOR(CLK_TOP_ARMPLL_LL_CK_VRPOC, "armpll_ll_vrpoc",
230 "armpll_ll", 1, 1),
231 FACTOR(CLK_TOP_CCIPLL_CK_VRPOC_CCI, "ccipll_vrpoc_cci",
232 "ccipll", 1, 1),
233 FACTOR(CLK_TOP_MFGPLL, "mfgpll_ck",
234 "mfgpll", 1, 1),
235 FACTOR(CLK_TOP_MAINPLL, "mainpll_ck",
236 "mainpll", 1, 1),
237 FACTOR(CLK_TOP_MAINPLL_D3, "mainpll_d3",
238 "mainpll", 1, 3),
239 FACTOR(CLK_TOP_MAINPLL_D4, "mainpll_d4",
240 "mainpll", 1, 4),
241 FACTOR(CLK_TOP_MAINPLL_D4_D2, "mainpll_d4_d2",
242 "mainpll", 1, 8),
243 FACTOR(CLK_TOP_MAINPLL_D4_D4, "mainpll_d4_d4",
244 "mainpll", 1, 16),
245 FACTOR(CLK_TOP_MAINPLL_D4_D8, "mainpll_d4_d8",
246 "mainpll", 1, 32),
247 FACTOR(CLK_TOP_MAINPLL_D4_D16, "mainpll_d4_d16",
248 "mainpll", 1, 64),
249 FACTOR(CLK_TOP_MAINPLL_D5, "mainpll_d5",
250 "mainpll", 1, 5),
251 FACTOR(CLK_TOP_MAINPLL_D5_D2, "mainpll_d5_d2",
252 "mainpll", 1, 10),
253 FACTOR(CLK_TOP_MAINPLL_D5_D4, "mainpll_d5_d4",
254 "mainpll", 1, 20),
255 FACTOR(CLK_TOP_MAINPLL_D5_D8, "mainpll_d5_d8",
256 "mainpll", 1, 40),
257 FACTOR(CLK_TOP_MAINPLL_D6, "mainpll_d6",
258 "mainpll", 1, 6),
259 FACTOR(CLK_TOP_MAINPLL_D6_D2, "mainpll_d6_d2",
260 "mainpll", 1, 12),
261 FACTOR(CLK_TOP_MAINPLL_D6_D4, "mainpll_d6_d4",
262 "mainpll", 1, 24),
263 FACTOR(CLK_TOP_MAINPLL_D6_D8, "mainpll_d6_d8",
264 "mainpll", 1, 48),
265 FACTOR(CLK_TOP_MAINPLL_D7, "mainpll_d7",
266 "mainpll", 1, 7),
267 FACTOR(CLK_TOP_MAINPLL_D7_D2, "mainpll_d7_d2",
268 "mainpll", 1, 14),
269 FACTOR(CLK_TOP_MAINPLL_D7_D4, "mainpll_d7_d4",
270 "mainpll", 1, 28),
271 FACTOR(CLK_TOP_MAINPLL_D7_D8, "mainpll_d7_d8",
272 "mainpll", 1, 56),
273 FACTOR(CLK_TOP_MAINPLL_D8, "mainpll_d8",
274 "mainpll", 1, 8),
275 FACTOR(CLK_TOP_MAINPLL_D9, "mainpll_d9",
276 "mainpll", 1, 9),
277 FACTOR(CLK_TOP_UNIVPLL, "univpll_ck",
278 "univpll", 1, 1),
279 FACTOR(CLK_TOP_UNIVPLL_D2, "univpll_d2",
280 "univpll", 1, 2),
281 FACTOR(CLK_TOP_UNIVPLL_D3, "univpll_d3",
282 "univpll", 1, 3),
283 FACTOR(CLK_TOP_UNIVPLL_D4, "univpll_d4",
284 "univpll", 1, 4),
285 FACTOR(CLK_TOP_UNIVPLL_D4_D2, "univpll_d4_d2",
286 "univpll", 1, 8),
287 FACTOR(CLK_TOP_UNIVPLL_D4_D4, "univpll_d4_d4",
288 "univpll", 1, 16),
289 FACTOR(CLK_TOP_UNIVPLL_D4_D8, "univpll_d4_d8",
290 "univpll", 1, 32),
291 FACTOR(CLK_TOP_UNIVPLL_D5, "univpll_d5",
292 "univpll", 1, 5),
293 FACTOR(CLK_TOP_UNIVPLL_D5_D2, "univpll_d5_d2",
294 "univpll", 1, 10),
295 FACTOR(CLK_TOP_UNIVPLL_D5_D4, "univpll_d5_d4",
296 "univpll", 1, 20),
297 FACTOR(CLK_TOP_UNIVPLL_D5_D8, "univpll_d5_d8",
298 "univpll", 1, 40),
299 FACTOR(CLK_TOP_UNIVPLL_D5_D16, "univpll_d5_d16",
300 "univpll", 1, 80),
301 FACTOR(CLK_TOP_UNIVPLL_D6, "univpll_d6",
302 "univpll", 1, 6),
303 FACTOR(CLK_TOP_UNIVPLL_D6_D2, "univpll_d6_d2",
304 "univpll", 1, 12),
305 FACTOR(CLK_TOP_UNIVPLL_D6_D4, "univpll_d6_d4",
306 "univpll", 1, 24),
307 FACTOR(CLK_TOP_UNIVPLL_D6_D8, "univpll_d6_d8",
308 "univpll", 1, 48),
309 FACTOR(CLK_TOP_UNIVPLL_D6_D16, "univpll_d6_d16",
310 "univpll", 1, 96),
311 FACTOR(CLK_TOP_UNIVPLL_D7, "univpll_d7",
312 "univpll", 1, 7),
313 FACTOR(CLK_TOP_UNIVPLL_D7_D2, "univpll_d7_d2",
314 "univpll", 1, 14),
315 FACTOR(CLK_TOP_UNIVPLL_192M, "univpll_192m_ck",
316 "univpll", 1, 1),
317 FACTOR(CLK_TOP_UNIVPLL_192M_D2, "univpll_192m_d2",
318 "univpll", 1, 26),
319 FACTOR(CLK_TOP_UNIVPLL_192M_D4, "univpll_192m_d4",
320 "univpll", 1, 52),
321 FACTOR(CLK_TOP_UNIVPLL_192M_D8, "univpll_192m_d8",
322 "univpll", 1, 104),
323 FACTOR(CLK_TOP_UNIVPLL_192M_D16, "univpll_192m_d16",
324 "univpll", 1, 208),
325 FACTOR(CLK_TOP_UNIVPLL_192M_D32, "univpll_192m_d32",
326 "univpll", 1, 416),
327 FACTOR(CLK_TOP_USB20_192M, "usb20_192m_ck",
328 "univpll", 1, 13),
329 FACTOR(CLK_TOP_USB20_PLL_D2, "usb20_pll_d2",
330 "univpll", 1, 26),
331 FACTOR(CLK_TOP_USB20_PLL_D4, "usb20_pll_d4",
332 "univpll", 1, 52),
333 FACTOR(CLK_TOP_APLL1, "apll1_ck",
334 "apll1", 1, 1),
335 FACTOR(CLK_TOP_APLL1_D2, "apll1_d2",
336 "apll1", 1, 2),
337 FACTOR(CLK_TOP_APLL1_D4, "apll1_d4",
338 "apll1", 1, 4),
339 FACTOR(CLK_TOP_APLL1_D8, "apll1_d8",
340 "apll1", 1, 8),
341 FACTOR(CLK_TOP_APLL2, "apll2_ck",
342 "apll2", 1, 1),
343 FACTOR(CLK_TOP_APLL2_D2, "apll2_d2",
344 "apll2", 1, 2),
345 FACTOR(CLK_TOP_APLL2_D4, "apll2_d4",
346 "apll2", 1, 4),
347 FACTOR(CLK_TOP_APLL2_D8, "apll2_d8",
348 "apll2", 1, 8),
349 FACTOR(CLK_TOP_MMPLL, "mmpll_ck",
350 "mmpll", 1, 1),
351 FACTOR(CLK_TOP_MMPLL_D3, "mmpll_d3",
352 "mmpll", 1, 3),
353 FACTOR(CLK_TOP_MMPLL_D4, "mmpll_d4",
354 "mmpll", 1, 4),
355 FACTOR(CLK_TOP_MMPLL_D4_D2, "mmpll_d4_d2",
356 "mmpll", 1, 8),
357 FACTOR(CLK_TOP_MMPLL_D4_D4, "mmpll_d4_d4",
358 "mmpll", 1, 16),
359 FACTOR(CLK_TOP_MMPLL_D5, "mmpll_d5",
360 "mmpll", 1, 5),
361 FACTOR(CLK_TOP_MMPLL_D5_D2, "mmpll_d5_d2",
362 "mmpll", 1, 10),
363 FACTOR(CLK_TOP_MMPLL_D5_D4, "mmpll_d5_d4",
364 "mmpll", 1, 20),
365 FACTOR(CLK_TOP_MMPLL_D6, "mmpll_d6",
366 "mmpll", 1, 6),
367 FACTOR(CLK_TOP_MMPLL_D6_D2, "mmpll_d6_d2",
368 "mmpll", 1, 12),
369 FACTOR(CLK_TOP_MMPLL_D7, "mmpll_d7",
370 "mmpll", 1, 7),
371 FACTOR(CLK_TOP_MMPLL_D9, "mmpll_d9",
372 "mmpll", 1, 9),
373 FACTOR(CLK_TOP_TVDPLL, "tvdpll_ck",
374 "net1pll", 1, 1),
375 FACTOR(CLK_TOP_TVDPLL_D2, "tvdpll_d2",
376 "net1pll", 1, 2),
377 FACTOR(CLK_TOP_TVDPLL_D4, "tvdpll_d4",
378 "net1pll", 1, 4),
379 FACTOR(CLK_TOP_TVDPLL_D8, "tvdpll_d8",
380 "net1pll", 1, 8),
381 FACTOR(CLK_TOP_TVDPLL_D16, "tvdpll_d16",
382 "net1pll", 1, 16),
383 FACTOR(CLK_TOP_MSDCPLL, "msdcpll_ck",
384 "msdcpll", 1, 1),
385 FACTOR(CLK_TOP_MSDCPLL_D2, "msdcpll_d2",
386 "msdcpll", 1, 2),
387 FACTOR(CLK_TOP_MSDCPLL_D4, "msdcpll_d4",
388 "msdcpll", 1, 4),
389 FACTOR(CLK_TOP_MSDCPLL_D8, "msdcpll_d8",
390 "msdcpll", 1, 8),
391 FACTOR(CLK_TOP_MSDCPLL_D16, "msdcpll_d16",
392 "msdcpll", 1, 16),
393 FACTOR(CLK_TOP_CLKRTC, "clkrtc",
394 "clk32k", 1, 1),
395 FACTOR(CLK_TOP_TCK_26M_MX8, "tck_26m_mx8_ck",
396 "clk26m", 1, 1),
397 FACTOR(CLK_TOP_TCK_26M_MX9, "tck_26m_mx9_ck",
398 "clk26m", 1, 1),
399 FACTOR(CLK_TOP_TCK_26M_MX10, "tck_26m_mx10_ck",
400 "clk26m", 1, 1),
401 FACTOR(CLK_TOP_TCK_26M_MX11, "tck_26m_mx11_ck",
402 "clk26m", 1, 1),
403 FACTOR(CLK_TOP_TCK_26M_MX12, "tck_26m_mx12_ck",
404 "clk26m", 1, 1),
405 FACTOR(CLK_TOP_CSW_FAXI, "csw_faxi_ck",
406 "clk26m", 1, 1),
407 FACTOR(CLK_TOP_CSW_F26M_CK_D52, "csw_f26m_d52",
408 "clk26m", 1, 1),
409 FACTOR(CLK_TOP_CSW_F26M_CK_D2, "csw_f26m_d2",
410 "clk26m", 1, 2),
411 FACTOR(CLK_TOP_OSC, "osc_ck",
412 "ulposc", 1, 1),
413 FACTOR(CLK_TOP_OSC_D2, "osc_d2",
414 "ulposc", 1, 2),
415 FACTOR(CLK_TOP_OSC_D4, "osc_d4",
416 "ulposc", 1, 4),
417 FACTOR(CLK_TOP_OSC_D8, "osc_d8",
418 "ulposc", 1, 8),
419 FACTOR(CLK_TOP_OSC_D16, "osc_d16",
420 "ulposc", 1, 16),
421 FACTOR(CLK_TOP_OSC_D10, "osc_d10",
422 "ulposc", 1, 10),
423 FACTOR(CLK_TOP_OSC_D20, "osc_d20",
424 "ulposc", 1, 20),
425 FACTOR(CLK_TOP_TVDPLL_D5, "tvdpll_d5",
426 "net1pll", 1, 5),
427 FACTOR(CLK_TOP_TVDPLL_D10, "tvdpll_d10",
428 "net1pll", 1, 10),
429 FACTOR(CLK_TOP_TVDPLL_D25, "tvdpll_d25",
430 "net1pll", 1, 25),
431 FACTOR(CLK_TOP_TVDPLL_D50, "tvdpll_d50",
432 "net1pll", 1, 50),
433 FACTOR(CLK_TOP_NET2PLL, "net2pll_ck",
434 "net2pll", 1, 1),
435 FACTOR(CLK_TOP_WEDMCUPLL, "wedmcupll_ck",
436 "wedmcupll", 1, 1),
437 FACTOR(CLK_TOP_MEDMCUPLL, "medmcupll_ck",
438 "medmcupll", 1, 1),
439 FACTOR(CLK_TOP_SGMIIPLL, "sgmiipll_ck",
440 "sgmiipll", 1, 1),
441 FACTOR(CLK_TOP_F26M, "f26m_ck",
442 "clk26m", 1, 1),
443 FACTOR(CLK_TOP_FRTC, "frtc_ck",
444 "clk32k", 1, 1),
445 FACTOR(CLK_TOP_AXI, "axi_ck",
446 "axi_sel", 1, 1),
447 FACTOR(CLK_TOP_SPM, "spm_ck",
448 "spm_sel", 1, 1),
449 FACTOR(CLK_TOP_BUS, "bus_ck",
450 "bus_aximem_sel", 1, 1),
451 FACTOR(CLK_TOP_MM, "mm_ck",
452 "mm_sel", 1, 1),
453 FACTOR(CLK_TOP_MFG_REF, "mfg_ref_ck",
454 "mfg_ref_sel", 1, 1),
455 FACTOR(CLK_TOP_MFG, "mfg_ck",
456 "mfg_sel", 1, 1),
457 FACTOR(CLK_TOP_FUART, "fuart_ck",
458 "uart_sel", 1, 1),
459 FACTOR(CLK_TOP_MSDC50_0_HCLK, "msdc50_0_h_ck",
460 "msdc50_0_h_sel", 1, 1),
461 FACTOR(CLK_TOP_MSDC50_0, "msdc50_0_ck",
462 "msdc50_0_sel", 1, 1),
463 FACTOR(CLK_TOP_MSDC30_1, "msdc30_1_ck",
464 "msdc30_1_sel", 1, 1),
465 FACTOR(CLK_TOP_AUDIO, "audio_ck",
466 "audio_sel", 1, 1),
467 FACTOR(CLK_TOP_AUD_INTBUS, "aud_intbus_ck",
468 "aud_intbus_sel", 1, 1),
469 FACTOR(CLK_TOP_AUD_ENGEN1, "aud_engen1_ck",
470 "aud_engen1_sel", 1, 1),
471 FACTOR(CLK_TOP_AUD_ENGEN2, "aud_engen2_ck",
472 "aud_engen2_sel", 1, 1),
473 FACTOR(CLK_TOP_AUD_1, "aud_1_ck",
474 "aud_1_sel", 1, 1),
475 FACTOR(CLK_TOP_AUD_2, "aud_2_ck",
476 "aud_2_sel", 1, 1),
477 FACTOR(CLK_TOP_FPWRAP_ULPOSC, "fpwrap_ulposc_ck",
478 "pwrap_ulposc_sel", 1, 1),
479 FACTOR(CLK_TOP_ATB, "atb_ck",
480 "atb_sel", 1, 1),
481 FACTOR(CLK_TOP_PWRMCU, "pwrmcu_ck",
482 "pwrmcu_sel", 1, 1),
483 FACTOR(CLK_TOP_DBI, "dbi_ck",
484 "dbi_sel", 1, 1),
485 FACTOR(CLK_TOP_FDISP_PWM, "fdisp_pwm_ck",
486 "disp_pwm_sel", 1, 1),
487 FACTOR(CLK_TOP_FUSB_TOP, "fusb_ck",
488 "usb_sel", 1, 1),
489 FACTOR(CLK_TOP_FSSUSB_XHCI, "fssusb_xhci_ck",
490 "ssusb_xhci_sel", 1, 1),
491 FACTOR(CLK_TOP_I2C, "i2c_ck",
492 "i2c_sel", 1, 1),
493 FACTOR(CLK_TOP_TL, "tl_ck",
494 "tl_sel", 1, 1),
495 FACTOR(CLK_TOP_DPMAIF_MAIN, "dpmaif_main_ck",
496 "dpmaif_main_sel", 1, 1),
497 FACTOR(CLK_TOP_PWM, "pwm_ck",
498 "pwm_sel", 1, 1),
499 FACTOR(CLK_TOP_SPMI_M_MST, "spmi_m_mst_ck",
500 "spmi_m_mst_sel", 1, 1),
501 FACTOR(CLK_TOP_SPMI_P_MST, "spmi_p_mst_ck",
502 "spmi_p_mst_sel", 1, 1),
503 FACTOR(CLK_TOP_DVFSRC, "dvfsrc_ck",
504 "dvfsrc_sel", 1, 1),
505 FACTOR(CLK_TOP_MCUPM, "mcupm_ck",
506 "mcupm_sel", 1, 1),
507 FACTOR(CLK_TOP_SFLASH, "sflash_ck",
508 "sflash_sel", 1, 1),
509 FACTOR(CLK_TOP_GCPU, "gcpu_ck",
510 "gcpu_sel", 1, 1),
511 FACTOR(CLK_TOP_SPI, "spi_ck",
512 "spi_sel", 1, 1),
513 FACTOR(CLK_TOP_SPIS, "spis_ck",
514 "spis_sel", 1, 1),
515 FACTOR(CLK_TOP_ECC, "ecc_ck",
516 "ecc_sel", 1, 1),
517 FACTOR(CLK_TOP_NFI1X, "nfi1x_ck",
518 "nfi1x_sel", 1, 1),
519 FACTOR(CLK_TOP_SPINFI_BCLK, "spinfi_bclk_ck",
520 "spinfi_bclk_sel", 1, 1),
521 FACTOR(CLK_TOP_NETSYS, "netsys_ck",
522 "netsys_sel", 1, 1),
523 FACTOR(CLK_TOP_MEDSYS, "medsys_ck",
524 "medsys_sel", 1, 1),
525 /* HSM isn't in kernel */
526 FACTOR(CLK_TOP_EIP97, "eip97_ck",
527 "eip97_sel", 1, 1),
528 FACTOR(CLK_TOP_SNPS_ETH_312P5M, "snps_eth_312p5m_ck",
529 "snps_eth_312p5m_sel", 1, 1),
530 FACTOR(CLK_TOP_SNPS_ETH_250M, "snps_eth_250m_ck",
531 "snps_eth_250m_sel", 1, 1),
532 FACTOR(CLK_TOP_SNPS_ETH_62P4M_PTP, "snps_ptp_ck",
533 "snps_ptp_sel", 1, 1),
534 FACTOR(CLK_TOP_SNPS_ETH_50M_RMII, "snps_eth_50m_rmii_ck",
535 "snps_rmii_sel", 1, 1),
536 FACTOR(CLK_TOP_NETSYS_500M, "netsys_500m_ck",
537 "netsys_500m_sel", 1, 1),
538 FACTOR(CLK_TOP_NETSYS_MED_MCU, "netsys_med_mcu_ck",
539 "netsys_med_mcu_sel", 1, 1),
540 FACTOR(CLK_TOP_NETSYS_WED_MCU, "netsys_wed_mcu_ck",
541 "netsys_wed_mcu_sel", 1, 1),
542 FACTOR(CLK_TOP_NETSYS_2X, "netsys_2x_ck",
543 "netsys_2x_sel", 1, 1),
544 FACTOR(CLK_TOP_SGMII, "sgmii_ck",
545 "sgmii_sel", 1, 1),
546 FACTOR(CLK_TOP_SGMII_SBUS, "sgmii_sbus_ck",
547 "sgmii_sbus_sel", 1, 1),
548 FACTOR(CLK_TOP_SYS_26M, "sys_26m_ck",
549 "clk26m", 1, 1),
550 FACTOR(CLK_TOP_F_UFS_MP_SAP_CFG, "ufs_cfg_ck",
551 "clk26m", 1, 1),
552 FACTOR(CLK_TOP_F_UFS_TICK1US, "f_ufs_tick1us_ck",
553 "clk26m", 1, 1),
554};
555
556static const char * const axi_parents[] = {
557 "tck_26m_mx9_ck",
558 "mainpll_d4_d4",
559 "mainpll_d7_d2",
560 "mainpll_d4_d2",
561 "mainpll_d5_d2",
562 "mainpll_d6_d2",
563 "osc_d4"
564};
565
566static const char * const spm_parents[] = {
567 "tck_26m_mx9_ck",
568 "osc_d10",
569 "mainpll_d7_d4",
570 "clkrtc"
571};
572
573static const char * const bus_aximem_parents[] = {
574 "tck_26m_mx9_ck",
575 "mainpll_d7_d2",
576 "mainpll_d4_d2",
577 "mainpll_d5_d2",
578 "mainpll_d6"
579};
580
581static const char * const mm_parents[] = {
582 "tck_26m_mx9_ck",
583 "univpll_d6_d2",
584 "univpll_d7_d2",
585 "mainpll_d6_d2",
586 "univpll_d4_d4"
587};
588
589static const char * const mfg_ref_parents[] = {
590 "tck_26m_mx9_ck",
591 "tck_26m_mx9_ck",
592 "univpll_d6",
593 "mainpll_d5_d2"
594};
595
596static const char * const mfg_parents[] = {
597 "mfg_ref_sel",
598 "mfgpll_ck"
599};
600
601static const char * const uart_parents[] = {
602 "tck_26m_mx9_ck",
603 "univpll_d6_d8"
604};
605
606static const char * const msdc50_0_h_parents[] = {
607 "tck_26m_mx9_ck",
608 "mainpll_d4_d2",
609 "mainpll_d6_d2"
610};
611
612static const char * const msdc50_0_parents[] = {
613 "tck_26m_mx9_ck",
614 "msdcpll_ck",
615 "msdcpll_d2",
616 "univpll_d4_d4",
617 "mainpll_d6_d2",
618 "univpll_d4_d2"
619};
620
621static const char * const msdc30_1_parents[] = {
622 "tck_26m_mx9_ck",
623 "univpll_d6_d2",
624 "mainpll_d6_d2",
625 "mainpll_d7_d2",
626 "msdcpll_d2"
627};
628
629static const char * const audio_parents[] = {
630 "tck_26m_mx9_ck",
631 "mainpll_d5_d8",
632 "mainpll_d7_d8",
633 "mainpll_d4_d16"
634};
635
636static const char * const aud_intbus_parents[] = {
637 "tck_26m_mx9_ck",
638 "mainpll_d4_d4",
639 "mainpll_d7_d4"
640};
641
642static const char * const aud_engen1_parents[] = {
643 "tck_26m_mx9_ck",
644 "apll1_d2",
645 "apll1_d4",
646 "apll1_d8"
647};
648
649static const char * const aud_engen2_parents[] = {
650 "tck_26m_mx9_ck",
651 "apll2_d2",
652 "apll2_d4",
653 "apll2_d8"
654};
655
656static const char * const aud_1_parents[] = {
657 "tck_26m_mx9_ck",
658 "apll1_ck"
659};
660
661static const char * const aud_2_parents[] = {
662 "tck_26m_mx9_ck",
663 "apll2_ck"
664};
665
666static const char * const pwrap_ulposc_parents[] = {
667 "osc_d10",
668 "tck_26m_mx9_ck",
669 "osc_d4",
670 "osc_d8",
671 "osc_d16"
672};
673
674static const char * const atb_parents[] = {
675 "tck_26m_mx9_ck",
676 "mainpll_d4_d2",
677 "mainpll_d5_d2"
678};
679
680static const char * const pwrmcu_parents[] = {
681 "tck_26m_mx9_ck",
682 "mainpll_d5_d2",
683 "univpll_d5_d2",
684 "mainpll_d4_d2",
685 "univpll_d4_d2",
686 "mainpll_d6"
687};
688
689static const char * const dbi_parents[] = {
690 "tck_26m_mx9_ck",
691 "univpll_d5_d4",
692 "univpll_d6_d4",
693 "univpll_d4_d8",
694 "univpll_d6_d8"
695};
696
697static const char * const disp_pwm_parents[] = {
698 "tck_26m_mx9_ck",
699 "univpll_d6_d4",
700 "osc_d2",
701 "osc_d4",
702 "osc_d16"
703};
704
705static const char * const usb_parents[] = {
706 "tck_26m_mx9_ck",
707 "univpll_d5_d4",
708 "univpll_d6_d4",
709 "univpll_d5_d2"
710};
711
712static const char * const ssusb_xhci_parents[] = {
713 "tck_26m_mx9_ck",
714 "univpll_d5_d4",
715 "univpll_d6_d4",
716 "univpll_d5_d2"
717};
718
719static const char * const i2c_parents[] = {
720 "tck_26m_mx9_ck",
721 "mainpll_d4_d8",
722 "univpll_d5_d4"
723};
724
725static const char * const tl_parents[] = {
726 "tck_26m_mx9_ck",
727 "mainpll_d4_d4",
728 "mainpll_d6_d4"
729};
730
731static const char * const dpmaif_main_parents[] = {
732 "tck_26m_mx9_ck",
733 "univpll_d4_d4",
734 "mainpll_d6",
735 "mainpll_d4_d2",
736 "univpll_d4_d2"
737};
738
739static const char * const pwm_parents[] = {
740 "tck_26m_mx9_ck",
741 "univpll_d4_d8"
742};
743
744static const char * const spmi_m_mst_parents[] = {
745 "tck_26m_mx9_ck",
746 "csw_f26m_d2",
747 "osc_d8",
748 "osc_d10",
749 "osc_d16",
750 "osc_d20",
751 "clkrtc"
752};
753
754static const char * const spmi_p_mst_parents[] = {
755 "tck_26m_mx9_ck",
756 "csw_f26m_d2",
757 "osc_d8",
758 "osc_d10",
759 "osc_d16",
760 "osc_d20",
761 "clkrtc",
762 "mainpll_d7_d8",
763 "mainpll_d5_d8"
764};
765
766static const char * const dvfsrc_parents[] = {
767 "tck_26m_mx9_ck",
768 "osc_d10"
769};
770
771static const char * const mcupm_parents[] = {
772 "tck_26m_mx9_ck",
773 "mainpll_d6_d4",
774 "mainpll_d6_d2"
775};
776
777static const char * const sflash_parents[] = {
778 "tck_26m_mx9_ck",
779 "mainpll_d7_d8",
780 "univpll_d6_d8",
781 "univpll_d5_d8"
782};
783
784static const char * const gcpu_parents[] = {
785 "tck_26m_mx9_ck",
786 "univpll_d6",
787 "mainpll_d6",
788 "univpll_d4_d2",
789 "mainpll_d4_d2",
790 "univpll_d6_d2"
791};
792
793static const char * const spi_parents[] = {
794 "tck_26m_mx9_ck",
795 "univpll_d6_d8",
796 "univpll_d4_d8",
797 "univpll_d6_d4",
798 "univpll_d5_d4",
799 "univpll_d4_d4",
800 "univpll_d7_d2",
801 "univpll_d6_d2"
802};
803
804static const char * const spis_parents[] = {
805 "tck_26m_mx9_ck",
806 "univpll_d6_d8",
807 "univpll_d4_d8",
808 "univpll_d6_d4",
809 "univpll_d4_d4",
810 "univpll_d6_d2",
811 "univpll_d4_d2",
812 "univpll_d6"
813};
814
815static const char * const ecc_parents[] = {
816 "tck_26m_mx9_ck",
817 "mainpll_d4_d4",
818 "mainpll_d9",
819 "univpll_d4_d2"
820};
821
822static const char * const nfi1x_parents[] = {
823 "tck_26m_mx9_ck",
824 "univpll_d5_d4",
825 "mainpll_d7_d4",
826 "mainpll_d6_d4",
827 "univpll_d6_d4",
828 "mainpll_d4_d4",
829 "univpll_d4_d4",
830 "mainpll_d6_d2"
831};
832
833static const char * const spinfi_bclk_parents[] = {
834 "tck_26m_mx9_ck",
835 "univpll_d6_d8",
836 "univpll_d5_d8",
837 "mainpll_d4_d8",
838 "univpll_d4_d8",
839 "mainpll_d6_d4",
840 "univpll_d6_d4",
841 "univpll_d5_d4"
842};
843
844static const char * const netsys_parents[] = {
845 "tck_26m_mx9_ck",
846 "univpll_d4_d8",
847 "mainpll_d7_d2",
848 "mainpll_d9",
849 "univpll_d7"
850};
851
852static const char * const medsys_parents[] = {
853 "tck_26m_mx9_ck",
854 "univpll_d4_d8",
855 "mainpll_d7_d2",
856 "mainpll_d9",
857 "univpll_d7"
858};
859
860static const char * const eip97_parents[] = {
861 "tck_26m_mx9_ck",
862 "net2pll_ck",
863 "mainpll_d3",
864 "univpll_d4",
865 "mainpll_d4",
866 "univpll_d5",
867 "mainpll_d6",
868 "mainpll_d5_d2"
869};
870
871static const char * const snps_eth_312p5m_parents[] = {
872 "tck_26m_mx9_ck",
873 "tvdpll_d8"
874};
875
876static const char * const snps_eth_250m_parents[] = {
877 "tck_26m_mx9_ck",
878 "tvdpll_d10"
879};
880
881static const char * const snps_ptp_parents[] = {
882 "tck_26m_mx9_ck",
883 "univpll_d5_d8"
884};
885
886static const char * const snps_rmii_parents[] = {
887 "tck_26m_mx9_ck",
888 "tvdpll_d50"
889};
890
891static const char * const netsys_500m_parents[] = {
892 "tck_26m_mx9_ck",
893 "tvdpll_d5"
894};
895
896static const char * const netsys_med_mcu_parents[] = {
897 "tck_26m_mx9_ck",
898 "univpll_d6_d4",
899 "mainpll_d4_d2",
900 "univpll_d7",
901 "medmcupll_ck"
902};
903
904static const char * const netsys_wed_mcu_parents[] = {
905 "tck_26m_mx9_ck",
906 "mainpll_d6_d2",
907 "mainpll_d6",
908 "mainpll_d5",
909 "wedmcupll_ck"
910};
911
912static const char * const netsys_2x_parents[] = {
913 "tck_26m_mx9_ck",
914 "univpll_d5_d4",
915 "mainpll_d4_d2",
916 "mainpll_d4",
917 "net2pll_ck"
918};
919
920static const char * const sgmii_parents[] = {
921 "tck_26m_mx9_ck",
922 "sgmiipll_ck"
923};
924
925static const char * const sgmii_sbus_parents[] = {
926 "tck_26m_mx9_ck",
927 "mainpll_d7_d4"
928};
929
930static const char * const apll_i2s0_mck_parents[] = {
931 "aud_1_sel",
932 "aud_2_sel"
933};
934
935static const char * const apll_i2s1_mck_parents[] = {
936 "aud_1_sel",
937 "aud_2_sel"
938};
939
940static const char * const apll_i2s2_mck_parents[] = {
941 "aud_1_sel",
942 "aud_2_sel"
943};
944
945static const char * const apll_i2s4_mck_parents[] = {
946 "aud_1_sel",
947 "aud_2_sel"
948};
949
950static const char * const apll_tdmout_mck_parents[] = {
951 "aud_1_sel",
952 "aud_2_sel"
953};
954
955static const char * const apll_i2s5_mck_parents[] = {
956 "aud_1_sel",
957 "aud_2_sel"
958};
959
960static const char * const apll_i2s6_mck_parents[] = {
961 "aud_1_sel",
962 "aud_2_sel"
963};
964
965static const struct mtk_mux top_muxes[] = {
966#if MT_CCF_MUX_DISABLE
967 /* CLK_CFG_0 */
968 MUX_CLR_SET_UPD(CLK_TOP_AXI_SEL/* dts */, "axi_sel",
969 axi_parents/* parent */, CLK_CFG_0, CLK_CFG_0_SET,
970 CLK_CFG_0_CLR/* set parent */, 0/* lsb */, 3/* width */,
971 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
972 TOP_MUX_AXI_SHIFT/* upd shift */),
973 MUX_CLR_SET_UPD(CLK_TOP_SPM_SEL/* dts */, "spm_sel",
974 spm_parents/* parent */, CLK_CFG_0, CLK_CFG_0_SET,
975 CLK_CFG_0_CLR/* set parent */, 8/* lsb */, 2/* width */,
976 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
977 TOP_MUX_SPM_SHIFT/* upd shift */),
978 MUX_CLR_SET_UPD(CLK_TOP_BUS_AXIMEM_SEL/* dts */, "bus_aximem_sel",
979 bus_aximem_parents/* parent */, CLK_CFG_0, CLK_CFG_0_SET,
980 CLK_CFG_0_CLR/* set parent */, 16/* lsb */, 3/* width */,
981 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
982 TOP_MUX_BUS_AXIMEM_SHIFT/* upd shift */),
983 MUX_CLR_SET_UPD(CLK_TOP_MM_SEL/* dts */, "mm_sel",
984 mm_parents/* parent */, CLK_CFG_0, CLK_CFG_0_SET,
985 CLK_CFG_0_CLR/* set parent */, 24/* lsb */, 3/* width */,
986 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
987 TOP_MUX_MM_SHIFT/* upd shift */),
988 /* CLK_CFG_1 */
989 MUX_CLR_SET_UPD(CLK_TOP_MFG_REF_SEL/* dts */, "mfg_ref_sel",
990 mfg_ref_parents/* parent */, CLK_CFG_1, CLK_CFG_1_SET,
991 CLK_CFG_1_CLR/* set parent */, 0/* lsb */, 2/* width */,
992 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
993 TOP_MUX_MFG_REF_SHIFT/* upd shift */),
994 MUX_CLR_SET_UPD(CLK_TOP_MFG_SEL/* dts */, "mfg_sel",
995 mfg_parents/* parent */, CLK_CFG_1, CLK_CFG_1_SET,
996 CLK_CFG_1_CLR/* set parent */, 2/* lsb */, 1/* width */,
997 INV_BIT/* pdn bit */, INV_OFS/* upd ofs */,
998 INV_BIT/* upd shift */),
999 MUX_CLR_SET_UPD(CLK_TOP_UART_SEL/* dts */, "uart_sel",
1000 uart_parents/* parent */, CLK_CFG_1, CLK_CFG_1_SET,
1001 CLK_CFG_1_CLR/* set parent */, 8/* lsb */, 1/* width */,
1002 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1003 TOP_MUX_UART_SHIFT/* upd shift */),
1004 MUX_CLR_SET_UPD(CLK_TOP_MSDC50_0_HCLK_SEL/* dts */, "msdc50_0_h_sel",
1005 msdc50_0_h_parents/* parent */, CLK_CFG_1, CLK_CFG_1_SET,
1006 CLK_CFG_1_CLR/* set parent */, 16/* lsb */, 2/* width */,
1007 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1008 TOP_MUX_MSDC50_0_HCLK_SHIFT/* upd shift */),
1009 MUX_CLR_SET_UPD(CLK_TOP_MSDC50_0_SEL/* dts */, "msdc50_0_sel",
1010 msdc50_0_parents/* parent */, CLK_CFG_1, CLK_CFG_1_SET,
1011 CLK_CFG_1_CLR/* set parent */, 24/* lsb */, 3/* width */,
1012 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1013 TOP_MUX_MSDC50_0_SHIFT/* upd shift */),
1014 /* CLK_CFG_2 */
1015 MUX_CLR_SET_UPD(CLK_TOP_MSDC30_1_SEL/* dts */, "msdc30_1_sel",
1016 msdc30_1_parents/* parent */, CLK_CFG_2, CLK_CFG_2_SET,
1017 CLK_CFG_2_CLR/* set parent */, 0/* lsb */, 3/* width */,
1018 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1019 TOP_MUX_MSDC30_1_SHIFT/* upd shift */),
1020 MUX_CLR_SET_UPD(CLK_TOP_AUDIO_SEL/* dts */, "audio_sel",
1021 audio_parents/* parent */, CLK_CFG_2, CLK_CFG_2_SET,
1022 CLK_CFG_2_CLR/* set parent */, 8/* lsb */, 2/* width */,
1023 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1024 TOP_MUX_AUDIO_SHIFT/* upd shift */),
1025 MUX_CLR_SET_UPD(CLK_TOP_AUD_INTBUS_SEL/* dts */, "aud_intbus_sel",
1026 aud_intbus_parents/* parent */, CLK_CFG_2, CLK_CFG_2_SET,
1027 CLK_CFG_2_CLR/* set parent */, 16/* lsb */, 2/* width */,
1028 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1029 TOP_MUX_AUD_INTBUS_SHIFT/* upd shift */),
1030 MUX_CLR_SET_UPD(CLK_TOP_AUD_ENGEN1_SEL/* dts */, "aud_engen1_sel",
1031 aud_engen1_parents/* parent */, CLK_CFG_2, CLK_CFG_2_SET,
1032 CLK_CFG_2_CLR/* set parent */, 24/* lsb */, 2/* width */,
1033 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1034 TOP_MUX_AUD_ENGEN1_SHIFT/* upd shift */),
1035 /* CLK_CFG_3 */
1036 MUX_CLR_SET_UPD(CLK_TOP_AUD_ENGEN2_SEL/* dts */, "aud_engen2_sel",
1037 aud_engen2_parents/* parent */, CLK_CFG_3, CLK_CFG_3_SET,
1038 CLK_CFG_3_CLR/* set parent */, 0/* lsb */, 2/* width */,
1039 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1040 TOP_MUX_AUD_ENGEN2_SHIFT/* upd shift */),
1041 MUX_CLR_SET_UPD(CLK_TOP_AUD_1_SEL/* dts */, "aud_1_sel",
1042 aud_1_parents/* parent */, CLK_CFG_3, CLK_CFG_3_SET,
1043 CLK_CFG_3_CLR/* set parent */, 8/* lsb */, 1/* width */,
1044 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1045 TOP_MUX_AUD_1_SHIFT/* upd shift */),
1046 MUX_CLR_SET_UPD(CLK_TOP_AUD_2_SEL/* dts */, "aud_2_sel",
1047 aud_2_parents/* parent */, CLK_CFG_3, CLK_CFG_3_SET,
1048 CLK_CFG_3_CLR/* set parent */, 16/* lsb */, 1/* width */,
1049 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1050 TOP_MUX_AUD_2_SHIFT/* upd shift */),
1051 MUX_CLR_SET_UPD(CLK_TOP_PWRAP_ULPOSC_SEL/* dts */, "pwrap_ulposc_sel",
1052 pwrap_ulposc_parents/* parent */, CLK_CFG_3, CLK_CFG_3_SET,
1053 CLK_CFG_3_CLR/* set parent */, 24/* lsb */, 3/* width */,
1054 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1055 TOP_MUX_PWRAP_ULPOSC_SHIFT/* upd shift */),
1056 /* CLK_CFG_4 */
1057 MUX_CLR_SET_UPD(CLK_TOP_ATB_SEL/* dts */, "atb_sel",
1058 atb_parents/* parent */, CLK_CFG_4, CLK_CFG_4_SET,
1059 CLK_CFG_4_CLR/* set parent */, 0/* lsb */, 2/* width */,
1060 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1061 TOP_MUX_ATB_SHIFT/* upd shift */),
1062 MUX_CLR_SET_UPD(CLK_TOP_PWRMCU_SEL/* dts */, "pwrmcu_sel",
1063 pwrmcu_parents/* parent */, CLK_CFG_4, CLK_CFG_4_SET,
1064 CLK_CFG_4_CLR/* set parent */, 8/* lsb */, 3/* width */,
1065 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1066 TOP_MUX_PWRMCU_SHIFT/* upd shift */),
1067 MUX_CLR_SET_UPD(CLK_TOP_DBI_SEL/* dts */, "dbi_sel",
1068 dbi_parents/* parent */, CLK_CFG_4, CLK_CFG_4_SET,
1069 CLK_CFG_4_CLR/* set parent */, 16/* lsb */, 3/* width */,
1070 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1071 TOP_MUX_DBI_SHIFT/* upd shift */),
1072 MUX_CLR_SET_UPD(CLK_TOP_DISP_PWM_SEL/* dts */, "disp_pwm_sel",
1073 disp_pwm_parents/* parent */, CLK_CFG_4, CLK_CFG_4_SET,
1074 CLK_CFG_4_CLR/* set parent */, 24/* lsb */, 3/* width */,
1075 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1076 TOP_MUX_DISP_PWM_SHIFT/* upd shift */),
1077 /* CLK_CFG_5 */
1078 MUX_CLR_SET_UPD(CLK_TOP_USB_TOP_SEL/* dts */, "usb_sel",
1079 usb_parents/* parent */, CLK_CFG_5, CLK_CFG_5_SET,
1080 CLK_CFG_5_CLR/* set parent */, 0/* lsb */, 2/* width */,
1081 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1082 TOP_MUX_USB_TOP_SHIFT/* upd shift */),
1083 MUX_CLR_SET_UPD(CLK_TOP_SSUSB_XHCI_SEL/* dts */, "ssusb_xhci_sel",
1084 ssusb_xhci_parents/* parent */, CLK_CFG_5, CLK_CFG_5_SET,
1085 CLK_CFG_5_CLR/* set parent */, 8/* lsb */, 2/* width */,
1086 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1087 TOP_MUX_SSUSB_XHCI_SHIFT/* upd shift */),
1088 MUX_CLR_SET_UPD(CLK_TOP_I2C_SEL/* dts */, "i2c_sel",
1089 i2c_parents/* parent */, CLK_CFG_5, CLK_CFG_5_SET,
1090 CLK_CFG_5_CLR/* set parent */, 16/* lsb */, 2/* width */,
1091 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1092 TOP_MUX_I2C_SHIFT/* upd shift */),
1093 MUX_CLR_SET_UPD(CLK_TOP_TL_SEL/* dts */, "tl_sel",
1094 tl_parents/* parent */, CLK_CFG_5, CLK_CFG_5_SET,
1095 CLK_CFG_5_CLR/* set parent */, 24/* lsb */, 2/* width */,
1096 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1097 TOP_MUX_TL_SHIFT/* upd shift */),
1098 /* CLK_CFG_6 */
1099 MUX_CLR_SET_UPD(CLK_TOP_DPMAIF_MAIN_SEL/* dts */, "dpmaif_main_sel",
1100 dpmaif_main_parents/* parent */, CLK_CFG_6, CLK_CFG_6_SET,
1101 CLK_CFG_6_CLR/* set parent */, 0/* lsb */, 3/* width */,
1102 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1103 TOP_MUX_DPMAIF_MAIN_SHIFT/* upd shift */),
1104 MUX_CLR_SET_UPD(CLK_TOP_PWM_SEL/* dts */, "pwm_sel",
1105 pwm_parents/* parent */, CLK_CFG_6, CLK_CFG_6_SET,
1106 CLK_CFG_6_CLR/* set parent */, 8/* lsb */, 1/* width */,
1107 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1108 TOP_MUX_PWM_SHIFT/* upd shift */),
1109 MUX_CLR_SET_UPD(CLK_TOP_SPMI_M_MST_SEL/* dts */, "spmi_m_mst_sel",
1110 spmi_m_mst_parents/* parent */, CLK_CFG_6, CLK_CFG_6_SET,
1111 CLK_CFG_6_CLR/* set parent */, 16/* lsb */, 3/* width */,
1112 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1113 TOP_MUX_SPMI_M_MST_SHIFT/* upd shift */),
1114 MUX_CLR_SET_UPD(CLK_TOP_SPMI_P_MST_SEL/* dts */, "spmi_p_mst_sel",
1115 spmi_p_mst_parents/* parent */, CLK_CFG_6, CLK_CFG_6_SET,
1116 CLK_CFG_6_CLR/* set parent */, 24/* lsb */, 4/* width */,
1117 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1118 TOP_MUX_SPMI_P_MST_SHIFT/* upd shift */),
1119 /* CLK_CFG_7 */
1120 MUX_CLR_SET_UPD(CLK_TOP_DVFSRC_SEL/* dts */, "dvfsrc_sel",
1121 dvfsrc_parents/* parent */, CLK_CFG_7, CLK_CFG_7_SET,
1122 CLK_CFG_7_CLR/* set parent */, 0/* lsb */, 1/* width */,
1123 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1124 TOP_MUX_DVFSRC_SHIFT/* upd shift */),
1125 MUX_CLR_SET_UPD(CLK_TOP_MCUPM_SEL/* dts */, "mcupm_sel",
1126 mcupm_parents/* parent */, CLK_CFG_7, CLK_CFG_7_SET,
1127 CLK_CFG_7_CLR/* set parent */, 8/* lsb */, 2/* width */,
1128 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1129 TOP_MUX_MCUPM_SHIFT/* upd shift */),
1130 MUX_CLR_SET_UPD(CLK_TOP_SFLASH_SEL/* dts */, "sflash_sel",
1131 sflash_parents/* parent */, CLK_CFG_7, CLK_CFG_7_SET,
1132 CLK_CFG_7_CLR/* set parent */, 16/* lsb */, 2/* width */,
1133 INV_BIT/* pdn bit */, CLK_CFG_UPDATE/* upd ofs */,
1134 TOP_MUX_SFLASH_SHIFT/* upd shift */),
1135 MUX_CLR_SET_UPD(CLK_TOP_GCPU_SEL/* dts */, "gcpu_sel",
1136 gcpu_parents/* parent */, CLK_CFG_7, CLK_CFG_7_SET,
1137 CLK_CFG_7_CLR/* set parent */, 24/* lsb */, 3/* width */,
1138 INV_BIT/* pdn bit */, CLK_CFG_UPDATE1/* upd ofs */,
1139 TOP_MUX_GCPU_SHIFT/* upd shift */),
1140 /* CLK_CFG_8 */
1141 MUX_CLR_SET_UPD(CLK_TOP_SPI_SEL/* dts */, "spi_sel",
1142 spi_parents/* parent */, CLK_CFG_8, CLK_CFG_8_SET,
1143 CLK_CFG_8_CLR/* set parent */, 0/* lsb */, 3/* width */,
1144 INV_BIT/* pdn bit */, CLK_CFG_UPDATE1/* upd ofs */,
1145 TOP_MUX_SPI_SHIFT/* upd shift */),
1146 MUX_CLR_SET_UPD(CLK_TOP_SPIS_SEL/* dts */, "spis_sel",
1147 spis_parents/* parent */, CLK_CFG_8, CLK_CFG_8_SET,
1148 CLK_CFG_8_CLR/* set parent */, 8/* lsb */, 3/* width */,
1149 INV_BIT/* pdn bit */, CLK_CFG_UPDATE1/* upd ofs */,
1150 TOP_MUX_SPIS_SHIFT/* upd shift */),
1151 MUX_CLR_SET_UPD(CLK_TOP_ECC_SEL/* dts */, "ecc_sel",
1152 ecc_parents/* parent */, CLK_CFG_8, CLK_CFG_8_SET,
1153 CLK_CFG_8_CLR/* set parent */, 16/* lsb */, 2/* width */,
1154 INV_BIT/* pdn bit */, CLK_CFG_UPDATE1/* upd ofs */,
1155 TOP_MUX_ECC_SHIFT/* upd shift */),
1156 MUX_CLR_SET_UPD(CLK_TOP_NFI1X_SEL/* dts */, "nfi1x_sel",
1157 nfi1x_parents/* parent */, CLK_CFG_8, CLK_CFG_8_SET,
1158 CLK_CFG_8_CLR/* set parent */, 24/* lsb */, 3/* width */,
1159 INV_BIT/* pdn bit */, CLK_CFG_UPDATE1/* upd ofs */,
1160 TOP_MUX_NFI1X_SHIFT/* upd shift */),
1161 /* CLK_CFG_9 */
1162 MUX_CLR_SET_UPD(CLK_TOP_SPINFI_BCLK_SEL/* dts */, "spinfi_bclk_sel",
1163 spinfi_bclk_parents/* parent */, CLK_CFG_9, CLK_CFG_9_SET,
1164 CLK_CFG_9_CLR/* set parent */, 0/* lsb */, 3/* width */,
1165 INV_BIT/* pdn bit */, CLK_CFG_UPDATE1/* upd ofs */,
1166 TOP_MUX_SPINFI_BCLK_SHIFT/* upd shift */),
1167 MUX_CLR_SET_UPD(CLK_TOP_NETSYS_SEL/* dts */, "netsys_sel",
1168 netsys_parents/* parent */, CLK_CFG_9, CLK_CFG_9_SET,
1169 CLK_CFG_9_CLR/* set parent */, 8/* lsb */, 3/* width */,
1170 INV_BIT/* pdn bit */, CLK_CFG_UPDATE1/* upd ofs */,
1171 TOP_MUX_NETSYS_SHIFT/* upd shift */),
1172 MUX_CLR_SET_UPD(CLK_TOP_MEDSYS_SEL/* dts */, "medsys_sel",
1173 medsys_parents/* parent */, CLK_CFG_9, CLK_CFG_9_SET,
1174 CLK_CFG_9_CLR/* set parent */, 16/* lsb */, 3/* width */,
1175 INV_BIT/* pdn bit */, CLK_CFG_UPDATE1/* upd ofs */,
1176 TOP_MUX_MEDSYS_SHIFT/* upd shift */),
1177 /* HSM isn't in kernel */
1178 /* CLK_CFG_10 */
1179 /* HSM isn't in kernel */
1180 MUX_CLR_SET_UPD(CLK_TOP_EIP97_SEL/* dts */, "eip97_sel",
1181 eip97_parents/* parent */, CLK_CFG_10, CLK_CFG_10_SET,
1182 CLK_CFG_10_CLR/* set parent */, 8/* lsb */, 3/* width */,
1183 INV_BIT/* pdn bit */, CLK_CFG_UPDATE1/* upd ofs */,
1184 TOP_MUX_EIP97_SHIFT/* upd shift */),
1185 MUX_CLR_SET_UPD(CLK_TOP_SNPS_ETH_312P5M_SEL/* dts */, "snps_eth_312p5m_sel",
1186 snps_eth_312p5m_parents/* parent */, CLK_CFG_10, CLK_CFG_10_SET,
1187 CLK_CFG_10_CLR/* set parent */, 16/* lsb */, 1/* width */,
1188 INV_BIT/* pdn bit */, CLK_CFG_UPDATE1/* upd ofs */,
1189 TOP_MUX_SNPS_ETH_312P5M_SHIFT/* upd shift */),
1190 MUX_CLR_SET_UPD(CLK_TOP_SNPS_ETH_250M_SEL/* dts */, "snps_eth_250m_sel",
1191 snps_eth_250m_parents/* parent */, CLK_CFG_10, CLK_CFG_10_SET,
1192 CLK_CFG_10_CLR/* set parent */, 24/* lsb */, 1/* width */,
1193 INV_BIT/* pdn bit */, CLK_CFG_UPDATE1/* upd ofs */,
1194 TOP_MUX_SNPS_ETH_250M_SHIFT/* upd shift */),
1195 /* CLK_CFG_11 */
1196 MUX_CLR_SET_UPD(CLK_TOP_SNPS_ETH_62P4M_PTP_SEL/* dts */, "snps_ptp_sel",
1197 snps_ptp_parents/* parent */, CLK_CFG_11, CLK_CFG_11_SET,
1198 CLK_CFG_11_CLR/* set parent */, 0/* lsb */, 1/* width */,
1199 INV_BIT/* pdn bit */, CLK_CFG_UPDATE1/* upd ofs */,
1200 TOP_MUX_SNPS_ETH_62P4M_PTP_SHIFT/* upd shift */),
1201 MUX_CLR_SET_UPD(CLK_TOP_SNPS_ETH_50M_RMII_SEL/* dts */, "snps_rmii_sel",
1202 snps_rmii_parents/* parent */, CLK_CFG_11, CLK_CFG_11_SET,
1203 CLK_CFG_11_CLR/* set parent */, 8/* lsb */, 1/* width */,
1204 INV_BIT/* pdn bit */, CLK_CFG_UPDATE1/* upd ofs */,
1205 TOP_MUX_SNPS_ETH_50M_RMII_SHIFT/* upd shift */),
1206 MUX_CLR_SET_UPD(CLK_TOP_NETSYS_500M_SEL/* dts */, "netsys_500m_sel",
1207 netsys_500m_parents/* parent */, CLK_CFG_11, CLK_CFG_11_SET,
1208 CLK_CFG_11_CLR/* set parent */, 16/* lsb */, 1/* width */,
1209 INV_BIT/* pdn bit */, CLK_CFG_UPDATE1/* upd ofs */,
1210 TOP_MUX_NETSYS_500M_SHIFT/* upd shift */),
1211 MUX_CLR_SET_UPD(CLK_TOP_NETSYS_MED_MCU_SEL/* dts */, "netsys_med_mcu_sel",
1212 netsys_med_mcu_parents/* parent */, CLK_CFG_11, CLK_CFG_11_SET,
1213 CLK_CFG_11_CLR/* set parent */, 24/* lsb */, 3/* width */,
1214 INV_BIT/* pdn bit */, CLK_CFG_UPDATE1/* upd ofs */,
1215 TOP_MUX_NETSYS_MED_MCU_SHIFT/* upd shift */),
1216 /* CLK_CFG_12 */
1217 MUX_CLR_SET_UPD(CLK_TOP_NETSYS_WED_MCU_SEL/* dts */, "netsys_wed_mcu_sel",
1218 netsys_wed_mcu_parents/* parent */, CLK_CFG_12, CLK_CFG_12_SET,
1219 CLK_CFG_12_CLR/* set parent */, 0/* lsb */, 3/* width */,
1220 INV_BIT/* pdn bit */, CLK_CFG_UPDATE1/* upd ofs */,
1221 TOP_MUX_NETSYS_WED_MCU_SHIFT/* upd shift */),
1222 MUX_CLR_SET_UPD(CLK_TOP_NETSYS_2X_SEL/* dts */, "netsys_2x_sel",
1223 netsys_2x_parents/* parent */, CLK_CFG_12, CLK_CFG_12_SET,
1224 CLK_CFG_12_CLR/* set parent */, 8/* lsb */, 3/* width */,
1225 INV_BIT/* pdn bit */, CLK_CFG_UPDATE1/* upd ofs */,
1226 TOP_MUX_NETSYS_2X_SHIFT/* upd shift */),
1227 MUX_CLR_SET_UPD(CLK_TOP_SGMII_SEL/* dts */, "sgmii_sel",
1228 sgmii_parents/* parent */, CLK_CFG_12, CLK_CFG_12_SET,
1229 CLK_CFG_12_CLR/* set parent */, 16/* lsb */, 1/* width */,
1230 INV_BIT/* pdn bit */, CLK_CFG_UPDATE1/* upd ofs */,
1231 TOP_MUX_SGMII_SHIFT/* upd shift */),
1232 MUX_CLR_SET_UPD(CLK_TOP_SGMII_SBUS_SEL/* dts */, "sgmii_sbus_sel",
1233 sgmii_sbus_parents/* parent */, CLK_CFG_12, CLK_CFG_12_SET,
1234 CLK_CFG_12_CLR/* set parent */, 24/* lsb */, 1/* width */,
1235 INV_BIT/* pdn bit */, CLK_CFG_UPDATE1/* upd ofs */,
1236 TOP_MUX_SGMII_SBUS_SHIFT/* upd shift */),
1237#else
1238 /* CLK_CFG_0 */
1239 MUX_CLR_SET_UPD(CLK_TOP_AXI_SEL/* dts */, "axi_sel",
1240 axi_parents/* parent */, CLK_CFG_0, CLK_CFG_0_SET,
1241 CLK_CFG_0_CLR/* set parent */, 0/* lsb */, 3/* width */,
1242 INV_BIT/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1243 TOP_MUX_AXI_SHIFT/* upd shift */),
1244 MUX_CLR_SET_UPD(CLK_TOP_SPM_SEL/* dts */, "spm_sel",
1245 spm_parents/* parent */, CLK_CFG_0, CLK_CFG_0_SET,
1246 CLK_CFG_0_CLR/* set parent */, 8/* lsb */, 2/* width */,
1247 INV_BIT/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1248 TOP_MUX_SPM_SHIFT/* upd shift */),
1249 MUX_CLR_SET_UPD(CLK_TOP_BUS_AXIMEM_SEL/* dts */, "bus_aximem_sel",
1250 bus_aximem_parents/* parent */, CLK_CFG_0, CLK_CFG_0_SET,
1251 CLK_CFG_0_CLR/* set parent */, 16/* lsb */, 3/* width */,
1252 INV_BIT/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1253 TOP_MUX_BUS_AXIMEM_SHIFT/* upd shift */),
1254 MUX_CLR_SET_UPD(CLK_TOP_MM_SEL/* dts */, "mm_sel",
1255 mm_parents/* parent */, CLK_CFG_0, CLK_CFG_0_SET,
1256 CLK_CFG_0_CLR/* set parent */, 24/* lsb */, 3/* width */,
1257 31/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1258 TOP_MUX_MM_SHIFT/* upd shift */),
1259 /* CLK_CFG_1 */
1260 MUX_CLR_SET_UPD(CLK_TOP_MFG_REF_SEL/* dts */, "mfg_ref_sel",
1261 mfg_ref_parents/* parent */, CLK_CFG_1, CLK_CFG_1_SET,
1262 CLK_CFG_1_CLR/* set parent */, 0/* lsb */, 2/* width */,
1263 INV_BIT/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1264 TOP_MUX_MFG_REF_SHIFT/* upd shift */),
1265 MUX_CLR_SET_UPD(CLK_TOP_MFG_SEL/* dts */, "mfg_sel",
1266 mfg_parents/* parent */, CLK_CFG_1, CLK_CFG_1_SET,
1267 CLK_CFG_1_CLR/* set parent */, 2/* lsb */, 1/* width */,
1268 INV_BIT/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1269 TOP_MUX_MFG_REF_SHIFT/* upd shift */),
1270 MUX_CLR_SET_UPD(CLK_TOP_UART_SEL/* dts */, "uart_sel",
1271 uart_parents/* parent */, CLK_CFG_1, CLK_CFG_1_SET,
1272 CLK_CFG_1_CLR/* set parent */, 8/* lsb */, 1/* width */,
1273 15/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1274 TOP_MUX_UART_SHIFT/* upd shift */),
1275 MUX_CLR_SET_UPD(CLK_TOP_MSDC50_0_HCLK_SEL/* dts */, "msdc50_0_h_sel",
1276 msdc50_0_h_parents/* parent */, CLK_CFG_1, CLK_CFG_1_SET,
1277 CLK_CFG_1_CLR/* set parent */, 16/* lsb */, 2/* width */,
1278 INV_BIT/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1279 TOP_MUX_MSDC50_0_HCLK_SHIFT/* upd shift */),
1280 MUX_CLR_SET_UPD(CLK_TOP_MSDC50_0_SEL/* dts */, "msdc50_0_sel",
1281 msdc50_0_parents/* parent */, CLK_CFG_1, CLK_CFG_1_SET,
1282 CLK_CFG_1_CLR/* set parent */, 24/* lsb */, 3/* width */,
1283 31/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1284 TOP_MUX_MSDC50_0_SHIFT/* upd shift */),
1285 /* CLK_CFG_2 */
1286 MUX_CLR_SET_UPD(CLK_TOP_MSDC30_1_SEL/* dts */, "msdc30_1_sel",
1287 msdc30_1_parents/* parent */, CLK_CFG_2, CLK_CFG_2_SET,
1288 CLK_CFG_2_CLR/* set parent */, 0/* lsb */, 3/* width */,
1289 7/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1290 TOP_MUX_MSDC30_1_SHIFT/* upd shift */),
1291 MUX_CLR_SET_UPD(CLK_TOP_AUDIO_SEL/* dts */, "audio_sel",
1292 audio_parents/* parent */, CLK_CFG_2, CLK_CFG_2_SET,
1293 CLK_CFG_2_CLR/* set parent */, 8/* lsb */, 2/* width */,
1294 15/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1295 TOP_MUX_AUDIO_SHIFT/* upd shift */),
1296 MUX_CLR_SET_UPD(CLK_TOP_AUD_INTBUS_SEL/* dts */, "aud_intbus_sel",
1297 aud_intbus_parents/* parent */, CLK_CFG_2, CLK_CFG_2_SET,
1298 CLK_CFG_2_CLR/* set parent */, 16/* lsb */, 2/* width */,
1299 23/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1300 TOP_MUX_AUD_INTBUS_SHIFT/* upd shift */),
1301 MUX_CLR_SET_UPD(CLK_TOP_AUD_ENGEN1_SEL/* dts */, "aud_engen1_sel",
1302 aud_engen1_parents/* parent */, CLK_CFG_2, CLK_CFG_2_SET,
1303 CLK_CFG_2_CLR/* set parent */, 24/* lsb */, 2/* width */,
1304 31/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1305 TOP_MUX_AUD_ENGEN1_SHIFT/* upd shift */),
1306 /* CLK_CFG_3 */
1307 MUX_CLR_SET_UPD(CLK_TOP_AUD_ENGEN2_SEL/* dts */, "aud_engen2_sel",
1308 aud_engen2_parents/* parent */, CLK_CFG_3, CLK_CFG_3_SET,
1309 CLK_CFG_3_CLR/* set parent */, 0/* lsb */, 2/* width */,
1310 7/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1311 TOP_MUX_AUD_ENGEN2_SHIFT/* upd shift */),
1312 MUX_CLR_SET_UPD(CLK_TOP_AUD_1_SEL/* dts */, "aud_1_sel",
1313 aud_1_parents/* parent */, CLK_CFG_3, CLK_CFG_3_SET,
1314 CLK_CFG_3_CLR/* set parent */, 8/* lsb */, 1/* width */,
1315 15/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1316 TOP_MUX_AUD_1_SHIFT/* upd shift */),
1317 MUX_CLR_SET_UPD(CLK_TOP_AUD_2_SEL/* dts */, "aud_2_sel",
1318 aud_2_parents/* parent */, CLK_CFG_3, CLK_CFG_3_SET,
1319 CLK_CFG_3_CLR/* set parent */, 16/* lsb */, 1/* width */,
1320 23/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1321 TOP_MUX_AUD_2_SHIFT/* upd shift */),
1322 MUX_CLR_SET_UPD(CLK_TOP_PWRAP_ULPOSC_SEL/* dts */, "pwrap_ulposc_sel",
1323 pwrap_ulposc_parents/* parent */, CLK_CFG_3, CLK_CFG_3_SET,
1324 CLK_CFG_3_CLR/* set parent */, 24/* lsb */, 3/* width */,
1325 31/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1326 TOP_MUX_PWRAP_ULPOSC_SHIFT/* upd shift */),
1327 /* CLK_CFG_4 */
1328 MUX_CLR_SET_UPD(CLK_TOP_ATB_SEL/* dts */, "atb_sel",
1329 atb_parents/* parent */, CLK_CFG_4, CLK_CFG_4_SET,
1330 CLK_CFG_4_CLR/* set parent */, 0/* lsb */, 2/* width */,
1331 7/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1332 TOP_MUX_ATB_SHIFT/* upd shift */),
1333 MUX_CLR_SET_UPD(CLK_TOP_PWRMCU_SEL/* dts */, "pwrmcu_sel",
1334 pwrmcu_parents/* parent */, CLK_CFG_4, CLK_CFG_4_SET,
1335 CLK_CFG_4_CLR/* set parent */, 8/* lsb */, 3/* width */,
1336 INV_BIT/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1337 TOP_MUX_PWRMCU_SHIFT/* upd shift */),
1338 MUX_CLR_SET_UPD(CLK_TOP_DBI_SEL/* dts */, "dbi_sel",
1339 dbi_parents/* parent */, CLK_CFG_4, CLK_CFG_4_SET,
1340 CLK_CFG_4_CLR/* set parent */, 16/* lsb */, 3/* width */,
1341 23/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1342 TOP_MUX_DBI_SHIFT/* upd shift */),
1343 MUX_CLR_SET_UPD(CLK_TOP_DISP_PWM_SEL/* dts */, "disp_pwm_sel",
1344 disp_pwm_parents/* parent */, CLK_CFG_4, CLK_CFG_4_SET,
1345 CLK_CFG_4_CLR/* set parent */, 24/* lsb */, 3/* width */,
1346 31/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1347 TOP_MUX_DISP_PWM_SHIFT/* upd shift */),
1348 /* CLK_CFG_5 */
1349 MUX_CLR_SET_UPD(CLK_TOP_USB_TOP_SEL/* dts */, "usb_sel",
1350 usb_parents/* parent */, CLK_CFG_5, CLK_CFG_5_SET,
1351 CLK_CFG_5_CLR/* set parent */, 0/* lsb */, 2/* width */,
1352 7/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1353 TOP_MUX_USB_TOP_SHIFT/* upd shift */),
1354 MUX_CLR_SET_UPD(CLK_TOP_SSUSB_XHCI_SEL/* dts */, "ssusb_xhci_sel",
1355 ssusb_xhci_parents/* parent */, CLK_CFG_5, CLK_CFG_5_SET,
1356 CLK_CFG_5_CLR/* set parent */, 8/* lsb */, 2/* width */,
1357 15/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1358 TOP_MUX_SSUSB_XHCI_SHIFT/* upd shift */),
1359 MUX_CLR_SET_UPD(CLK_TOP_I2C_SEL/* dts */, "i2c_sel",
1360 i2c_parents/* parent */, CLK_CFG_5, CLK_CFG_5_SET,
1361 CLK_CFG_5_CLR/* set parent */, 16/* lsb */, 2/* width */,
1362 23/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1363 TOP_MUX_I2C_SHIFT/* upd shift */),
1364 MUX_CLR_SET_UPD(CLK_TOP_TL_SEL/* dts */, "tl_sel",
1365 tl_parents/* parent */, CLK_CFG_5, CLK_CFG_5_SET,
1366 CLK_CFG_5_CLR/* set parent */, 24/* lsb */, 2/* width */,
1367 31/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1368 TOP_MUX_TL_SHIFT/* upd shift */),
1369 /* CLK_CFG_6 */
1370 MUX_CLR_SET_UPD(CLK_TOP_DPMAIF_MAIN_SEL/* dts */, "dpmaif_main_sel",
1371 dpmaif_main_parents/* parent */, CLK_CFG_6, CLK_CFG_6_SET,
1372 CLK_CFG_6_CLR/* set parent */, 0/* lsb */, 3/* width */,
1373 7/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1374 TOP_MUX_DPMAIF_MAIN_SHIFT/* upd shift */),
1375 MUX_CLR_SET_UPD(CLK_TOP_PWM_SEL/* dts */, "pwm_sel",
1376 pwm_parents/* parent */, CLK_CFG_6, CLK_CFG_6_SET,
1377 CLK_CFG_6_CLR/* set parent */, 8/* lsb */, 1/* width */,
1378 15/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1379 TOP_MUX_PWM_SHIFT/* upd shift */),
1380 MUX_CLR_SET_UPD(CLK_TOP_SPMI_M_MST_SEL/* dts */, "spmi_m_mst_sel",
1381 spmi_m_mst_parents/* parent */, CLK_CFG_6, CLK_CFG_6_SET,
1382 CLK_CFG_6_CLR/* set parent */, 16/* lsb */, 3/* width */,
1383 INV_BIT/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1384 TOP_MUX_SPMI_M_MST_SHIFT/* upd shift */),
1385 MUX_CLR_SET_UPD(CLK_TOP_SPMI_P_MST_SEL/* dts */, "spmi_p_mst_sel",
1386 spmi_p_mst_parents/* parent */, CLK_CFG_6, CLK_CFG_6_SET,
1387 CLK_CFG_6_CLR/* set parent */, 24/* lsb */, 4/* width */,
1388 INV_BIT/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1389 TOP_MUX_SPMI_P_MST_SHIFT/* upd shift */),
1390 /* CLK_CFG_7 */
1391 MUX_CLR_SET_UPD(CLK_TOP_DVFSRC_SEL/* dts */, "dvfsrc_sel",
1392 dvfsrc_parents/* parent */, CLK_CFG_7, CLK_CFG_7_SET,
1393 CLK_CFG_7_CLR/* set parent */, 0/* lsb */, 1/* width */,
1394 INV_BIT/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1395 TOP_MUX_DVFSRC_SHIFT/* upd shift */),
1396 MUX_CLR_SET_UPD(CLK_TOP_MCUPM_SEL/* dts */, "mcupm_sel",
1397 mcupm_parents/* parent */, CLK_CFG_7, CLK_CFG_7_SET,
1398 CLK_CFG_7_CLR/* set parent */, 8/* lsb */, 2/* width */,
1399 INV_BIT/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1400 TOP_MUX_MCUPM_SHIFT/* upd shift */),
1401 MUX_CLR_SET_UPD(CLK_TOP_SFLASH_SEL/* dts */, "sflash_sel",
1402 sflash_parents/* parent */, CLK_CFG_7, CLK_CFG_7_SET,
1403 CLK_CFG_7_CLR/* set parent */, 16/* lsb */, 2/* width */,
1404 23/* pdn */, CLK_CFG_UPDATE/* upd ofs */,
1405 TOP_MUX_SFLASH_SHIFT/* upd shift */),
1406 MUX_CLR_SET_UPD(CLK_TOP_GCPU_SEL/* dts */, "gcpu_sel",
1407 gcpu_parents/* parent */, CLK_CFG_7, CLK_CFG_7_SET,
1408 CLK_CFG_7_CLR/* set parent */, 24/* lsb */, 3/* width */,
1409 INV_BIT/* pdn */, CLK_CFG_UPDATE1/* upd ofs */,
1410 TOP_MUX_GCPU_SHIFT/* upd shift */),
1411 /* CLK_CFG_8 */
1412 MUX_CLR_SET_UPD(CLK_TOP_SPI_SEL/* dts */, "spi_sel",
1413 spi_parents/* parent */, CLK_CFG_8, CLK_CFG_8_SET,
1414 CLK_CFG_8_CLR/* set parent */, 0/* lsb */, 3/* width */,
1415 7/* pdn */, CLK_CFG_UPDATE1/* upd ofs */,
1416 TOP_MUX_SPI_SHIFT/* upd shift */),
1417 MUX_CLR_SET_UPD(CLK_TOP_SPIS_SEL/* dts */, "spis_sel",
1418 spis_parents/* parent */, CLK_CFG_8, CLK_CFG_8_SET,
1419 CLK_CFG_8_CLR/* set parent */, 8/* lsb */, 3/* width */,
1420 15/* pdn */, CLK_CFG_UPDATE1/* upd ofs */,
1421 TOP_MUX_SPIS_SHIFT/* upd shift */),
1422 MUX_CLR_SET_UPD(CLK_TOP_ECC_SEL/* dts */, "ecc_sel",
1423 ecc_parents/* parent */, CLK_CFG_8, CLK_CFG_8_SET,
1424 CLK_CFG_8_CLR/* set parent */, 16/* lsb */, 2/* width */,
1425 23/* pdn */, CLK_CFG_UPDATE1/* upd ofs */,
1426 TOP_MUX_ECC_SHIFT/* upd shift */),
1427 MUX_CLR_SET_UPD(CLK_TOP_NFI1X_SEL/* dts */, "nfi1x_sel",
1428 nfi1x_parents/* parent */, CLK_CFG_8, CLK_CFG_8_SET,
1429 CLK_CFG_8_CLR/* set parent */, 24/* lsb */, 3/* width */,
1430 31/* pdn */, CLK_CFG_UPDATE1/* upd ofs */,
1431 TOP_MUX_NFI1X_SHIFT/* upd shift */),
1432 /* CLK_CFG_9 */
1433 MUX_CLR_SET_UPD(CLK_TOP_SPINFI_BCLK_SEL/* dts */, "spinfi_bclk_sel",
1434 spinfi_bclk_parents/* parent */, CLK_CFG_9, CLK_CFG_9_SET,
1435 CLK_CFG_9_CLR/* set parent */, 0/* lsb */, 3/* width */,
1436 7/* pdn */, CLK_CFG_UPDATE1/* upd ofs */,
1437 TOP_MUX_SPINFI_BCLK_SHIFT/* upd shift */),
1438 MUX_CLR_SET_UPD(CLK_TOP_NETSYS_SEL/* dts */, "netsys_sel",
1439 netsys_parents/* parent */, CLK_CFG_9, CLK_CFG_9_SET,
1440 CLK_CFG_9_CLR/* set parent */, 8/* lsb */, 3/* width */,
1441 15/* pdn */, CLK_CFG_UPDATE1/* upd ofs */,
1442 TOP_MUX_NETSYS_SHIFT/* upd shift */),
1443 MUX_CLR_SET_UPD(CLK_TOP_MEDSYS_SEL/* dts */, "medsys_sel",
1444 medsys_parents/* parent */, CLK_CFG_9, CLK_CFG_9_SET,
1445 CLK_CFG_9_CLR/* set parent */, 16/* lsb */, 3/* width */,
1446 23/* pdn */, CLK_CFG_UPDATE1/* upd ofs */,
1447 TOP_MUX_MEDSYS_SHIFT/* upd shift */),
1448 /* HSM isn't in kernel. */
1449 /* CLK_CFG_10 */
1450 MUX_CLR_SET_UPD(CLK_TOP_EIP97_SEL/* dts */, "eip97_sel",
1451 eip97_parents/* parent */, CLK_CFG_10, CLK_CFG_10_SET,
1452 CLK_CFG_10_CLR/* set parent */, 8/* lsb */, 3/* width */,
1453 15/* pdn */, CLK_CFG_UPDATE1/* upd ofs */,
1454 TOP_MUX_EIP97_SHIFT/* upd shift */),
1455 MUX_CLR_SET_UPD(CLK_TOP_SNPS_ETH_312P5M_SEL/* dts */, "snps_eth_312p5m_sel",
1456 snps_eth_312p5m_parents/* parent */, CLK_CFG_10, CLK_CFG_10_SET,
1457 CLK_CFG_10_CLR/* set parent */, 16/* lsb */, 1/* width */,
1458 23/* pdn */, CLK_CFG_UPDATE1/* upd ofs */,
1459 TOP_MUX_SNPS_ETH_312P5M_SHIFT/* upd shift */),
1460 MUX_CLR_SET_UPD(CLK_TOP_SNPS_ETH_250M_SEL/* dts */, "snps_eth_250m_sel",
1461 snps_eth_250m_parents/* parent */, CLK_CFG_10, CLK_CFG_10_SET,
1462 CLK_CFG_10_CLR/* set parent */, 24/* lsb */, 1/* width */,
1463 31/* pdn */, CLK_CFG_UPDATE1/* upd ofs */,
1464 TOP_MUX_SNPS_ETH_250M_SHIFT/* upd shift */),
1465 /* CLK_CFG_11 */
1466 MUX_CLR_SET_UPD(CLK_TOP_SNPS_ETH_62P4M_PTP_SEL/* dts */, "snps_ptp_sel",
1467 snps_ptp_parents/* parent */, CLK_CFG_11, CLK_CFG_11_SET,
1468 CLK_CFG_11_CLR/* set parent */, 0/* lsb */, 1/* width */,
1469 7/* pdn */, CLK_CFG_UPDATE1/* upd ofs */,
1470 TOP_MUX_SNPS_ETH_62P4M_PTP_SHIFT/* upd shift */),
1471 MUX_CLR_SET_UPD(CLK_TOP_SNPS_ETH_50M_RMII_SEL/* dts */, "snps_rmii_sel",
1472 snps_rmii_parents/* parent */, CLK_CFG_11, CLK_CFG_11_SET,
1473 CLK_CFG_11_CLR/* set parent */, 8/* lsb */, 1/* width */,
1474 15/* pdn */, CLK_CFG_UPDATE1/* upd ofs */,
1475 TOP_MUX_SNPS_ETH_50M_RMII_SHIFT/* upd shift */),
1476 MUX_CLR_SET_UPD(CLK_TOP_NETSYS_500M_SEL/* dts */, "netsys_500m_sel",
1477 netsys_500m_parents/* parent */, CLK_CFG_11, CLK_CFG_11_SET,
1478 CLK_CFG_11_CLR/* set parent */, 16/* lsb */, 1/* width */,
1479 23/* pdn */, CLK_CFG_UPDATE1/* upd ofs */,
1480 TOP_MUX_NETSYS_500M_SHIFT/* upd shift */),
1481 MUX_CLR_SET_UPD(CLK_TOP_NETSYS_MED_MCU_SEL/* dts */, "netsys_med_mcu_sel",
1482 netsys_med_mcu_parents/* parent */, CLK_CFG_11, CLK_CFG_11_SET,
1483 CLK_CFG_11_CLR/* set parent */, 24/* lsb */, 3/* width */,
1484 31/* pdn */, CLK_CFG_UPDATE1/* upd ofs */,
1485 TOP_MUX_NETSYS_MED_MCU_SHIFT/* upd shift */),
1486 /* CLK_CFG_12 */
1487 MUX_CLR_SET_UPD(CLK_TOP_NETSYS_WED_MCU_SEL/* dts */, "netsys_wed_mcu_sel",
1488 netsys_wed_mcu_parents/* parent */, CLK_CFG_12, CLK_CFG_12_SET,
1489 CLK_CFG_12_CLR/* set parent */, 0/* lsb */, 3/* width */,
1490 7/* pdn */, CLK_CFG_UPDATE1/* upd ofs */,
1491 TOP_MUX_NETSYS_WED_MCU_SHIFT/* upd shift */),
1492 MUX_CLR_SET_UPD(CLK_TOP_NETSYS_2X_SEL/* dts */, "netsys_2x_sel",
1493 netsys_2x_parents/* parent */, CLK_CFG_12, CLK_CFG_12_SET,
1494 CLK_CFG_12_CLR/* set parent */, 8/* lsb */, 3/* width */,
1495 15/* pdn */, CLK_CFG_UPDATE1/* upd ofs */,
1496 TOP_MUX_NETSYS_2X_SHIFT/* upd shift */),
1497 MUX_CLR_SET_UPD(CLK_TOP_SGMII_SEL/* dts */, "sgmii_sel",
1498 sgmii_parents/* parent */, CLK_CFG_12, CLK_CFG_12_SET,
1499 CLK_CFG_12_CLR/* set parent */, 16/* lsb */, 1/* width */,
1500 23/* pdn */, CLK_CFG_UPDATE1/* upd ofs */,
1501 TOP_MUX_SGMII_SHIFT/* upd shift */),
1502 MUX_CLR_SET_UPD(CLK_TOP_SGMII_SBUS_SEL/* dts */, "sgmii_sbus_sel",
1503 sgmii_sbus_parents/* parent */, CLK_CFG_12, CLK_CFG_12_SET,
1504 CLK_CFG_12_CLR/* set parent */, 24/* lsb */, 1/* width */,
1505 31/* pdn */, CLK_CFG_UPDATE1/* upd ofs */,
1506 TOP_MUX_SGMII_SBUS_SHIFT/* upd shift */),
1507#endif /* MT_CCF_MUX_DISABLE */
1508};
1509
1510static const struct mtk_composite top_composites[] = {
1511 /* CLK_AUDDIV_0 */
1512 MUX(CLK_TOP_APLL_I2S0_MCK_SEL/* dts */, "apll_i2s0_mck_sel",
1513 apll_i2s0_mck_parents/* parent */, 0x0320/* ofs */,
1514 16/* lsb */, 1/* width */),
1515 MUX(CLK_TOP_APLL_I2S1_MCK_SEL/* dts */, "apll_i2s1_mck_sel",
1516 apll_i2s1_mck_parents/* parent */, 0x0320/* ofs */,
1517 17/* lsb */, 1/* width */),
1518 MUX(CLK_TOP_APLL_I2S2_MCK_SEL/* dts */, "apll_i2s2_mck_sel",
1519 apll_i2s2_mck_parents/* parent */, 0x0320/* ofs */,
1520 18/* lsb */, 1/* width */),
1521 MUX(CLK_TOP_APLL_I2S4_MCK_SEL/* dts */, "apll_i2s4_mck_sel",
1522 apll_i2s4_mck_parents/* parent */, 0x0320/* ofs */,
1523 19/* lsb */, 1/* width */),
1524 MUX(CLK_TOP_APLL_TDMOUT_MCK_SEL/* dts */, "apll_tdmout_mck_sel",
1525 apll_tdmout_mck_parents/* parent */, 0x0320/* ofs */,
1526 20/* lsb */, 1/* width */),
1527 MUX(CLK_TOP_APLL_I2S5_MCK_SEL/* dts */, "apll_i2s5_mck_sel",
1528 apll_i2s5_mck_parents/* parent */, 0x0320/* ofs */,
1529 21/* lsb */, 1/* width */),
1530 MUX(CLK_TOP_APLL_I2S6_MCK_SEL/* dts */, "apll_i2s6_mck_sel",
1531 apll_i2s6_mck_parents/* parent */, 0x0320/* ofs */,
1532 22/* lsb */, 1/* width */),
1533#if MT_CCF_MUX_DISABLE
1534 /* CLK_AUDDIV_2 */
1535 DIV_GATE(CLK_TOP_APLL12_CK_DIV0/* dts */, "apll12_div0"/* ccf */,
1536 "apll_i2s0_mck_sel"/* parent */, INV_OFS/* pdn ofs */,
1537 INV_BIT/* pdn bit */, CLK_AUDDIV_2/* ofs */, 0/* lsb */,
1538 8/* width */),
1539 DIV_GATE(CLK_TOP_APLL12_CK_DIV1/* dts */, "apll12_div1"/* ccf */,
1540 "apll_i2s1_mck_sel"/* parent */, INV_OFS/* pdn ofs */,
1541 INV_BIT/* pdn bit */, CLK_AUDDIV_2/* ofs */, 8/* lsb */,
1542 8/* width */),
1543 DIV_GATE(CLK_TOP_APLL12_CK_DIV2/* dts */, "apll12_div2"/* ccf */,
1544 "apll_i2s2_mck_sel"/* parent */, INV_OFS/* pdn ofs */,
1545 INV_BIT/* pdn bit */, CLK_AUDDIV_2/* ofs */, 16/* lsb */,
1546 8/* width */),
1547 DIV_GATE(CLK_TOP_APLL12_CK_DIV4/* dts */, "apll12_div4"/* ccf */,
1548 "apll_i2s4_mck_sel"/* parent */, INV_OFS/* pdn ofs */,
1549 INV_BIT/* pdn bit */, CLK_AUDDIV_2/* ofs */, 24/* lsb */,
1550 8/* width */),
1551 /* CLK_AUDDIV_3 */
1552 DIV_GATE(CLK_TOP_APLL12_CK_DIV_TDMOUT_M/* dts */, "apll12_div_tdmout_m"/* ccf */,
1553 "apll_tdmout_mck_sel"/* parent */, INV_OFS/* pdn ofs */,
1554 INV_BIT/* pdn bit */, CLK_AUDDIV_3/* ofs */, 0/* lsb */,
1555 8/* width */),
1556 DIV_GATE(CLK_TOP_APLL12_CK_DIV_TDMOUT_B/* dts */, "apll12_div_tdmout_b"/* ccf */,
1557 "apll_tdmout_mck_sel"/* parent */, INV_OFS/* pdn ofs */,
1558 INV_BIT/* pdn bit */, CLK_AUDDIV_3/* ofs */, 8/* lsb */,
1559 8/* width */),
1560 DIV_GATE(CLK_TOP_APLL12_CK_DIV5/* dts */, "apll12_div5"/* ccf */,
1561 "apll_i2s5_mck_sel"/* parent */, INV_OFS/* pdn ofs */,
1562 INV_BIT/* pdn bit */, CLK_AUDDIV_3/* ofs */, 16/* lsb */,
1563 8/* width */),
1564 DIV_GATE(CLK_TOP_APLL12_CK_DIV6/* dts */, "apll12_div6"/* ccf */,
1565 "apll_i2s6_mck_sel"/* parent */, INV_OFS/* pdn ofs */,
1566 INV_BIT/* pdn bit */, CLK_AUDDIV_3/* ofs */, 24/* lsb */,
1567 8/* width */),
1568#else
1569 /* CLK_AUDDIV_2 */
1570 DIV_GATE(CLK_TOP_APLL12_CK_DIV0/* dts */, "apll12_div0"/* ccf */,
1571 "apll_i2s0_mck_sel"/* parent */, 0x0320/* pdn ofs */,
1572 0/* pdn bit */, CLK_AUDDIV_2/* ofs */,
1573 8/* width */, 0/* lsb */),
1574 DIV_GATE(CLK_TOP_APLL12_CK_DIV1/* dts */, "apll12_div1"/* ccf */,
1575 "apll_i2s1_mck_sel"/* parent */, 0x0320/* pdn ofs */,
1576 1/* pdn bit */, CLK_AUDDIV_2/* ofs */,
1577 8/* width */, 8/* lsb */),
1578 DIV_GATE(CLK_TOP_APLL12_CK_DIV2/* dts */, "apll12_div2"/* ccf */,
1579 "apll_i2s2_mck_sel"/* parent */, 0x0320/* pdn ofs */,
1580 2/* pdn bit */, CLK_AUDDIV_2/* ofs */,
1581 8/* width */, 16/* lsb */),
1582 DIV_GATE(CLK_TOP_APLL12_CK_DIV4/* dts */, "apll12_div4"/* ccf */,
1583 "apll_i2s4_mck_sel"/* parent */, 0x0320/* pdn ofs */,
1584 3/* pdn bit */, CLK_AUDDIV_2/* ofs */,
1585 8/* width */, 24/* lsb */),
1586 /* CLK_AUDDIV_3 */
1587 DIV_GATE(CLK_TOP_APLL12_CK_DIV_TDMOUT_M/* dts */, "apll12_div_tdmout_m"/* ccf */,
1588 "apll_tdmout_mck_sel"/* parent */, 0x0320/* pdn ofs */,
1589 4/* pdn bit */, CLK_AUDDIV_3/* ofs */,
1590 8/* width */, 0/* lsb */),
1591 DIV_GATE(CLK_TOP_APLL12_CK_DIV_TDMOUT_B/* dts */, "apll12_div_tdmout_b"/* ccf */,
1592 "apll_tdmout_mck_sel"/* parent */, 0x0320/* pdn ofs */,
1593 5/* pdn bit */, CLK_AUDDIV_3/* ofs */,
1594 8/* width */, 8/* lsb */),
1595 DIV_GATE(CLK_TOP_APLL12_CK_DIV5/* dts */, "apll12_div5"/* ccf */,
1596 "apll_i2s5_mck_sel"/* parent */, 0x0320/* pdn ofs */,
1597 6/* pdn bit */, CLK_AUDDIV_3/* ofs */,
1598 8/* width */, 16/* lsb */),
1599 DIV_GATE(CLK_TOP_APLL12_CK_DIV6/* dts */, "apll12_div6"/* ccf */,
1600 "apll_i2s6_mck_sel"/* parent */, 0x0320/* pdn ofs */,
1601 7/* pdn bit */, CLK_AUDDIV_3/* ofs */,
1602 8/* width */, 24/* lsb */),
1603#endif /* MT_CCF_MUX_DISABLE */
1604};
1605
1606static const struct mtk_gate_regs ifrao0_cg_regs = {
1607 .set_ofs = 0x70,
1608 .clr_ofs = 0x70,
1609 .sta_ofs = 0x70,
1610};
1611
1612static const struct mtk_gate_regs ifrao1_cg_regs = {
1613 .set_ofs = 0x74,
1614 .clr_ofs = 0x74,
1615 .sta_ofs = 0x74,
1616};
1617
1618static const struct mtk_gate_regs ifrao2_cg_regs = {
1619 .set_ofs = 0x80,
1620 .clr_ofs = 0x84,
1621 .sta_ofs = 0x90,
1622};
1623
1624static const struct mtk_gate_regs ifrao3_cg_regs = {
1625 .set_ofs = 0x88,
1626 .clr_ofs = 0x8c,
1627 .sta_ofs = 0x94,
1628};
1629
1630static const struct mtk_gate_regs ifrao4_cg_regs = {
1631 .set_ofs = 0xa4,
1632 .clr_ofs = 0xa8,
1633 .sta_ofs = 0xac,
1634};
1635
1636static const struct mtk_gate_regs ifrao5_cg_regs = {
1637 .set_ofs = 0xc0,
1638 .clr_ofs = 0xc4,
1639 .sta_ofs = 0xc8,
1640};
1641
1642static const struct mtk_gate_regs ifrao6_cg_regs = {
1643 .set_ofs = 0xe0,
1644 .clr_ofs = 0xe4,
1645 .sta_ofs = 0xe8,
1646};
1647
1648#define GATE_IFRAO0(_id, _name, _parent, _shift) { \
1649 .id = _id, \
1650 .name = _name, \
1651 .parent_name = _parent, \
1652 .regs = &ifrao0_cg_regs, \
1653 .shift = _shift, \
1654 .ops = &mtk_clk_gate_ops_no_setclr, \
1655 }
1656
1657#define GATE_IFRAO1(_id, _name, _parent, _shift) { \
1658 .id = _id, \
1659 .name = _name, \
1660 .parent_name = _parent, \
1661 .regs = &ifrao1_cg_regs, \
1662 .shift = _shift, \
1663 .ops = &mtk_clk_gate_ops_no_setclr, \
1664 }
1665
1666#define GATE_IFRAO2(_id, _name, _parent, _shift) { \
1667 .id = _id, \
1668 .name = _name, \
1669 .parent_name = _parent, \
1670 .regs = &ifrao2_cg_regs, \
1671 .shift = _shift, \
1672 .ops = &mtk_clk_gate_ops_setclr, \
1673 }
1674
1675#define GATE_IFRAO3(_id, _name, _parent, _shift) { \
1676 .id = _id, \
1677 .name = _name, \
1678 .parent_name = _parent, \
1679 .regs = &ifrao3_cg_regs, \
1680 .shift = _shift, \
1681 .ops = &mtk_clk_gate_ops_setclr, \
1682 }
1683
1684#define GATE_IFRAO3_I(_id, _name, _parent, _shift) { \
1685 .id = _id, \
1686 .name = _name, \
1687 .parent_name = _parent, \
1688 .regs = &ifrao3_cg_regs, \
1689 .shift = _shift, \
1690 .ops = &mtk_clk_gate_ops_setclr_inv, \
1691 }
1692
1693#define GATE_IFRAO4(_id, _name, _parent, _shift) { \
1694 .id = _id, \
1695 .name = _name, \
1696 .parent_name = _parent, \
1697 .regs = &ifrao4_cg_regs, \
1698 .shift = _shift, \
1699 .ops = &mtk_clk_gate_ops_setclr, \
1700 }
1701
1702#define GATE_IFRAO5(_id, _name, _parent, _shift) { \
1703 .id = _id, \
1704 .name = _name, \
1705 .parent_name = _parent, \
1706 .regs = &ifrao5_cg_regs, \
1707 .shift = _shift, \
1708 .ops = &mtk_clk_gate_ops_setclr, \
1709 }
1710
1711#define GATE_IFRAO6(_id, _name, _parent, _shift) { \
1712 .id = _id, \
1713 .name = _name, \
1714 .parent_name = _parent, \
1715 .regs = &ifrao6_cg_regs, \
1716 .shift = _shift, \
1717 .ops = &mtk_clk_gate_ops_setclr, \
1718 }
1719
1720#define GATE_IFRAO6_I(_id, _name, _parent, _shift) { \
1721 .id = _id, \
1722 .name = _name, \
1723 .parent_name = _parent, \
1724 .regs = &ifrao6_cg_regs, \
1725 .shift = _shift, \
1726 .ops = &mtk_clk_gate_ops_setclr_inv, \
1727 }
1728
1729static const struct mtk_gate ifrao_clks[] = {
1730 /* IFRAO0 */
1731 /* IFRAO1 */
1732 /* IFRAO2 */
1733 GATE_IFRAO2(CLK_IFRAO_PMIC_TMR_SET, "ifrao_pmic_tmr_set",
1734 "fpwrap_ulposc_ck"/* parent */, 0),
1735 GATE_IFRAO2(CLK_IFRAO_PMIC_AP_SET, "ifrao_pmic_ap_set",
1736 "fpwrap_ulposc_ck"/* parent */, 1),
1737 GATE_IFRAO2(CLK_IFRAO_PMIC_MD_SET, "ifrao_pmic_md_set",
1738 "fpwrap_ulposc_ck"/* parent */, 2),
1739 GATE_IFRAO2(CLK_IFRAO_PMIC_CONN_SET, "ifrao_pmic_conn_set",
1740 "fpwrap_ulposc_ck"/* parent */, 3),
1741 GATE_IFRAO2(CLK_IFRAO_SEJ, "ifrao_sej",
1742 "axi_ck"/* parent */, 5),
1743 GATE_IFRAO2(CLK_IFRAO_MCUPM, "ifrao_mcupm",
1744 "mcupm_ck"/* parent */, 7),
1745 GATE_IFRAO2(CLK_IFRAO_GCE, "ifrao_gce",
1746 "axi_ck"/* parent */, 8),
1747 GATE_IFRAO2(CLK_IFRAO_GCE2, "ifrao_gce2",
1748 "axi_ck"/* parent */, 9),
1749 GATE_IFRAO2(CLK_IFRAO_THERM, "ifrao_therm",
1750 "axi_ck"/* parent */, 10),
1751 GATE_IFRAO2(CLK_IFRAO_I2C0, "ifrao_i2c0",
1752 "i2c_ck"/* parent */, 11),
1753 GATE_IFRAO2(CLK_IFRAO_I2C1, "ifrao_i2c1",
1754 "i2c_ck"/* parent */, 12),
1755 GATE_IFRAO2(CLK_IFRAO_I2C2, "ifrao_i2c2",
1756 "i2c_ck"/* parent */, 13),
1757 GATE_IFRAO2(CLK_IFRAO_I2C3, "ifrao_i2c3",
1758 "i2c_ck"/* parent */, 14),
1759 GATE_IFRAO2(CLK_IFRAO_PWM_HCLK, "ifrao_pwm_hclk",
1760 "axi_ck"/* parent */, 15),
1761 GATE_IFRAO2(CLK_IFRAO_PWM1, "ifrao_pwm1",
1762 "pwm_ck"/* parent */, 16),
1763 GATE_IFRAO2(CLK_IFRAO_PWM2, "ifrao_pwm2",
1764 "pwm_ck"/* parent */, 17),
1765 GATE_IFRAO2(CLK_IFRAO_PWM3, "ifrao_pwm3",
1766 "pwm_ck"/* parent */, 18),
1767 GATE_IFRAO2(CLK_IFRAO_PWM4, "ifrao_pwm4",
1768 "pwm_ck"/* parent */, 19),
1769 GATE_IFRAO2(CLK_IFRAO_PWM5, "ifrao_pwm5",
1770 "pwm_ck"/* parent */, 20),
1771 GATE_IFRAO2(CLK_IFRAO_PWM, "ifrao_pwm",
1772 "pwm_ck"/* parent */, 21),
1773 GATE_IFRAO2(CLK_IFRAO_UART0, "ifrao_uart0",
1774 "fuart_ck"/* parent */, 22),
1775 GATE_IFRAO2(CLK_IFRAO_UART1, "ifrao_uart1",
1776 "fuart_ck"/* parent */, 23),
1777 GATE_IFRAO2(CLK_IFRAO_UART2, "ifrao_uart2",
1778 "fuart_ck"/* parent */, 24),
1779 GATE_IFRAO2(CLK_IFRAO_UART3, "ifrao_uart3",
1780 "fuart_ck"/* parent */, 25),
1781 GATE_IFRAO2(CLK_IFRAO_GCE_26M_SET, "ifrao_gce_26m_set",
1782 "axi_ck"/* parent */, 27),
1783 /* IFRAO3 */
1784 GATE_IFRAO3(CLK_IFRAO_SPI0, "ifrao_spi0",
1785 "spi_ck"/* parent */, 1),
1786 GATE_IFRAO3(CLK_IFRAO_MSDC0, "ifrao_msdc0",
1787 "axi_ck"/* parent */, 2),
1788 GATE_IFRAO3(CLK_IFRAO_MSDC1, "ifrao_msdc1",
1789 "axi_ck"/* parent */, 4),
1790 GATE_IFRAO3(CLK_IFRAO_MSDC0_SRC_CLK, "ifrao_msdc0_clk",
1791 "msdc50_0_ck"/* parent */, 6),
1792 GATE_IFRAO3(CLK_IFRAO_TRNG, "ifrao_trng",
1793 "axi_ck"/* parent */, 9),
1794 GATE_IFRAO3(CLK_IFRAO_AUXADC, "ifrao_auxadc",
1795 "f26m_ck"/* parent */, 10),
1796 GATE_IFRAO3(CLK_IFRAO_CPUM, "ifrao_cpum",
1797 "axi_ck"/* parent */, 11),
1798 GATE_IFRAO3(CLK_IFRAO_CCIF1_AP, "ifrao_ccif1_ap",
1799 "axi_ck"/* parent */, 12),
1800 GATE_IFRAO3(CLK_IFRAO_CCIF1_MD, "ifrao_ccif1_md",
1801 "axi_ck"/* parent */, 13),
1802 GATE_IFRAO3(CLK_IFRAO_AUXADC_MD, "ifrao_auxadc_md",
1803 "f26m_ck"/* parent */, 14),
1804 GATE_IFRAO3(CLK_IFRAO_PCIE_TL_26M, "ifrao_pcie_tl_26m",
1805 "axi_ck"/* parent */, 15),
1806 GATE_IFRAO3(CLK_IFRAO_MSDC1_SRC_CLK, "ifrao_msdc1_clk",
1807 "msdc30_1_ck"/* parent */, 16),
1808 GATE_IFRAO3(CLK_IFRAO_PCIE_TL_96M, "ifrao_pcie_tl_96m",
1809 "tl_ck"/* parent */, 18),
1810 GATE_IFRAO3(CLK_IFRAO_DEVICE_APC, "ifrao_dapc",
1811 "axi_ck"/* parent */, 20),
1812 GATE_IFRAO3(CLK_IFRAO_CCIF_AP, "ifrao_ccif_ap",
1813 "axi_ck"/* parent */, 23),
1814 GATE_IFRAO3(CLK_IFRAO_DEBUGSYS, "ifrao_debugsys",
1815 "axi_ck"/* parent */, 24),
1816 GATE_IFRAO3(CLK_IFRAO_AUDIO, "ifrao_audio",
1817 "axi_ck"/* parent */, 25),
1818 GATE_IFRAO3(CLK_IFRAO_CCIF_MD, "ifrao_ccif_md",
1819 "axi_ck"/* parent */, 26),
1820 GATE_IFRAO3(CLK_IFRAO_DEVMPU_BCLK, "ifrao_devmpu_bclk",
1821 "axi_ck"/* parent */, 30),
1822 /* IFRAO4 */
1823 GATE_IFRAO4(CLK_IFRAO_SSUSB, "ifrao_ssusb",
1824 "fusb_ck"/* parent */, 1),
1825 GATE_IFRAO4(CLK_IFRAO_DISP_PWM, "ifrao_disp_pwm",
1826 "axi_ck"/* parent */, 2),
1827 GATE_IFRAO4(CLK_IFRAO_CLDMA_BCLK, "ifrao_cldmabclk",
1828 "axi_ck"/* parent */, 3),
1829 GATE_IFRAO4(CLK_IFRAO_AUDIO_26M_BCLK, "ifrao_audio26m",
1830 "f26m_ck"/* parent */, 4),
1831 GATE_IFRAO4(CLK_IFRAO_MODEM_TEMP_SHARE, "ifrao_mdtemp",
1832 "f26m_ck"/* parent */, 5),
1833 GATE_IFRAO4(CLK_IFRAO_SPI1, "ifrao_spi1",
1834 "spi_ck"/* parent */, 6),
1835 GATE_IFRAO4(CLK_IFRAO_I2C4, "ifrao_i2c4",
1836 "i2c_ck"/* parent */, 7),
1837 GATE_IFRAO4(CLK_IFRAO_SPI2, "ifrao_spi2",
1838 "spi_ck"/* parent */, 9),
1839 GATE_IFRAO4(CLK_IFRAO_SPI3, "ifrao_spi3",
1840 "spi_ck"/* parent */, 10),
1841 GATE_IFRAO4(CLK_IFRAO_UNIPRO_TICK, "ifrao_unipro_tick",
1842 "f26m_ck"/* parent */, 12),
1843 GATE_IFRAO4(CLK_IFRAO_UFS_MP_SAP_BCLK, "ifrao_ufs_bclk",
1844 "f26m_ck"/* parent */, 13),
1845 GATE_IFRAO4(CLK_IFRAO_MD32_BCLK, "ifrao_md32_bclk",
1846 "axi_ck"/* parent */, 14),
1847 GATE_IFRAO4(CLK_IFRAO_UNIPRO_MBIST, "ifrao_unipro_mbist",
1848 "axi_ck"/* parent */, 16),
1849 GATE_IFRAO4(CLK_IFRAO_PWM6, "ifrao_pwm6",
1850 "i2c_ck"/* parent */, 18),
1851 GATE_IFRAO4(CLK_IFRAO_PWM7, "ifrao_pwm7",
1852 "i2c_ck"/* parent */, 19),
1853 GATE_IFRAO4(CLK_IFRAO_I2C_SLAVE, "ifrao_i2c_slave",
1854 "i2c_ck"/* parent */, 20),
1855 GATE_IFRAO4(CLK_IFRAO_I2C1_ARBITER, "ifrao_i2c1a",
1856 "i2c_ck"/* parent */, 21),
1857 GATE_IFRAO4(CLK_IFRAO_I2C1_IMM, "ifrao_i2c1_imm",
1858 "i2c_ck"/* parent */, 22),
1859 GATE_IFRAO4(CLK_IFRAO_I2C2_ARBITER, "ifrao_i2c2a",
1860 "i2c_ck"/* parent */, 23),
1861 GATE_IFRAO4(CLK_IFRAO_I2C2_IMM, "ifrao_i2c2_imm",
1862 "i2c_ck"/* parent */, 24),
1863 GATE_IFRAO4(CLK_IFRAO_SSUSB_XHCI, "ifrao_ssusb_xhci",
1864 "fssusb_xhci_ck"/* parent */, 31),
1865 /* IFRAO5 */
1866 GATE_IFRAO5(CLK_IFRAO_MSDC0_SELF, "ifrao_msdc0sf",
1867 "msdc50_0_ck"/* parent */, 0),
1868 GATE_IFRAO5(CLK_IFRAO_MSDC1_SELF, "ifrao_msdc1sf",
1869 "msdc50_0_ck"/* parent */, 1),
1870 GATE_IFRAO5(CLK_IFRAO_MSDC2_SELF, "ifrao_msdc2sf",
1871 "msdc50_0_ck"/* parent */, 2),
1872 GATE_IFRAO5(CLK_IFRAO_SSPM_26M_SELF, "ifrao_sspm_26m",
1873 "f26m_ck"/* parent */, 3),
1874 GATE_IFRAO5(CLK_IFRAO_SSPM_32K_SELF, "ifrao_sspm_32k",
1875 "frtc_ck"/* parent */, 4),
1876 GATE_IFRAO5(CLK_IFRAO_I2C6, "ifrao_i2c6",
1877 "i2c_ck"/* parent */, 6),
1878 GATE_IFRAO5(CLK_IFRAO_AP_MSDC0, "ifrao_ap_msdc0",
1879 "msdc50_0_ck"/* parent */, 7),
1880 GATE_IFRAO5(CLK_IFRAO_MD_MSDC0, "ifrao_md_msdc0",
1881 "msdc50_0_ck"/* parent */, 8),
1882 GATE_IFRAO5(CLK_IFRAO_CCIF5_AP, "ifrao_ccif5_ap",
1883 "axi_ck"/* parent */, 9),
1884 GATE_IFRAO5(CLK_IFRAO_CCIF5_MD, "ifrao_ccif5_md",
1885 "axi_ck"/* parent */, 10),
1886 GATE_IFRAO5(CLK_IFRAO_PCIE_TOP_HCLK_133M, "ifrao_pcie_h_133m",
1887 "axi_ck"/* parent */, 11),
1888 GATE_IFRAO5(CLK_IFRAO_SPIS_HCLK_66M, "ifrao_spis_h_66m",
1889 "axi_ck"/* parent */, 14),
1890 GATE_IFRAO5(CLK_IFRAO_PCIE_PERI_26M, "ifrao_pcie_peri_26m",
1891 "f26m_ck"/* parent */, 15),
1892 GATE_IFRAO5(CLK_IFRAO_CCIF2_AP, "ifrao_ccif2_ap",
1893 "axi_ck"/* parent */, 16),
1894 GATE_IFRAO5(CLK_IFRAO_CCIF2_MD, "ifrao_ccif2_md",
1895 "axi_ck"/* parent */, 17),
1896 GATE_IFRAO5(CLK_IFRAO_SEJ_F13M, "ifrao_sej_f13m",
1897 "f26m_ck"/* parent */, 20),
1898 GATE_IFRAO5(CLK_IFRAO_AES, "ifrao_aes",
1899 "axi_ck"/* parent */, 21),
1900 GATE_IFRAO5(CLK_IFRAO_I2C7, "ifrao_i2c7",
1901 "i2c_ck"/* parent */, 22),
1902 GATE_IFRAO5(CLK_IFRAO_I2C8, "ifrao_i2c8",
1903 "i2c_ck"/* parent */, 23),
1904 GATE_IFRAO5(CLK_IFRAO_FBIST2FPC, "ifrao_fbist2fpc",
1905 "msdc50_0_ck"/* parent */, 24),
1906 GATE_IFRAO5(CLK_IFRAO_DPMAIF_MAIN, "ifrao_dpmaif_main",
1907 "dpmaif_main_ck"/* parent */, 26),
1908 GATE_IFRAO5(CLK_IFRAO_PCIE_TL_32K, "ifrao_pcie_tl_32k",
1909 "frtc_ck"/* parent */, 27),
1910 GATE_IFRAO5(CLK_IFRAO_CCIF4_AP, "ifrao_ccif4_ap",
1911 "axi_ck"/* parent */, 28),
1912 GATE_IFRAO5(CLK_IFRAO_CCIF4_MD, "ifrao_ccif4_md",
1913 "axi_ck"/* parent */, 29),
1914 /* IFRAO6 */
1915 GATE_IFRAO6(CLK_IFRAO_133M_MCLK_CK, "ifrao_133m_mclk_ck",
1916 "axi_ck"/* parent */, 0),
1917 GATE_IFRAO6(CLK_IFRAO_66M_MCLK_CK, "ifrao_66m_mclk_ck",
1918 "axi_ck"/* parent */, 1),
1919 GATE_IFRAO6(CLK_IFRAO_66M_PERI_BUS_MCLK_CK, "ifrao_66m_peri_mclk",
1920 "axi_ck"/* parent */, 2),
1921 GATE_IFRAO6(CLK_IFRAO_INFRA_FREE_DCM_133M, "ifrao_infra_133m",
1922 "axi_ck"/* parent */, 3),
1923 GATE_IFRAO6(CLK_IFRAO_INFRA_FREE_DCM_66M, "ifrao_infra_66m",
1924 "axi_ck"/* parent */, 4),
1925 GATE_IFRAO6(CLK_IFRAO_PERU_BUS_DCM_133M, "ifrao_peru_bus_133m",
1926 "axi_ck"/* parent */, 5),
1927 GATE_IFRAO6(CLK_IFRAO_PERU_BUS_DCM_66M, "ifrao_peru_bus_66m",
1928 "axi_ck"/* parent */, 6),
1929 GATE_IFRAO6(CLK_IFRAO_RG_133M_CLDMA_TOP, "ifrao_133m_cldma_top",
1930 "axi_ck"/* parent */, 7),
1931 GATE_IFRAO6(CLK_IFRAO_RG_ECC_TOP, "ifrao_ecc_top",
1932 "axi_ck"/* parent */, 8),
1933 GATE_IFRAO6(CLK_IFRAO_RG_133M_DWC_ETHER, "ifrao_133m_dwc_ether",
1934 "axi_ck"/* parent */, 11),
1935 GATE_IFRAO6(CLK_IFRAO_RG_133M_FLASHIF, "ifrao_133m_flashif",
1936 "axi_ck"/* parent */, 12),
1937 GATE_IFRAO6(CLK_IFRAO_RG_133M_PCIE_P0, "ifrao_133m_pcie_p0",
1938 "axi_ck"/* parent */, 13),
1939 GATE_IFRAO6_I(CLK_IFRAO_RG_133M_PCIE_P1, "ifrao_133m_pcie_p1",
1940 "axi_ck"/* parent */, 14),
1941 GATE_IFRAO6_I(CLK_IFRAO_RG_133M_PCIE_P2, "ifrao_133m_pcie_p2",
1942 "axi_ck"/* parent */, 15),
1943 GATE_IFRAO6_I(CLK_IFRAO_RG_133M_PCIE_P3, "ifrao_133m_pcie_p3",
1944 "axi_ck"/* parent */, 16),
1945 GATE_IFRAO6(CLK_IFRAO_RG_MMW_DPMAIF_TOP_CK, "ifrao_mmw_dpmaif_ck",
1946 "axi_ck"/* parent */, 17),
1947 GATE_IFRAO6(CLK_IFRAO_RG_NFI, "ifrao_nfi",
1948 "nfi1x_ck"/* parent */, 18),
1949 GATE_IFRAO6(CLK_IFRAO_RG_FPINFI_BCLK_CK, "ifrao_fpinfi_bclk_ck",
1950 "spinfi_bclk_ck"/* parent */, 19),
1951 GATE_IFRAO6(CLK_IFRAO_RG_66M_NFI_HCLK_CK, "ifrao_66m_nfi_h_ck",
1952 "axi_ck"/* parent */, 20),
1953 GATE_IFRAO6(CLK_IFRAO_RG_FSPIS_CK, "ifrao_fspis_ck",
1954 "spis_ck"/* parent */, 21),
1955 GATE_IFRAO6(CLK_IFRAO_RG_PCIE_PERI_26M_P1, "ifrao_26m_p1",
1956 "axi_ck"/* parent */, 25),
1957 GATE_IFRAO6(CLK_IFRAO_RG_PCIE_PERI_26M_P2, "ifrao_26m_p2",
1958 "axi_ck"/* parent */, 26),
1959 GATE_IFRAO6(CLK_IFRAO_RG_PCIE_PERI_26M_P3, "ifrao_26m_p3",
1960 "axi_ck"/* parent */, 27),
1961 GATE_IFRAO6(CLK_IFRAO_RG_FLASHIF_PERI_26M, "ifrao_flash_26m",
1962 "axi_ck"/* parent */, 30),
1963 GATE_IFRAO6(CLK_IFRAO_RG_FLASHIF_SFLASH, "ifrao_sflash_ck",
1964 "axi_ck"/* parent */, 31),
1965};
1966
1967
1968
1969static const struct mtk_gate_regs peri_cg_regs = {
1970 .set_ofs = 0x20c,
1971 .clr_ofs = 0x20c,
1972 .sta_ofs = 0x20c,
1973};
1974
1975#define GATE_PERI(_id, _name, _parent, _shift) { \
1976 .id = _id, \
1977 .name = _name, \
1978 .parent_name = _parent, \
1979 .regs = &peri_cg_regs, \
1980 .shift = _shift, \
1981 .ops = &mtk_clk_gate_ops_no_setclr_inv, \
1982 }
1983
1984static const struct mtk_gate peri_clks[] = {
1985};
1986
1987static const struct mtk_gate_regs apmixed_cg_regs = {
1988 .set_ofs = 0x14,
1989 .clr_ofs = 0x14,
1990 .sta_ofs = 0x14,
1991};
1992#define GATE_APMIXED(_id, _name, _parent, _shift) { \
1993 .id = _id, \
1994 .name = _name, \
1995 .parent_name = _parent, \
1996 .regs = &apmixed_cg_regs, \
1997 .shift = _shift, \
1998 .ops = &mtk_clk_gate_ops_no_setclr_inv, \
1999 }
2000
2001static const struct mtk_gate apmixed_clks[] = {
2002};
2003
2004#define MT6890_PLL_FMAX (3800UL * MHZ)
2005#define MT6890_PLL_FMIN (1500UL * MHZ)
2006#define MT6890_INTEGER_BITS 8
2007
2008#if MT_CCF_PLL_DISABLE
2009#define PLL_CFLAGS PLL_AO
2010#else
2011#define PLL_CFLAGS (0)
2012#endif
2013
2014#define PLL_B(_id, _name, _reg, _en_reg, _en_mask, _pwr_reg, \
2015 _iso_mask, _pwron_mask, _flags, _rst_bar_reg, \
2016 _rst_bar_mask, _pd_reg, _pd_shift, _tuner_reg, \
2017 _tuner_en_reg, _tuner_en_bit, _pcw_reg, \
2018 _pcw_shift, _pcwbits, _div_table) { \
2019 .id = _id, \
2020 .name = _name, \
2021 .reg = _reg, \
2022 .en_reg = _en_reg, \
2023 .en_mask = _en_mask, \
2024 .pwr_reg = _pwr_reg, \
2025 .iso_mask = _iso_mask, \
2026 .pwron_mask = _pwron_mask, \
2027 .flags = (_flags | PLL_CFLAGS), \
2028 .rst_bar_reg = _rst_bar_reg, \
2029 .rst_bar_mask = _rst_bar_mask, \
2030 .fmax = MT6890_PLL_FMAX, \
2031 .fmin = MT6890_PLL_FMIN, \
2032 .pd_reg = _pd_reg, \
2033 .pd_shift = _pd_shift, \
2034 .tuner_reg = _tuner_reg, \
2035 .tuner_en_reg = _tuner_en_reg, \
2036 .tuner_en_bit = _tuner_en_bit, \
2037 .pcw_reg = _pcw_reg, \
2038 .pcw_shift = _pcw_shift, \
2039 .pcw_chg_reg = _reg + 0x8, /* always CON2 */ \
2040 .pcwbits = _pcwbits, \
2041 .pcwibits = MT6890_INTEGER_BITS, \
2042 .div_table = _div_table, \
2043 }
2044
2045#define PLL(_id, _name, _reg, _en_reg, _en_mask, _pwr_reg, \
2046 _iso_mask, _pwron_mask, _flags, _rst_bar_reg, \
2047 _rst_bar_mask, _pd_reg, _pd_shift, _tuner_reg, \
2048 _tuner_en_reg, _tuner_en_bit, _pcw_reg, \
2049 _pcw_shift, _pcwbits) \
2050 PLL_B(_id, _name, _reg, _en_reg, _en_mask, _pwr_reg, \
2051 _iso_mask, _pwron_mask, _flags, _rst_bar_reg, \
2052 _rst_bar_mask, _pd_reg, _pd_shift, _tuner_reg, \
2053 _tuner_en_reg, _tuner_en_bit, _pcw_reg, \
2054 _pcw_shift, _pcwbits, NULL) \
2055
2056static const struct mtk_pll_data plls[] = {
2057 PLL(CLK_APMIXED_ARMPLL_LL, "armpll_ll", ARMPLL_LL_CON0/*base*/,
2058 ARMPLL_LL_CON0, 0x0200/*en*/,
2059 ARMPLL_LL_CON4, 0x0002, 0x0001/*pwr*/,
2060 PLL_AO, 0, BIT(0)/*rstb*/,
2061 0x020C, 24/*pd*/,
2062 0, 0, 0/*tuner*/,
2063 ARMPLL_LL_CON2, 0, 22/*pcw*/),
2064 PLL(CLK_APMIXED_CCIPLL, "ccipll", CCIPLL_CON0/*base*/,
2065 CCIPLL_CON0, 0x0200/*en*/,
2066 CCIPLL_CON4, 0x0002, 0x0001/*pwr*/,
2067 PLL_AO, 0, BIT(0)/*rstb*/,
2068 0x0220, 24/*pd*/,
2069 0, 0, 0/*tuner*/,
2070 CCIPLL_CON2, 0, 22/*pcw*/),
2071 PLL(CLK_APMIXED_MPLL, "mpll", MPLL_CON0/*base*/,
2072 MPLL_CON0, 0x0200/*en*/,
2073 MPLL_CON4, 0x0002, 0x0001/*pwr*/,
2074 PLL_AO, 0, BIT(0)/*rstb*/,
2075 0x060C, 24/*pd*/,
2076 0, 0, 0/*tuner*/,
2077 MPLL_CON2, 0, 22/*pcw*/),
2078 PLL(CLK_APMIXED_MAINPLL, "mainpll", MAINPLL_CON0/*base*/,
2079 MAINPLL_CON0, 0x0200/*en*/,
2080 MAINPLL_CON4, 0x0002, 0x0001/*pwr*/,
2081 HAVE_RST_BAR|PLL_AO, 0x0404, BIT(23)/*rstb*/,
2082 0x040C, 24/*pd*/,
2083 0, 0, 0/*tuner*/,
2084 MAINPLL_CON2, 0, 22/*pcw*/),
2085 PLL(CLK_APMIXED_UNIVPLL, "univpll", UNIVPLL_CON0/*base*/,
2086 UNIVPLL_CON0, 0x0200/*en*/,
2087 UNIVPLL_CON4, 0x0002, 0x0001/*pwr*/,
2088 HAVE_RST_BAR, 0x0418, BIT(23)/*rstb*/,
2089 0x0420, 24/*pd*/,
2090 0, 0, 0/*tuner*/,
2091 UNIVPLL_CON2, 0, 22/*pcw*/),
2092 PLL(CLK_APMIXED_MSDCPLL, "msdcpll", MSDCPLL_CON0/*base*/,
2093 MSDCPLL_CON0, 0x0200/*en*/,
2094 MSDCPLL_CON4, 0x0002, 0x0001/*pwr*/,
2095 0, 0, BIT(0)/*rstb*/,
2096 0x234, 24/*pd*/,
2097 0, 0, 0/*tuner*/,
2098 MSDCPLL_CON2, 0, 22/*pcw*/),
2099 PLL(CLK_APMIXED_MMPLL, "mmpll", MMPLL_CON0/*base*/,
2100 MMPLL_CON0, 0x0200/*en*/,
2101 MMPLL_CON4, 0x0002, 0x0001/*pwr*/,
2102 HAVE_RST_BAR, 0x042C, BIT(23)/*rstb*/,
2103 0x0434, 24/*pd*/,
2104 0, 0, 0/*tuner*/,
2105 MMPLL_CON2, 0, 22/*pcw*/),
2106 PLL(CLK_APMIXED_MFGPLL, "mfgpll", MFGPLL_CON0/*base*/,
2107 MFGPLL_CON0, 0x0200/*en*/,
2108 MFGPLL_CON4, 0x0002, 0x0001/*pwr*/,
2109 0, 0, BIT(0)/*rstb*/,
2110 0x0620, 24/*pd*/,
2111 0, 0, 0/*tuner*/,
2112 MFGPLL_CON2, 0, 22/*pcw*/),
2113 PLL(CLK_APMIXED_APLL1, "apll1", APLL1_CON0/*base*/,
2114 APLL1_CON0, 0x0200/*en*/,
2115 APLL1_CON5, 0x0002, 0x0001/*pwr*/,
2116 0, 0, BIT(0)/*rstb*/,
2117 0x045C, 24/*pd*/,
2118 APLL1_TUNER_CON0, AP_PLL_CON0, 12/*tuner*/,
2119 APLL1_CON3, 0, 32/*pcw*/),
2120 PLL(CLK_APMIXED_APLL2, "apll2", APLL2_CON0/*base*/,
2121 APLL2_CON0, 0x0200/*en*/,
2122 APLL2_CON5, 0x0002, 0x0001/*pwr*/,
2123 0, 0, BIT(0)/*rstb*/,
2124 0x0474, 24/*pd*/,
2125 APLL2_TUNER_CON0, AP_PLL_CON0, 13/*tuner*/,
2126 APLL2_CON3, 0, 32/*pcw*/),
2127 PLL(CLK_APMIXED_NET1PLL, "net1pll", NET1PLL_CON0/*base*/,
2128 NET1PLL_CON0, 0x0200/*en*/,
2129 NET1PLL_CON4, 0x0002, 0x0001/*pwr*/,
2130 0, 0, BIT(0)/*rstb*/,
2131 0x080C, 24/*pd*/,
2132 0, 0, 0/*tuner*/,
2133 NET1PLL_CON2, 0, 22/*pcw*/),
2134 PLL(CLK_APMIXED_NET2PLL, "net2pll", NET2PLL_CON0/*base*/,
2135 NET2PLL_CON0, 0x0200/*en*/,
2136 NET2PLL_CON4, 0x0002, 0x0001/*pwr*/,
2137 0, 0, BIT(0)/*rstb*/,
2138 0x0820, 24/*pd*/,
2139 0, 0, 0/*tuner*/,
2140 NET2PLL_CON2, 0, 22/*pcw*/),
2141 PLL(CLK_APMIXED_WEDMCUPLL, "wedmcupll", WEDMCUPLL_CON0/*base*/,
2142 WEDMCUPLL_CON0, 0x0200/*en*/,
2143 WEDMCUPLL_CON4, 0x0002, 0x0001/*pwr*/,
2144 0, 0, BIT(0)/*rstb*/,
2145 0x0834, 24/*pd*/,
2146 0, 0, 0/*tuner*/,
2147 WEDMCUPLL_CON2, 0, 22/*pcw*/),
2148 PLL(CLK_APMIXED_MEDMCUPLL, "medmcupll", MEDMCUPLL_CON0/*base*/,
2149 MEDMCUPLL_CON0, 0x0200/*en*/,
2150 MEDMCUPLL_CON4, 0x0002, 0x0001/*pwr*/,
2151 0, 0, BIT(0)/*rstb*/,
2152 0x0848, 24/*pd*/,
2153 0, 0, 0/*tuner*/,
2154 MEDMCUPLL_CON2, 0, 22/*pcw*/),
2155 PLL(CLK_APMIXED_SGMIIPLL, "sgmiipll", SGMIIPLL_CON0/*base*/,
2156 SGMIIPLL_CON0, 0x0200/*en*/,
2157 SGMIIPLL_CON4, 0x0002, 0x0001/*pwr*/,
2158 0, 0, BIT(0)/*rstb*/,
2159 0x0248, 24/*pd*/,
2160 0, 0, 0/*tuner*/,
2161 SGMIIPLL_CON2, 0, 22/*pcw*/),
2162};
2163
2164static int clk_mt6890_apmixed_probe(struct platform_device *pdev)
2165{
2166 struct clk_onecell_data *clk_data;
2167 int r;
2168 struct device_node *node = pdev->dev.of_node;
2169
2170 void __iomem *base;
2171 struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2172
2173#if MT_CCF_BRINGUP
2174 pr_notice("%s init begin\n", __func__);
2175#endif
2176
2177 base = devm_ioremap_resource(&pdev->dev, res);
2178 if (IS_ERR(base)) {
2179 pr_err("%s(): ioremap failed\n", __func__);
2180 return PTR_ERR(base);
2181 }
2182
2183 clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK);
2184
2185 mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls),
2186 clk_data);
2187
2188 mtk_clk_register_gates(node, apmixed_clks, ARRAY_SIZE(apmixed_clks),
2189 clk_data);
2190
2191 r = of_clk_add_provider(node, of_clk_src_onecell_get, clk_data);
2192
2193 if (r)
2194 pr_err("%s(): could not register clock provider: %d\n",
2195 __func__, r);
2196
2197 apmixed_base = base;
2198
2199#if MT_CCF_BRINGUP
2200 pr_notice("%s init end\n", __func__);
2201#endif
2202
2203 return r;
2204}
2205
2206static int clk_mt6890_ifrao_probe(struct platform_device *pdev)
2207{
2208 struct clk_onecell_data *clk_data;
2209 int r;
2210 struct device_node *node = pdev->dev.of_node;
2211
2212#if MT_CCF_BRINGUP
2213 pr_notice("%s init begin\n", __func__);
2214#endif
2215
2216 clk_data = mtk_alloc_clk_data(CLK_IFRAO_NR_CLK);
2217
2218 mtk_clk_register_gates(node, ifrao_clks, ARRAY_SIZE(ifrao_clks),
2219 clk_data);
2220
2221 r = of_clk_add_provider(node, of_clk_src_onecell_get, clk_data);
2222
2223 if (r)
2224 pr_err("%s(): could not register clock provider: %d\n",
2225 __func__, r);
2226
2227#if MT_CCF_BRINGUP
2228 pr_notice("%s init end\n", __func__);
2229#endif
2230
2231 return r;
2232}
2233
2234static int clk_mt6890_peri_probe(struct platform_device *pdev)
2235{
2236 struct clk_onecell_data *clk_data;
2237 int r;
2238 struct device_node *node = pdev->dev.of_node;
2239
2240#if MT_CCF_BRINGUP
2241 pr_notice("%s init begin\n", __func__);
2242#endif
2243
2244 clk_data = mtk_alloc_clk_data(CLK_PERI_NR_CLK);
2245
2246 mtk_clk_register_gates(node, peri_clks, ARRAY_SIZE(peri_clks),
2247 clk_data);
2248
2249 r = of_clk_add_provider(node, of_clk_src_onecell_get, clk_data);
2250
2251 if (r)
2252 pr_err("%s(): could not register clock provider: %d\n",
2253 __func__, r);
2254
2255#if MT_CCF_BRINGUP
2256 pr_notice("%s init end\n", __func__);
2257#endif
2258
2259 return r;
2260}
2261
2262static struct clk_onecell_data *mt6890_top_clk_data;
2263
2264static int clk_mt6890_top_probe(struct platform_device *pdev)
2265{
2266 int r;
2267 struct device_node *node = pdev->dev.of_node;
2268
2269 void __iomem *base;
2270 struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2271
2272#if MT_CCF_BRINGUP
2273 pr_notice("%s init begin\n", __func__);
2274#endif
2275
2276 base = devm_ioremap_resource(&pdev->dev, res);
2277 if (IS_ERR(base)) {
2278 pr_err("%s(): ioremap failed\n", __func__);
2279 return PTR_ERR(base);
2280 }
2281
2282 mt6890_top_clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK);
2283
2284 mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs),
2285 mt6890_top_clk_data);
2286
2287 mtk_clk_register_muxes(top_muxes, ARRAY_SIZE(top_muxes), node,
2288 &mt6890_clk_lock, mt6890_top_clk_data);
2289
2290 mtk_clk_register_composites(top_composites, ARRAY_SIZE(top_composites),
2291 base, &mt6890_clk_lock, mt6890_top_clk_data);
2292
2293 r = of_clk_add_provider(node, of_clk_src_onecell_get,
2294 mt6890_top_clk_data);
2295
2296 if (r)
2297 pr_err("%s(): could not register clock provider: %d\n",
2298 __func__, r);
2299/*
2300 mtk_clk_check_muxes(top_muxes, ARRAY_SIZE(top_muxes),
2301 mt6890_top_clk_data);
2302*/
2303#if MT_CCF_BRINGUP
2304 pr_notice("%s init end\n", __func__);
2305#endif
2306
2307 return r;
2308}
2309
2310/* for suspend LDVT only */
2311void pll_force_off(void)
2312{
2313 void __iomem *rst_reg, *en_reg, *pwr_reg;
2314 u32 i;
2315
2316 for (i = 0; i < ARRAY_SIZE(plls); i++) {
2317 /* do not pwrdn the AO PLLs */
2318 if ((plls[i].flags & PLL_AO) == PLL_AO)
2319 continue;
2320
2321 if ((plls[i].flags & HAVE_RST_BAR) == HAVE_RST_BAR) {
2322 rst_reg = apmixed_base + plls[i].rst_bar_reg;
2323 writel(readl(rst_reg) & ~plls[i].rst_bar_mask,
2324 rst_reg);
2325 }
2326
2327 en_reg = apmixed_base + plls[i].en_reg;
2328
2329 pwr_reg = apmixed_base + plls[i].pwr_reg;
2330
2331 writel(readl(en_reg) & ~plls[i].en_mask,
2332 en_reg);
2333 writel(readl(pwr_reg) | plls[i].iso_mask,
2334 pwr_reg);
2335 writel(readl(pwr_reg) & ~plls[i].pwron_mask,
2336 pwr_reg);
2337 }
2338}
2339
2340static struct generic_pm_domain **get_all_genpd(void)
2341{
2342 static struct generic_pm_domain *pds[31];
2343 static int num_pds;
2344 const size_t maxpd = ARRAY_SIZE(pds);
2345 struct device_node *node;
2346 struct platform_device *pdev;
2347 int r;
2348 if (num_pds != 0)
2349 goto out;
2350 node = of_find_node_with_property(NULL, "#power-domain-cells");
2351 if (node == NULL)
2352 return NULL;
2353 pdev = platform_device_alloc("traverse", 0);
2354 for (num_pds = 0; num_pds < maxpd; num_pds++) {
2355 struct of_phandle_args pa;
2356 pa.np = node;
2357 pa.args[0] = num_pds;
2358 pa.args_count = 1;
2359 r = of_genpd_add_device(&pa, &pdev->dev);
2360 if (r == -EINVAL)
2361 continue;
2362 else if (r != 0)
2363 pr_warn("%s(): of_genpd_add_device(%d)\n", __func__, r);
2364 pds[num_pds] = pd_to_genpd(pdev->dev.pm_domain);
2365 //r = pm_genpd_remove_device(pds[num_pds], &pdev->dev);
2366 r = pm_genpd_remove_device(&pdev->dev);
2367 if (r != 0)
2368 pr_warn("%s(): pm_genpd_remove_device(%d)\n",
2369 __func__, r);
2370 if (IS_ERR(pds[num_pds])) {
2371 pds[num_pds] = NULL;
2372 break;
2373 }
2374 }
2375 platform_device_put(pdev);
2376out:
2377 return pds;
2378}
2379
2380void subsys_force_off(void)
2381{
2382 struct generic_pm_domain *genpd;
2383 int (*gpd_op)(struct generic_pm_domain *);
2384 int r = 0;
2385 struct generic_pm_domain **pds = get_all_genpd();
2386 for (; *pds != NULL; pds++) {
2387 genpd = *pds;
2388 if (IS_ERR_OR_NULL(genpd))
2389 continue;
2390 if((genpd->flags & GENPD_FLAG_ALWAYS_ON)|(genpd->status == GPD_STATE_POWER_OFF))
2391 continue;
2392 gpd_op = genpd->power_off;
2393 r |= gpd_op(genpd);
2394 }
2395}
2396
2397void pll_if_on(void)
2398{
2399 void __iomem *en_reg;
2400 u32 i;
2401 for (i = 0; i < ARRAY_SIZE(plls); i++) {
2402
2403 en_reg = apmixed_base + plls[i].en_reg;
2404
2405 if (readl(en_reg) & plls[i].en_mask)
2406 pr_notice("suspend warning : %s is on !!!\n",plls[i].name);
2407
2408 }
2409}
2410
2411void subsys_if_on(void)
2412{
2413 static const char * const pwr_names[] = {
2414 [0] = "MD1",
2415 [1] = "CONN",
2416 [2] = "MFG0",
2417 [3] = "PEXTP_D_2LX1_PHY",
2418 [4] = "PEXTP_R_2LX1_PHY",
2419 [5] = "PEXTP_R_1LX2_0P_PHY",
2420 [6] = "PEXTP_R_1LX2_1P_PHY",
2421 [7] = "SSUSB_PHY",
2422 [8] = "SGMII_0_PHY",
2423 [9] = "IFR",
2424 [10] = "SGMII_1_PHY",
2425 [11] = "DPY",
2426 [12] = "PEXTP_D_2LX1",
2427 [13] = "PEXTP_R_2LX1",
2428 [14] = "PEXTP_R_1LX2",
2429 [15] = "ETH",
2430 [16] = "SSUSB",
2431 [17] = "SGMII_0_TOP",
2432 [18] = "SGMII_1_TOP",
2433 [19] = "NETSYS",
2434 [20] = "DIS",
2435 [21] = "AUDIO",
2436 [22] = "EIP97",
2437 [23] = "HSMTOP",
2438 [24] = "DRAMC_MD32",
2439 [25] = "(Reserved)",
2440 [26] = "(Reserved)",
2441 [27] = "(Reserved)",
2442 [28] = "DPY2",
2443 [29] = "MCUPM",
2444 [30] = "MSDC",
2445 [31] = "PERI",
2446 };
2447 u32 val = 0,i;
2448 static void __iomem *scpsys_base, *pwr_sta, *pwr_sta_2nd;
2449
2450 scpsys_base = ioremap(0x10006000, PAGE_SIZE);
2451 pwr_sta = scpsys_base + 0x16c;
2452 pwr_sta_2nd = scpsys_base + 0x170;
2453 val = readl(pwr_sta) & readl(pwr_sta_2nd);
2454
2455 for (i = 0; i < 32; i++) {
2456 if((val & BIT(i)) != 0U)
2457 pr_notice("suspend warning: %s is on!!\n",pwr_names[i]);
2458 }
2459}
2460
2461static int pll_status_cmd(struct seq_file *s, void *v)
2462{
2463 seq_printf(s, "Call pll_if_on \n");
2464 pll_if_on();
2465 return 0;
2466}
2467
2468static int mtcmos_status_cmd(struct seq_file *s, void *v)
2469{
2470 seq_printf(s, "Call subsys_if_on \n");
2471 subsys_if_on();
2472 return 0;
2473}
2474
2475static int pll_off_cmd(struct seq_file *s, void *v)
2476{
2477 seq_printf(s, "Call pll_force_off \n");
2478 pll_force_off();
2479 return 0;
2480}
2481
2482static int mtcmos_off_cmd(struct seq_file *s, void *v)
2483{
2484 seq_printf(s, "Call subsys_force_off \n");
2485 subsys_force_off();
2486 return 0;
2487}
2488
2489static int all_off_cmd(struct seq_file *s, void *v)
2490{
2491 seq_printf(s, "Call pll/mtcmos off and status \n");
2492 pll_force_off();
2493 subsys_force_off();
2494 pll_if_on();
2495 subsys_if_on();
2496 return 0;
2497}
2498
2499static const struct cmd_fn cmds[] = {
2500 CMDFN("pll_status", pll_status_cmd),
2501 CMDFN("mtcmos_status", mtcmos_status_cmd),
2502 CMDFN("pll_off", pll_off_cmd),
2503 CMDFN("mtcmos_off", mtcmos_off_cmd),
2504 CMDFN("all_off", all_off_cmd),
2505 {}
2506};
2507
2508static const struct of_device_id of_match_clk_mt6890[] = {
2509 {
2510 .compatible = "mediatek,mt6890-apmixedsys",
2511 .data = clk_mt6890_apmixed_probe,
2512 }, {
2513 .compatible = "mediatek,mt6890-infracfg_ao",
2514 .data = clk_mt6890_ifrao_probe,
2515 }, {
2516 .compatible = "mediatek,mt6890-pericfg",
2517 .data = clk_mt6890_peri_probe,
2518 }, {
2519 .compatible = "mediatek,mt6890-topckgen",
2520 .data = clk_mt6890_top_probe,
2521 }, {
2522 /* sentinel */
2523 }
2524};
2525
2526static int clk_mt6890_probe(struct platform_device *pdev)
2527{
2528 int (*clk_probe)(struct platform_device *pd);
2529 int r;
2530
2531 clk_probe = of_device_get_match_data(&pdev->dev);
2532 if (!clk_probe)
2533 return -EINVAL;
2534
2535 r = clk_probe(pdev);
2536 if (r)
2537 dev_err(&pdev->dev,
2538 "could not register clock provider: %s: %d\n",
2539 pdev->name, r);
2540
2541 set_custom_cmds(cmds);
2542 return r;
2543}
2544
2545static struct platform_driver clk_mt6890_drv = {
2546 .probe = clk_mt6890_probe,
2547 .driver = {
2548 .name = "clk-mt6890",
2549 .owner = THIS_MODULE,
2550 .of_match_table = of_match_clk_mt6890,
2551 },
2552};
2553
2554static int __init clk_mt6890_init(void)
2555{
2556 return platform_driver_register(&clk_mt6890_drv);
2557}
2558
2559arch_initcall_sync(clk_mt6890_init);
2560