1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (c) 2018, The Linux Foundation. All rights reserved.
4 */
5
6#include <linux/kernel.h>
7#include <linux/err.h>
8#include <linux/platform_device.h>
9#include <linux/module.h>
10#include <linux/of.h>
11#include <linux/of_device.h>
12#include <linux/clk-provider.h>
13#include <linux/regmap.h>
14
15#include <linux/reset-controller.h>
16#include <dt-bindings/clock/qcom,gcc-ipq6018.h>
17#include <dt-bindings/reset/qcom,gcc-ipq6018.h>
18
19#include "common.h"
20#include "clk-regmap.h"
21#include "clk-pll.h"
22#include "clk-rcg.h"
23#include "clk-branch.h"
24#include "clk-alpha-pll.h"
25#include "clk-regmap-divider.h"
26#include "clk-regmap-mux.h"
27#include "reset.h"
28
29#define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) }
30
31enum {
32	P_XO,
33	P_BIAS_PLL,
34	P_UNIPHY0_RX,
35	P_UNIPHY0_TX,
36	P_UNIPHY1_RX,
37	P_BIAS_PLL_NSS_NOC,
38	P_UNIPHY1_TX,
39	P_PCIE20_PHY0_PIPE,
40	P_USB3PHY_0_PIPE,
41	P_GPLL0,
42	P_GPLL0_DIV2,
43	P_GPLL2,
44	P_GPLL4,
45	P_GPLL6,
46	P_SLEEP_CLK,
47	P_UBI32_PLL,
48	P_NSS_CRYPTO_PLL,
49	P_PI_SLEEP,
50};
51
52static struct clk_alpha_pll gpll0_main = {
53	.offset = 0x21000,
54	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
55	.clkr = {
56		.enable_reg = 0x0b000,
57		.enable_mask = BIT(0),
58		.hw.init = &(struct clk_init_data){
59			.name = "gpll0_main",
60			.parent_data = &(const struct clk_parent_data){
61				.fw_name = "xo",
62			},
63			.num_parents = 1,
64			.ops = &clk_alpha_pll_ops,
65		},
66	},
67};
68
69static struct clk_fixed_factor gpll0_out_main_div2 = {
70	.mult = 1,
71	.div = 2,
72	.hw.init = &(struct clk_init_data){
73		.name = "gpll0_out_main_div2",
74		.parent_hws = (const struct clk_hw *[]){
75				&gpll0_main.clkr.hw },
76		.num_parents = 1,
77		.ops = &clk_fixed_factor_ops,
78	},
79};
80
81static struct clk_alpha_pll_postdiv gpll0 = {
82	.offset = 0x21000,
83	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
84	.width = 4,
85	.clkr.hw.init = &(struct clk_init_data){
86		.name = "gpll0",
87		.parent_hws = (const struct clk_hw *[]){
88				&gpll0_main.clkr.hw },
89		.num_parents = 1,
90		.ops = &clk_alpha_pll_postdiv_ro_ops,
91	},
92};
93
94static const struct clk_parent_data gcc_xo_gpll0_gpll0_out_main_div2[] = {
95	{ .fw_name = "xo" },
96	{ .hw = &gpll0.clkr.hw},
97	{ .hw = &gpll0_out_main_div2.hw},
98};
99
100static const struct parent_map gcc_xo_gpll0_gpll0_out_main_div2_map[] = {
101	{ P_XO, 0 },
102	{ P_GPLL0, 1 },
103	{ P_GPLL0_DIV2, 4 },
104};
105
106static struct clk_alpha_pll ubi32_pll_main = {
107	.offset = 0x25000,
108	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_HUAYRA],
109	.flags = SUPPORTS_DYNAMIC_UPDATE,
110	.clkr = {
111		.enable_reg = 0x0b000,
112		.enable_mask = BIT(6),
113		.hw.init = &(struct clk_init_data){
114			.name = "ubi32_pll_main",
115			.parent_data = &(const struct clk_parent_data){
116				.fw_name = "xo",
117			},
118			.num_parents = 1,
119			.ops = &clk_alpha_pll_huayra_ops,
120		},
121	},
122};
123
124static struct clk_alpha_pll_postdiv ubi32_pll = {
125	.offset = 0x25000,
126	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_HUAYRA],
127	.width = 2,
128	.clkr.hw.init = &(struct clk_init_data){
129		.name = "ubi32_pll",
130		.parent_hws = (const struct clk_hw *[]){
131				&ubi32_pll_main.clkr.hw },
132		.num_parents = 1,
133		.ops = &clk_alpha_pll_postdiv_ro_ops,
134		.flags = CLK_SET_RATE_PARENT,
135	},
136};
137
138static struct clk_alpha_pll gpll6_main = {
139	.offset = 0x37000,
140	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO],
141	.clkr = {
142		.enable_reg = 0x0b000,
143		.enable_mask = BIT(7),
144		.hw.init = &(struct clk_init_data){
145			.name = "gpll6_main",
146			.parent_data = &(const struct clk_parent_data){
147				.fw_name = "xo",
148			},
149			.num_parents = 1,
150			.ops = &clk_alpha_pll_ops,
151		},
152	},
153};
154
155static struct clk_alpha_pll_postdiv gpll6 = {
156	.offset = 0x37000,
157	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO],
158	.width = 2,
159	.clkr.hw.init = &(struct clk_init_data){
160		.name = "gpll6",
161		.parent_hws = (const struct clk_hw *[]){
162				&gpll6_main.clkr.hw },
163		.num_parents = 1,
164		.ops = &clk_alpha_pll_postdiv_ro_ops,
165	},
166};
167
168static struct clk_alpha_pll gpll4_main = {
169	.offset = 0x24000,
170	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
171	.clkr = {
172		.enable_reg = 0x0b000,
173		.enable_mask = BIT(5),
174		.hw.init = &(struct clk_init_data){
175			.name = "gpll4_main",
176			.parent_data = &(const struct clk_parent_data){
177				.fw_name = "xo",
178			},
179			.num_parents = 1,
180			.ops = &clk_alpha_pll_ops,
181		},
182	},
183};
184
185static struct clk_alpha_pll_postdiv gpll4 = {
186	.offset = 0x24000,
187	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
188	.width = 4,
189	.clkr.hw.init = &(struct clk_init_data){
190		.name = "gpll4",
191		.parent_hws = (const struct clk_hw *[]){
192				&gpll4_main.clkr.hw },
193		.num_parents = 1,
194		.ops = &clk_alpha_pll_postdiv_ro_ops,
195	},
196};
197
198static const struct freq_tbl ftbl_pcnoc_bfdcd_clk_src[] = {
199	F(24000000, P_XO, 1, 0, 0),
200	F(50000000, P_GPLL0, 16, 0, 0),
201	F(100000000, P_GPLL0, 8, 0, 0),
202	{ }
203};
204
205static struct clk_rcg2 pcnoc_bfdcd_clk_src = {
206	.cmd_rcgr = 0x27000,
207	.freq_tbl = ftbl_pcnoc_bfdcd_clk_src,
208	.hid_width = 5,
209	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
210	.clkr.hw.init = &(struct clk_init_data){
211		.name = "pcnoc_bfdcd_clk_src",
212		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
213		.num_parents = 3,
214		.ops = &clk_rcg2_ops,
215	},
216};
217
218static struct clk_alpha_pll gpll2_main = {
219	.offset = 0x4a000,
220	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
221	.clkr = {
222		.enable_reg = 0x0b000,
223		.enable_mask = BIT(2),
224		.hw.init = &(struct clk_init_data){
225			.name = "gpll2_main",
226			.parent_data = &(const struct clk_parent_data){
227				.fw_name = "xo",
228			},
229			.num_parents = 1,
230			.ops = &clk_alpha_pll_ops,
231		},
232	},
233};
234
235static struct clk_alpha_pll_postdiv gpll2 = {
236	.offset = 0x4a000,
237	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
238	.width = 4,
239	.clkr.hw.init = &(struct clk_init_data){
240		.name = "gpll2",
241		.parent_hws = (const struct clk_hw *[]){
242				&gpll2_main.clkr.hw },
243		.num_parents = 1,
244		.ops = &clk_alpha_pll_postdiv_ro_ops,
245	},
246};
247
248static struct clk_alpha_pll nss_crypto_pll_main = {
249	.offset = 0x22000,
250	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
251	.clkr = {
252		.enable_reg = 0x0b000,
253		.enable_mask = BIT(4),
254		.hw.init = &(struct clk_init_data){
255			.name = "nss_crypto_pll_main",
256			.parent_data = &(const struct clk_parent_data){
257				.fw_name = "xo",
258			},
259			.num_parents = 1,
260			.ops = &clk_alpha_pll_ops,
261		},
262	},
263};
264
265static struct clk_alpha_pll_postdiv nss_crypto_pll = {
266	.offset = 0x22000,
267	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
268	.width = 4,
269	.clkr.hw.init = &(struct clk_init_data){
270		.name = "nss_crypto_pll",
271		.parent_hws = (const struct clk_hw *[]){
272				&nss_crypto_pll_main.clkr.hw },
273		.num_parents = 1,
274		.ops = &clk_alpha_pll_postdiv_ro_ops,
275	},
276};
277
278static const struct freq_tbl ftbl_qdss_tsctr_clk_src[] = {
279	F(160000000, P_GPLL0_DIV2, 2.5, 0, 0),
280	F(320000000, P_GPLL0, 2.5, 0, 0),
281	F(600000000, P_GPLL4, 2, 0, 0),
282	{ }
283};
284
285static const struct clk_parent_data gcc_xo_gpll4_gpll0_gpll6_gpll0_div2[] = {
286	{ .fw_name = "xo" },
287	{ .hw = &gpll4.clkr.hw },
288	{ .hw = &gpll0.clkr.hw },
289	{ .hw = &gpll6.clkr.hw },
290	{ .hw = &gpll0_out_main_div2.hw },
291};
292
293static const struct parent_map gcc_xo_gpll4_gpll0_gpll6_gpll0_div2_map[] = {
294	{ P_XO, 0 },
295	{ P_GPLL4, 1 },
296	{ P_GPLL0, 2 },
297	{ P_GPLL6, 3 },
298	{ P_GPLL0_DIV2, 4 },
299};
300
301static struct clk_rcg2 qdss_tsctr_clk_src = {
302	.cmd_rcgr = 0x29064,
303	.freq_tbl = ftbl_qdss_tsctr_clk_src,
304	.hid_width = 5,
305	.parent_map = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2_map,
306	.clkr.hw.init = &(struct clk_init_data){
307		.name = "qdss_tsctr_clk_src",
308		.parent_data = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2,
309		.num_parents = 5,
310		.ops = &clk_rcg2_ops,
311	},
312};
313
314static struct clk_fixed_factor qdss_dap_sync_clk_src = {
315	.mult = 1,
316	.div = 4,
317	.hw.init = &(struct clk_init_data){
318		.name = "qdss_dap_sync_clk_src",
319		.parent_hws = (const struct clk_hw *[]){
320				&qdss_tsctr_clk_src.clkr.hw },
321		.num_parents = 1,
322		.ops = &clk_fixed_factor_ops,
323	},
324};
325
326static const struct freq_tbl ftbl_qdss_at_clk_src[] = {
327	F(66670000, P_GPLL0_DIV2, 6, 0, 0),
328	F(240000000, P_GPLL4, 5, 0, 0),
329	{ }
330};
331
332static struct clk_rcg2 qdss_at_clk_src = {
333	.cmd_rcgr = 0x2900c,
334	.freq_tbl = ftbl_qdss_at_clk_src,
335	.hid_width = 5,
336	.parent_map = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2_map,
337	.clkr.hw.init = &(struct clk_init_data){
338		.name = "qdss_at_clk_src",
339		.parent_data = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2,
340		.num_parents = 5,
341		.ops = &clk_rcg2_ops,
342	},
343};
344
345static struct clk_fixed_factor qdss_tsctr_div2_clk_src = {
346	.mult = 1,
347	.div = 2,
348	.hw.init = &(struct clk_init_data){
349		.name = "qdss_tsctr_div2_clk_src",
350		.parent_hws = (const struct clk_hw *[]){
351				&qdss_tsctr_clk_src.clkr.hw },
352		.num_parents = 1,
353		.flags = CLK_SET_RATE_PARENT,
354		.ops = &clk_fixed_factor_ops,
355	},
356};
357
358static const struct freq_tbl ftbl_nss_ppe_clk_src[] = {
359	F(24000000, P_XO, 1, 0, 0),
360	F(300000000, P_BIAS_PLL, 1, 0, 0),
361	{ }
362};
363
364static const struct clk_parent_data gcc_xo_bias_gpll0_gpll4_nss_ubi32[] = {
365	{ .fw_name = "xo" },
366	{ .fw_name = "bias_pll_cc_clk" },
367	{ .hw = &gpll0.clkr.hw },
368	{ .hw = &gpll4.clkr.hw },
369	{ .hw = &nss_crypto_pll.clkr.hw },
370	{ .hw = &ubi32_pll.clkr.hw },
371};
372
373static const struct parent_map gcc_xo_bias_gpll0_gpll4_nss_ubi32_map[] = {
374	{ P_XO, 0 },
375	{ P_BIAS_PLL, 1 },
376	{ P_GPLL0, 2 },
377	{ P_GPLL4, 3 },
378	{ P_NSS_CRYPTO_PLL, 4 },
379	{ P_UBI32_PLL, 5 },
380};
381
382static struct clk_rcg2 nss_ppe_clk_src = {
383	.cmd_rcgr = 0x68080,
384	.freq_tbl = ftbl_nss_ppe_clk_src,
385	.hid_width = 5,
386	.parent_map = gcc_xo_bias_gpll0_gpll4_nss_ubi32_map,
387	.clkr.hw.init = &(struct clk_init_data){
388		.name = "nss_ppe_clk_src",
389		.parent_data = gcc_xo_bias_gpll0_gpll4_nss_ubi32,
390		.num_parents = 6,
391		.ops = &clk_rcg2_ops,
392	},
393};
394
395static struct clk_branch gcc_xo_clk_src = {
396	.halt_reg = 0x30018,
397	.clkr = {
398		.enable_reg = 0x30018,
399		.enable_mask = BIT(1),
400		.hw.init = &(struct clk_init_data){
401			.name = "gcc_xo_clk_src",
402			.parent_data = &(const struct clk_parent_data){
403				.fw_name = "xo",
404			},
405			.num_parents = 1,
406			.flags = CLK_SET_RATE_PARENT,
407			.ops = &clk_branch2_ops,
408		},
409	},
410};
411
412static const struct freq_tbl ftbl_nss_ce_clk_src[] = {
413	F(24000000, P_XO, 1, 0, 0),
414	F(200000000, P_GPLL0, 4, 0, 0),
415	{ }
416};
417
418static const struct clk_parent_data gcc_xo_gpll0[] = {
419	{ .fw_name = "xo" },
420	{ .hw = &gpll0.clkr.hw },
421};
422
423static const struct parent_map gcc_xo_gpll0_map[] = {
424	{ P_XO, 0 },
425	{ P_GPLL0, 1 },
426};
427
428static struct clk_rcg2 nss_ce_clk_src = {
429	.cmd_rcgr = 0x68098,
430	.freq_tbl = ftbl_nss_ce_clk_src,
431	.hid_width = 5,
432	.parent_map = gcc_xo_gpll0_map,
433	.clkr.hw.init = &(struct clk_init_data){
434		.name = "nss_ce_clk_src",
435		.parent_data = gcc_xo_gpll0,
436		.num_parents = 2,
437		.ops = &clk_rcg2_ops,
438	},
439};
440
441static struct clk_branch gcc_sleep_clk_src = {
442	.halt_reg = 0x30000,
443	.clkr = {
444		.enable_reg = 0x30000,
445		.enable_mask = BIT(1),
446		.hw.init = &(struct clk_init_data){
447			.name = "gcc_sleep_clk_src",
448			.parent_data = &(const struct clk_parent_data){
449				.fw_name = "sleep_clk",
450			},
451			.num_parents = 1,
452			.ops = &clk_branch2_ops,
453		},
454	},
455};
456
457static const struct freq_tbl ftbl_snoc_nssnoc_bfdcd_clk_src[] = {
458	F(24000000, P_XO, 1, 0, 0),
459	F(50000000, P_GPLL0_DIV2, 8, 0, 0),
460	F(100000000, P_GPLL0, 8, 0, 0),
461	F(133333333, P_GPLL0, 6, 0, 0),
462	F(160000000, P_GPLL0, 5, 0, 0),
463	F(200000000, P_GPLL0, 4, 0, 0),
464	F(266666667, P_GPLL0, 3, 0, 0),
465	{ }
466};
467
468static const struct clk_parent_data
469			gcc_xo_gpll0_gpll6_gpll0_out_main_div2[] = {
470	{ .fw_name = "xo" },
471	{ .hw = &gpll0.clkr.hw },
472	{ .hw = &gpll6.clkr.hw },
473	{ .hw = &gpll0_out_main_div2.hw },
474};
475
476static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map[] = {
477	{ P_XO, 0 },
478	{ P_GPLL0, 1 },
479	{ P_GPLL6, 2 },
480	{ P_GPLL0_DIV2, 3 },
481};
482
483static struct clk_rcg2 snoc_nssnoc_bfdcd_clk_src = {
484	.cmd_rcgr = 0x76054,
485	.freq_tbl = ftbl_snoc_nssnoc_bfdcd_clk_src,
486	.hid_width = 5,
487	.parent_map = gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map,
488	.clkr.hw.init = &(struct clk_init_data){
489		.name = "snoc_nssnoc_bfdcd_clk_src",
490		.parent_data = gcc_xo_gpll0_gpll6_gpll0_out_main_div2,
491		.num_parents = 4,
492		.ops = &clk_rcg2_ops,
493	},
494};
495
496static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {
497	F(24000000, P_XO, 1, 0, 0),
498	F(25000000, P_GPLL0_DIV2, 16, 0, 0),
499	F(50000000, P_GPLL0, 16, 0, 0),
500	F(100000000, P_GPLL0, 8, 0, 0),
501	{ }
502};
503
504static struct clk_rcg2 apss_ahb_clk_src = {
505	.cmd_rcgr = 0x46000,
506	.freq_tbl = ftbl_apss_ahb_clk_src,
507	.hid_width = 5,
508	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
509	.clkr.hw.init = &(struct clk_init_data){
510		.name = "apss_ahb_clk_src",
511		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
512		.num_parents = 3,
513		.ops = &clk_rcg2_ops,
514	},
515};
516
517static const struct freq_tbl ftbl_nss_port5_rx_clk_src[] = {
518	F(24000000, P_XO, 1, 0, 0),
519	F(25000000, P_UNIPHY1_RX, 12.5, 0, 0),
520	F(25000000, P_UNIPHY0_RX, 5, 0, 0),
521	F(78125000, P_UNIPHY1_RX, 4, 0, 0),
522	F(125000000, P_UNIPHY1_RX, 2.5, 0, 0),
523	F(125000000, P_UNIPHY0_RX, 1, 0, 0),
524	F(156250000, P_UNIPHY1_RX, 2, 0, 0),
525	F(312500000, P_UNIPHY1_RX, 1, 0, 0),
526	{ }
527};
528
529static const struct clk_parent_data
530gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias[] = {
531	{ .fw_name = "xo" },
532	{ .fw_name = "uniphy0_gcc_rx_clk" },
533	{ .fw_name = "uniphy0_gcc_tx_clk" },
534	{ .fw_name = "uniphy1_gcc_rx_clk" },
535	{ .fw_name = "uniphy1_gcc_tx_clk" },
536	{ .hw = &ubi32_pll.clkr.hw },
537	{ .fw_name = "bias_pll_cc_clk" },
538};
539
540static const struct parent_map
541gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias_map[] = {
542	{ P_XO, 0 },
543	{ P_UNIPHY0_RX, 1 },
544	{ P_UNIPHY0_TX, 2 },
545	{ P_UNIPHY1_RX, 3 },
546	{ P_UNIPHY1_TX, 4 },
547	{ P_UBI32_PLL, 5 },
548	{ P_BIAS_PLL, 6 },
549};
550
551static struct clk_rcg2 nss_port5_rx_clk_src = {
552	.cmd_rcgr = 0x68060,
553	.freq_tbl = ftbl_nss_port5_rx_clk_src,
554	.hid_width = 5,
555	.parent_map = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias_map,
556	.clkr.hw.init = &(struct clk_init_data){
557		.name = "nss_port5_rx_clk_src",
558		.parent_data = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias,
559		.num_parents = 7,
560		.ops = &clk_rcg2_ops,
561	},
562};
563
564static const struct freq_tbl ftbl_nss_port5_tx_clk_src[] = {
565	F(24000000, P_XO, 1, 0, 0),
566	F(25000000, P_UNIPHY1_TX, 12.5, 0, 0),
567	F(25000000, P_UNIPHY0_TX, 5, 0, 0),
568	F(78125000, P_UNIPHY1_TX, 4, 0, 0),
569	F(125000000, P_UNIPHY1_TX, 2.5, 0, 0),
570	F(125000000, P_UNIPHY0_TX, 1, 0, 0),
571	F(156250000, P_UNIPHY1_TX, 2, 0, 0),
572	F(312500000, P_UNIPHY1_TX, 1, 0, 0),
573	{ }
574};
575
576static const struct clk_parent_data
577gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias[] = {
578	{ .fw_name = "xo" },
579	{ .fw_name = "uniphy0_gcc_tx_clk" },
580	{ .fw_name = "uniphy0_gcc_rx_clk" },
581	{ .fw_name = "uniphy1_gcc_tx_clk" },
582	{ .fw_name = "uniphy1_gcc_rx_clk" },
583	{ .hw = &ubi32_pll.clkr.hw },
584	{ .fw_name = "bias_pll_cc_clk" },
585};
586
587static const struct parent_map
588gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias_map[] = {
589	{ P_XO, 0 },
590	{ P_UNIPHY0_TX, 1 },
591	{ P_UNIPHY0_RX, 2 },
592	{ P_UNIPHY1_TX, 3 },
593	{ P_UNIPHY1_RX, 4 },
594	{ P_UBI32_PLL, 5 },
595	{ P_BIAS_PLL, 6 },
596};
597
598static struct clk_rcg2 nss_port5_tx_clk_src = {
599	.cmd_rcgr = 0x68068,
600	.freq_tbl = ftbl_nss_port5_tx_clk_src,
601	.hid_width = 5,
602	.parent_map = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias_map,
603	.clkr.hw.init = &(struct clk_init_data){
604		.name = "nss_port5_tx_clk_src",
605		.parent_data = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias,
606		.num_parents = 7,
607		.ops = &clk_rcg2_ops,
608	},
609};
610
611static const struct freq_tbl ftbl_pcie_axi_clk_src[] = {
612	F(24000000, P_XO, 1, 0, 0),
613	F(200000000, P_GPLL0, 4, 0, 0),
614	F(240000000, P_GPLL4, 5, 0, 0),
615	{ }
616};
617
618static const struct freq_tbl ftbl_pcie_rchng_clk_src[] = {
619	F(24000000, P_XO, 1, 0, 0),
620	F(100000000, P_GPLL0, 8, 0, 0),
621	{ }
622};
623
624static const struct clk_parent_data gcc_xo_gpll0_gpll4[] = {
625	{ .fw_name = "xo" },
626	{ .hw = &gpll0.clkr.hw },
627	{ .hw = &gpll4.clkr.hw },
628};
629
630static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
631	{ P_XO, 0 },
632	{ P_GPLL0, 1 },
633	{ P_GPLL4, 2 },
634};
635
636static struct clk_rcg2 pcie0_axi_clk_src = {
637	.cmd_rcgr = 0x75054,
638	.freq_tbl = ftbl_pcie_axi_clk_src,
639	.hid_width = 5,
640	.parent_map = gcc_xo_gpll0_gpll4_map,
641	.clkr.hw.init = &(struct clk_init_data){
642		.name = "pcie0_axi_clk_src",
643		.parent_data = gcc_xo_gpll0_gpll4,
644		.num_parents = 3,
645		.ops = &clk_rcg2_ops,
646	},
647};
648
649static const struct freq_tbl ftbl_usb0_master_clk_src[] = {
650	F(80000000, P_GPLL0_DIV2, 5, 0, 0),
651	F(100000000, P_GPLL0, 8, 0, 0),
652	F(133330000, P_GPLL0, 6, 0, 0),
653	F(200000000, P_GPLL0, 4, 0, 0),
654	{ }
655};
656
657static const struct clk_parent_data gcc_xo_gpll0_out_main_div2_gpll0[] = {
658	{ .fw_name = "xo" },
659	{ .hw = &gpll0_out_main_div2.hw },
660	{ .hw = &gpll0.clkr.hw },
661};
662
663static const struct parent_map gcc_xo_gpll0_out_main_div2_gpll0_map[] = {
664	{ P_XO, 0 },
665	{ P_GPLL0_DIV2, 2 },
666	{ P_GPLL0, 1 },
667};
668
669static struct clk_rcg2 usb0_master_clk_src = {
670	.cmd_rcgr = 0x3e00c,
671	.freq_tbl = ftbl_usb0_master_clk_src,
672	.mnd_width = 8,
673	.hid_width = 5,
674	.parent_map = gcc_xo_gpll0_out_main_div2_gpll0_map,
675	.clkr.hw.init = &(struct clk_init_data){
676		.name = "usb0_master_clk_src",
677		.parent_data = gcc_xo_gpll0_out_main_div2_gpll0,
678		.num_parents = 3,
679		.ops = &clk_rcg2_ops,
680	},
681};
682
683static struct clk_regmap_div apss_ahb_postdiv_clk_src = {
684	.reg = 0x46018,
685	.shift = 4,
686	.width = 4,
687	.clkr = {
688		.hw.init = &(struct clk_init_data){
689			.name = "apss_ahb_postdiv_clk_src",
690			.parent_hws = (const struct clk_hw *[]){
691					&apss_ahb_clk_src.clkr.hw },
692			.num_parents = 1,
693			.ops = &clk_regmap_div_ops,
694		},
695	},
696};
697
698static struct clk_fixed_factor gcc_xo_div4_clk_src = {
699	.mult = 1,
700	.div = 4,
701	.hw.init = &(struct clk_init_data){
702		.name = "gcc_xo_div4_clk_src",
703		.parent_hws = (const struct clk_hw *[]){
704				&gcc_xo_clk_src.clkr.hw },
705		.num_parents = 1,
706		.ops = &clk_fixed_factor_ops,
707		.flags = CLK_SET_RATE_PARENT,
708	},
709};
710
711static const struct freq_tbl ftbl_nss_port1_rx_clk_src[] = {
712	F(24000000, P_XO, 1, 0, 0),
713	F(25000000, P_UNIPHY0_RX, 5, 0, 0),
714	F(125000000, P_UNIPHY0_RX, 1, 0, 0),
715	{ }
716};
717
718static const struct clk_parent_data gcc_xo_uniphy0_rx_tx_ubi32_bias[] = {
719	{ .fw_name = "xo" },
720	{ .fw_name = "uniphy0_gcc_rx_clk" },
721	{ .fw_name = "uniphy0_gcc_tx_clk" },
722	{ .hw = &ubi32_pll.clkr.hw },
723	{ .fw_name = "bias_pll_cc_clk" },
724};
725
726static const struct parent_map gcc_xo_uniphy0_rx_tx_ubi32_bias_map[] = {
727	{ P_XO, 0 },
728	{ P_UNIPHY0_RX, 1 },
729	{ P_UNIPHY0_TX, 2 },
730	{ P_UBI32_PLL, 5 },
731	{ P_BIAS_PLL, 6 },
732};
733
734static struct clk_rcg2 nss_port1_rx_clk_src = {
735	.cmd_rcgr = 0x68020,
736	.freq_tbl = ftbl_nss_port1_rx_clk_src,
737	.hid_width = 5,
738	.parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
739	.clkr.hw.init = &(struct clk_init_data){
740		.name = "nss_port1_rx_clk_src",
741		.parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
742		.num_parents = 5,
743		.ops = &clk_rcg2_ops,
744	},
745};
746
747static const struct freq_tbl ftbl_nss_port1_tx_clk_src[] = {
748	F(24000000, P_XO, 1, 0, 0),
749	F(25000000, P_UNIPHY0_TX, 5, 0, 0),
750	F(125000000, P_UNIPHY0_TX, 1, 0, 0),
751	{ }
752};
753
754static const struct clk_parent_data gcc_xo_uniphy0_tx_rx_ubi32_bias[] = {
755	{ .fw_name = "xo" },
756	{ .fw_name = "uniphy0_gcc_tx_clk" },
757	{ .fw_name = "uniphy0_gcc_rx_clk" },
758	{ .hw = &ubi32_pll.clkr.hw },
759	{ .fw_name = "bias_pll_cc_clk" },
760};
761
762static const struct parent_map gcc_xo_uniphy0_tx_rx_ubi32_bias_map[] = {
763	{ P_XO, 0 },
764	{ P_UNIPHY0_TX, 1 },
765	{ P_UNIPHY0_RX, 2 },
766	{ P_UBI32_PLL, 5 },
767	{ P_BIAS_PLL, 6 },
768};
769
770static struct clk_rcg2 nss_port1_tx_clk_src = {
771	.cmd_rcgr = 0x68028,
772	.freq_tbl = ftbl_nss_port1_tx_clk_src,
773	.hid_width = 5,
774	.parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
775	.clkr.hw.init = &(struct clk_init_data){
776		.name = "nss_port1_tx_clk_src",
777		.parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
778		.num_parents = 5,
779		.ops = &clk_rcg2_ops,
780	},
781};
782
783static struct clk_rcg2 nss_port2_rx_clk_src = {
784	.cmd_rcgr = 0x68030,
785	.freq_tbl = ftbl_nss_port1_rx_clk_src,
786	.hid_width = 5,
787	.parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
788	.clkr.hw.init = &(struct clk_init_data){
789		.name = "nss_port2_rx_clk_src",
790		.parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
791		.num_parents = 5,
792		.ops = &clk_rcg2_ops,
793	},
794};
795
796static struct clk_rcg2 nss_port2_tx_clk_src = {
797	.cmd_rcgr = 0x68038,
798	.freq_tbl = ftbl_nss_port1_tx_clk_src,
799	.hid_width = 5,
800	.parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
801	.clkr.hw.init = &(struct clk_init_data){
802		.name = "nss_port2_tx_clk_src",
803		.parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
804		.num_parents = 5,
805		.ops = &clk_rcg2_ops,
806	},
807};
808
809static struct clk_rcg2 nss_port3_rx_clk_src = {
810	.cmd_rcgr = 0x68040,
811	.freq_tbl = ftbl_nss_port1_rx_clk_src,
812	.hid_width = 5,
813	.parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
814	.clkr.hw.init = &(struct clk_init_data){
815		.name = "nss_port3_rx_clk_src",
816		.parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
817		.num_parents = 5,
818		.ops = &clk_rcg2_ops,
819	},
820};
821
822static struct clk_rcg2 nss_port3_tx_clk_src = {
823	.cmd_rcgr = 0x68048,
824	.freq_tbl = ftbl_nss_port1_tx_clk_src,
825	.hid_width = 5,
826	.parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
827	.clkr.hw.init = &(struct clk_init_data){
828		.name = "nss_port3_tx_clk_src",
829		.parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
830		.num_parents = 5,
831		.ops = &clk_rcg2_ops,
832	},
833};
834
835static struct clk_rcg2 nss_port4_rx_clk_src = {
836	.cmd_rcgr = 0x68050,
837	.freq_tbl = ftbl_nss_port1_rx_clk_src,
838	.hid_width = 5,
839	.parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
840	.clkr.hw.init = &(struct clk_init_data){
841		.name = "nss_port4_rx_clk_src",
842		.parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
843		.num_parents = 5,
844		.ops = &clk_rcg2_ops,
845	},
846};
847
848static struct clk_rcg2 nss_port4_tx_clk_src = {
849	.cmd_rcgr = 0x68058,
850	.freq_tbl = ftbl_nss_port1_tx_clk_src,
851	.hid_width = 5,
852	.parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
853	.clkr.hw.init = &(struct clk_init_data){
854		.name = "nss_port4_tx_clk_src",
855		.parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
856		.num_parents = 5,
857		.ops = &clk_rcg2_ops,
858	},
859};
860
861static struct clk_regmap_div nss_port5_rx_div_clk_src = {
862	.reg = 0x68440,
863	.shift = 0,
864	.width = 4,
865	.clkr = {
866		.hw.init = &(struct clk_init_data){
867			.name = "nss_port5_rx_div_clk_src",
868			.parent_hws = (const struct clk_hw *[]){
869					&nss_port5_rx_clk_src.clkr.hw },
870			.num_parents = 1,
871			.ops = &clk_regmap_div_ops,
872			.flags = CLK_SET_RATE_PARENT,
873		},
874	},
875};
876
877static struct clk_regmap_div nss_port5_tx_div_clk_src = {
878	.reg = 0x68444,
879	.shift = 0,
880	.width = 4,
881	.clkr = {
882		.hw.init = &(struct clk_init_data){
883			.name = "nss_port5_tx_div_clk_src",
884			.parent_hws = (const struct clk_hw *[]){
885					&nss_port5_tx_clk_src.clkr.hw },
886			.num_parents = 1,
887			.ops = &clk_regmap_div_ops,
888			.flags = CLK_SET_RATE_PARENT,
889		},
890	},
891};
892
893static const struct freq_tbl ftbl_apss_axi_clk_src[] = {
894	F(24000000, P_XO, 1, 0, 0),
895	F(100000000, P_GPLL0_DIV2, 4, 0, 0),
896	F(200000000, P_GPLL0, 4, 0, 0),
897	F(308570000, P_GPLL6, 3.5, 0, 0),
898	F(400000000, P_GPLL0, 2, 0, 0),
899	F(533000000, P_GPLL0, 1.5, 0, 0),
900	{ }
901};
902
903static const struct clk_parent_data gcc_xo_gpll0_gpll6_ubi32_gpll0_div2[] = {
904	{ .fw_name = "xo" },
905	{ .hw = &gpll0.clkr.hw },
906	{ .hw = &gpll6.clkr.hw },
907	{ .hw = &ubi32_pll.clkr.hw },
908	{ .hw = &gpll0_out_main_div2.hw },
909};
910
911static const struct parent_map
912gcc_xo_gpll0_gpll6_ubi32_gpll0_div2_map[] = {
913	{ P_XO, 0 },
914	{ P_GPLL0, 1 },
915	{ P_GPLL6, 2 },
916	{ P_UBI32_PLL, 3 },
917	{ P_GPLL0_DIV2, 6 },
918};
919
920static struct clk_rcg2 apss_axi_clk_src = {
921	.cmd_rcgr = 0x38048,
922	.freq_tbl = ftbl_apss_axi_clk_src,
923	.hid_width = 5,
924	.parent_map = gcc_xo_gpll0_gpll6_ubi32_gpll0_div2_map,
925	.clkr.hw.init = &(struct clk_init_data){
926		.name = "apss_axi_clk_src",
927		.parent_data = gcc_xo_gpll0_gpll6_ubi32_gpll0_div2,
928		.num_parents = 5,
929		.ops = &clk_rcg2_ops,
930	},
931};
932
933static const struct freq_tbl ftbl_nss_crypto_clk_src[] = {
934	F(24000000, P_XO, 1, 0, 0),
935	F(300000000, P_NSS_CRYPTO_PLL, 2, 0, 0),
936	{ }
937};
938
939static const struct clk_parent_data gcc_xo_nss_crypto_pll_gpll0[] = {
940	{ .fw_name = "xo" },
941	{ .hw = &nss_crypto_pll.clkr.hw },
942	{ .hw = &gpll0.clkr.hw },
943};
944
945static const struct parent_map gcc_xo_nss_crypto_pll_gpll0_map[] = {
946	{ P_XO, 0 },
947	{ P_NSS_CRYPTO_PLL, 1 },
948	{ P_GPLL0, 2 },
949};
950
951static struct clk_rcg2 nss_crypto_clk_src = {
952	.cmd_rcgr = 0x68144,
953	.freq_tbl = ftbl_nss_crypto_clk_src,
954	.mnd_width = 16,
955	.hid_width = 5,
956	.parent_map = gcc_xo_nss_crypto_pll_gpll0_map,
957	.clkr.hw.init = &(struct clk_init_data){
958		.name = "nss_crypto_clk_src",
959		.parent_data = gcc_xo_nss_crypto_pll_gpll0,
960		.num_parents = 3,
961		.ops = &clk_rcg2_ops,
962	},
963};
964
965static struct clk_regmap_div nss_port1_rx_div_clk_src = {
966	.reg = 0x68400,
967	.shift = 0,
968	.width = 4,
969	.clkr = {
970		.hw.init = &(struct clk_init_data){
971			.name = "nss_port1_rx_div_clk_src",
972			.parent_hws = (const struct clk_hw *[]){
973				&nss_port1_rx_clk_src.clkr.hw },
974			.num_parents = 1,
975			.ops = &clk_regmap_div_ops,
976			.flags = CLK_SET_RATE_PARENT,
977		},
978	},
979};
980
981static struct clk_regmap_div nss_port1_tx_div_clk_src = {
982	.reg = 0x68404,
983	.shift = 0,
984	.width = 4,
985	.clkr = {
986		.hw.init = &(struct clk_init_data){
987			.name = "nss_port1_tx_div_clk_src",
988			.parent_hws = (const struct clk_hw *[]){
989					&nss_port1_tx_clk_src.clkr.hw },
990			.num_parents = 1,
991			.ops = &clk_regmap_div_ops,
992			.flags = CLK_SET_RATE_PARENT,
993		},
994	},
995};
996
997static struct clk_regmap_div nss_port2_rx_div_clk_src = {
998	.reg = 0x68410,
999	.shift = 0,
1000	.width = 4,
1001	.clkr = {
1002		.hw.init = &(struct clk_init_data){
1003			.name = "nss_port2_rx_div_clk_src",
1004			.parent_hws = (const struct clk_hw *[]){
1005					&nss_port2_rx_clk_src.clkr.hw },
1006			.num_parents = 1,
1007			.ops = &clk_regmap_div_ops,
1008			.flags = CLK_SET_RATE_PARENT,
1009		},
1010	},
1011};
1012
1013static struct clk_regmap_div nss_port2_tx_div_clk_src = {
1014	.reg = 0x68414,
1015	.shift = 0,
1016	.width = 4,
1017	.clkr = {
1018		.hw.init = &(struct clk_init_data){
1019			.name = "nss_port2_tx_div_clk_src",
1020			.parent_hws = (const struct clk_hw *[]){
1021					&nss_port2_tx_clk_src.clkr.hw },
1022			.num_parents = 1,
1023			.ops = &clk_regmap_div_ops,
1024			.flags = CLK_SET_RATE_PARENT,
1025		},
1026	},
1027};
1028
1029static struct clk_regmap_div nss_port3_rx_div_clk_src = {
1030	.reg = 0x68420,
1031	.shift = 0,
1032	.width = 4,
1033	.clkr = {
1034		.hw.init = &(struct clk_init_data){
1035			.name = "nss_port3_rx_div_clk_src",
1036			.parent_hws = (const struct clk_hw *[]){
1037					&nss_port3_rx_clk_src.clkr.hw },
1038			.num_parents = 1,
1039			.ops = &clk_regmap_div_ops,
1040			.flags = CLK_SET_RATE_PARENT,
1041		},
1042	},
1043};
1044
1045static struct clk_regmap_div nss_port3_tx_div_clk_src = {
1046	.reg = 0x68424,
1047	.shift = 0,
1048	.width = 4,
1049	.clkr = {
1050		.hw.init = &(struct clk_init_data){
1051			.name = "nss_port3_tx_div_clk_src",
1052			.parent_hws = (const struct clk_hw *[]){
1053					&nss_port3_tx_clk_src.clkr.hw },
1054			.num_parents = 1,
1055			.ops = &clk_regmap_div_ops,
1056			.flags = CLK_SET_RATE_PARENT,
1057		},
1058	},
1059};
1060
1061static struct clk_regmap_div nss_port4_rx_div_clk_src = {
1062	.reg = 0x68430,
1063	.shift = 0,
1064	.width = 4,
1065	.clkr = {
1066		.hw.init = &(struct clk_init_data){
1067			.name = "nss_port4_rx_div_clk_src",
1068			.parent_hws = (const struct clk_hw *[]){
1069					&nss_port4_rx_clk_src.clkr.hw },
1070			.num_parents = 1,
1071			.ops = &clk_regmap_div_ops,
1072			.flags = CLK_SET_RATE_PARENT,
1073		},
1074	},
1075};
1076
1077static struct clk_regmap_div nss_port4_tx_div_clk_src = {
1078	.reg = 0x68434,
1079	.shift = 0,
1080	.width = 4,
1081	.clkr = {
1082		.hw.init = &(struct clk_init_data){
1083			.name = "nss_port4_tx_div_clk_src",
1084			.parent_hws = (const struct clk_hw *[]){
1085					&nss_port4_tx_clk_src.clkr.hw },
1086			.num_parents = 1,
1087			.ops = &clk_regmap_div_ops,
1088			.flags = CLK_SET_RATE_PARENT,
1089		},
1090	},
1091};
1092
1093static const struct freq_tbl ftbl_nss_ubi_clk_src[] = {
1094	F(24000000, P_XO, 1, 0, 0),
1095	F(149760000, P_UBI32_PLL, 10, 0, 0),
1096	F(187200000, P_UBI32_PLL, 8, 0, 0),
1097	F(249600000, P_UBI32_PLL, 6, 0, 0),
1098	F(374400000, P_UBI32_PLL, 4, 0, 0),
1099	F(748800000, P_UBI32_PLL, 2, 0, 0),
1100	F(1497600000, P_UBI32_PLL, 1, 0, 0),
1101	{ }
1102};
1103
1104static const struct clk_parent_data
1105			gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6[] = {
1106	{ .fw_name = "xo" },
1107	{ .hw = &ubi32_pll.clkr.hw },
1108	{ .hw = &gpll0.clkr.hw },
1109	{ .hw = &gpll2.clkr.hw },
1110	{ .hw = &gpll4.clkr.hw },
1111	{ .hw = &gpll6.clkr.hw },
1112};
1113
1114static const struct parent_map gcc_xo_ubi32_gpll0_gpll2_gpll4_gpll6_map[] = {
1115	{ P_XO, 0 },
1116	{ P_UBI32_PLL, 1 },
1117	{ P_GPLL0, 2 },
1118	{ P_GPLL2, 3 },
1119	{ P_GPLL4, 4 },
1120	{ P_GPLL6, 5 },
1121};
1122
1123static struct clk_rcg2 nss_ubi0_clk_src = {
1124	.cmd_rcgr = 0x68104,
1125	.freq_tbl = ftbl_nss_ubi_clk_src,
1126	.hid_width = 5,
1127	.parent_map = gcc_xo_ubi32_gpll0_gpll2_gpll4_gpll6_map,
1128	.clkr.hw.init = &(struct clk_init_data){
1129		.name = "nss_ubi0_clk_src",
1130		.parent_data = gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6,
1131		.num_parents = 6,
1132		.ops = &clk_rcg2_ops,
1133		.flags = CLK_SET_RATE_PARENT,
1134	},
1135};
1136
1137static const struct freq_tbl ftbl_adss_pwm_clk_src[] = {
1138	F(24000000, P_XO, 1, 0, 0),
1139	F(100000000, P_GPLL0, 8, 0, 0),
1140	{ }
1141};
1142
1143static struct clk_rcg2 adss_pwm_clk_src = {
1144	.cmd_rcgr = 0x1c008,
1145	.freq_tbl = ftbl_adss_pwm_clk_src,
1146	.hid_width = 5,
1147	.parent_map = gcc_xo_gpll0_map,
1148	.clkr.hw.init = &(struct clk_init_data){
1149		.name = "adss_pwm_clk_src",
1150		.parent_data = gcc_xo_gpll0,
1151		.num_parents = 2,
1152		.ops = &clk_rcg2_ops,
1153	},
1154};
1155
1156static const struct freq_tbl ftbl_blsp1_qup_i2c_apps_clk_src[] = {
1157	F(24000000, P_XO, 1, 0, 0),
1158	F(25000000, P_GPLL0_DIV2, 16, 0, 0),
1159	F(50000000, P_GPLL0, 16, 0, 0),
1160	{ }
1161};
1162
1163static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
1164	.cmd_rcgr = 0x0200c,
1165	.freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
1166	.hid_width = 5,
1167	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1168	.clkr.hw.init = &(struct clk_init_data){
1169		.name = "blsp1_qup1_i2c_apps_clk_src",
1170		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1171		.num_parents = 3,
1172		.ops = &clk_rcg2_ops,
1173	},
1174};
1175
1176static const struct freq_tbl ftbl_blsp1_qup_spi_apps_clk_src[] = {
1177	F(960000, P_XO, 10, 2, 5),
1178	F(4800000, P_XO, 5, 0, 0),
1179	F(9600000, P_XO, 2, 4, 5),
1180	F(12500000, P_GPLL0_DIV2, 16, 1, 2),
1181	F(16000000, P_GPLL0, 10, 1, 5),
1182	F(24000000, P_XO, 1, 0, 0),
1183	F(25000000, P_GPLL0, 16, 1, 2),
1184	F(50000000, P_GPLL0, 16, 0, 0),
1185	{ }
1186};
1187
1188static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
1189	.cmd_rcgr = 0x02024,
1190	.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
1191	.mnd_width = 8,
1192	.hid_width = 5,
1193	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1194	.clkr.hw.init = &(struct clk_init_data){
1195		.name = "blsp1_qup1_spi_apps_clk_src",
1196		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1197		.num_parents = 3,
1198		.ops = &clk_rcg2_ops,
1199	},
1200};
1201
1202static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
1203	.cmd_rcgr = 0x03000,
1204	.freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
1205	.hid_width = 5,
1206	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1207	.clkr.hw.init = &(struct clk_init_data){
1208		.name = "blsp1_qup2_i2c_apps_clk_src",
1209		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1210		.num_parents = 3,
1211		.ops = &clk_rcg2_ops,
1212	},
1213};
1214
1215static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
1216	.cmd_rcgr = 0x03014,
1217	.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
1218	.mnd_width = 8,
1219	.hid_width = 5,
1220	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1221	.clkr.hw.init = &(struct clk_init_data){
1222		.name = "blsp1_qup2_spi_apps_clk_src",
1223		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1224		.num_parents = 3,
1225		.ops = &clk_rcg2_ops,
1226	},
1227};
1228
1229static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
1230	.cmd_rcgr = 0x04000,
1231	.freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
1232	.hid_width = 5,
1233	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1234	.clkr.hw.init = &(struct clk_init_data){
1235		.name = "blsp1_qup3_i2c_apps_clk_src",
1236		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1237		.num_parents = 3,
1238		.ops = &clk_rcg2_ops,
1239	},
1240};
1241
1242static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
1243	.cmd_rcgr = 0x04014,
1244	.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
1245	.mnd_width = 8,
1246	.hid_width = 5,
1247	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1248	.clkr.hw.init = &(struct clk_init_data){
1249		.name = "blsp1_qup3_spi_apps_clk_src",
1250		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1251		.num_parents = 3,
1252		.ops = &clk_rcg2_ops,
1253	},
1254};
1255
1256static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
1257	.cmd_rcgr = 0x05000,
1258	.freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
1259	.hid_width = 5,
1260	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1261	.clkr.hw.init = &(struct clk_init_data){
1262		.name = "blsp1_qup4_i2c_apps_clk_src",
1263		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1264		.num_parents = 3,
1265		.ops = &clk_rcg2_ops,
1266	},
1267};
1268
1269static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
1270	.cmd_rcgr = 0x05014,
1271	.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
1272	.mnd_width = 8,
1273	.hid_width = 5,
1274	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1275	.clkr.hw.init = &(struct clk_init_data){
1276		.name = "blsp1_qup4_spi_apps_clk_src",
1277		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1278		.num_parents = 3,
1279		.ops = &clk_rcg2_ops,
1280	},
1281};
1282
1283static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
1284	.cmd_rcgr = 0x06000,
1285	.freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
1286	.hid_width = 5,
1287	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1288	.clkr.hw.init = &(struct clk_init_data){
1289		.name = "blsp1_qup5_i2c_apps_clk_src",
1290		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1291		.num_parents = 3,
1292		.ops = &clk_rcg2_ops,
1293	},
1294};
1295
1296static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
1297	.cmd_rcgr = 0x06014,
1298	.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
1299	.mnd_width = 8,
1300	.hid_width = 5,
1301	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1302	.clkr.hw.init = &(struct clk_init_data){
1303		.name = "blsp1_qup5_spi_apps_clk_src",
1304		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1305		.num_parents = 3,
1306		.ops = &clk_rcg2_ops,
1307	},
1308};
1309
1310static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
1311	.cmd_rcgr = 0x07000,
1312	.freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
1313	.hid_width = 5,
1314	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1315	.clkr.hw.init = &(struct clk_init_data){
1316		.name = "blsp1_qup6_i2c_apps_clk_src",
1317		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1318		.num_parents = 3,
1319		.ops = &clk_rcg2_ops,
1320	},
1321};
1322
1323static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
1324	.cmd_rcgr = 0x07014,
1325	.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
1326	.mnd_width = 8,
1327	.hid_width = 5,
1328	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1329	.clkr.hw.init = &(struct clk_init_data){
1330		.name = "blsp1_qup6_spi_apps_clk_src",
1331		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1332		.num_parents = 3,
1333		.ops = &clk_rcg2_ops,
1334	},
1335};
1336
1337static const struct freq_tbl ftbl_blsp1_uart_apps_clk_src[] = {
1338	F(3686400, P_GPLL0_DIV2, 1, 144, 15625),
1339	F(7372800, P_GPLL0_DIV2, 1, 288, 15625),
1340	F(14745600, P_GPLL0_DIV2, 1, 576, 15625),
1341	F(16000000, P_GPLL0_DIV2, 5, 1, 5),
1342	F(24000000, P_XO, 1, 0, 0),
1343	F(24000000, P_GPLL0, 1, 3, 100),
1344	F(25000000, P_GPLL0, 16, 1, 2),
1345	F(32000000, P_GPLL0, 1, 1, 25),
1346	F(40000000, P_GPLL0, 1, 1, 20),
1347	F(46400000, P_GPLL0, 1, 29, 500),
1348	F(48000000, P_GPLL0, 1, 3, 50),
1349	F(51200000, P_GPLL0, 1, 8, 125),
1350	F(56000000, P_GPLL0, 1, 7, 100),
1351	F(58982400, P_GPLL0, 1, 1152, 15625),
1352	F(60000000, P_GPLL0, 1, 3, 40),
1353	F(64000000, P_GPLL0, 12.5, 1, 1),
1354	{ }
1355};
1356
1357static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
1358	.cmd_rcgr = 0x02044,
1359	.freq_tbl = ftbl_blsp1_uart_apps_clk_src,
1360	.mnd_width = 16,
1361	.hid_width = 5,
1362	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1363	.clkr.hw.init = &(struct clk_init_data){
1364		.name = "blsp1_uart1_apps_clk_src",
1365		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1366		.num_parents = 3,
1367		.ops = &clk_rcg2_ops,
1368	},
1369};
1370
1371static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
1372	.cmd_rcgr = 0x03034,
1373	.freq_tbl = ftbl_blsp1_uart_apps_clk_src,
1374	.mnd_width = 16,
1375	.hid_width = 5,
1376	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1377	.clkr.hw.init = &(struct clk_init_data){
1378		.name = "blsp1_uart2_apps_clk_src",
1379		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1380		.num_parents = 3,
1381		.ops = &clk_rcg2_ops,
1382	},
1383};
1384
1385static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
1386	.cmd_rcgr = 0x04034,
1387	.freq_tbl = ftbl_blsp1_uart_apps_clk_src,
1388	.mnd_width = 16,
1389	.hid_width = 5,
1390	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1391	.clkr.hw.init = &(struct clk_init_data){
1392		.name = "blsp1_uart3_apps_clk_src",
1393		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1394		.num_parents = 3,
1395		.ops = &clk_rcg2_ops,
1396	},
1397};
1398
1399static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
1400	.cmd_rcgr = 0x05034,
1401	.freq_tbl = ftbl_blsp1_uart_apps_clk_src,
1402	.mnd_width = 16,
1403	.hid_width = 5,
1404	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1405	.clkr.hw.init = &(struct clk_init_data){
1406		.name = "blsp1_uart4_apps_clk_src",
1407		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1408		.num_parents = 3,
1409		.ops = &clk_rcg2_ops,
1410	},
1411};
1412
1413static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
1414	.cmd_rcgr = 0x06034,
1415	.freq_tbl = ftbl_blsp1_uart_apps_clk_src,
1416	.mnd_width = 16,
1417	.hid_width = 5,
1418	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1419	.clkr.hw.init = &(struct clk_init_data){
1420		.name = "blsp1_uart5_apps_clk_src",
1421		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1422		.num_parents = 3,
1423		.ops = &clk_rcg2_ops,
1424	},
1425};
1426
1427static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
1428	.cmd_rcgr = 0x07034,
1429	.freq_tbl = ftbl_blsp1_uart_apps_clk_src,
1430	.mnd_width = 16,
1431	.hid_width = 5,
1432	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1433	.clkr.hw.init = &(struct clk_init_data){
1434		.name = "blsp1_uart6_apps_clk_src",
1435		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1436		.num_parents = 3,
1437		.ops = &clk_rcg2_ops,
1438	},
1439};
1440
1441static const struct freq_tbl ftbl_crypto_clk_src[] = {
1442	F(40000000, P_GPLL0_DIV2, 10, 0, 0),
1443	F(80000000, P_GPLL0, 10, 0, 0),
1444	F(100000000, P_GPLL0, 8, 0, 0),
1445	F(160000000, P_GPLL0, 5, 0, 0),
1446	{ }
1447};
1448
1449static struct clk_rcg2 crypto_clk_src = {
1450	.cmd_rcgr = 0x16004,
1451	.freq_tbl = ftbl_crypto_clk_src,
1452	.hid_width = 5,
1453	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1454	.clkr.hw.init = &(struct clk_init_data){
1455		.name = "crypto_clk_src",
1456		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1457		.num_parents = 3,
1458		.ops = &clk_rcg2_ops,
1459	},
1460};
1461
1462static const struct freq_tbl ftbl_gp_clk_src[] = {
1463	F(24000000, P_XO, 1, 0, 0),
1464	F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1465	F(100000000, P_GPLL0, 8, 0, 0),
1466	F(200000000, P_GPLL0, 4, 0, 0),
1467	F(266666666, P_GPLL0, 3, 0, 0),
1468	{ }
1469};
1470
1471static const struct clk_parent_data gcc_xo_gpll0_gpll6_gpll0_sleep_clk[] = {
1472	{ .fw_name = "xo" },
1473	{ .hw = &gpll0.clkr.hw },
1474	{ .hw = &gpll6.clkr.hw },
1475	{ .hw = &gpll0_out_main_div2.hw },
1476	{ .fw_name = "sleep_clk" },
1477};
1478
1479static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map[] = {
1480	{ P_XO, 0 },
1481	{ P_GPLL0, 1 },
1482	{ P_GPLL6, 2 },
1483	{ P_GPLL0_DIV2, 4 },
1484	{ P_SLEEP_CLK, 6 },
1485};
1486
1487static struct clk_rcg2 gp1_clk_src = {
1488	.cmd_rcgr = 0x08004,
1489	.freq_tbl = ftbl_gp_clk_src,
1490	.mnd_width = 8,
1491	.hid_width = 5,
1492	.parent_map = gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map,
1493	.clkr.hw.init = &(struct clk_init_data){
1494		.name = "gp1_clk_src",
1495		.parent_data = gcc_xo_gpll0_gpll6_gpll0_sleep_clk,
1496		.num_parents = 5,
1497		.ops = &clk_rcg2_ops,
1498	},
1499};
1500
1501static struct clk_rcg2 gp2_clk_src = {
1502	.cmd_rcgr = 0x09004,
1503	.freq_tbl = ftbl_gp_clk_src,
1504	.mnd_width = 8,
1505	.hid_width = 5,
1506	.parent_map = gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map,
1507	.clkr.hw.init = &(struct clk_init_data){
1508		.name = "gp2_clk_src",
1509		.parent_data = gcc_xo_gpll0_gpll6_gpll0_sleep_clk,
1510		.num_parents = 5,
1511		.ops = &clk_rcg2_ops,
1512	},
1513};
1514
1515static struct clk_rcg2 gp3_clk_src = {
1516	.cmd_rcgr = 0x0a004,
1517	.freq_tbl = ftbl_gp_clk_src,
1518	.mnd_width = 8,
1519	.hid_width = 5,
1520	.parent_map = gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map,
1521	.clkr.hw.init = &(struct clk_init_data){
1522		.name = "gp3_clk_src",
1523		.parent_data = gcc_xo_gpll0_gpll6_gpll0_sleep_clk,
1524		.num_parents = 5,
1525		.ops = &clk_rcg2_ops,
1526	},
1527};
1528
1529static struct clk_fixed_factor nss_ppe_cdiv_clk_src = {
1530	.mult = 1,
1531	.div = 4,
1532	.hw.init = &(struct clk_init_data){
1533		.name = "nss_ppe_cdiv_clk_src",
1534		.parent_hws = (const struct clk_hw *[]){
1535				&nss_ppe_clk_src.clkr.hw },
1536		.num_parents = 1,
1537		.ops = &clk_fixed_factor_ops,
1538		.flags = CLK_SET_RATE_PARENT,
1539	},
1540};
1541
1542static struct clk_regmap_div nss_ubi0_div_clk_src = {
1543	.reg = 0x68118,
1544	.shift = 0,
1545	.width = 4,
1546	.clkr = {
1547		.hw.init = &(struct clk_init_data){
1548			.name = "nss_ubi0_div_clk_src",
1549			.parent_hws = (const struct clk_hw *[]){
1550				&nss_ubi0_clk_src.clkr.hw },
1551			.num_parents = 1,
1552			.ops = &clk_regmap_div_ro_ops,
1553			.flags = CLK_SET_RATE_PARENT,
1554		},
1555	},
1556};
1557
1558static const struct freq_tbl ftbl_pcie_aux_clk_src[] = {
1559	F(24000000, P_XO, 1, 0, 0),
1560};
1561
1562static const struct clk_parent_data gcc_xo_gpll0_core_pi_sleep_clk[] = {
1563	{ .fw_name = "xo" },
1564	{ .hw = &gpll0.clkr.hw },
1565	{ .fw_name = "sleep_clk" },
1566};
1567
1568static const struct parent_map gcc_xo_gpll0_core_pi_sleep_clk_map[] = {
1569	{ P_XO, 0 },
1570	{ P_GPLL0, 2 },
1571	{ P_PI_SLEEP, 6 },
1572};
1573
1574static struct clk_rcg2 pcie0_aux_clk_src = {
1575	.cmd_rcgr = 0x75024,
1576	.freq_tbl = ftbl_pcie_aux_clk_src,
1577	.mnd_width = 16,
1578	.hid_width = 5,
1579	.parent_map = gcc_xo_gpll0_core_pi_sleep_clk_map,
1580	.clkr.hw.init = &(struct clk_init_data){
1581		.name = "pcie0_aux_clk_src",
1582		.parent_data = gcc_xo_gpll0_core_pi_sleep_clk,
1583		.num_parents = 3,
1584		.ops = &clk_rcg2_ops,
1585	},
1586};
1587
1588static const struct clk_parent_data gcc_pcie20_phy0_pipe_clk_xo[] = {
1589	{ .fw_name = "pcie20_phy0_pipe_clk" },
1590	{ .fw_name = "xo" },
1591};
1592
1593static const struct parent_map gcc_pcie20_phy0_pipe_clk_xo_map[] = {
1594	{ P_PCIE20_PHY0_PIPE, 0 },
1595	{ P_XO, 2 },
1596};
1597
1598static struct clk_regmap_mux pcie0_pipe_clk_src = {
1599	.reg = 0x7501c,
1600	.shift = 8,
1601	.width = 2,
1602	.parent_map = gcc_pcie20_phy0_pipe_clk_xo_map,
1603	.clkr = {
1604		.hw.init = &(struct clk_init_data){
1605			.name = "pcie0_pipe_clk_src",
1606			.parent_data = gcc_pcie20_phy0_pipe_clk_xo,
1607			.num_parents = 2,
1608			.ops = &clk_regmap_mux_closest_ops,
1609			.flags = CLK_SET_RATE_PARENT,
1610		},
1611	},
1612};
1613
1614static const struct freq_tbl ftbl_sdcc_apps_clk_src[] = {
1615	F(144000, P_XO, 16, 12, 125),
1616	F(400000, P_XO, 12, 1, 5),
1617	F(24000000, P_GPLL2, 12, 1, 4),
1618	F(48000000, P_GPLL2, 12, 1, 2),
1619	F(96000000, P_GPLL2, 12, 0, 0),
1620	F(177777778, P_GPLL0, 4.5, 0, 0),
1621	F(192000000, P_GPLL2, 6, 0, 0),
1622	F(384000000, P_GPLL2, 3, 0, 0),
1623	{ }
1624};
1625
1626static const struct clk_parent_data
1627			gcc_xo_gpll0_gpll2_gpll0_out_main_div2[] = {
1628	{ .fw_name = "xo" },
1629	{ .hw = &gpll0.clkr.hw },
1630	{ .hw = &gpll2.clkr.hw },
1631	{ .hw = &gpll0_out_main_div2.hw },
1632};
1633
1634static const struct parent_map gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map[] = {
1635	{ P_XO, 0 },
1636	{ P_GPLL0, 1 },
1637	{ P_GPLL2, 2 },
1638	{ P_GPLL0_DIV2, 4 },
1639};
1640
1641static struct clk_rcg2 sdcc1_apps_clk_src = {
1642	.cmd_rcgr = 0x42004,
1643	.freq_tbl = ftbl_sdcc_apps_clk_src,
1644	.mnd_width = 8,
1645	.hid_width = 5,
1646	.parent_map = gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map,
1647	.clkr.hw.init = &(struct clk_init_data){
1648		.name = "sdcc1_apps_clk_src",
1649		.parent_data = gcc_xo_gpll0_gpll2_gpll0_out_main_div2,
1650		.num_parents = 4,
1651		.ops = &clk_rcg2_floor_ops,
1652	},
1653};
1654
1655static const struct freq_tbl ftbl_usb_aux_clk_src[] = {
1656	F(24000000, P_XO, 1, 0, 0),
1657	{ }
1658};
1659
1660static struct clk_rcg2 usb0_aux_clk_src = {
1661	.cmd_rcgr = 0x3e05c,
1662	.freq_tbl = ftbl_usb_aux_clk_src,
1663	.mnd_width = 16,
1664	.hid_width = 5,
1665	.parent_map = gcc_xo_gpll0_core_pi_sleep_clk_map,
1666	.clkr.hw.init = &(struct clk_init_data){
1667		.name = "usb0_aux_clk_src",
1668		.parent_data = gcc_xo_gpll0_core_pi_sleep_clk,
1669		.num_parents = 3,
1670		.ops = &clk_rcg2_ops,
1671	},
1672};
1673
1674static const struct freq_tbl ftbl_usb_mock_utmi_clk_src[] = {
1675	F(24000000, P_XO, 1, 0, 0),
1676	F(60000000, P_GPLL6, 6, 1, 3),
1677	{ }
1678};
1679
1680static const struct clk_parent_data
1681			gcc_xo_gpll6_gpll0_gpll0_out_main_div2[] = {
1682	{ .fw_name = "xo" },
1683	{ .hw = &gpll6.clkr.hw },
1684	{ .hw = &gpll0.clkr.hw },
1685	{ .hw = &gpll0_out_main_div2.hw },
1686};
1687
1688static const struct parent_map gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map[] = {
1689	{ P_XO, 0 },
1690	{ P_GPLL6, 1 },
1691	{ P_GPLL0, 3 },
1692	{ P_GPLL0_DIV2, 4 },
1693};
1694
1695static struct clk_rcg2 usb0_mock_utmi_clk_src = {
1696	.cmd_rcgr = 0x3e020,
1697	.freq_tbl = ftbl_usb_mock_utmi_clk_src,
1698	.mnd_width = 8,
1699	.hid_width = 5,
1700	.parent_map = gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map,
1701	.clkr.hw.init = &(struct clk_init_data){
1702		.name = "usb0_mock_utmi_clk_src",
1703		.parent_data = gcc_xo_gpll6_gpll0_gpll0_out_main_div2,
1704		.num_parents = 4,
1705		.ops = &clk_rcg2_ops,
1706	},
1707};
1708
1709static const struct clk_parent_data gcc_usb3phy_0_cc_pipe_clk_xo[] = {
1710	{ .fw_name = "usb3phy_0_cc_pipe_clk" },
1711	{ .fw_name = "xo" },
1712};
1713
1714static const struct parent_map gcc_usb3phy_0_cc_pipe_clk_xo_map[] = {
1715	{ P_USB3PHY_0_PIPE, 0 },
1716	{ P_XO, 2 },
1717};
1718
1719static struct clk_regmap_mux usb0_pipe_clk_src = {
1720	.reg = 0x3e048,
1721	.shift = 8,
1722	.width = 2,
1723	.parent_map = gcc_usb3phy_0_cc_pipe_clk_xo_map,
1724	.clkr = {
1725		.hw.init = &(struct clk_init_data){
1726			.name = "usb0_pipe_clk_src",
1727			.parent_data = gcc_usb3phy_0_cc_pipe_clk_xo,
1728			.num_parents = 2,
1729			.ops = &clk_regmap_mux_closest_ops,
1730			.flags = CLK_SET_RATE_PARENT,
1731		},
1732	},
1733};
1734
1735static const struct freq_tbl ftbl_sdcc_ice_core_clk_src[] = {
1736	F(80000000, P_GPLL0_DIV2, 5, 0, 0),
1737	F(160000000, P_GPLL0, 5, 0, 0),
1738	F(216000000, P_GPLL6, 5, 0, 0),
1739	F(308570000, P_GPLL6, 3.5, 0, 0),
1740};
1741
1742static const struct clk_parent_data gcc_xo_gpll0_gpll6_gpll0_div2[] = {
1743	{ .fw_name = "xo"},
1744	{ .hw = &gpll0.clkr.hw },
1745	{ .hw = &gpll6.clkr.hw },
1746	{ .hw = &gpll0_out_main_div2.hw },
1747};
1748
1749static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_div2_map[] = {
1750	{ P_XO, 0 },
1751	{ P_GPLL0, 1 },
1752	{ P_GPLL6, 2 },
1753	{ P_GPLL0_DIV2, 4 },
1754};
1755
1756static struct clk_rcg2 sdcc1_ice_core_clk_src = {
1757	.cmd_rcgr = 0x5d000,
1758	.freq_tbl = ftbl_sdcc_ice_core_clk_src,
1759	.mnd_width = 8,
1760	.hid_width = 5,
1761	.parent_map = gcc_xo_gpll0_gpll6_gpll0_div2_map,
1762	.clkr.hw.init = &(struct clk_init_data){
1763		.name = "sdcc1_ice_core_clk_src",
1764		.parent_data = gcc_xo_gpll0_gpll6_gpll0_div2,
1765		.num_parents = 4,
1766		.ops = &clk_rcg2_ops,
1767	},
1768};
1769
1770static const struct freq_tbl ftbl_qdss_stm_clk_src[] = {
1771	F(24000000, P_XO, 1, 0, 0),
1772	F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1773	F(100000000, P_GPLL0, 8, 0, 0),
1774	F(200000000, P_GPLL0, 4, 0, 0),
1775	{ }
1776};
1777
1778static struct clk_rcg2 qdss_stm_clk_src = {
1779	.cmd_rcgr = 0x2902C,
1780	.freq_tbl = ftbl_qdss_stm_clk_src,
1781	.hid_width = 5,
1782	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1783	.clkr.hw.init = &(struct clk_init_data){
1784		.name = "qdss_stm_clk_src",
1785		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1786		.num_parents = 3,
1787		.ops = &clk_rcg2_ops,
1788	},
1789};
1790
1791static const struct freq_tbl ftbl_qdss_traceclkin_clk_src[] = {
1792	F(80000000, P_GPLL0_DIV2, 5, 0, 0),
1793	F(160000000, P_GPLL0, 5, 0, 0),
1794	F(300000000, P_GPLL4, 4, 0, 0),
1795	{ }
1796};
1797
1798static const struct clk_parent_data gcc_xo_gpll4_gpll0_gpll0_div2[] = {
1799	{ .fw_name = "xo" },
1800	{ .hw = &gpll4.clkr.hw },
1801	{ .hw = &gpll0.clkr.hw },
1802	{ .hw = &gpll0_out_main_div2.hw },
1803};
1804
1805static const struct parent_map gcc_xo_gpll4_gpll0_gpll0_div2_map[] = {
1806	{ P_XO, 0 },
1807	{ P_GPLL4, 1 },
1808	{ P_GPLL0, 2 },
1809	{ P_GPLL0_DIV2, 4 },
1810};
1811
1812static struct clk_rcg2 qdss_traceclkin_clk_src = {
1813	.cmd_rcgr = 0x29048,
1814	.freq_tbl = ftbl_qdss_traceclkin_clk_src,
1815	.hid_width = 5,
1816	.parent_map = gcc_xo_gpll4_gpll0_gpll0_div2_map,
1817	.clkr.hw.init = &(struct clk_init_data){
1818		.name = "qdss_traceclkin_clk_src",
1819		.parent_data = gcc_xo_gpll4_gpll0_gpll0_div2,
1820		.num_parents = 4,
1821		.ops = &clk_rcg2_ops,
1822	},
1823};
1824
1825static struct clk_rcg2 usb1_mock_utmi_clk_src = {
1826	.cmd_rcgr = 0x3f020,
1827	.freq_tbl = ftbl_usb_mock_utmi_clk_src,
1828	.mnd_width = 8,
1829	.hid_width = 5,
1830	.parent_map = gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map,
1831	.clkr.hw.init = &(struct clk_init_data){
1832		.name = "usb1_mock_utmi_clk_src",
1833		.parent_data = gcc_xo_gpll6_gpll0_gpll0_out_main_div2,
1834		.num_parents = 4,
1835		.ops = &clk_rcg2_ops,
1836	},
1837};
1838
1839static struct clk_branch gcc_adss_pwm_clk = {
1840	.halt_reg = 0x1c020,
1841	.clkr = {
1842		.enable_reg = 0x1c020,
1843		.enable_mask = BIT(0),
1844		.hw.init = &(struct clk_init_data){
1845			.name = "gcc_adss_pwm_clk",
1846			.parent_hws = (const struct clk_hw *[]){
1847					&adss_pwm_clk_src.clkr.hw },
1848			.num_parents = 1,
1849			.flags = CLK_SET_RATE_PARENT,
1850			.ops = &clk_branch2_ops,
1851		},
1852	},
1853};
1854
1855static struct clk_branch gcc_apss_ahb_clk = {
1856	.halt_reg = 0x4601c,
1857	.halt_check = BRANCH_HALT_VOTED,
1858	.clkr = {
1859		.enable_reg = 0x0b004,
1860		.enable_mask = BIT(14),
1861		.hw.init = &(struct clk_init_data){
1862			.name = "gcc_apss_ahb_clk",
1863			.parent_hws = (const struct clk_hw *[]){
1864					&apss_ahb_postdiv_clk_src.clkr.hw },
1865			.num_parents = 1,
1866			.flags = CLK_SET_RATE_PARENT,
1867			.ops = &clk_branch2_ops,
1868		},
1869	},
1870};
1871
1872static const struct freq_tbl ftbl_system_noc_bfdcd_clk_src[] = {
1873	F(24000000, P_XO, 1, 0, 0),
1874	F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1875	F(100000000, P_GPLL0, 8, 0, 0),
1876	F(133333333, P_GPLL0, 6, 0, 0),
1877	F(160000000, P_GPLL0, 5, 0, 0),
1878	F(200000000, P_GPLL0, 4, 0, 0),
1879	F(266666667, P_GPLL0, 3, 0, 0),
1880	{ }
1881};
1882
1883static struct clk_rcg2 system_noc_bfdcd_clk_src = {
1884	.cmd_rcgr = 0x26004,
1885	.freq_tbl = ftbl_system_noc_bfdcd_clk_src,
1886	.hid_width = 5,
1887	.parent_map = gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map,
1888	.clkr.hw.init = &(struct clk_init_data){
1889		.name = "system_noc_bfdcd_clk_src",
1890		.parent_data = gcc_xo_gpll0_gpll6_gpll0_out_main_div2,
1891		.num_parents = 4,
1892		.ops = &clk_rcg2_ops,
1893	},
1894};
1895
1896static const struct freq_tbl ftbl_ubi32_mem_noc_bfdcd_clk_src[] = {
1897	F(24000000, P_XO, 1, 0, 0),
1898	F(307670000, P_BIAS_PLL_NSS_NOC, 1.5, 0, 0),
1899	F(533333333, P_GPLL0, 1.5, 0, 0),
1900	{ }
1901};
1902
1903static const struct clk_parent_data
1904			gcc_xo_gpll0_gpll2_bias_pll_nss_noc_clk[] = {
1905	{ .fw_name = "xo" },
1906	{ .hw = &gpll0.clkr.hw },
1907	{ .hw = &gpll2.clkr.hw },
1908	{ .fw_name = "bias_pll_nss_noc_clk" },
1909};
1910
1911static const struct parent_map gcc_xo_gpll0_gpll2_bias_pll_nss_noc_clk_map[] = {
1912	{ P_XO, 0 },
1913	{ P_GPLL0, 1 },
1914	{ P_GPLL2, 3 },
1915	{ P_BIAS_PLL_NSS_NOC, 4 },
1916};
1917
1918static struct clk_rcg2 ubi32_mem_noc_bfdcd_clk_src = {
1919	.cmd_rcgr = 0x68088,
1920	.freq_tbl = ftbl_ubi32_mem_noc_bfdcd_clk_src,
1921	.hid_width = 5,
1922	.parent_map = gcc_xo_gpll0_gpll2_bias_pll_nss_noc_clk_map,
1923	.clkr.hw.init = &(struct clk_init_data){
1924		.name = "ubi32_mem_noc_bfdcd_clk_src",
1925		.parent_data = gcc_xo_gpll0_gpll2_bias_pll_nss_noc_clk,
1926		.num_parents = 4,
1927		.ops = &clk_rcg2_ops,
1928	},
1929};
1930
1931static struct clk_branch gcc_apss_axi_clk = {
1932	.halt_reg = 0x46020,
1933	.halt_check = BRANCH_HALT_VOTED,
1934	.clkr = {
1935		.enable_reg = 0x0b004,
1936		.enable_mask = BIT(13),
1937		.hw.init = &(struct clk_init_data){
1938			.name = "gcc_apss_axi_clk",
1939			.parent_hws = (const struct clk_hw *[]){
1940					&apss_axi_clk_src.clkr.hw },
1941			.num_parents = 1,
1942			.flags = CLK_SET_RATE_PARENT,
1943			.ops = &clk_branch2_ops,
1944		},
1945	},
1946};
1947
1948static struct clk_branch gcc_blsp1_ahb_clk = {
1949	.halt_reg = 0x01008,
1950	.halt_check = BRANCH_HALT_VOTED,
1951	.clkr = {
1952		.enable_reg = 0x0b004,
1953		.enable_mask = BIT(10),
1954		.hw.init = &(struct clk_init_data){
1955			.name = "gcc_blsp1_ahb_clk",
1956			.parent_hws = (const struct clk_hw *[]){
1957					&pcnoc_bfdcd_clk_src.clkr.hw },
1958			.num_parents = 1,
1959			.flags = CLK_SET_RATE_PARENT,
1960			.ops = &clk_branch2_ops,
1961		},
1962	},
1963};
1964
1965static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1966	.halt_reg = 0x02008,
1967	.clkr = {
1968		.enable_reg = 0x02008,
1969		.enable_mask = BIT(0),
1970		.hw.init = &(struct clk_init_data){
1971			.name = "gcc_blsp1_qup1_i2c_apps_clk",
1972			.parent_hws = (const struct clk_hw *[]){
1973					&blsp1_qup1_i2c_apps_clk_src.clkr.hw },
1974			.num_parents = 1,
1975			.flags = CLK_SET_RATE_PARENT,
1976			.ops = &clk_branch2_ops,
1977		},
1978	},
1979};
1980
1981static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1982	.halt_reg = 0x02004,
1983	.clkr = {
1984		.enable_reg = 0x02004,
1985		.enable_mask = BIT(0),
1986		.hw.init = &(struct clk_init_data){
1987			.name = "gcc_blsp1_qup1_spi_apps_clk",
1988			.parent_hws = (const struct clk_hw *[]){
1989					&blsp1_qup1_spi_apps_clk_src.clkr.hw },
1990			.num_parents = 1,
1991			.flags = CLK_SET_RATE_PARENT,
1992			.ops = &clk_branch2_ops,
1993		},
1994	},
1995};
1996
1997static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1998	.halt_reg = 0x03010,
1999	.clkr = {
2000		.enable_reg = 0x03010,
2001		.enable_mask = BIT(0),
2002		.hw.init = &(struct clk_init_data){
2003			.name = "gcc_blsp1_qup2_i2c_apps_clk",
2004			.parent_hws = (const struct clk_hw *[]){
2005					&blsp1_qup2_i2c_apps_clk_src.clkr.hw },
2006			.num_parents = 1,
2007			.flags = CLK_SET_RATE_PARENT,
2008			.ops = &clk_branch2_ops,
2009		},
2010	},
2011};
2012
2013static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
2014	.halt_reg = 0x0300c,
2015	.clkr = {
2016		.enable_reg = 0x0300c,
2017		.enable_mask = BIT(0),
2018		.hw.init = &(struct clk_init_data){
2019			.name = "gcc_blsp1_qup2_spi_apps_clk",
2020			.parent_hws = (const struct clk_hw *[]){
2021					&blsp1_qup2_spi_apps_clk_src.clkr.hw },
2022			.num_parents = 1,
2023			.flags = CLK_SET_RATE_PARENT,
2024			.ops = &clk_branch2_ops,
2025		},
2026	},
2027};
2028
2029static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
2030	.halt_reg = 0x04010,
2031	.clkr = {
2032		.enable_reg = 0x04010,
2033		.enable_mask = BIT(0),
2034		.hw.init = &(struct clk_init_data){
2035			.name = "gcc_blsp1_qup3_i2c_apps_clk",
2036			.parent_hws = (const struct clk_hw *[]){
2037					&blsp1_qup3_i2c_apps_clk_src.clkr.hw },
2038			.num_parents = 1,
2039			.flags = CLK_SET_RATE_PARENT,
2040			.ops = &clk_branch2_ops,
2041		},
2042	},
2043};
2044
2045static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
2046	.halt_reg = 0x0400c,
2047	.clkr = {
2048		.enable_reg = 0x0400c,
2049		.enable_mask = BIT(0),
2050		.hw.init = &(struct clk_init_data){
2051			.name = "gcc_blsp1_qup3_spi_apps_clk",
2052			.parent_hws = (const struct clk_hw *[]){
2053					&blsp1_qup3_spi_apps_clk_src.clkr.hw },
2054			.num_parents = 1,
2055			.flags = CLK_SET_RATE_PARENT,
2056			.ops = &clk_branch2_ops,
2057		},
2058	},
2059};
2060
2061static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
2062	.halt_reg = 0x05010,
2063	.clkr = {
2064		.enable_reg = 0x05010,
2065		.enable_mask = BIT(0),
2066		.hw.init = &(struct clk_init_data){
2067			.name = "gcc_blsp1_qup4_i2c_apps_clk",
2068			.parent_hws = (const struct clk_hw *[]){
2069					&blsp1_qup4_i2c_apps_clk_src.clkr.hw },
2070			.num_parents = 1,
2071			.flags = CLK_SET_RATE_PARENT,
2072			.ops = &clk_branch2_ops,
2073		},
2074	},
2075};
2076
2077static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
2078	.halt_reg = 0x0500c,
2079	.clkr = {
2080		.enable_reg = 0x0500c,
2081		.enable_mask = BIT(0),
2082		.hw.init = &(struct clk_init_data){
2083			.name = "gcc_blsp1_qup4_spi_apps_clk",
2084			.parent_hws = (const struct clk_hw *[]){
2085					&blsp1_qup4_spi_apps_clk_src.clkr.hw },
2086			.num_parents = 1,
2087			.flags = CLK_SET_RATE_PARENT,
2088			.ops = &clk_branch2_ops,
2089		},
2090	},
2091};
2092
2093static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
2094	.halt_reg = 0x06010,
2095	.clkr = {
2096		.enable_reg = 0x06010,
2097		.enable_mask = BIT(0),
2098		.hw.init = &(struct clk_init_data){
2099			.name = "gcc_blsp1_qup5_i2c_apps_clk",
2100			.parent_hws = (const struct clk_hw *[]){
2101					&blsp1_qup5_i2c_apps_clk_src.clkr.hw },
2102			.num_parents = 1,
2103			.flags = CLK_SET_RATE_PARENT,
2104			.ops = &clk_branch2_ops,
2105		},
2106	},
2107};
2108
2109static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
2110	.halt_reg = 0x0600c,
2111	.clkr = {
2112		.enable_reg = 0x0600c,
2113		.enable_mask = BIT(0),
2114		.hw.init = &(struct clk_init_data){
2115			.name = "gcc_blsp1_qup5_spi_apps_clk",
2116			.parent_hws = (const struct clk_hw *[]){
2117					&blsp1_qup5_spi_apps_clk_src.clkr.hw },
2118			.num_parents = 1,
2119			.flags = CLK_SET_RATE_PARENT,
2120			.ops = &clk_branch2_ops,
2121		},
2122	},
2123};
2124
2125static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
2126	.halt_reg = 0x0700c,
2127	.clkr = {
2128		.enable_reg = 0x0700c,
2129		.enable_mask = BIT(0),
2130		.hw.init = &(struct clk_init_data){
2131			.name = "gcc_blsp1_qup6_spi_apps_clk",
2132			.parent_hws = (const struct clk_hw *[]){
2133					&blsp1_qup6_spi_apps_clk_src.clkr.hw },
2134			.num_parents = 1,
2135			.flags = CLK_SET_RATE_PARENT,
2136			.ops = &clk_branch2_ops,
2137		},
2138	},
2139};
2140
2141static struct clk_branch gcc_blsp1_uart1_apps_clk = {
2142	.halt_reg = 0x0203c,
2143	.clkr = {
2144		.enable_reg = 0x0203c,
2145		.enable_mask = BIT(0),
2146		.hw.init = &(struct clk_init_data){
2147			.name = "gcc_blsp1_uart1_apps_clk",
2148			.parent_hws = (const struct clk_hw *[]){
2149					&blsp1_uart1_apps_clk_src.clkr.hw },
2150			.num_parents = 1,
2151			.flags = CLK_SET_RATE_PARENT,
2152			.ops = &clk_branch2_ops,
2153		},
2154	},
2155};
2156
2157static struct clk_branch gcc_blsp1_uart2_apps_clk = {
2158	.halt_reg = 0x0302c,
2159	.clkr = {
2160		.enable_reg = 0x0302c,
2161		.enable_mask = BIT(0),
2162		.hw.init = &(struct clk_init_data){
2163			.name = "gcc_blsp1_uart2_apps_clk",
2164			.parent_hws = (const struct clk_hw *[]){
2165					&blsp1_uart2_apps_clk_src.clkr.hw },
2166			.num_parents = 1,
2167			.flags = CLK_SET_RATE_PARENT,
2168			.ops = &clk_branch2_ops,
2169		},
2170	},
2171};
2172
2173static struct clk_branch gcc_blsp1_uart3_apps_clk = {
2174	.halt_reg = 0x0402c,
2175	.clkr = {
2176		.enable_reg = 0x0402c,
2177		.enable_mask = BIT(0),
2178		.hw.init = &(struct clk_init_data){
2179			.name = "gcc_blsp1_uart3_apps_clk",
2180			.parent_hws = (const struct clk_hw *[]){
2181					&blsp1_uart3_apps_clk_src.clkr.hw },
2182			.num_parents = 1,
2183			.flags = CLK_SET_RATE_PARENT,
2184			.ops = &clk_branch2_ops,
2185		},
2186	},
2187};
2188
2189static struct clk_branch gcc_blsp1_uart4_apps_clk = {
2190	.halt_reg = 0x0502c,
2191	.clkr = {
2192		.enable_reg = 0x0502c,
2193		.enable_mask = BIT(0),
2194		.hw.init = &(struct clk_init_data){
2195			.name = "gcc_blsp1_uart4_apps_clk",
2196			.parent_hws = (const struct clk_hw *[]){
2197					&blsp1_uart4_apps_clk_src.clkr.hw },
2198			.num_parents = 1,
2199			.flags = CLK_SET_RATE_PARENT,
2200			.ops = &clk_branch2_ops,
2201		},
2202	},
2203};
2204
2205static struct clk_branch gcc_blsp1_uart5_apps_clk = {
2206	.halt_reg = 0x0602c,
2207	.clkr = {
2208		.enable_reg = 0x0602c,
2209		.enable_mask = BIT(0),
2210		.hw.init = &(struct clk_init_data){
2211			.name = "gcc_blsp1_uart5_apps_clk",
2212			.parent_hws = (const struct clk_hw *[]){
2213					&blsp1_uart5_apps_clk_src.clkr.hw },
2214			.num_parents = 1,
2215			.flags = CLK_SET_RATE_PARENT,
2216			.ops = &clk_branch2_ops,
2217		},
2218	},
2219};
2220
2221static struct clk_branch gcc_blsp1_uart6_apps_clk = {
2222	.halt_reg = 0x0702c,
2223	.clkr = {
2224		.enable_reg = 0x0702c,
2225		.enable_mask = BIT(0),
2226		.hw.init = &(struct clk_init_data){
2227			.name = "gcc_blsp1_uart6_apps_clk",
2228			.parent_hws = (const struct clk_hw *[]){
2229					&blsp1_uart6_apps_clk_src.clkr.hw },
2230			.num_parents = 1,
2231			.flags = CLK_SET_RATE_PARENT,
2232			.ops = &clk_branch2_ops,
2233		},
2234	},
2235};
2236
2237static struct clk_branch gcc_crypto_ahb_clk = {
2238	.halt_reg = 0x16024,
2239	.halt_check = BRANCH_HALT_VOTED,
2240	.clkr = {
2241		.enable_reg = 0x0b004,
2242		.enable_mask = BIT(0),
2243		.hw.init = &(struct clk_init_data){
2244			.name = "gcc_crypto_ahb_clk",
2245			.parent_hws = (const struct clk_hw *[]){
2246					&pcnoc_bfdcd_clk_src.clkr.hw },
2247			.num_parents = 1,
2248			.flags = CLK_SET_RATE_PARENT,
2249			.ops = &clk_branch2_ops,
2250		},
2251	},
2252};
2253
2254static struct clk_branch gcc_crypto_axi_clk = {
2255	.halt_reg = 0x16020,
2256	.halt_check = BRANCH_HALT_VOTED,
2257	.clkr = {
2258		.enable_reg = 0x0b004,
2259		.enable_mask = BIT(1),
2260		.hw.init = &(struct clk_init_data){
2261			.name = "gcc_crypto_axi_clk",
2262			.parent_hws = (const struct clk_hw *[]){
2263					&pcnoc_bfdcd_clk_src.clkr.hw },
2264			.num_parents = 1,
2265			.flags = CLK_SET_RATE_PARENT,
2266			.ops = &clk_branch2_ops,
2267		},
2268	},
2269};
2270
2271static struct clk_branch gcc_crypto_clk = {
2272	.halt_reg = 0x1601c,
2273	.halt_check = BRANCH_HALT_VOTED,
2274	.clkr = {
2275		.enable_reg = 0x0b004,
2276		.enable_mask = BIT(2),
2277		.hw.init = &(struct clk_init_data){
2278			.name = "gcc_crypto_clk",
2279			.parent_hws = (const struct clk_hw *[]){
2280					&crypto_clk_src.clkr.hw },
2281			.num_parents = 1,
2282			.flags = CLK_SET_RATE_PARENT,
2283			.ops = &clk_branch2_ops,
2284		},
2285	},
2286};
2287
2288static struct clk_fixed_factor gpll6_out_main_div2 = {
2289	.mult = 1,
2290	.div = 2,
2291	.hw.init = &(struct clk_init_data){
2292		.name = "gpll6_out_main_div2",
2293		.parent_hws = (const struct clk_hw *[]){
2294				&gpll6_main.clkr.hw },
2295		.num_parents = 1,
2296		.ops = &clk_fixed_factor_ops,
2297		.flags = CLK_SET_RATE_PARENT,
2298	},
2299};
2300
2301static struct clk_branch gcc_xo_clk = {
2302	.halt_reg = 0x30030,
2303	.clkr = {
2304		.enable_reg = 0x30030,
2305		.enable_mask = BIT(0),
2306		.hw.init = &(struct clk_init_data){
2307			.name = "gcc_xo_clk",
2308			.parent_hws = (const struct clk_hw *[]){
2309					&gcc_xo_clk_src.clkr.hw },
2310			.num_parents = 1,
2311			.flags = CLK_SET_RATE_PARENT,
2312			.ops = &clk_branch2_ops,
2313		},
2314	},
2315};
2316
2317static struct clk_branch gcc_gp1_clk = {
2318	.halt_reg = 0x08000,
2319	.clkr = {
2320		.enable_reg = 0x08000,
2321		.enable_mask = BIT(0),
2322		.hw.init = &(struct clk_init_data){
2323			.name = "gcc_gp1_clk",
2324			.parent_hws = (const struct clk_hw *[]){
2325					&gp1_clk_src.clkr.hw },
2326			.num_parents = 1,
2327			.flags = CLK_SET_RATE_PARENT,
2328			.ops = &clk_branch2_ops,
2329		},
2330	},
2331};
2332
2333static struct clk_branch gcc_gp2_clk = {
2334	.halt_reg = 0x09000,
2335	.clkr = {
2336		.enable_reg = 0x09000,
2337		.enable_mask = BIT(0),
2338		.hw.init = &(struct clk_init_data){
2339			.name = "gcc_gp2_clk",
2340			.parent_hws = (const struct clk_hw *[]){
2341					&gp2_clk_src.clkr.hw },
2342			.num_parents = 1,
2343			.flags = CLK_SET_RATE_PARENT,
2344			.ops = &clk_branch2_ops,
2345		},
2346	},
2347};
2348
2349static struct clk_branch gcc_gp3_clk = {
2350	.halt_reg = 0x0a000,
2351	.clkr = {
2352		.enable_reg = 0x0a000,
2353		.enable_mask = BIT(0),
2354		.hw.init = &(struct clk_init_data){
2355			.name = "gcc_gp3_clk",
2356			.parent_hws = (const struct clk_hw *[]){
2357					&gp3_clk_src.clkr.hw },
2358			.num_parents = 1,
2359			.flags = CLK_SET_RATE_PARENT,
2360			.ops = &clk_branch2_ops,
2361		},
2362	},
2363};
2364
2365static struct clk_branch gcc_mdio_ahb_clk = {
2366	.halt_reg = 0x58004,
2367	.clkr = {
2368		.enable_reg = 0x58004,
2369		.enable_mask = BIT(0),
2370		.hw.init = &(struct clk_init_data){
2371			.name = "gcc_mdio_ahb_clk",
2372			.parent_hws = (const struct clk_hw *[]){
2373					&pcnoc_bfdcd_clk_src.clkr.hw },
2374			.num_parents = 1,
2375			.flags = CLK_SET_RATE_PARENT,
2376			.ops = &clk_branch2_ops,
2377		},
2378	},
2379};
2380
2381static struct clk_branch gcc_crypto_ppe_clk = {
2382	.halt_reg = 0x68310,
2383	.clkr = {
2384		.enable_reg = 0x68310,
2385		.enable_mask = BIT(0),
2386		.hw.init = &(struct clk_init_data){
2387			.name = "gcc_crypto_ppe_clk",
2388			.parent_hws = (const struct clk_hw *[]){
2389					&nss_ppe_clk_src.clkr.hw },
2390			.num_parents = 1,
2391			.flags = CLK_SET_RATE_PARENT,
2392			.ops = &clk_branch2_ops,
2393		},
2394	},
2395};
2396
2397static struct clk_branch gcc_nss_ce_apb_clk = {
2398	.halt_reg = 0x68174,
2399	.clkr = {
2400		.enable_reg = 0x68174,
2401		.enable_mask = BIT(0),
2402		.hw.init = &(struct clk_init_data){
2403			.name = "gcc_nss_ce_apb_clk",
2404			.parent_hws = (const struct clk_hw *[]){
2405					&nss_ce_clk_src.clkr.hw },
2406			.num_parents = 1,
2407			.flags = CLK_SET_RATE_PARENT,
2408			.ops = &clk_branch2_ops,
2409		},
2410	},
2411};
2412
2413static struct clk_branch gcc_nss_ce_axi_clk = {
2414	.halt_reg = 0x68170,
2415	.clkr = {
2416		.enable_reg = 0x68170,
2417		.enable_mask = BIT(0),
2418		.hw.init = &(struct clk_init_data){
2419			.name = "gcc_nss_ce_axi_clk",
2420			.parent_hws = (const struct clk_hw *[]){
2421					&nss_ce_clk_src.clkr.hw },
2422			.num_parents = 1,
2423			.flags = CLK_SET_RATE_PARENT,
2424			.ops = &clk_branch2_ops,
2425		},
2426	},
2427};
2428
2429static struct clk_branch gcc_nss_cfg_clk = {
2430	.halt_reg = 0x68160,
2431	.clkr = {
2432		.enable_reg = 0x68160,
2433		.enable_mask = BIT(0),
2434		.hw.init = &(struct clk_init_data){
2435			.name = "gcc_nss_cfg_clk",
2436			.parent_hws = (const struct clk_hw *[]){
2437					&pcnoc_bfdcd_clk_src.clkr.hw },
2438			.num_parents = 1,
2439			.flags = CLK_SET_RATE_PARENT,
2440			.ops = &clk_branch2_ops,
2441		},
2442	},
2443};
2444
2445static struct clk_branch gcc_nss_crypto_clk = {
2446	.halt_reg = 0x68164,
2447	.clkr = {
2448		.enable_reg = 0x68164,
2449		.enable_mask = BIT(0),
2450		.hw.init = &(struct clk_init_data){
2451			.name = "gcc_nss_crypto_clk",
2452			.parent_hws = (const struct clk_hw *[]){
2453					&nss_crypto_clk_src.clkr.hw },
2454			.num_parents = 1,
2455			.flags = CLK_SET_RATE_PARENT,
2456			.ops = &clk_branch2_ops,
2457		},
2458	},
2459};
2460
2461static struct clk_branch gcc_nss_csr_clk = {
2462	.halt_reg = 0x68318,
2463	.clkr = {
2464		.enable_reg = 0x68318,
2465		.enable_mask = BIT(0),
2466		.hw.init = &(struct clk_init_data){
2467			.name = "gcc_nss_csr_clk",
2468			.parent_hws = (const struct clk_hw *[]){
2469					&nss_ce_clk_src.clkr.hw },
2470			.num_parents = 1,
2471			.flags = CLK_SET_RATE_PARENT,
2472			.ops = &clk_branch2_ops,
2473		},
2474	},
2475};
2476
2477static struct clk_branch gcc_nss_edma_cfg_clk = {
2478	.halt_reg = 0x6819C,
2479	.clkr = {
2480		.enable_reg = 0x6819C,
2481		.enable_mask = BIT(0),
2482		.hw.init = &(struct clk_init_data){
2483			.name = "gcc_nss_edma_cfg_clk",
2484			.parent_hws = (const struct clk_hw *[]){
2485					&nss_ppe_clk_src.clkr.hw },
2486			.num_parents = 1,
2487			.flags = CLK_SET_RATE_PARENT,
2488			.ops = &clk_branch2_ops,
2489		},
2490	},
2491};
2492
2493static struct clk_branch gcc_nss_edma_clk = {
2494	.halt_reg = 0x68198,
2495	.clkr = {
2496		.enable_reg = 0x68198,
2497		.enable_mask = BIT(0),
2498		.hw.init = &(struct clk_init_data){
2499			.name = "gcc_nss_edma_clk",
2500			.parent_hws = (const struct clk_hw *[]){
2501					&nss_ppe_clk_src.clkr.hw },
2502			.num_parents = 1,
2503			.flags = CLK_SET_RATE_PARENT,
2504			.ops = &clk_branch2_ops,
2505		},
2506	},
2507};
2508
2509static struct clk_branch gcc_nss_noc_clk = {
2510	.halt_reg = 0x68168,
2511	.clkr = {
2512		.enable_reg = 0x68168,
2513		.enable_mask = BIT(0),
2514		.hw.init = &(struct clk_init_data){
2515			.name = "gcc_nss_noc_clk",
2516			.parent_hws = (const struct clk_hw *[]){
2517					&snoc_nssnoc_bfdcd_clk_src.clkr.hw },
2518			.num_parents = 1,
2519			.flags = CLK_SET_RATE_PARENT,
2520			.ops = &clk_branch2_ops,
2521		},
2522	},
2523};
2524
2525static struct clk_branch gcc_ubi0_utcm_clk = {
2526	.halt_reg = 0x2606c,
2527	.clkr = {
2528		.enable_reg = 0x2606c,
2529		.enable_mask = BIT(0),
2530		.hw.init = &(struct clk_init_data){
2531			.name = "gcc_ubi0_utcm_clk",
2532			.parent_hws = (const struct clk_hw *[]){
2533					&snoc_nssnoc_bfdcd_clk_src.clkr.hw },
2534			.num_parents = 1,
2535			.flags = CLK_SET_RATE_PARENT,
2536			.ops = &clk_branch2_ops,
2537		},
2538	},
2539};
2540
2541static struct clk_branch gcc_snoc_nssnoc_clk = {
2542	.halt_reg = 0x26070,
2543	.clkr = {
2544		.enable_reg = 0x26070,
2545		.enable_mask = BIT(0),
2546		.hw.init = &(struct clk_init_data){
2547			.name = "gcc_snoc_nssnoc_clk",
2548			.parent_hws = (const struct clk_hw *[]){
2549					&snoc_nssnoc_bfdcd_clk_src.clkr.hw },
2550			.num_parents = 1,
2551			.flags = CLK_SET_RATE_PARENT,
2552			.ops = &clk_branch2_ops,
2553		},
2554	},
2555};
2556
2557static const struct freq_tbl ftbl_wcss_ahb_clk_src[] = {
2558	F(24000000, P_XO, 1, 0, 0),
2559	F(133333333, P_GPLL0, 6, 0, 0),
2560	{ }
2561};
2562
2563static const struct freq_tbl ftbl_q6_axi_clk_src[] = {
2564	F(24000000, P_XO, 1, 0, 0),
2565	F(400000000, P_GPLL0, 2, 0, 0),
2566	{ }
2567};
2568
2569static struct clk_rcg2 wcss_ahb_clk_src = {
2570	.cmd_rcgr = 0x59020,
2571	.freq_tbl = ftbl_wcss_ahb_clk_src,
2572	.hid_width = 5,
2573	.parent_map = gcc_xo_gpll0_map,
2574	.clkr.hw.init = &(struct clk_init_data){
2575		.name = "wcss_ahb_clk_src",
2576		.parent_data = gcc_xo_gpll0,
2577		.num_parents = 2,
2578		.ops = &clk_rcg2_ops,
2579	},
2580};
2581
2582static const struct clk_parent_data gcc_xo_gpll0_gpll2_gpll4_gpll6[] = {
2583	{ .fw_name = "xo" },
2584	{ .hw = &gpll0.clkr.hw },
2585	{ .hw = &gpll2.clkr.hw },
2586	{ .hw = &gpll4.clkr.hw },
2587	{ .hw = &gpll6.clkr.hw },
2588};
2589
2590static const struct parent_map gcc_xo_gpll0_gpll2_gpll4_gpll6_map[] = {
2591	{ P_XO, 0 },
2592	{ P_GPLL0, 1 },
2593	{ P_GPLL2, 2 },
2594	{ P_GPLL4, 3 },
2595	{ P_GPLL6, 4 },
2596};
2597
2598static struct clk_rcg2 q6_axi_clk_src = {
2599	.cmd_rcgr = 0x59120,
2600	.freq_tbl = ftbl_q6_axi_clk_src,
2601	.hid_width = 5,
2602	.parent_map = gcc_xo_gpll0_gpll2_gpll4_gpll6_map,
2603	.clkr.hw.init = &(struct clk_init_data){
2604		.name = "q6_axi_clk_src",
2605		.parent_data = gcc_xo_gpll0_gpll2_gpll4_gpll6,
2606		.num_parents = 5,
2607		.ops = &clk_rcg2_ops,
2608	},
2609};
2610
2611static const struct freq_tbl ftbl_lpass_core_axim_clk_src[] = {
2612	F(24000000, P_XO, 1, 0, 0),
2613	F(100000000, P_GPLL0, 8, 0, 0),
2614	{ }
2615};
2616
2617static struct clk_rcg2 lpass_core_axim_clk_src = {
2618	.cmd_rcgr = 0x1F020,
2619	.freq_tbl = ftbl_lpass_core_axim_clk_src,
2620	.hid_width = 5,
2621	.parent_map = gcc_xo_gpll0_map,
2622	.clkr.hw.init = &(struct clk_init_data){
2623		.name = "lpass_core_axim_clk_src",
2624		.parent_data = gcc_xo_gpll0,
2625		.num_parents = 2,
2626		.ops = &clk_rcg2_ops,
2627	},
2628};
2629
2630static const struct freq_tbl ftbl_lpass_snoc_cfg_clk_src[] = {
2631	F(24000000, P_XO, 1, 0, 0),
2632	F(266666667, P_GPLL0, 3, 0, 0),
2633	{ }
2634};
2635
2636static struct clk_rcg2 lpass_snoc_cfg_clk_src = {
2637	.cmd_rcgr = 0x1F040,
2638	.freq_tbl = ftbl_lpass_snoc_cfg_clk_src,
2639	.hid_width = 5,
2640	.parent_map = gcc_xo_gpll0_map,
2641	.clkr.hw.init = &(struct clk_init_data){
2642		.name = "lpass_snoc_cfg_clk_src",
2643		.parent_data = gcc_xo_gpll0,
2644		.num_parents = 2,
2645		.ops = &clk_rcg2_ops,
2646	},
2647};
2648
2649static const struct freq_tbl ftbl_lpass_q6_axim_clk_src[] = {
2650	F(24000000, P_XO, 1, 0, 0),
2651	F(400000000, P_GPLL0, 2, 0, 0),
2652	{ }
2653};
2654
2655static struct clk_rcg2 lpass_q6_axim_clk_src = {
2656	.cmd_rcgr = 0x1F008,
2657	.freq_tbl = ftbl_lpass_q6_axim_clk_src,
2658	.hid_width = 5,
2659	.parent_map = gcc_xo_gpll0_map,
2660	.clkr.hw.init = &(struct clk_init_data){
2661		.name = "lpass_q6_axim_clk_src",
2662		.parent_data = gcc_xo_gpll0,
2663		.num_parents = 2,
2664		.ops = &clk_rcg2_ops,
2665	},
2666};
2667
2668static struct freq_tbl ftbl_rbcpr_wcss_clk_src[] = {
2669	F(24000000, P_XO, 1, 0, 0),
2670	F(50000000, P_GPLL0, 16, 0, 0),
2671	{ }
2672};
2673
2674static struct clk_rcg2 rbcpr_wcss_clk_src = {
2675	.cmd_rcgr = 0x3a00c,
2676	.freq_tbl = ftbl_rbcpr_wcss_clk_src,
2677	.hid_width = 5,
2678	.parent_map = gcc_xo_gpll0_out_main_div2_gpll0_map,
2679	.clkr.hw.init = &(struct clk_init_data){
2680		.name = "rbcpr_wcss_clk_src",
2681		.parent_data = gcc_xo_gpll0_out_main_div2_gpll0,
2682		.num_parents = 3,
2683		.ops = &clk_rcg2_ops,
2684	},
2685};
2686
2687static struct clk_branch gcc_lpass_core_axim_clk = {
2688	.halt_reg = 0x1F028,
2689	.clkr = {
2690		.enable_reg = 0x1F028,
2691		.enable_mask = BIT(0),
2692		.hw.init = &(struct clk_init_data){
2693			.name = "gcc_lpass_core_axim_clk",
2694			.parent_hws = (const struct clk_hw *[]){
2695					&lpass_core_axim_clk_src.clkr.hw },
2696			.num_parents = 1,
2697			.flags = CLK_SET_RATE_PARENT,
2698			.ops = &clk_branch2_ops,
2699		},
2700	},
2701};
2702
2703static struct clk_branch gcc_lpass_snoc_cfg_clk = {
2704	.halt_reg = 0x1F048,
2705	.clkr = {
2706		.enable_reg = 0x1F048,
2707		.enable_mask = BIT(0),
2708		.hw.init = &(struct clk_init_data){
2709			.name = "gcc_lpass_snoc_cfg_clk",
2710			.parent_hws = (const struct clk_hw *[]){
2711					&lpass_snoc_cfg_clk_src.clkr.hw },
2712			.num_parents = 1,
2713			.flags = CLK_SET_RATE_PARENT,
2714			.ops = &clk_branch2_ops,
2715		},
2716	},
2717};
2718
2719static struct clk_branch gcc_lpass_q6_axim_clk = {
2720	.halt_reg = 0x1F010,
2721	.clkr = {
2722		.enable_reg = 0x1F010,
2723		.enable_mask = BIT(0),
2724		.hw.init = &(struct clk_init_data){
2725			.name = "gcc_lpass_q6_axim_clk",
2726			.parent_hws = (const struct clk_hw *[]){
2727					&lpass_q6_axim_clk_src.clkr.hw },
2728			.num_parents = 1,
2729			.flags = CLK_SET_RATE_PARENT,
2730			.ops = &clk_branch2_ops,
2731		},
2732	},
2733};
2734
2735static struct clk_branch gcc_lpass_q6_atbm_at_clk = {
2736	.halt_reg = 0x1F018,
2737	.clkr = {
2738		.enable_reg = 0x1F018,
2739		.enable_mask = BIT(0),
2740		.hw.init = &(struct clk_init_data){
2741			.name = "gcc_lpass_q6_atbm_at_clk",
2742			.parent_hws = (const struct clk_hw *[]){
2743					&qdss_at_clk_src.clkr.hw },
2744			.num_parents = 1,
2745			.flags = CLK_SET_RATE_PARENT,
2746			.ops = &clk_branch2_ops,
2747		},
2748	},
2749};
2750
2751static struct clk_branch gcc_lpass_q6_pclkdbg_clk = {
2752	.halt_reg = 0x1F01C,
2753	.clkr = {
2754		.enable_reg = 0x1F01C,
2755		.enable_mask = BIT(0),
2756		.hw.init = &(struct clk_init_data){
2757			.name = "gcc_lpass_q6_pclkdbg_clk",
2758			.parent_hws = (const struct clk_hw *[]){
2759					&qdss_dap_sync_clk_src.hw },
2760			.num_parents = 1,
2761			.flags = CLK_SET_RATE_PARENT,
2762			.ops = &clk_branch2_ops,
2763		},
2764	},
2765};
2766
2767static struct clk_branch gcc_lpass_q6ss_tsctr_1to2_clk = {
2768	.halt_reg = 0x1F014,
2769	.clkr = {
2770		.enable_reg = 0x1F014,
2771		.enable_mask = BIT(0),
2772		.hw.init = &(struct clk_init_data){
2773			.name = "gcc_lpass_q6ss_tsctr_1to2_clk",
2774			.parent_hws = (const struct clk_hw *[]){
2775					&qdss_tsctr_div2_clk_src.hw },
2776			.num_parents = 1,
2777			.flags = CLK_SET_RATE_PARENT,
2778			.ops = &clk_branch2_ops,
2779		},
2780	},
2781};
2782
2783static struct clk_branch gcc_lpass_q6ss_trig_clk = {
2784	.halt_reg = 0x1F038,
2785	.clkr = {
2786		.enable_reg = 0x1F038,
2787		.enable_mask = BIT(0),
2788		.hw.init = &(struct clk_init_data){
2789			.name = "gcc_lpass_q6ss_trig_clk",
2790			.parent_hws = (const struct clk_hw *[]){
2791					&qdss_dap_sync_clk_src.hw },
2792			.num_parents = 1,
2793			.flags = CLK_SET_RATE_PARENT,
2794			.ops = &clk_branch2_ops,
2795		},
2796	},
2797};
2798
2799static struct clk_branch gcc_lpass_tbu_clk = {
2800	.halt_reg = 0x12094,
2801	.clkr = {
2802		.enable_reg = 0xb00c,
2803		.enable_mask = BIT(10),
2804		.hw.init = &(struct clk_init_data){
2805			.name = "gcc_lpass_tbu_clk",
2806			.parent_hws = (const struct clk_hw *[]){
2807					&lpass_q6_axim_clk_src.clkr.hw },
2808			.num_parents = 1,
2809			.flags = CLK_SET_RATE_PARENT,
2810			.ops = &clk_branch2_ops,
2811		},
2812	},
2813};
2814
2815static struct clk_branch gcc_pcnoc_lpass_clk = {
2816	.halt_reg = 0x27020,
2817	.clkr = {
2818		.enable_reg = 0x27020,
2819		.enable_mask = BIT(0),
2820		.hw.init = &(struct clk_init_data){
2821			.name = "gcc_pcnoc_lpass_clk",
2822			.parent_hws = (const struct clk_hw *[]){
2823					&lpass_core_axim_clk_src.clkr.hw },
2824			.num_parents = 1,
2825			.flags = CLK_SET_RATE_PARENT,
2826			.ops = &clk_branch2_ops,
2827		},
2828	},
2829};
2830
2831static struct clk_branch gcc_mem_noc_lpass_clk = {
2832	.halt_reg = 0x1D044,
2833	.clkr = {
2834		.enable_reg = 0x1D044,
2835		.enable_mask = BIT(0),
2836		.hw.init = &(struct clk_init_data){
2837			.name = "gcc_mem_noc_lpass_clk",
2838			.parent_hws = (const struct clk_hw *[]){
2839					&lpass_q6_axim_clk_src.clkr.hw },
2840			.num_parents = 1,
2841			.flags = CLK_SET_RATE_PARENT,
2842			.ops = &clk_branch2_ops,
2843		},
2844	},
2845};
2846
2847static struct clk_branch gcc_snoc_lpass_cfg_clk = {
2848	.halt_reg = 0x26074,
2849	.clkr = {
2850		.enable_reg = 0x26074,
2851		.enable_mask = BIT(0),
2852		.hw.init = &(struct clk_init_data){
2853			.name = "gcc_snoc_lpass_cfg_clk",
2854			.parent_hws = (const struct clk_hw *[]){
2855					&lpass_snoc_cfg_clk_src.clkr.hw },
2856			.num_parents = 1,
2857			.flags = CLK_SET_RATE_PARENT,
2858			.ops = &clk_branch2_ops,
2859		},
2860	},
2861};
2862
2863static struct clk_branch gcc_mem_noc_ubi32_clk = {
2864	.halt_reg = 0x1D03C,
2865	.clkr = {
2866		.enable_reg = 0x1D03C,
2867		.enable_mask = BIT(0),
2868		.hw.init = &(struct clk_init_data){
2869			.name = "gcc_mem_noc_ubi32_clk",
2870			.parent_hws = (const struct clk_hw *[]){
2871					&ubi32_mem_noc_bfdcd_clk_src.clkr.hw },
2872			.num_parents = 1,
2873			.flags = CLK_SET_RATE_PARENT,
2874			.ops = &clk_branch2_ops,
2875		},
2876	},
2877};
2878
2879static struct clk_branch gcc_nss_port1_rx_clk = {
2880	.halt_reg = 0x68240,
2881	.clkr = {
2882		.enable_reg = 0x68240,
2883		.enable_mask = BIT(0),
2884		.hw.init = &(struct clk_init_data){
2885			.name = "gcc_nss_port1_rx_clk",
2886			.parent_hws = (const struct clk_hw *[]){
2887					&nss_port1_rx_div_clk_src.clkr.hw },
2888			.num_parents = 1,
2889			.flags = CLK_SET_RATE_PARENT,
2890			.ops = &clk_branch2_ops,
2891		},
2892	},
2893};
2894
2895static struct clk_branch gcc_nss_port1_tx_clk = {
2896	.halt_reg = 0x68244,
2897	.clkr = {
2898		.enable_reg = 0x68244,
2899		.enable_mask = BIT(0),
2900		.hw.init = &(struct clk_init_data){
2901			.name = "gcc_nss_port1_tx_clk",
2902			.parent_hws = (const struct clk_hw *[]){
2903					&nss_port1_tx_div_clk_src.clkr.hw },
2904			.num_parents = 1,
2905			.flags = CLK_SET_RATE_PARENT,
2906			.ops = &clk_branch2_ops,
2907		},
2908	},
2909};
2910
2911static struct clk_branch gcc_nss_port2_rx_clk = {
2912	.halt_reg = 0x68248,
2913	.clkr = {
2914		.enable_reg = 0x68248,
2915		.enable_mask = BIT(0),
2916		.hw.init = &(struct clk_init_data){
2917			.name = "gcc_nss_port2_rx_clk",
2918			.parent_hws = (const struct clk_hw *[]){
2919					&nss_port2_rx_div_clk_src.clkr.hw },
2920			.num_parents = 1,
2921			.flags = CLK_SET_RATE_PARENT,
2922			.ops = &clk_branch2_ops,
2923		},
2924	},
2925};
2926
2927static struct clk_branch gcc_nss_port2_tx_clk = {
2928	.halt_reg = 0x6824c,
2929	.clkr = {
2930		.enable_reg = 0x6824c,
2931		.enable_mask = BIT(0),
2932		.hw.init = &(struct clk_init_data){
2933			.name = "gcc_nss_port2_tx_clk",
2934			.parent_hws = (const struct clk_hw *[]){
2935					&nss_port2_tx_div_clk_src.clkr.hw },
2936			.num_parents = 1,
2937			.flags = CLK_SET_RATE_PARENT,
2938			.ops = &clk_branch2_ops,
2939		},
2940	},
2941};
2942
2943static struct clk_branch gcc_nss_port3_rx_clk = {
2944	.halt_reg = 0x68250,
2945	.clkr = {
2946		.enable_reg = 0x68250,
2947		.enable_mask = BIT(0),
2948		.hw.init = &(struct clk_init_data){
2949			.name = "gcc_nss_port3_rx_clk",
2950			.parent_hws = (const struct clk_hw *[]){
2951					&nss_port3_rx_div_clk_src.clkr.hw },
2952			.num_parents = 1,
2953			.flags = CLK_SET_RATE_PARENT,
2954			.ops = &clk_branch2_ops,
2955		},
2956	},
2957};
2958
2959static struct clk_branch gcc_nss_port3_tx_clk = {
2960	.halt_reg = 0x68254,
2961	.clkr = {
2962		.enable_reg = 0x68254,
2963		.enable_mask = BIT(0),
2964		.hw.init = &(struct clk_init_data){
2965			.name = "gcc_nss_port3_tx_clk",
2966			.parent_hws = (const struct clk_hw *[]){
2967					&nss_port3_tx_div_clk_src.clkr.hw },
2968			.num_parents = 1,
2969			.flags = CLK_SET_RATE_PARENT,
2970			.ops = &clk_branch2_ops,
2971		},
2972	},
2973};
2974
2975static struct clk_branch gcc_nss_port4_rx_clk = {
2976	.halt_reg = 0x68258,
2977	.clkr = {
2978		.enable_reg = 0x68258,
2979		.enable_mask = BIT(0),
2980		.hw.init = &(struct clk_init_data){
2981			.name = "gcc_nss_port4_rx_clk",
2982			.parent_hws = (const struct clk_hw *[]){
2983					&nss_port4_rx_div_clk_src.clkr.hw },
2984			.num_parents = 1,
2985			.flags = CLK_SET_RATE_PARENT,
2986			.ops = &clk_branch2_ops,
2987		},
2988	},
2989};
2990
2991static struct clk_branch gcc_nss_port4_tx_clk = {
2992	.halt_reg = 0x6825c,
2993	.clkr = {
2994		.enable_reg = 0x6825c,
2995		.enable_mask = BIT(0),
2996		.hw.init = &(struct clk_init_data){
2997			.name = "gcc_nss_port4_tx_clk",
2998			.parent_hws = (const struct clk_hw *[]){
2999					&nss_port4_tx_div_clk_src.clkr.hw },
3000			.num_parents = 1,
3001			.flags = CLK_SET_RATE_PARENT,
3002			.ops = &clk_branch2_ops,
3003		},
3004	},
3005};
3006
3007static struct clk_branch gcc_nss_port5_rx_clk = {
3008	.halt_reg = 0x68260,
3009	.clkr = {
3010		.enable_reg = 0x68260,
3011		.enable_mask = BIT(0),
3012		.hw.init = &(struct clk_init_data){
3013			.name = "gcc_nss_port5_rx_clk",
3014			.parent_hws = (const struct clk_hw *[]){
3015					&nss_port5_rx_div_clk_src.clkr.hw },
3016			.num_parents = 1,
3017			.flags = CLK_SET_RATE_PARENT,
3018			.ops = &clk_branch2_ops,
3019		},
3020	},
3021};
3022
3023static struct clk_branch gcc_nss_port5_tx_clk = {
3024	.halt_reg = 0x68264,
3025	.clkr = {
3026		.enable_reg = 0x68264,
3027		.enable_mask = BIT(0),
3028		.hw.init = &(struct clk_init_data){
3029			.name = "gcc_nss_port5_tx_clk",
3030			.parent_hws = (const struct clk_hw *[]){
3031					&nss_port5_tx_div_clk_src.clkr.hw },
3032			.num_parents = 1,
3033			.flags = CLK_SET_RATE_PARENT,
3034			.ops = &clk_branch2_ops,
3035		},
3036	},
3037};
3038
3039static struct clk_branch gcc_nss_ppe_cfg_clk = {
3040	.halt_reg = 0x68194,
3041	.clkr = {
3042		.enable_reg = 0x68194,
3043		.enable_mask = BIT(0),
3044		.hw.init = &(struct clk_init_data){
3045			.name = "gcc_nss_ppe_cfg_clk",
3046			.parent_hws = (const struct clk_hw *[]){
3047					&nss_ppe_clk_src.clkr.hw },
3048			.num_parents = 1,
3049			.flags = CLK_SET_RATE_PARENT,
3050			.ops = &clk_branch2_ops,
3051		},
3052	},
3053};
3054
3055static struct clk_branch gcc_nss_ppe_clk = {
3056	.halt_reg = 0x68190,
3057	.clkr = {
3058		.enable_reg = 0x68190,
3059		.enable_mask = BIT(0),
3060		.hw.init = &(struct clk_init_data){
3061			.name = "gcc_nss_ppe_clk",
3062			.parent_hws = (const struct clk_hw *[]){
3063					&nss_ppe_clk_src.clkr.hw },
3064			.num_parents = 1,
3065			.flags = CLK_SET_RATE_PARENT,
3066			.ops = &clk_branch2_ops,
3067		},
3068	},
3069};
3070
3071static struct clk_branch gcc_nss_ppe_ipe_clk = {
3072	.halt_reg = 0x68338,
3073	.clkr = {
3074		.enable_reg = 0x68338,
3075		.enable_mask = BIT(0),
3076		.hw.init = &(struct clk_init_data){
3077			.name = "gcc_nss_ppe_ipe_clk",
3078			.parent_hws = (const struct clk_hw *[]){
3079					&nss_ppe_clk_src.clkr.hw },
3080			.num_parents = 1,
3081			.flags = CLK_SET_RATE_PARENT,
3082			.ops = &clk_branch2_ops,
3083		},
3084	},
3085};
3086
3087static struct clk_branch gcc_nss_ptp_ref_clk = {
3088	.halt_reg = 0x6816C,
3089	.clkr = {
3090		.enable_reg = 0x6816C,
3091		.enable_mask = BIT(0),
3092		.hw.init = &(struct clk_init_data){
3093			.name = "gcc_nss_ptp_ref_clk",
3094			.parent_hws = (const struct clk_hw *[]){
3095					&nss_ppe_cdiv_clk_src.hw },
3096			.num_parents = 1,
3097			.flags = CLK_SET_RATE_PARENT,
3098			.ops = &clk_branch2_ops,
3099		},
3100	},
3101};
3102
3103static struct clk_branch gcc_nssnoc_ce_apb_clk = {
3104	.halt_reg = 0x6830C,
3105	.clkr = {
3106		.enable_reg = 0x6830C,
3107		.enable_mask = BIT(0),
3108		.hw.init = &(struct clk_init_data){
3109			.name = "gcc_nssnoc_ce_apb_clk",
3110			.parent_hws = (const struct clk_hw *[]){
3111					&nss_ce_clk_src.clkr.hw },
3112			.num_parents = 1,
3113			.flags = CLK_SET_RATE_PARENT,
3114			.ops = &clk_branch2_ops,
3115		},
3116	},
3117};
3118
3119static struct clk_branch gcc_nssnoc_ce_axi_clk = {
3120	.halt_reg = 0x68308,
3121	.clkr = {
3122		.enable_reg = 0x68308,
3123		.enable_mask = BIT(0),
3124		.hw.init = &(struct clk_init_data){
3125			.name = "gcc_nssnoc_ce_axi_clk",
3126			.parent_hws = (const struct clk_hw *[]){
3127					&nss_ce_clk_src.clkr.hw },
3128			.num_parents = 1,
3129			.flags = CLK_SET_RATE_PARENT,
3130			.ops = &clk_branch2_ops,
3131		},
3132	},
3133};
3134
3135static struct clk_branch gcc_nssnoc_crypto_clk = {
3136	.halt_reg = 0x68314,
3137	.clkr = {
3138		.enable_reg = 0x68314,
3139		.enable_mask = BIT(0),
3140		.hw.init = &(struct clk_init_data){
3141			.name = "gcc_nssnoc_crypto_clk",
3142			.parent_hws = (const struct clk_hw *[]){
3143					&nss_crypto_clk_src.clkr.hw },
3144			.num_parents = 1,
3145			.flags = CLK_SET_RATE_PARENT,
3146			.ops = &clk_branch2_ops,
3147		},
3148	},
3149};
3150
3151static struct clk_branch gcc_nssnoc_ppe_cfg_clk = {
3152	.halt_reg = 0x68304,
3153	.clkr = {
3154		.enable_reg = 0x68304,
3155		.enable_mask = BIT(0),
3156		.hw.init = &(struct clk_init_data){
3157			.name = "gcc_nssnoc_ppe_cfg_clk",
3158			.parent_hws = (const struct clk_hw *[]){
3159					&nss_ppe_clk_src.clkr.hw },
3160			.flags = CLK_SET_RATE_PARENT,
3161			.ops = &clk_branch2_ops,
3162		},
3163	},
3164};
3165
3166static struct clk_branch gcc_nssnoc_ppe_clk = {
3167	.halt_reg = 0x68300,
3168	.clkr = {
3169		.enable_reg = 0x68300,
3170		.enable_mask = BIT(0),
3171		.hw.init = &(struct clk_init_data){
3172			.name = "gcc_nssnoc_ppe_clk",
3173			.parent_hws = (const struct clk_hw *[]){
3174					&nss_ppe_clk_src.clkr.hw },
3175			.num_parents = 1,
3176			.flags = CLK_SET_RATE_PARENT,
3177			.ops = &clk_branch2_ops,
3178		},
3179	},
3180};
3181
3182static struct clk_branch gcc_nssnoc_qosgen_ref_clk = {
3183	.halt_reg = 0x68180,
3184	.clkr = {
3185		.enable_reg = 0x68180,
3186		.enable_mask = BIT(0),
3187		.hw.init = &(struct clk_init_data){
3188			.name = "gcc_nssnoc_qosgen_ref_clk",
3189			.parent_hws = (const struct clk_hw *[]){
3190					&gcc_xo_clk_src.clkr.hw },
3191			.num_parents = 1,
3192			.flags = CLK_SET_RATE_PARENT,
3193			.ops = &clk_branch2_ops,
3194		},
3195	},
3196};
3197
3198static struct clk_branch gcc_nssnoc_snoc_clk = {
3199	.halt_reg = 0x68188,
3200	.clkr = {
3201		.enable_reg = 0x68188,
3202		.enable_mask = BIT(0),
3203		.hw.init = &(struct clk_init_data){
3204			.name = "gcc_nssnoc_snoc_clk",
3205			.parent_hws = (const struct clk_hw *[]){
3206					&system_noc_bfdcd_clk_src.clkr.hw },
3207			.num_parents = 1,
3208			.flags = CLK_SET_RATE_PARENT,
3209			.ops = &clk_branch2_ops,
3210		},
3211	},
3212};
3213
3214static struct clk_branch gcc_nssnoc_timeout_ref_clk = {
3215	.halt_reg = 0x68184,
3216	.clkr = {
3217		.enable_reg = 0x68184,
3218		.enable_mask = BIT(0),
3219		.hw.init = &(struct clk_init_data){
3220			.name = "gcc_nssnoc_timeout_ref_clk",
3221			.parent_hws = (const struct clk_hw *[]){
3222					&gcc_xo_div4_clk_src.hw },
3223			.num_parents = 1,
3224			.flags = CLK_SET_RATE_PARENT,
3225			.ops = &clk_branch2_ops,
3226		},
3227	},
3228};
3229
3230static struct clk_branch gcc_nssnoc_ubi0_ahb_clk = {
3231	.halt_reg = 0x68270,
3232	.clkr = {
3233		.enable_reg = 0x68270,
3234		.enable_mask = BIT(0),
3235		.hw.init = &(struct clk_init_data){
3236			.name = "gcc_nssnoc_ubi0_ahb_clk",
3237			.parent_hws = (const struct clk_hw *[]){
3238					&nss_ce_clk_src.clkr.hw },
3239			.num_parents = 1,
3240			.flags = CLK_SET_RATE_PARENT,
3241			.ops = &clk_branch2_ops,
3242		},
3243	},
3244};
3245
3246static struct clk_branch gcc_port1_mac_clk = {
3247	.halt_reg = 0x68320,
3248	.clkr = {
3249		.enable_reg = 0x68320,
3250		.enable_mask = BIT(0),
3251		.hw.init = &(struct clk_init_data){
3252			.name = "gcc_port1_mac_clk",
3253			.parent_hws = (const struct clk_hw *[]){
3254					&nss_ppe_clk_src.clkr.hw },
3255			.num_parents = 1,
3256			.flags = CLK_SET_RATE_PARENT,
3257			.ops = &clk_branch2_ops,
3258		},
3259	},
3260};
3261
3262static struct clk_branch gcc_port2_mac_clk = {
3263	.halt_reg = 0x68324,
3264	.clkr = {
3265		.enable_reg = 0x68324,
3266		.enable_mask = BIT(0),
3267		.hw.init = &(struct clk_init_data){
3268			.name = "gcc_port2_mac_clk",
3269			.parent_hws = (const struct clk_hw *[]){
3270					&nss_ppe_clk_src.clkr.hw },
3271			.num_parents = 1,
3272			.flags = CLK_SET_RATE_PARENT,
3273			.ops = &clk_branch2_ops,
3274		},
3275	},
3276};
3277
3278static struct clk_branch gcc_port3_mac_clk = {
3279	.halt_reg = 0x68328,
3280	.clkr = {
3281		.enable_reg = 0x68328,
3282		.enable_mask = BIT(0),
3283		.hw.init = &(struct clk_init_data){
3284			.name = "gcc_port3_mac_clk",
3285			.parent_hws = (const struct clk_hw *[]){
3286					&nss_ppe_clk_src.clkr.hw },
3287			.num_parents = 1,
3288			.flags = CLK_SET_RATE_PARENT,
3289			.ops = &clk_branch2_ops,
3290		},
3291	},
3292};
3293
3294static struct clk_branch gcc_port4_mac_clk = {
3295	.halt_reg = 0x6832c,
3296	.clkr = {
3297		.enable_reg = 0x6832c,
3298		.enable_mask = BIT(0),
3299		.hw.init = &(struct clk_init_data){
3300			.name = "gcc_port4_mac_clk",
3301			.parent_hws = (const struct clk_hw *[]){
3302					&nss_ppe_clk_src.clkr.hw },
3303			.num_parents = 1,
3304			.flags = CLK_SET_RATE_PARENT,
3305			.ops = &clk_branch2_ops,
3306		},
3307	},
3308};
3309
3310static struct clk_branch gcc_port5_mac_clk = {
3311	.halt_reg = 0x68330,
3312	.clkr = {
3313		.enable_reg = 0x68330,
3314		.enable_mask = BIT(0),
3315		.hw.init = &(struct clk_init_data){
3316			.name = "gcc_port5_mac_clk",
3317			.parent_hws = (const struct clk_hw *[]){
3318					&nss_ppe_clk_src.clkr.hw },
3319			.num_parents = 1,
3320			.flags = CLK_SET_RATE_PARENT,
3321			.ops = &clk_branch2_ops,
3322		},
3323	},
3324};
3325
3326static struct clk_branch gcc_ubi0_ahb_clk = {
3327	.halt_reg = 0x6820C,
3328	.halt_check = BRANCH_HALT_DELAY,
3329	.clkr = {
3330		.enable_reg = 0x6820C,
3331		.enable_mask = BIT(0),
3332		.hw.init = &(struct clk_init_data){
3333			.name = "gcc_ubi0_ahb_clk",
3334			.parent_hws = (const struct clk_hw *[]){
3335					&nss_ce_clk_src.clkr.hw },
3336			.num_parents = 1,
3337			.flags = CLK_SET_RATE_PARENT,
3338			.ops = &clk_branch2_ops,
3339		},
3340	},
3341};
3342
3343static struct clk_branch gcc_ubi0_axi_clk = {
3344	.halt_reg = 0x68200,
3345	.halt_check = BRANCH_HALT_DELAY,
3346	.clkr = {
3347		.enable_reg = 0x68200,
3348		.enable_mask = BIT(0),
3349		.hw.init = &(struct clk_init_data){
3350			.name = "gcc_ubi0_axi_clk",
3351			.parent_hws = (const struct clk_hw *[]){
3352					&ubi32_mem_noc_bfdcd_clk_src.clkr.hw },
3353			.num_parents = 1,
3354			.flags = CLK_SET_RATE_PARENT,
3355			.ops = &clk_branch2_ops,
3356		},
3357	},
3358};
3359
3360static struct clk_branch gcc_ubi0_nc_axi_clk = {
3361	.halt_reg = 0x68204,
3362	.halt_check = BRANCH_HALT_DELAY,
3363	.clkr = {
3364		.enable_reg = 0x68204,
3365		.enable_mask = BIT(0),
3366		.hw.init = &(struct clk_init_data){
3367			.name = "gcc_ubi0_nc_axi_clk",
3368			.parent_hws = (const struct clk_hw *[]){
3369					&snoc_nssnoc_bfdcd_clk_src.clkr.hw },
3370			.num_parents = 1,
3371			.flags = CLK_SET_RATE_PARENT,
3372			.ops = &clk_branch2_ops,
3373		},
3374	},
3375};
3376
3377static struct clk_branch gcc_ubi0_core_clk = {
3378	.halt_reg = 0x68210,
3379	.halt_check = BRANCH_HALT_DELAY,
3380	.clkr = {
3381		.enable_reg = 0x68210,
3382		.enable_mask = BIT(0),
3383		.hw.init = &(struct clk_init_data){
3384			.name = "gcc_ubi0_core_clk",
3385			.parent_hws = (const struct clk_hw *[]){
3386					&nss_ubi0_div_clk_src.clkr.hw },
3387			.num_parents = 1,
3388			.flags = CLK_SET_RATE_PARENT,
3389			.ops = &clk_branch2_ops,
3390		},
3391	},
3392};
3393
3394static struct clk_branch gcc_pcie0_ahb_clk = {
3395	.halt_reg = 0x75010,
3396	.clkr = {
3397		.enable_reg = 0x75010,
3398		.enable_mask = BIT(0),
3399		.hw.init = &(struct clk_init_data){
3400			.name = "gcc_pcie0_ahb_clk",
3401			.parent_hws = (const struct clk_hw *[]){
3402					&pcnoc_bfdcd_clk_src.clkr.hw },
3403			.num_parents = 1,
3404			.flags = CLK_SET_RATE_PARENT,
3405			.ops = &clk_branch2_ops,
3406		},
3407	},
3408};
3409
3410static struct clk_branch gcc_pcie0_aux_clk = {
3411	.halt_reg = 0x75014,
3412	.clkr = {
3413		.enable_reg = 0x75014,
3414		.enable_mask = BIT(0),
3415		.hw.init = &(struct clk_init_data){
3416			.name = "gcc_pcie0_aux_clk",
3417			.parent_hws = (const struct clk_hw *[]){
3418					&pcie0_aux_clk_src.clkr.hw },
3419			.num_parents = 1,
3420			.flags = CLK_SET_RATE_PARENT,
3421			.ops = &clk_branch2_ops,
3422		},
3423	},
3424};
3425
3426static struct clk_branch gcc_pcie0_axi_m_clk = {
3427	.halt_reg = 0x75008,
3428	.clkr = {
3429		.enable_reg = 0x75008,
3430		.enable_mask = BIT(0),
3431		.hw.init = &(struct clk_init_data){
3432			.name = "gcc_pcie0_axi_m_clk",
3433			.parent_hws = (const struct clk_hw *[]){
3434					&pcie0_axi_clk_src.clkr.hw },
3435			.num_parents = 1,
3436			.flags = CLK_SET_RATE_PARENT,
3437			.ops = &clk_branch2_ops,
3438		},
3439	},
3440};
3441
3442static struct clk_branch gcc_pcie0_axi_s_clk = {
3443	.halt_reg = 0x7500c,
3444	.clkr = {
3445		.enable_reg = 0x7500c,
3446		.enable_mask = BIT(0),
3447		.hw.init = &(struct clk_init_data){
3448			.name = "gcc_pcie0_axi_s_clk",
3449			.parent_hws = (const struct clk_hw *[]){
3450					&pcie0_axi_clk_src.clkr.hw },
3451			.num_parents = 1,
3452			.flags = CLK_SET_RATE_PARENT,
3453			.ops = &clk_branch2_ops,
3454		},
3455	},
3456};
3457
3458static struct clk_branch gcc_sys_noc_pcie0_axi_clk = {
3459	.halt_reg = 0x26048,
3460	.clkr = {
3461		.enable_reg = 0x26048,
3462		.enable_mask = BIT(0),
3463		.hw.init = &(struct clk_init_data){
3464			.name = "gcc_sys_noc_pcie0_axi_clk",
3465			.parent_hws = (const struct clk_hw *[]){
3466					&pcie0_axi_clk_src.clkr.hw },
3467			.num_parents = 1,
3468			.flags = CLK_SET_RATE_PARENT,
3469			.ops = &clk_branch2_ops,
3470		},
3471	},
3472};
3473
3474static struct clk_branch gcc_pcie0_pipe_clk = {
3475	.halt_reg = 0x75018,
3476	.halt_check = BRANCH_HALT_DELAY,
3477	.clkr = {
3478		.enable_reg = 0x75018,
3479		.enable_mask = BIT(0),
3480		.hw.init = &(struct clk_init_data){
3481			.name = "gcc_pcie0_pipe_clk",
3482			.parent_hws = (const struct clk_hw *[]){
3483					&pcie0_pipe_clk_src.clkr.hw },
3484			.num_parents = 1,
3485			.flags = CLK_SET_RATE_PARENT,
3486			.ops = &clk_branch2_ops,
3487		},
3488	},
3489};
3490
3491static struct clk_branch gcc_prng_ahb_clk = {
3492	.halt_reg = 0x13004,
3493	.halt_check = BRANCH_HALT_VOTED,
3494	.clkr = {
3495		.enable_reg = 0x0b004,
3496		.enable_mask = BIT(8),
3497		.hw.init = &(struct clk_init_data){
3498			.name = "gcc_prng_ahb_clk",
3499			.parent_hws = (const struct clk_hw *[]){
3500					&pcnoc_bfdcd_clk_src.clkr.hw },
3501			.num_parents = 1,
3502			.flags = CLK_SET_RATE_PARENT,
3503			.ops = &clk_branch2_ops,
3504		},
3505	},
3506};
3507
3508static struct clk_branch gcc_qdss_dap_clk = {
3509	.halt_reg = 0x29084,
3510	.clkr = {
3511		.enable_reg = 0x29084,
3512		.enable_mask = BIT(0),
3513		.hw.init = &(struct clk_init_data){
3514			.name = "gcc_qdss_dap_clk",
3515			.parent_hws = (const struct clk_hw *[]){
3516					&qdss_dap_sync_clk_src.hw },
3517			.num_parents = 1,
3518			.flags = CLK_SET_RATE_PARENT,
3519			.ops = &clk_branch2_ops,
3520		},
3521	},
3522};
3523
3524static struct clk_branch gcc_qpic_ahb_clk = {
3525	.halt_reg = 0x57024,
3526	.clkr = {
3527		.enable_reg = 0x57024,
3528		.enable_mask = BIT(0),
3529		.hw.init = &(struct clk_init_data){
3530			.name = "gcc_qpic_ahb_clk",
3531			.parent_hws = (const struct clk_hw *[]){
3532					&pcnoc_bfdcd_clk_src.clkr.hw },
3533			.num_parents = 1,
3534			.flags = CLK_SET_RATE_PARENT,
3535			.ops = &clk_branch2_ops,
3536		},
3537	},
3538};
3539
3540static struct clk_branch gcc_qpic_clk = {
3541	.halt_reg = 0x57020,
3542	.clkr = {
3543		.enable_reg = 0x57020,
3544		.enable_mask = BIT(0),
3545		.hw.init = &(struct clk_init_data){
3546			.name = "gcc_qpic_clk",
3547			.parent_hws = (const struct clk_hw *[]){
3548					&pcnoc_bfdcd_clk_src.clkr.hw },
3549			.num_parents = 1,
3550			.flags = CLK_SET_RATE_PARENT,
3551			.ops = &clk_branch2_ops,
3552		},
3553	},
3554};
3555
3556static struct clk_branch gcc_sdcc1_ahb_clk = {
3557	.halt_reg = 0x4201c,
3558	.clkr = {
3559		.enable_reg = 0x4201c,
3560		.enable_mask = BIT(0),
3561		.hw.init = &(struct clk_init_data){
3562			.name = "gcc_sdcc1_ahb_clk",
3563			.parent_hws = (const struct clk_hw *[]){
3564					&pcnoc_bfdcd_clk_src.clkr.hw },
3565			.num_parents = 1,
3566			.flags = CLK_SET_RATE_PARENT,
3567			.ops = &clk_branch2_ops,
3568		},
3569	},
3570};
3571
3572static struct clk_branch gcc_sdcc1_apps_clk = {
3573	.halt_reg = 0x42018,
3574	.clkr = {
3575		.enable_reg = 0x42018,
3576		.enable_mask = BIT(0),
3577		.hw.init = &(struct clk_init_data){
3578			.name = "gcc_sdcc1_apps_clk",
3579			.parent_hws = (const struct clk_hw *[]){
3580					&sdcc1_apps_clk_src.clkr.hw },
3581			.num_parents = 1,
3582			.flags = CLK_SET_RATE_PARENT,
3583			.ops = &clk_branch2_ops,
3584		},
3585	},
3586};
3587
3588static struct clk_branch gcc_uniphy0_ahb_clk = {
3589	.halt_reg = 0x56008,
3590	.clkr = {
3591		.enable_reg = 0x56008,
3592		.enable_mask = BIT(0),
3593		.hw.init = &(struct clk_init_data){
3594			.name = "gcc_uniphy0_ahb_clk",
3595			.parent_hws = (const struct clk_hw *[]){
3596					&pcnoc_bfdcd_clk_src.clkr.hw },
3597			.num_parents = 1,
3598			.flags = CLK_SET_RATE_PARENT,
3599			.ops = &clk_branch2_ops,
3600		},
3601	},
3602};
3603
3604static struct clk_branch gcc_uniphy0_port1_rx_clk = {
3605	.halt_reg = 0x56010,
3606	.clkr = {
3607		.enable_reg = 0x56010,
3608		.enable_mask = BIT(0),
3609		.hw.init = &(struct clk_init_data){
3610			.name = "gcc_uniphy0_port1_rx_clk",
3611			.parent_hws = (const struct clk_hw *[]){
3612					&nss_port1_rx_div_clk_src.clkr.hw },
3613			.num_parents = 1,
3614			.flags = CLK_SET_RATE_PARENT,
3615			.ops = &clk_branch2_ops,
3616		},
3617	},
3618};
3619
3620static struct clk_branch gcc_uniphy0_port1_tx_clk = {
3621	.halt_reg = 0x56014,
3622	.clkr = {
3623		.enable_reg = 0x56014,
3624		.enable_mask = BIT(0),
3625		.hw.init = &(struct clk_init_data){
3626			.name = "gcc_uniphy0_port1_tx_clk",
3627			.parent_hws = (const struct clk_hw *[]){
3628					&nss_port1_tx_div_clk_src.clkr.hw },
3629			.num_parents = 1,
3630			.flags = CLK_SET_RATE_PARENT,
3631			.ops = &clk_branch2_ops,
3632		},
3633	},
3634};
3635
3636static struct clk_branch gcc_uniphy0_port2_rx_clk = {
3637	.halt_reg = 0x56018,
3638	.clkr = {
3639		.enable_reg = 0x56018,
3640		.enable_mask = BIT(0),
3641		.hw.init = &(struct clk_init_data){
3642			.name = "gcc_uniphy0_port2_rx_clk",
3643			.parent_hws = (const struct clk_hw *[]){
3644					&nss_port2_rx_div_clk_src.clkr.hw },
3645			.num_parents = 1,
3646			.flags = CLK_SET_RATE_PARENT,
3647			.ops = &clk_branch2_ops,
3648		},
3649	},
3650};
3651
3652static struct clk_branch gcc_uniphy0_port2_tx_clk = {
3653	.halt_reg = 0x5601c,
3654	.clkr = {
3655		.enable_reg = 0x5601c,
3656		.enable_mask = BIT(0),
3657		.hw.init = &(struct clk_init_data){
3658			.name = "gcc_uniphy0_port2_tx_clk",
3659			.parent_hws = (const struct clk_hw *[]){
3660					&nss_port2_tx_div_clk_src.clkr.hw },
3661			.num_parents = 1,
3662			.flags = CLK_SET_RATE_PARENT,
3663			.ops = &clk_branch2_ops,
3664		},
3665	},
3666};
3667
3668static struct clk_branch gcc_uniphy0_port3_rx_clk = {
3669	.halt_reg = 0x56020,
3670	.clkr = {
3671		.enable_reg = 0x56020,
3672		.enable_mask = BIT(0),
3673		.hw.init = &(struct clk_init_data){
3674			.name = "gcc_uniphy0_port3_rx_clk",
3675			.parent_hws = (const struct clk_hw *[]){
3676					&nss_port3_rx_div_clk_src.clkr.hw },
3677			.num_parents = 1,
3678			.flags = CLK_SET_RATE_PARENT,
3679			.ops = &clk_branch2_ops,
3680		},
3681	},
3682};
3683
3684static struct clk_branch gcc_uniphy0_port3_tx_clk = {
3685	.halt_reg = 0x56024,
3686	.clkr = {
3687		.enable_reg = 0x56024,
3688		.enable_mask = BIT(0),
3689		.hw.init = &(struct clk_init_data){
3690			.name = "gcc_uniphy0_port3_tx_clk",
3691			.parent_hws = (const struct clk_hw *[]){
3692					&nss_port3_tx_div_clk_src.clkr.hw },
3693			.num_parents = 1,
3694			.flags = CLK_SET_RATE_PARENT,
3695			.ops = &clk_branch2_ops,
3696		},
3697	},
3698};
3699
3700static struct clk_branch gcc_uniphy0_port4_rx_clk = {
3701	.halt_reg = 0x56028,
3702	.clkr = {
3703		.enable_reg = 0x56028,
3704		.enable_mask = BIT(0),
3705		.hw.init = &(struct clk_init_data){
3706			.name = "gcc_uniphy0_port4_rx_clk",
3707			.parent_hws = (const struct clk_hw *[]){
3708					&nss_port4_rx_div_clk_src.clkr.hw },
3709			.num_parents = 1,
3710			.flags = CLK_SET_RATE_PARENT,
3711			.ops = &clk_branch2_ops,
3712		},
3713	},
3714};
3715
3716static struct clk_branch gcc_uniphy0_port4_tx_clk = {
3717	.halt_reg = 0x5602c,
3718	.clkr = {
3719		.enable_reg = 0x5602c,
3720		.enable_mask = BIT(0),
3721		.hw.init = &(struct clk_init_data){
3722			.name = "gcc_uniphy0_port4_tx_clk",
3723			.parent_hws = (const struct clk_hw *[]){
3724					&nss_port4_tx_div_clk_src.clkr.hw },
3725			.num_parents = 1,
3726			.flags = CLK_SET_RATE_PARENT,
3727			.ops = &clk_branch2_ops,
3728		},
3729	},
3730};
3731
3732static struct clk_branch gcc_uniphy0_port5_rx_clk = {
3733	.halt_reg = 0x56030,
3734	.clkr = {
3735		.enable_reg = 0x56030,
3736		.enable_mask = BIT(0),
3737		.hw.init = &(struct clk_init_data){
3738			.name = "gcc_uniphy0_port5_rx_clk",
3739			.parent_hws = (const struct clk_hw *[]){
3740					&nss_port5_rx_div_clk_src.clkr.hw },
3741			.num_parents = 1,
3742			.flags = CLK_SET_RATE_PARENT,
3743			.ops = &clk_branch2_ops,
3744		},
3745	},
3746};
3747
3748static struct clk_branch gcc_uniphy0_port5_tx_clk = {
3749	.halt_reg = 0x56034,
3750	.clkr = {
3751		.enable_reg = 0x56034,
3752		.enable_mask = BIT(0),
3753		.hw.init = &(struct clk_init_data){
3754			.name = "gcc_uniphy0_port5_tx_clk",
3755			.parent_hws = (const struct clk_hw *[]){
3756					&nss_port5_tx_div_clk_src.clkr.hw },
3757			.num_parents = 1,
3758			.flags = CLK_SET_RATE_PARENT,
3759			.ops = &clk_branch2_ops,
3760		},
3761	},
3762};
3763
3764static struct clk_branch gcc_uniphy0_sys_clk = {
3765	.halt_reg = 0x5600C,
3766	.clkr = {
3767		.enable_reg = 0x5600C,
3768		.enable_mask = BIT(0),
3769		.hw.init = &(struct clk_init_data){
3770			.name = "gcc_uniphy0_sys_clk",
3771			.parent_hws = (const struct clk_hw *[]){
3772					&gcc_xo_clk_src.clkr.hw },
3773			.num_parents = 1,
3774			.flags = CLK_SET_RATE_PARENT,
3775			.ops = &clk_branch2_ops,
3776		},
3777	},
3778};
3779
3780static struct clk_branch gcc_uniphy1_ahb_clk = {
3781	.halt_reg = 0x56108,
3782	.clkr = {
3783		.enable_reg = 0x56108,
3784		.enable_mask = BIT(0),
3785		.hw.init = &(struct clk_init_data){
3786			.name = "gcc_uniphy1_ahb_clk",
3787			.parent_hws = (const struct clk_hw *[]){
3788					&pcnoc_bfdcd_clk_src.clkr.hw },
3789			.num_parents = 1,
3790			.flags = CLK_SET_RATE_PARENT,
3791			.ops = &clk_branch2_ops,
3792		},
3793	},
3794};
3795
3796static struct clk_branch gcc_uniphy1_port5_rx_clk = {
3797	.halt_reg = 0x56110,
3798	.clkr = {
3799		.enable_reg = 0x56110,
3800		.enable_mask = BIT(0),
3801		.hw.init = &(struct clk_init_data){
3802			.name = "gcc_uniphy1_port5_rx_clk",
3803			.parent_hws = (const struct clk_hw *[]){
3804					&nss_port5_rx_div_clk_src.clkr.hw },
3805			.num_parents = 1,
3806			.flags = CLK_SET_RATE_PARENT,
3807			.ops = &clk_branch2_ops,
3808		},
3809	},
3810};
3811
3812static struct clk_branch gcc_uniphy1_port5_tx_clk = {
3813	.halt_reg = 0x56114,
3814	.clkr = {
3815		.enable_reg = 0x56114,
3816		.enable_mask = BIT(0),
3817		.hw.init = &(struct clk_init_data){
3818			.name = "gcc_uniphy1_port5_tx_clk",
3819			.parent_hws = (const struct clk_hw *[]){
3820					&nss_port5_tx_div_clk_src.clkr.hw },
3821			.num_parents = 1,
3822			.flags = CLK_SET_RATE_PARENT,
3823			.ops = &clk_branch2_ops,
3824		},
3825	},
3826};
3827
3828static struct clk_branch gcc_uniphy1_sys_clk = {
3829	.halt_reg = 0x5610C,
3830	.clkr = {
3831		.enable_reg = 0x5610C,
3832		.enable_mask = BIT(0),
3833		.hw.init = &(struct clk_init_data){
3834			.name = "gcc_uniphy1_sys_clk",
3835			.parent_hws = (const struct clk_hw *[]){
3836					&gcc_xo_clk_src.clkr.hw },
3837			.num_parents = 1,
3838			.flags = CLK_SET_RATE_PARENT,
3839			.ops = &clk_branch2_ops,
3840		},
3841	},
3842};
3843
3844static struct clk_branch gcc_usb0_aux_clk = {
3845	.halt_reg = 0x3e044,
3846	.clkr = {
3847		.enable_reg = 0x3e044,
3848		.enable_mask = BIT(0),
3849		.hw.init = &(struct clk_init_data){
3850			.name = "gcc_usb0_aux_clk",
3851			.parent_hws = (const struct clk_hw *[]){
3852					&usb0_aux_clk_src.clkr.hw },
3853			.num_parents = 1,
3854			.flags = CLK_SET_RATE_PARENT,
3855			.ops = &clk_branch2_ops,
3856		},
3857	},
3858};
3859
3860static struct clk_branch gcc_usb0_master_clk = {
3861	.halt_reg = 0x3e000,
3862	.clkr = {
3863		.enable_reg = 0x3e000,
3864		.enable_mask = BIT(0),
3865		.hw.init = &(struct clk_init_data){
3866			.name = "gcc_usb0_master_clk",
3867			.parent_hws = (const struct clk_hw *[]){
3868					&usb0_master_clk_src.clkr.hw },
3869			.num_parents = 1,
3870			.flags = CLK_SET_RATE_PARENT,
3871			.ops = &clk_branch2_ops,
3872		},
3873	},
3874};
3875
3876static struct clk_branch gcc_snoc_bus_timeout2_ahb_clk = {
3877	.halt_reg = 0x47014,
3878	.clkr = {
3879		.enable_reg = 0x47014,
3880		.enable_mask = BIT(0),
3881		.hw.init = &(struct clk_init_data){
3882			.name = "gcc_snoc_bus_timeout2_ahb_clk",
3883			.parent_hws = (const struct clk_hw *[]){
3884					&usb0_master_clk_src.clkr.hw },
3885			.num_parents = 1,
3886			.flags = CLK_SET_RATE_PARENT,
3887			.ops = &clk_branch2_ops,
3888		},
3889	},
3890};
3891
3892static struct clk_rcg2 pcie0_rchng_clk_src = {
3893	.cmd_rcgr = 0x75070,
3894	.freq_tbl = ftbl_pcie_rchng_clk_src,
3895	.hid_width = 5,
3896	.parent_map = gcc_xo_gpll0_map,
3897	.clkr.hw.init = &(struct clk_init_data){
3898		.name = "pcie0_rchng_clk_src",
3899		.parent_data = gcc_xo_gpll0,
3900		.num_parents = 2,
3901		.ops = &clk_rcg2_ops,
3902	},
3903};
3904
3905static struct clk_branch gcc_pcie0_rchng_clk = {
3906	.halt_reg = 0x75070,
3907	.clkr = {
3908		.enable_reg = 0x75070,
3909		.enable_mask = BIT(1),
3910		.hw.init = &(struct clk_init_data){
3911			.name = "gcc_pcie0_rchng_clk",
3912			.parent_hws = (const struct clk_hw *[]){
3913					&pcie0_rchng_clk_src.clkr.hw },
3914			.num_parents = 1,
3915			.flags = CLK_SET_RATE_PARENT,
3916			.ops = &clk_branch2_ops,
3917		},
3918	},
3919};
3920
3921static struct clk_branch gcc_pcie0_axi_s_bridge_clk = {
3922	.halt_reg = 0x75048,
3923	.clkr = {
3924		.enable_reg = 0x75048,
3925		.enable_mask = BIT(0),
3926		.hw.init = &(struct clk_init_data){
3927			.name = "gcc_pcie0_axi_s_bridge_clk",
3928			.parent_hws = (const struct clk_hw *[]){
3929					&pcie0_axi_clk_src.clkr.hw },
3930			.num_parents = 1,
3931			.flags = CLK_SET_RATE_PARENT,
3932			.ops = &clk_branch2_ops,
3933		},
3934	},
3935};
3936
3937static struct clk_branch gcc_sys_noc_usb0_axi_clk = {
3938	.halt_reg = 0x26040,
3939	.clkr = {
3940		.enable_reg = 0x26040,
3941		.enable_mask = BIT(0),
3942		.hw.init = &(struct clk_init_data){
3943			.name = "gcc_sys_noc_usb0_axi_clk",
3944			.parent_hws = (const struct clk_hw *[]){
3945					&usb0_master_clk_src.clkr.hw },
3946			.num_parents = 1,
3947			.flags = CLK_SET_RATE_PARENT,
3948			.ops = &clk_branch2_ops,
3949		},
3950	},
3951};
3952
3953static struct clk_branch gcc_usb0_mock_utmi_clk = {
3954	.halt_reg = 0x3e008,
3955	.clkr = {
3956		.enable_reg = 0x3e008,
3957		.enable_mask = BIT(0),
3958		.hw.init = &(struct clk_init_data){
3959			.name = "gcc_usb0_mock_utmi_clk",
3960			.parent_hws = (const struct clk_hw *[]){
3961					&usb0_mock_utmi_clk_src.clkr.hw },
3962			.num_parents = 1,
3963			.flags = CLK_SET_RATE_PARENT,
3964			.ops = &clk_branch2_ops,
3965		},
3966	},
3967};
3968
3969static struct clk_branch gcc_usb0_phy_cfg_ahb_clk = {
3970	.halt_reg = 0x3e080,
3971	.clkr = {
3972		.enable_reg = 0x3e080,
3973		.enable_mask = BIT(0),
3974		.hw.init = &(struct clk_init_data){
3975			.name = "gcc_usb0_phy_cfg_ahb_clk",
3976			.parent_hws = (const struct clk_hw *[]){
3977					&pcnoc_bfdcd_clk_src.clkr.hw },
3978			.num_parents = 1,
3979			.flags = CLK_SET_RATE_PARENT,
3980			.ops = &clk_branch2_ops,
3981		},
3982	},
3983};
3984
3985static struct clk_branch gcc_usb0_pipe_clk = {
3986	.halt_reg = 0x3e040,
3987	.halt_check = BRANCH_HALT_DELAY,
3988	.clkr = {
3989		.enable_reg = 0x3e040,
3990		.enable_mask = BIT(0),
3991		.hw.init = &(struct clk_init_data){
3992			.name = "gcc_usb0_pipe_clk",
3993			.parent_hws = (const struct clk_hw *[]){
3994					&usb0_pipe_clk_src.clkr.hw },
3995			.num_parents = 1,
3996			.flags = CLK_SET_RATE_PARENT,
3997			.ops = &clk_branch2_ops,
3998		},
3999	},
4000};
4001
4002static struct clk_branch gcc_usb0_sleep_clk = {
4003	.halt_reg = 0x3e004,
4004	.clkr = {
4005		.enable_reg = 0x3e004,
4006		.enable_mask = BIT(0),
4007		.hw.init = &(struct clk_init_data){
4008			.name = "gcc_usb0_sleep_clk",
4009			.parent_hws = (const struct clk_hw *[]){
4010					&gcc_sleep_clk_src.clkr.hw },
4011			.num_parents = 1,
4012			.flags = CLK_SET_RATE_PARENT,
4013			.ops = &clk_branch2_ops,
4014		},
4015	},
4016};
4017
4018static struct clk_branch gcc_usb1_master_clk = {
4019	.halt_reg = 0x3f000,
4020	.clkr = {
4021		.enable_reg = 0x3f000,
4022		.enable_mask = BIT(0),
4023		.hw.init = &(struct clk_init_data){
4024			.name = "gcc_usb1_master_clk",
4025			.parent_hws = (const struct clk_hw *[]){
4026					&pcnoc_bfdcd_clk_src.clkr.hw },
4027			.num_parents = 1,
4028			.flags = CLK_SET_RATE_PARENT,
4029			.ops = &clk_branch2_ops,
4030		},
4031	},
4032};
4033
4034static struct clk_branch gcc_usb1_mock_utmi_clk = {
4035	.halt_reg = 0x3f008,
4036	.clkr = {
4037		.enable_reg = 0x3f008,
4038		.enable_mask = BIT(0),
4039		.hw.init = &(struct clk_init_data){
4040			.name = "gcc_usb1_mock_utmi_clk",
4041			.parent_hws = (const struct clk_hw *[]){
4042					&usb1_mock_utmi_clk_src.clkr.hw },
4043			.num_parents = 1,
4044			.flags = CLK_SET_RATE_PARENT,
4045			.ops = &clk_branch2_ops,
4046		},
4047	},
4048};
4049
4050static struct clk_branch gcc_usb1_phy_cfg_ahb_clk = {
4051	.halt_reg = 0x3f080,
4052	.clkr = {
4053		.enable_reg = 0x3f080,
4054		.enable_mask = BIT(0),
4055		.hw.init = &(struct clk_init_data){
4056			.name = "gcc_usb1_phy_cfg_ahb_clk",
4057			.parent_hws = (const struct clk_hw *[]){
4058					&pcnoc_bfdcd_clk_src.clkr.hw },
4059			.num_parents = 1,
4060			.flags = CLK_SET_RATE_PARENT,
4061			.ops = &clk_branch2_ops,
4062		},
4063	},
4064};
4065
4066static struct clk_branch gcc_usb1_sleep_clk = {
4067	.halt_reg = 0x3f004,
4068	.clkr = {
4069		.enable_reg = 0x3f004,
4070		.enable_mask = BIT(0),
4071		.hw.init = &(struct clk_init_data){
4072			.name = "gcc_usb1_sleep_clk",
4073			.parent_hws = (const struct clk_hw *[]){
4074					&gcc_sleep_clk_src.clkr.hw },
4075			.num_parents = 1,
4076			.flags = CLK_SET_RATE_PARENT,
4077			.ops = &clk_branch2_ops,
4078		},
4079	},
4080};
4081
4082static struct clk_branch gcc_cmn_12gpll_ahb_clk = {
4083	.halt_reg = 0x56308,
4084	.clkr = {
4085		.enable_reg = 0x56308,
4086		.enable_mask = BIT(0),
4087		.hw.init = &(struct clk_init_data){
4088			.name = "gcc_cmn_12gpll_ahb_clk",
4089			.parent_hws = (const struct clk_hw *[]){
4090					&pcnoc_bfdcd_clk_src.clkr.hw },
4091			.num_parents = 1,
4092			.flags = CLK_SET_RATE_PARENT,
4093			.ops = &clk_branch2_ops,
4094		},
4095	},
4096};
4097
4098static struct clk_branch gcc_cmn_12gpll_sys_clk = {
4099	.halt_reg = 0x5630c,
4100	.clkr = {
4101		.enable_reg = 0x5630c,
4102		.enable_mask = BIT(0),
4103		.hw.init = &(struct clk_init_data){
4104			.name = "gcc_cmn_12gpll_sys_clk",
4105			.parent_hws = (const struct clk_hw *[]){
4106					&gcc_xo_clk_src.clkr.hw },
4107			.num_parents = 1,
4108			.flags = CLK_SET_RATE_PARENT,
4109			.ops = &clk_branch2_ops,
4110		},
4111	},
4112};
4113
4114static struct clk_branch gcc_sdcc1_ice_core_clk = {
4115	.halt_reg = 0x5d014,
4116	.clkr = {
4117		.enable_reg = 0x5d014,
4118		.enable_mask = BIT(0),
4119		.hw.init = &(struct clk_init_data){
4120			.name = "gcc_sdcc1_ice_core_clk",
4121			.parent_hws = (const struct clk_hw *[]){
4122					&sdcc1_ice_core_clk_src.clkr.hw },
4123			.num_parents = 1,
4124			.flags = CLK_SET_RATE_PARENT,
4125			.ops = &clk_branch2_ops,
4126		},
4127	},
4128};
4129
4130static struct clk_branch gcc_dcc_clk = {
4131	.halt_reg = 0x77004,
4132	.clkr = {
4133		.enable_reg = 0x77004,
4134		.enable_mask = BIT(0),
4135		.hw.init = &(struct clk_init_data){
4136			.name = "gcc_dcc_clk",
4137			.parent_hws = (const struct clk_hw *[]){
4138					&pcnoc_bfdcd_clk_src.clkr.hw },
4139			.num_parents = 1,
4140			.flags = CLK_SET_RATE_PARENT,
4141			.ops = &clk_branch2_ops,
4142		},
4143	},
4144};
4145
4146static const struct alpha_pll_config ubi32_pll_config = {
4147	.l = 0x3e,
4148	.alpha = 0x57,
4149	.config_ctl_val = 0x240d6aa8,
4150	.config_ctl_hi_val = 0x3c2,
4151	.main_output_mask = BIT(0),
4152	.aux_output_mask = BIT(1),
4153	.pre_div_val = 0x0,
4154	.pre_div_mask = BIT(12),
4155	.post_div_val = 0x0,
4156	.post_div_mask = GENMASK(9, 8),
4157};
4158
4159static const struct alpha_pll_config nss_crypto_pll_config = {
4160	.l = 0x32,
4161	.alpha = 0x0,
4162	.alpha_hi = 0x0,
4163	.config_ctl_val = 0x4001055b,
4164	.main_output_mask = BIT(0),
4165	.pre_div_val = 0x0,
4166	.pre_div_mask = GENMASK(14, 12),
4167	.post_div_val = 0x1 << 8,
4168	.post_div_mask = GENMASK(11, 8),
4169	.vco_mask = GENMASK(21, 20),
4170	.vco_val = 0x0,
4171	.alpha_en_mask = BIT(24),
4172};
4173
4174static struct clk_hw *gcc_ipq6018_hws[] = {
4175	&gpll0_out_main_div2.hw,
4176	&gcc_xo_div4_clk_src.hw,
4177	&nss_ppe_cdiv_clk_src.hw,
4178	&gpll6_out_main_div2.hw,
4179	&qdss_dap_sync_clk_src.hw,
4180	&qdss_tsctr_div2_clk_src.hw,
4181};
4182
4183static struct clk_regmap *gcc_ipq6018_clks[] = {
4184	[GPLL0_MAIN] = &gpll0_main.clkr,
4185	[GPLL0] = &gpll0.clkr,
4186	[UBI32_PLL_MAIN] = &ubi32_pll_main.clkr,
4187	[UBI32_PLL] = &ubi32_pll.clkr,
4188	[GPLL6_MAIN] = &gpll6_main.clkr,
4189	[GPLL6] = &gpll6.clkr,
4190	[GPLL4_MAIN] = &gpll4_main.clkr,
4191	[GPLL4] = &gpll4.clkr,
4192	[PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr,
4193	[GPLL2_MAIN] = &gpll2_main.clkr,
4194	[GPLL2] = &gpll2.clkr,
4195	[NSS_CRYPTO_PLL_MAIN] = &nss_crypto_pll_main.clkr,
4196	[NSS_CRYPTO_PLL] = &nss_crypto_pll.clkr,
4197	[QDSS_TSCTR_CLK_SRC] = &qdss_tsctr_clk_src.clkr,
4198	[QDSS_AT_CLK_SRC] = &qdss_at_clk_src.clkr,
4199	[NSS_PPE_CLK_SRC] = &nss_ppe_clk_src.clkr,
4200	[GCC_XO_CLK_SRC] = &gcc_xo_clk_src.clkr,
4201	[SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr,
4202	[SNOC_NSSNOC_BFDCD_CLK_SRC] = &snoc_nssnoc_bfdcd_clk_src.clkr,
4203	[NSS_CE_CLK_SRC] = &nss_ce_clk_src.clkr,
4204	[GCC_SLEEP_CLK_SRC] = &gcc_sleep_clk_src.clkr,
4205	[APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
4206	[NSS_PORT5_RX_CLK_SRC] = &nss_port5_rx_clk_src.clkr,
4207	[NSS_PORT5_TX_CLK_SRC] = &nss_port5_tx_clk_src.clkr,
4208	[UBI32_MEM_NOC_BFDCD_CLK_SRC] = &ubi32_mem_noc_bfdcd_clk_src.clkr,
4209	[PCIE0_AXI_CLK_SRC] = &pcie0_axi_clk_src.clkr,
4210	[USB0_MASTER_CLK_SRC] = &usb0_master_clk_src.clkr,
4211	[APSS_AHB_POSTDIV_CLK_SRC] = &apss_ahb_postdiv_clk_src.clkr,
4212	[NSS_PORT1_RX_CLK_SRC] = &nss_port1_rx_clk_src.clkr,
4213	[NSS_PORT1_TX_CLK_SRC] = &nss_port1_tx_clk_src.clkr,
4214	[NSS_PORT2_RX_CLK_SRC] = &nss_port2_rx_clk_src.clkr,
4215	[NSS_PORT2_TX_CLK_SRC] = &nss_port2_tx_clk_src.clkr,
4216	[NSS_PORT3_RX_CLK_SRC] = &nss_port3_rx_clk_src.clkr,
4217	[NSS_PORT3_TX_CLK_SRC] = &nss_port3_tx_clk_src.clkr,
4218	[NSS_PORT4_RX_CLK_SRC] = &nss_port4_rx_clk_src.clkr,
4219	[NSS_PORT4_TX_CLK_SRC] = &nss_port4_tx_clk_src.clkr,
4220	[NSS_PORT5_RX_DIV_CLK_SRC] = &nss_port5_rx_div_clk_src.clkr,
4221	[NSS_PORT5_TX_DIV_CLK_SRC] = &nss_port5_tx_div_clk_src.clkr,
4222	[APSS_AXI_CLK_SRC] = &apss_axi_clk_src.clkr,
4223	[NSS_CRYPTO_CLK_SRC] = &nss_crypto_clk_src.clkr,
4224	[NSS_PORT1_RX_DIV_CLK_SRC] = &nss_port1_rx_div_clk_src.clkr,
4225	[NSS_PORT1_TX_DIV_CLK_SRC] = &nss_port1_tx_div_clk_src.clkr,
4226	[NSS_PORT2_RX_DIV_CLK_SRC] = &nss_port2_rx_div_clk_src.clkr,
4227	[NSS_PORT2_TX_DIV_CLK_SRC] = &nss_port2_tx_div_clk_src.clkr,
4228	[NSS_PORT3_RX_DIV_CLK_SRC] = &nss_port3_rx_div_clk_src.clkr,
4229	[NSS_PORT3_TX_DIV_CLK_SRC] = &nss_port3_tx_div_clk_src.clkr,
4230	[NSS_PORT4_RX_DIV_CLK_SRC] = &nss_port4_rx_div_clk_src.clkr,
4231	[NSS_PORT4_TX_DIV_CLK_SRC] = &nss_port4_tx_div_clk_src.clkr,
4232	[NSS_UBI0_CLK_SRC] = &nss_ubi0_clk_src.clkr,
4233	[ADSS_PWM_CLK_SRC] = &adss_pwm_clk_src.clkr,
4234	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
4235	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
4236	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
4237	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
4238	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
4239	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
4240	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
4241	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
4242	[BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
4243	[BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
4244	[BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
4245	[BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
4246	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
4247	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
4248	[BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
4249	[BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
4250	[BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
4251	[BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
4252	[CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
4253	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
4254	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
4255	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
4256	[NSS_UBI0_DIV_CLK_SRC] = &nss_ubi0_div_clk_src.clkr,
4257	[PCIE0_AUX_CLK_SRC] = &pcie0_aux_clk_src.clkr,
4258	[PCIE0_PIPE_CLK_SRC] = &pcie0_pipe_clk_src.clkr,
4259	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
4260	[USB0_AUX_CLK_SRC] = &usb0_aux_clk_src.clkr,
4261	[USB0_MOCK_UTMI_CLK_SRC] = &usb0_mock_utmi_clk_src.clkr,
4262	[USB0_PIPE_CLK_SRC] = &usb0_pipe_clk_src.clkr,
4263	[USB1_MOCK_UTMI_CLK_SRC] = &usb1_mock_utmi_clk_src.clkr,
4264	[GCC_ADSS_PWM_CLK] = &gcc_adss_pwm_clk.clkr,
4265	[GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr,
4266	[GCC_APSS_AXI_CLK] = &gcc_apss_axi_clk.clkr,
4267	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
4268	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
4269	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
4270	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
4271	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
4272	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
4273	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
4274	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
4275	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
4276	[GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
4277	[GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
4278	[GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
4279	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
4280	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
4281	[GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
4282	[GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
4283	[GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
4284	[GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
4285	[GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
4286	[GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
4287	[GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
4288	[GCC_XO_CLK] = &gcc_xo_clk.clkr,
4289	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
4290	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
4291	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
4292	[GCC_MDIO_AHB_CLK] = &gcc_mdio_ahb_clk.clkr,
4293	[GCC_CRYPTO_PPE_CLK] = &gcc_crypto_ppe_clk.clkr,
4294	[GCC_NSS_CE_APB_CLK] = &gcc_nss_ce_apb_clk.clkr,
4295	[GCC_NSS_CE_AXI_CLK] = &gcc_nss_ce_axi_clk.clkr,
4296	[GCC_NSS_CFG_CLK] = &gcc_nss_cfg_clk.clkr,
4297	[GCC_NSS_CRYPTO_CLK] = &gcc_nss_crypto_clk.clkr,
4298	[GCC_NSS_CSR_CLK] = &gcc_nss_csr_clk.clkr,
4299	[GCC_NSS_EDMA_CFG_CLK] = &gcc_nss_edma_cfg_clk.clkr,
4300	[GCC_NSS_EDMA_CLK] = &gcc_nss_edma_clk.clkr,
4301	[GCC_NSS_NOC_CLK] = &gcc_nss_noc_clk.clkr,
4302	[GCC_UBI0_UTCM_CLK] = &gcc_ubi0_utcm_clk.clkr,
4303	[GCC_SNOC_NSSNOC_CLK] = &gcc_snoc_nssnoc_clk.clkr,
4304	[GCC_NSS_PORT1_RX_CLK] = &gcc_nss_port1_rx_clk.clkr,
4305	[GCC_NSS_PORT1_TX_CLK] = &gcc_nss_port1_tx_clk.clkr,
4306	[GCC_NSS_PORT2_RX_CLK] = &gcc_nss_port2_rx_clk.clkr,
4307	[GCC_NSS_PORT2_TX_CLK] = &gcc_nss_port2_tx_clk.clkr,
4308	[GCC_NSS_PORT3_RX_CLK] = &gcc_nss_port3_rx_clk.clkr,
4309	[GCC_NSS_PORT3_TX_CLK] = &gcc_nss_port3_tx_clk.clkr,
4310	[GCC_NSS_PORT4_RX_CLK] = &gcc_nss_port4_rx_clk.clkr,
4311	[GCC_NSS_PORT4_TX_CLK] = &gcc_nss_port4_tx_clk.clkr,
4312	[GCC_NSS_PORT5_RX_CLK] = &gcc_nss_port5_rx_clk.clkr,
4313	[GCC_NSS_PORT5_TX_CLK] = &gcc_nss_port5_tx_clk.clkr,
4314	[GCC_NSS_PPE_CFG_CLK] = &gcc_nss_ppe_cfg_clk.clkr,
4315	[GCC_NSS_PPE_CLK] = &gcc_nss_ppe_clk.clkr,
4316	[GCC_NSS_PPE_IPE_CLK] = &gcc_nss_ppe_ipe_clk.clkr,
4317	[GCC_NSS_PTP_REF_CLK] = &gcc_nss_ptp_ref_clk.clkr,
4318	[GCC_NSSNOC_CE_APB_CLK] = &gcc_nssnoc_ce_apb_clk.clkr,
4319	[GCC_NSSNOC_CE_AXI_CLK] = &gcc_nssnoc_ce_axi_clk.clkr,
4320	[GCC_NSSNOC_CRYPTO_CLK] = &gcc_nssnoc_crypto_clk.clkr,
4321	[GCC_NSSNOC_PPE_CFG_CLK] = &gcc_nssnoc_ppe_cfg_clk.clkr,
4322	[GCC_NSSNOC_PPE_CLK] = &gcc_nssnoc_ppe_clk.clkr,
4323	[GCC_NSSNOC_QOSGEN_REF_CLK] = &gcc_nssnoc_qosgen_ref_clk.clkr,
4324	[GCC_NSSNOC_SNOC_CLK] = &gcc_nssnoc_snoc_clk.clkr,
4325	[GCC_NSSNOC_TIMEOUT_REF_CLK] = &gcc_nssnoc_timeout_ref_clk.clkr,
4326	[GCC_NSSNOC_UBI0_AHB_CLK] = &gcc_nssnoc_ubi0_ahb_clk.clkr,
4327	[GCC_PORT1_MAC_CLK] = &gcc_port1_mac_clk.clkr,
4328	[GCC_PORT2_MAC_CLK] = &gcc_port2_mac_clk.clkr,
4329	[GCC_PORT3_MAC_CLK] = &gcc_port3_mac_clk.clkr,
4330	[GCC_PORT4_MAC_CLK] = &gcc_port4_mac_clk.clkr,
4331	[GCC_PORT5_MAC_CLK] = &gcc_port5_mac_clk.clkr,
4332	[GCC_UBI0_AHB_CLK] = &gcc_ubi0_ahb_clk.clkr,
4333	[GCC_UBI0_AXI_CLK] = &gcc_ubi0_axi_clk.clkr,
4334	[GCC_UBI0_NC_AXI_CLK] = &gcc_ubi0_nc_axi_clk.clkr,
4335	[GCC_UBI0_CORE_CLK] = &gcc_ubi0_core_clk.clkr,
4336	[GCC_PCIE0_AHB_CLK] = &gcc_pcie0_ahb_clk.clkr,
4337	[GCC_PCIE0_AUX_CLK] = &gcc_pcie0_aux_clk.clkr,
4338	[GCC_PCIE0_AXI_M_CLK] = &gcc_pcie0_axi_m_clk.clkr,
4339	[GCC_PCIE0_AXI_S_CLK] = &gcc_pcie0_axi_s_clk.clkr,
4340	[GCC_SYS_NOC_PCIE0_AXI_CLK] = &gcc_sys_noc_pcie0_axi_clk.clkr,
4341	[GCC_PCIE0_PIPE_CLK] = &gcc_pcie0_pipe_clk.clkr,
4342	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
4343	[GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
4344	[GCC_QPIC_AHB_CLK] = &gcc_qpic_ahb_clk.clkr,
4345	[GCC_QPIC_CLK] = &gcc_qpic_clk.clkr,
4346	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
4347	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
4348	[GCC_UNIPHY0_AHB_CLK] = &gcc_uniphy0_ahb_clk.clkr,
4349	[GCC_UNIPHY0_PORT1_RX_CLK] = &gcc_uniphy0_port1_rx_clk.clkr,
4350	[GCC_UNIPHY0_PORT1_TX_CLK] = &gcc_uniphy0_port1_tx_clk.clkr,
4351	[GCC_UNIPHY0_PORT2_RX_CLK] = &gcc_uniphy0_port2_rx_clk.clkr,
4352	[GCC_UNIPHY0_PORT2_TX_CLK] = &gcc_uniphy0_port2_tx_clk.clkr,
4353	[GCC_UNIPHY0_PORT3_RX_CLK] = &gcc_uniphy0_port3_rx_clk.clkr,
4354	[GCC_UNIPHY0_PORT3_TX_CLK] = &gcc_uniphy0_port3_tx_clk.clkr,
4355	[GCC_UNIPHY0_PORT4_RX_CLK] = &gcc_uniphy0_port4_rx_clk.clkr,
4356	[GCC_UNIPHY0_PORT4_TX_CLK] = &gcc_uniphy0_port4_tx_clk.clkr,
4357	[GCC_UNIPHY0_PORT5_RX_CLK] = &gcc_uniphy0_port5_rx_clk.clkr,
4358	[GCC_UNIPHY0_PORT5_TX_CLK] = &gcc_uniphy0_port5_tx_clk.clkr,
4359	[GCC_UNIPHY0_SYS_CLK] = &gcc_uniphy0_sys_clk.clkr,
4360	[GCC_UNIPHY1_AHB_CLK] = &gcc_uniphy1_ahb_clk.clkr,
4361	[GCC_UNIPHY1_PORT5_RX_CLK] = &gcc_uniphy1_port5_rx_clk.clkr,
4362	[GCC_UNIPHY1_PORT5_TX_CLK] = &gcc_uniphy1_port5_tx_clk.clkr,
4363	[GCC_UNIPHY1_SYS_CLK] = &gcc_uniphy1_sys_clk.clkr,
4364	[GCC_USB0_AUX_CLK] = &gcc_usb0_aux_clk.clkr,
4365	[GCC_SYS_NOC_USB0_AXI_CLK] = &gcc_sys_noc_usb0_axi_clk.clkr,
4366	[GCC_SNOC_BUS_TIMEOUT2_AHB_CLK] = &gcc_snoc_bus_timeout2_ahb_clk.clkr,
4367	[GCC_USB0_MASTER_CLK] = &gcc_usb0_master_clk.clkr,
4368	[GCC_USB0_MOCK_UTMI_CLK] = &gcc_usb0_mock_utmi_clk.clkr,
4369	[GCC_USB0_PHY_CFG_AHB_CLK] = &gcc_usb0_phy_cfg_ahb_clk.clkr,
4370	[GCC_USB0_PIPE_CLK] = &gcc_usb0_pipe_clk.clkr,
4371	[GCC_USB0_SLEEP_CLK] = &gcc_usb0_sleep_clk.clkr,
4372	[GCC_USB1_MASTER_CLK] = &gcc_usb1_master_clk.clkr,
4373	[GCC_USB1_MOCK_UTMI_CLK] = &gcc_usb1_mock_utmi_clk.clkr,
4374	[GCC_USB1_PHY_CFG_AHB_CLK] = &gcc_usb1_phy_cfg_ahb_clk.clkr,
4375	[GCC_USB1_SLEEP_CLK] = &gcc_usb1_sleep_clk.clkr,
4376	[GCC_CMN_12GPLL_AHB_CLK] = &gcc_cmn_12gpll_ahb_clk.clkr,
4377	[GCC_CMN_12GPLL_SYS_CLK] = &gcc_cmn_12gpll_sys_clk.clkr,
4378	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
4379	[SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
4380	[GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
4381	[PCIE0_RCHNG_CLK_SRC] = &pcie0_rchng_clk_src.clkr,
4382	[GCC_PCIE0_AXI_S_BRIDGE_CLK] = &gcc_pcie0_axi_s_bridge_clk.clkr,
4383	[PCIE0_RCHNG_CLK] = &gcc_pcie0_rchng_clk.clkr,
4384	[WCSS_AHB_CLK_SRC] = &wcss_ahb_clk_src.clkr,
4385	[Q6_AXI_CLK_SRC] = &q6_axi_clk_src.clkr,
4386	[RBCPR_WCSS_CLK_SRC] = &rbcpr_wcss_clk_src.clkr,
4387	[GCC_LPASS_CORE_AXIM_CLK] = &gcc_lpass_core_axim_clk.clkr,
4388	[LPASS_CORE_AXIM_CLK_SRC] = &lpass_core_axim_clk_src.clkr,
4389	[GCC_LPASS_SNOC_CFG_CLK] = &gcc_lpass_snoc_cfg_clk.clkr,
4390	[LPASS_SNOC_CFG_CLK_SRC] = &lpass_snoc_cfg_clk_src.clkr,
4391	[GCC_LPASS_Q6_AXIM_CLK] = &gcc_lpass_q6_axim_clk.clkr,
4392	[LPASS_Q6_AXIM_CLK_SRC] = &lpass_q6_axim_clk_src.clkr,
4393	[GCC_LPASS_Q6_ATBM_AT_CLK] = &gcc_lpass_q6_atbm_at_clk.clkr,
4394	[GCC_LPASS_Q6_PCLKDBG_CLK] = &gcc_lpass_q6_pclkdbg_clk.clkr,
4395	[GCC_LPASS_Q6SS_TSCTR_1TO2_CLK] = &gcc_lpass_q6ss_tsctr_1to2_clk.clkr,
4396	[GCC_LPASS_Q6SS_TRIG_CLK] = &gcc_lpass_q6ss_trig_clk.clkr,
4397	[GCC_LPASS_TBU_CLK] = &gcc_lpass_tbu_clk.clkr,
4398	[GCC_PCNOC_LPASS_CLK] = &gcc_pcnoc_lpass_clk.clkr,
4399	[GCC_MEM_NOC_UBI32_CLK] = &gcc_mem_noc_ubi32_clk.clkr,
4400	[GCC_MEM_NOC_LPASS_CLK] = &gcc_mem_noc_lpass_clk.clkr,
4401	[GCC_SNOC_LPASS_CFG_CLK] = &gcc_snoc_lpass_cfg_clk.clkr,
4402	[QDSS_STM_CLK_SRC] = &qdss_stm_clk_src.clkr,
4403	[QDSS_TRACECLKIN_CLK_SRC] = &qdss_traceclkin_clk_src.clkr,
4404};
4405
4406static const struct qcom_reset_map gcc_ipq6018_resets[] = {
4407	[GCC_BLSP1_BCR] = { 0x01000, 0 },
4408	[GCC_BLSP1_QUP1_BCR] = { 0x02000, 0 },
4409	[GCC_BLSP1_UART1_BCR] = { 0x02038, 0 },
4410	[GCC_BLSP1_QUP2_BCR] = { 0x03008, 0 },
4411	[GCC_BLSP1_UART2_BCR] = { 0x03028, 0 },
4412	[GCC_BLSP1_QUP3_BCR] = { 0x04008, 0 },
4413	[GCC_BLSP1_UART3_BCR] = { 0x04028, 0 },
4414	[GCC_BLSP1_QUP4_BCR] = { 0x05008, 0 },
4415	[GCC_BLSP1_UART4_BCR] = { 0x05028, 0 },
4416	[GCC_BLSP1_QUP5_BCR] = { 0x06008, 0 },
4417	[GCC_BLSP1_UART5_BCR] = { 0x06028, 0 },
4418	[GCC_BLSP1_QUP6_BCR] = { 0x07008, 0 },
4419	[GCC_BLSP1_UART6_BCR] = { 0x07028, 0 },
4420	[GCC_IMEM_BCR] = { 0x0e000, 0 },
4421	[GCC_SMMU_BCR] = { 0x12000, 0 },
4422	[GCC_APSS_TCU_BCR] = { 0x12050, 0 },
4423	[GCC_SMMU_XPU_BCR] = { 0x12054, 0 },
4424	[GCC_PCNOC_TBU_BCR] = { 0x12058, 0 },
4425	[GCC_SMMU_CFG_BCR] = { 0x1208c, 0 },
4426	[GCC_PRNG_BCR] = { 0x13000, 0 },
4427	[GCC_BOOT_ROM_BCR] = { 0x13008, 0 },
4428	[GCC_CRYPTO_BCR] = { 0x16000, 0 },
4429	[GCC_WCSS_BCR] = { 0x18000, 0 },
4430	[GCC_WCSS_Q6_BCR] = { 0x18100, 0 },
4431	[GCC_NSS_BCR] = { 0x19000, 0 },
4432	[GCC_SEC_CTRL_BCR] = { 0x1a000, 0 },
4433	[GCC_ADSS_BCR] = { 0x1c000, 0 },
4434	[GCC_DDRSS_BCR] = { 0x1e000, 0 },
4435	[GCC_SYSTEM_NOC_BCR] = { 0x26000, 0 },
4436	[GCC_PCNOC_BCR] = { 0x27018, 0 },
4437	[GCC_TCSR_BCR] = { 0x28000, 0 },
4438	[GCC_QDSS_BCR] = { 0x29000, 0 },
4439	[GCC_DCD_BCR] = { 0x2a000, 0 },
4440	[GCC_MSG_RAM_BCR] = { 0x2b000, 0 },
4441	[GCC_MPM_BCR] = { 0x2c000, 0 },
4442	[GCC_SPDM_BCR] = { 0x2f000, 0 },
4443	[GCC_RBCPR_BCR] = { 0x33000, 0 },
4444	[GCC_RBCPR_MX_BCR] = { 0x33014, 0 },
4445	[GCC_TLMM_BCR] = { 0x34000, 0 },
4446	[GCC_RBCPR_WCSS_BCR] = { 0x3a000, 0 },
4447	[GCC_USB0_PHY_BCR] = { 0x3e034, 0 },
4448	[GCC_USB3PHY_0_PHY_BCR] = { 0x3e03c, 0 },
4449	[GCC_USB0_BCR] = { 0x3e070, 0 },
4450	[GCC_USB1_BCR] = { 0x3f070, 0 },
4451	[GCC_QUSB2_0_PHY_BCR] = { 0x4103c, 0 },
4452	[GCC_QUSB2_1_PHY_BCR] = { 0x41040, 0 },
4453	[GCC_SDCC1_BCR] = { 0x42000, 0 },
4454	[GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x47000, 0 },
4455	[GCC_SNOC_BUS_TIMEOUT1_BCR] = { 0x47008, 0 },
4456	[GCC_SNOC_BUS_TIMEOUT2_BCR] = { 0x47010, 0 },
4457	[GCC_PCNOC_BUS_TIMEOUT0_BCR] = { 0x48000, 0 },
4458	[GCC_PCNOC_BUS_TIMEOUT1_BCR] = { 0x48008, 0 },
4459	[GCC_PCNOC_BUS_TIMEOUT2_BCR] = { 0x48010, 0 },
4460	[GCC_PCNOC_BUS_TIMEOUT3_BCR] = { 0x48018, 0 },
4461	[GCC_PCNOC_BUS_TIMEOUT4_BCR] = { 0x48020, 0 },
4462	[GCC_PCNOC_BUS_TIMEOUT5_BCR] = { 0x48028, 0 },
4463	[GCC_PCNOC_BUS_TIMEOUT6_BCR] = { 0x48030, 0 },
4464	[GCC_PCNOC_BUS_TIMEOUT7_BCR] = { 0x48038, 0 },
4465	[GCC_PCNOC_BUS_TIMEOUT8_BCR] = { 0x48040, 0 },
4466	[GCC_PCNOC_BUS_TIMEOUT9_BCR] = { 0x48048, 0 },
4467	[GCC_UNIPHY0_BCR] = { 0x56000, 0 },
4468	[GCC_UNIPHY1_BCR] = { 0x56100, 0 },
4469	[GCC_CMN_12GPLL_BCR] = { 0x56300, 0 },
4470	[GCC_QPIC_BCR] = { 0x57018, 0 },
4471	[GCC_MDIO_BCR] = { 0x58000, 0 },
4472	[GCC_WCSS_CORE_TBU_BCR] = { 0x66000, 0 },
4473	[GCC_WCSS_Q6_TBU_BCR] = { 0x67000, 0 },
4474	[GCC_USB0_TBU_BCR] = { 0x6a000, 0 },
4475	[GCC_PCIE0_TBU_BCR] = { 0x6b000, 0 },
4476	[GCC_NSS_NOC_TBU_BCR] = { 0x6e000, 0 },
4477	[GCC_PCIE0_BCR] = { 0x75004, 0 },
4478	[GCC_PCIE0_PHY_BCR] = { 0x75038, 0 },
4479	[GCC_PCIE0PHY_PHY_BCR] = { 0x7503c, 0 },
4480	[GCC_PCIE0_LINK_DOWN_BCR] = { 0x75044, 0 },
4481	[GCC_DCC_BCR] = { 0x77000, 0 },
4482	[GCC_APC0_VOLTAGE_DROOP_DETECTOR_BCR] = { 0x78000, 0 },
4483	[GCC_SMMU_CATS_BCR] = { 0x7c000, 0 },
4484	[GCC_UBI0_AXI_ARES] = { 0x68010, 0 },
4485	[GCC_UBI0_AHB_ARES] = { 0x68010, 1 },
4486	[GCC_UBI0_NC_AXI_ARES] = { 0x68010, 2 },
4487	[GCC_UBI0_DBG_ARES] = { 0x68010, 3 },
4488	[GCC_UBI0_CORE_CLAMP_ENABLE] = { 0x68010, 4 },
4489	[GCC_UBI0_CLKRST_CLAMP_ENABLE] = { 0x68010, 5 },
4490	[GCC_UBI0_UTCM_ARES] = { 0x68010, 6 },
4491	[GCC_UBI0_CORE_ARES] = { 0x68010, 7 },
4492	[GCC_NSS_CFG_ARES] = { 0x68010, 16 },
4493	[GCC_NSS_NOC_ARES] = { 0x68010, 18 },
4494	[GCC_NSS_CRYPTO_ARES] = { 0x68010, 19 },
4495	[GCC_NSS_CSR_ARES] = { 0x68010, 20 },
4496	[GCC_NSS_CE_APB_ARES] = { 0x68010, 21 },
4497	[GCC_NSS_CE_AXI_ARES] = { 0x68010, 22 },
4498	[GCC_NSSNOC_CE_APB_ARES] = { 0x68010, 23 },
4499	[GCC_NSSNOC_CE_AXI_ARES] = { 0x68010, 24 },
4500	[GCC_NSSNOC_UBI0_AHB_ARES] = { 0x68010, 25 },
4501	[GCC_NSSNOC_SNOC_ARES] = { 0x68010, 27 },
4502	[GCC_NSSNOC_CRYPTO_ARES] = { 0x68010, 28 },
4503	[GCC_NSSNOC_ATB_ARES] = { 0x68010, 29 },
4504	[GCC_NSSNOC_QOSGEN_REF_ARES] = { 0x68010, 30 },
4505	[GCC_NSSNOC_TIMEOUT_REF_ARES] = { 0x68010, 31 },
4506	[GCC_PCIE0_PIPE_ARES] = { 0x75040, 0 },
4507	[GCC_PCIE0_SLEEP_ARES] = { 0x75040, 1 },
4508	[GCC_PCIE0_CORE_STICKY_ARES] = { 0x75040, 2 },
4509	[GCC_PCIE0_AXI_MASTER_ARES] = { 0x75040, 3 },
4510	[GCC_PCIE0_AXI_SLAVE_ARES] = { 0x75040, 4 },
4511	[GCC_PCIE0_AHB_ARES] = { 0x75040, 5 },
4512	[GCC_PCIE0_AXI_MASTER_STICKY_ARES] = { 0x75040, 6 },
4513	[GCC_PCIE0_AXI_SLAVE_STICKY_ARES] = { 0x75040, 7 },
4514	[GCC_PPE_FULL_RESET] = { .reg = 0x68014, .bitmask = 0xf0000 },
4515	[GCC_UNIPHY0_SOFT_RESET] = { .reg = 0x56004, .bitmask = 0x3ff2 },
4516	[GCC_UNIPHY0_XPCS_RESET] = { 0x56004, 2 },
4517	[GCC_UNIPHY1_SOFT_RESET] = { .reg = 0x56104, .bitmask = 0x32 },
4518	[GCC_UNIPHY1_XPCS_RESET] = { 0x56104, 2 },
4519	[GCC_EDMA_HW_RESET] = { .reg = 0x68014, .bitmask = 0x300000 },
4520	[GCC_NSSPORT1_RESET] = { .reg = 0x68014, .bitmask = 0x1000003 },
4521	[GCC_NSSPORT2_RESET] = { .reg = 0x68014, .bitmask = 0x200000c },
4522	[GCC_NSSPORT3_RESET] = { .reg = 0x68014, .bitmask = 0x4000030 },
4523	[GCC_NSSPORT4_RESET] = { .reg = 0x68014, .bitmask = 0x8000300 },
4524	[GCC_NSSPORT5_RESET] = { .reg = 0x68014, .bitmask = 0x10000c00 },
4525	[GCC_UNIPHY0_PORT1_ARES] = { .reg = 0x56004, .bitmask = 0x30 },
4526	[GCC_UNIPHY0_PORT2_ARES] = { .reg = 0x56004, .bitmask = 0xc0 },
4527	[GCC_UNIPHY0_PORT3_ARES] = { .reg = 0x56004, .bitmask = 0x300 },
4528	[GCC_UNIPHY0_PORT4_ARES] = { .reg = 0x56004, .bitmask = 0xc00 },
4529	[GCC_UNIPHY0_PORT5_ARES] = { .reg = 0x56004, .bitmask = 0x3000 },
4530	[GCC_UNIPHY0_PORT_4_5_RESET] = { .reg = 0x56004, .bitmask = 0x3c02 },
4531	[GCC_UNIPHY0_PORT_4_RESET] = { .reg = 0x56004, .bitmask = 0xc02 },
4532	[GCC_LPASS_BCR] = {0x1F000, 0},
4533	[GCC_UBI32_TBU_BCR] = {0x65000, 0},
4534	[GCC_LPASS_TBU_BCR] = {0x6C000, 0},
4535	[GCC_WCSSAON_RESET] = {0x59010, 0},
4536	[GCC_LPASS_Q6_AXIM_ARES] = {0x1F004, 0},
4537	[GCC_LPASS_Q6SS_TSCTR_1TO2_ARES] = {0x1F004, 1},
4538	[GCC_LPASS_Q6SS_TRIG_ARES] = {0x1F004, 2},
4539	[GCC_LPASS_Q6_ATBM_AT_ARES] = {0x1F004, 3},
4540	[GCC_LPASS_Q6_PCLKDBG_ARES] = {0x1F004, 4},
4541	[GCC_LPASS_CORE_AXIM_ARES] = {0x1F004, 5},
4542	[GCC_LPASS_SNOC_CFG_ARES] = {0x1F004, 6},
4543	[GCC_WCSS_DBG_ARES] = {0x59008, 0},
4544	[GCC_WCSS_ECAHB_ARES] = {0x59008, 1},
4545	[GCC_WCSS_ACMT_ARES] = {0x59008, 2},
4546	[GCC_WCSS_DBG_BDG_ARES] = {0x59008, 3},
4547	[GCC_WCSS_AHB_S_ARES] = {0x59008, 4},
4548	[GCC_WCSS_AXI_M_ARES] = {0x59008, 5},
4549	[GCC_Q6SS_DBG_ARES] = {0x59110, 0},
4550	[GCC_Q6_AHB_S_ARES] = {0x59110, 1},
4551	[GCC_Q6_AHB_ARES] = {0x59110, 2},
4552	[GCC_Q6_AXIM2_ARES] = {0x59110, 3},
4553	[GCC_Q6_AXIM_ARES] = {0x59110, 4},
4554};
4555
4556static const struct of_device_id gcc_ipq6018_match_table[] = {
4557	{ .compatible = "qcom,gcc-ipq6018" },
4558	{ }
4559};
4560MODULE_DEVICE_TABLE(of, gcc_ipq6018_match_table);
4561
4562static const struct regmap_config gcc_ipq6018_regmap_config = {
4563	.reg_bits       = 32,
4564	.reg_stride     = 4,
4565	.val_bits       = 32,
4566	.max_register   = 0x7fffc,
4567	.fast_io	= true,
4568};
4569
4570static const struct qcom_cc_desc gcc_ipq6018_desc = {
4571	.config = &gcc_ipq6018_regmap_config,
4572	.clks = gcc_ipq6018_clks,
4573	.num_clks = ARRAY_SIZE(gcc_ipq6018_clks),
4574	.resets = gcc_ipq6018_resets,
4575	.num_resets = ARRAY_SIZE(gcc_ipq6018_resets),
4576	.clk_hws = gcc_ipq6018_hws,
4577	.num_clk_hws = ARRAY_SIZE(gcc_ipq6018_hws),
4578};
4579
4580static int gcc_ipq6018_probe(struct platform_device *pdev)
4581{
4582	struct regmap *regmap;
4583
4584	regmap = qcom_cc_map(pdev, &gcc_ipq6018_desc);
4585	if (IS_ERR(regmap))
4586		return PTR_ERR(regmap);
4587
4588	/* Disable SW_COLLAPSE for USB0 GDSCR */
4589	regmap_update_bits(regmap, 0x3e078, BIT(0), 0x0);
4590	/* Enable SW_OVERRIDE for USB0 GDSCR */
4591	regmap_update_bits(regmap, 0x3e078, BIT(2), BIT(2));
4592	/* Disable SW_COLLAPSE for USB1 GDSCR */
4593	regmap_update_bits(regmap, 0x3f078, BIT(0), 0x0);
4594	/* Enable SW_OVERRIDE for USB1 GDSCR */
4595	regmap_update_bits(regmap, 0x3f078, BIT(2), BIT(2));
4596
4597	/* SW Workaround for UBI Huyara PLL */
4598	regmap_update_bits(regmap, 0x2501c, BIT(26), BIT(26));
4599
4600	clk_alpha_pll_configure(&ubi32_pll_main, regmap, &ubi32_pll_config);
4601
4602	clk_alpha_pll_configure(&nss_crypto_pll_main, regmap,
4603				&nss_crypto_pll_config);
4604
4605	return qcom_cc_really_probe(pdev, &gcc_ipq6018_desc, regmap);
4606}
4607
4608static struct platform_driver gcc_ipq6018_driver = {
4609	.probe = gcc_ipq6018_probe,
4610	.driver = {
4611		.name   = "qcom,gcc-ipq6018",
4612		.of_match_table = gcc_ipq6018_match_table,
4613	},
4614};
4615
4616static int __init gcc_ipq6018_init(void)
4617{
4618	return platform_driver_register(&gcc_ipq6018_driver);
4619}
4620core_initcall(gcc_ipq6018_init);
4621
4622static void __exit gcc_ipq6018_exit(void)
4623{
4624	platform_driver_unregister(&gcc_ipq6018_driver);
4625}
4626module_exit(gcc_ipq6018_exit);
4627
4628MODULE_DESCRIPTION("Qualcomm Technologies, Inc. GCC IPQ6018 Driver");
4629MODULE_LICENSE("GPL v2");
4630